SLNKDWF 2.00

svn path=/Slnkdwf/trunk/; revision=12481
This commit is contained in:
Jos Groot Lipman
2007-08-01 13:42:28 +00:00
parent d622b95c4d
commit 80d0142c23
822 changed files with 256928 additions and 0 deletions

BIN
FCLTDWF.Doc Normal file

Binary file not shown.

BIN
Mouse.doc Normal file

Binary file not shown.

View File

29
Redistribute/Dirinfo Normal file
View File

@@ -0,0 +1,29 @@
Programma's gemaakt met Visual C++ 2005 zijn afhankelijk van
MSVCR80.DLL en
MSVCP80.DLL
Daarvan zijn mij twee versies bekend
8.0.50608.0
8.0.50727.762
De originele Visual C++ 2005 genereert afhankelijkheid naar de 8.0.50608.0 versie van de DLL's.
Na Servicepack 1 is er een afhankelijkheid naar versie 8.0.50727.762
De versienummer afhankelijkheid wordt geforceerd door de Manifest die embedded
wordt in DLL's en of EXE's.
'Zo maar' de goede DLL's in C:\Windows\System32 zetten werkt niet en vooral: hoort niet.
Je wordt geacht (de goede) vcredist_86.exe te draaien die de DLL's installeert op de goede plek.
Onder Windows 2000 doet hij dat inderdaad ook nog in C:\Windows\System32
Onder Windows 2003 en XP worden ze netjes volgens de side-by-side methode
geinstalleerd onder C:\Windows\WinSxS
Als je de nieuwste van de twee installeert dan komt er onder c:\WINdows\winsxs\Policies
nog een bestandje wat versie 8.0.50608.0 redirect naar 8.0.50727.762
"c:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86\vcredist_x86.exe"
gdiplus.dll is included in Windows XP and Windows Server 2003

Binary file not shown.

Binary file not shown.

View File

View File

@@ -0,0 +1,188 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8,00"
Name="RemoveAbout"
ProjectGUID="{89BE476D-6C02-4514-BFCE-256106D98713}"
RootNamespace="RemoveAbout"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
GenerateDebugInformation="true"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
CommandLine=""
/>
<Tool
Name="VCCustomBuildTool"
Description="Forceer correcte _TIME_"
CommandLine="if exist $(TargetDir)\..\SlnkdwfCom\Release\about.obj del $(TargetDir)\..\SlnkdwfCom\Release\about.obj"
Outputs="."
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
RuntimeLibrary="2"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
GenerateDebugInformation="true"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8,00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="PC53_JGL"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="PC53_JGL"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

95
SLNKDWF.sln Normal file
View File

@@ -0,0 +1,95 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SLNKDWFViewer", "Standalone\SLNKDWFViewer.vcproj", "{B2601E72-4FF4-4B9C-A89F-C2E7DACF36FD}"
ProjectSection(ProjectDependencies) = postProject
{6DFC9788-904C-4724-A734-06634061EF00} = {6DFC9788-904C-4724-A734-06634061EF00}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Viewer", "Viewer\Viewer.vcproj", "{6DFC9788-904C-4724-A734-06634061EF00}"
ProjectSection(ProjectDependencies) = postProject
{CF524F70-4DDD-4040-803B-41B5DE7B1CF9} = {CF524F70-4DDD-4040-803B-41B5DE7B1CF9}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WincmdViewer", "WincmdViewer\WINCDMDWF.vcproj", "{92F5EB69-069C-43EA-97E7-2F6507AA5873}"
ProjectSection(ProjectDependencies) = postProject
{6DFC9788-904C-4724-A734-06634061EF00} = {6DFC9788-904C-4724-A734-06634061EF00}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WincmdContent", "WincmdContent\filesys.vcproj", "{2F492A95-A23D-45C9-BBD9-E5B9325B22C1}"
ProjectSection(ProjectDependencies) = postProject
{CF524F70-4DDD-4040-803B-41B5DE7B1CF9} = {CF524F70-4DDD-4040-803B-41B5DE7B1CF9}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WincmdPacker", "WincmdPacker\WincmdPacker.vcproj", "{18EC7157-E263-458C-A41C-52E9538A642F}"
ProjectSection(ProjectDependencies) = postProject
{6EA5FCEC-1DB0-4542-8E41-9423021BD460} = {6EA5FCEC-1DB0-4542-8E41-9423021BD460}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SLNKDWFStaticRO", "SlnkDWFImpl\SLNKDWFStaticRO.vcproj", "{CF524F70-4DDD-4040-803B-41B5DE7B1CF9}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SLNKDWFCom", "SlnkDWFCom\SLNKDWF.vcproj", "{7F9F1060-C14D-4DD5-91D3-FA7263FECF5E}"
ProjectSection(ProjectDependencies) = postProject
{89BE476D-6C02-4514-BFCE-256106D98713} = {89BE476D-6C02-4514-BFCE-256106D98713}
{6EA5FCEC-1DB0-4542-8E41-9423021BD460} = {6EA5FCEC-1DB0-4542-8E41-9423021BD460}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SLNKDWFStaticRW", "SlnkDWFImpl\SLNKDWFStaticRW.vcproj", "{6EA5FCEC-1DB0-4542-8E41-9423021BD460}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tiff", "SlnkDWFImpl\CxImage\tiff\Tiff.vcproj", "{B61F3CD8-D974-4127-8335-557650DA8B5E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B0573FCD-8E98-421C-8BA3-F47CEB1F1047}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RemoveAbout", "RemoveAbout\RemoveAbout.vcproj", "{89BE476D-6C02-4514-BFCE-256106D98713}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B2601E72-4FF4-4B9C-A89F-C2E7DACF36FD}.Debug|Win32.ActiveCfg = Debug|Win32
{B2601E72-4FF4-4B9C-A89F-C2E7DACF36FD}.Debug|Win32.Build.0 = Debug|Win32
{B2601E72-4FF4-4B9C-A89F-C2E7DACF36FD}.Release|Win32.ActiveCfg = Release|Win32
{B2601E72-4FF4-4B9C-A89F-C2E7DACF36FD}.Release|Win32.Build.0 = Release|Win32
{6DFC9788-904C-4724-A734-06634061EF00}.Debug|Win32.ActiveCfg = Debug|Win32
{6DFC9788-904C-4724-A734-06634061EF00}.Debug|Win32.Build.0 = Debug|Win32
{6DFC9788-904C-4724-A734-06634061EF00}.Release|Win32.ActiveCfg = Release|Win32
{6DFC9788-904C-4724-A734-06634061EF00}.Release|Win32.Build.0 = Release|Win32
{92F5EB69-069C-43EA-97E7-2F6507AA5873}.Debug|Win32.ActiveCfg = Debug|Win32
{92F5EB69-069C-43EA-97E7-2F6507AA5873}.Debug|Win32.Build.0 = Debug|Win32
{92F5EB69-069C-43EA-97E7-2F6507AA5873}.Release|Win32.ActiveCfg = Release|Win32
{92F5EB69-069C-43EA-97E7-2F6507AA5873}.Release|Win32.Build.0 = Release|Win32
{2F492A95-A23D-45C9-BBD9-E5B9325B22C1}.Debug|Win32.ActiveCfg = Debug|Win32
{2F492A95-A23D-45C9-BBD9-E5B9325B22C1}.Debug|Win32.Build.0 = Debug|Win32
{2F492A95-A23D-45C9-BBD9-E5B9325B22C1}.Release|Win32.ActiveCfg = Release|Win32
{2F492A95-A23D-45C9-BBD9-E5B9325B22C1}.Release|Win32.Build.0 = Release|Win32
{18EC7157-E263-458C-A41C-52E9538A642F}.Debug|Win32.ActiveCfg = Debug|Win32
{18EC7157-E263-458C-A41C-52E9538A642F}.Debug|Win32.Build.0 = Debug|Win32
{18EC7157-E263-458C-A41C-52E9538A642F}.Release|Win32.ActiveCfg = Release|Win32
{18EC7157-E263-458C-A41C-52E9538A642F}.Release|Win32.Build.0 = Release|Win32
{CF524F70-4DDD-4040-803B-41B5DE7B1CF9}.Debug|Win32.ActiveCfg = Debug|Win32
{CF524F70-4DDD-4040-803B-41B5DE7B1CF9}.Debug|Win32.Build.0 = Debug|Win32
{CF524F70-4DDD-4040-803B-41B5DE7B1CF9}.Release|Win32.ActiveCfg = Release|Win32
{CF524F70-4DDD-4040-803B-41B5DE7B1CF9}.Release|Win32.Build.0 = Release|Win32
{7F9F1060-C14D-4DD5-91D3-FA7263FECF5E}.Debug|Win32.ActiveCfg = Debug|Win32
{7F9F1060-C14D-4DD5-91D3-FA7263FECF5E}.Debug|Win32.Build.0 = Debug|Win32
{7F9F1060-C14D-4DD5-91D3-FA7263FECF5E}.Release|Win32.ActiveCfg = Release|Win32
{7F9F1060-C14D-4DD5-91D3-FA7263FECF5E}.Release|Win32.Build.0 = Release|Win32
{6EA5FCEC-1DB0-4542-8E41-9423021BD460}.Debug|Win32.ActiveCfg = Debug|Win32
{6EA5FCEC-1DB0-4542-8E41-9423021BD460}.Debug|Win32.Build.0 = Debug|Win32
{6EA5FCEC-1DB0-4542-8E41-9423021BD460}.Release|Win32.ActiveCfg = Release|Win32
{6EA5FCEC-1DB0-4542-8E41-9423021BD460}.Release|Win32.Build.0 = Release|Win32
{B61F3CD8-D974-4127-8335-557650DA8B5E}.Debug|Win32.ActiveCfg = Debug|Win32
{B61F3CD8-D974-4127-8335-557650DA8B5E}.Debug|Win32.Build.0 = Debug|Win32
{B61F3CD8-D974-4127-8335-557650DA8B5E}.Release|Win32.ActiveCfg = Release|Win32
{B61F3CD8-D974-4127-8335-557650DA8B5E}.Release|Win32.Build.0 = Release|Win32
{89BE476D-6C02-4514-BFCE-256106D98713}.Debug|Win32.ActiveCfg = Debug|Win32
{89BE476D-6C02-4514-BFCE-256106D98713}.Debug|Win32.Build.0 = Debug|Win32
{89BE476D-6C02-4514-BFCE-256106D98713}.Release|Win32.ActiveCfg = Release|Win32
{89BE476D-6C02-4514-BFCE-256106D98713}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

96
SlnkDWFCom/About.cpp Normal file
View File

@@ -0,0 +1,96 @@
// About.cpp : Implementation of CAbout
#include "stdafx.h"
#include "About.h"
#include "SLNKDWFVersion.h"
#define SECURITY_WIN32
#include "Security.h"
// CAbout
extern HINSTANCE g_hInstance;
// In release mode verwijderen we altijd About.obj om hercompile te forceren
CString buildDATE(__DATE__);
CString buildTIME(__TIME__);
STDMETHODIMP CAbout::get_All(BSTR* pVal)
{
char module[_MAX_PATH]; // HMODULE
GetModuleFileName(g_hInstance, module, sizeof(module)/sizeof(char));
char name[_MAX_PATH]; // HMODULE
ULONG cnt = sizeof(name)/sizeof(char);
if (!GetUserNameEx(NameSamCompatible, name, &cnt))
{
myTRACE("\nGetUserNameEx failed (%d): %s", GetLastError(), myGetLastErrorMsg());
}
CString result;
result.Format(" SLNKDWF: built on %s, %s"
"\n DLL: %s"
"\nUsercontext: %s", buildDATE, buildTIME, module, name);
(*pVal) = result.AllocSysString();
return S_OK;
}
STDMETHODIMP CAbout::get_DLLPath(BSTR* pVal)
{
char module[_MAX_PATH]; // HMODULE
GetModuleFileName(g_hInstance, module, sizeof(module));
CString result;
result.Format("%s", module);
(*pVal) = result.AllocSysString();
return S_OK;
}
STDMETHODIMP CAbout::get_Buildtime(BSTR* pVal)
{
CString result;
result.Format("%s, %s", buildDATE, buildTIME);
(*pVal) = result.AllocSysString();
return S_OK;
}
STDMETHODIMP CAbout::get_UserContext(BSTR* pVal)
{
char name[_MAX_PATH]; // HMODULE
ULONG cnt = sizeof(name)/sizeof(char);
CString result;
if (!GetUserNameEx(NameSamCompatible, name, &cnt))
{
myTRACE("\nGetUserNameEx failed (%d): %s", GetLastError(), myGetLastErrorMsg());
result = "Unable to detect user";
}
else
result = name;
(*pVal) = result.AllocSysString();
return S_OK;
}
STDMETHODIMP CAbout::get_VersionMajor(LONG* pVal)
{
(*pVal) = SLNK_MAJOR_VERSION;
return S_OK;
}
STDMETHODIMP CAbout::get_VersionMinor(LONG* pVal)
{
(*pVal) = SLNK_MINOR_VERSION;
return S_OK;
}
STDMETHODIMP CAbout::get_VersionString(BSTR* pVal)
{
CString result = SLNK_BUILDVERSION;
(*pVal) = result.AllocSysString();
return S_OK;
}

52
SlnkDWFCom/About.h Normal file
View File

@@ -0,0 +1,52 @@
// About.h : Declaration of the CAbout
#pragma once
#include "resource.h" // main symbols
#include "SLNKDWF.h"
// CAbout
class ATL_NO_VTABLE CAbout :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CAbout, &CLSID_About>,
public IDispatchImpl<IAbout, &IID_IAbout, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CAbout()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_ABOUT)
BEGIN_COM_MAP(CAbout)
COM_INTERFACE_ENTRY(IAbout)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
STDMETHOD(get_All)(BSTR* pVal);
STDMETHOD(get_DLLPath)(BSTR* pVal);
STDMETHOD(get_Buildtime)(BSTR* pVal);
STDMETHOD(get_UserContext)(BSTR* pVal);
STDMETHOD(get_VersionMajor)(LONG* pVal);
STDMETHOD(get_VersionMinor)(LONG* pVal);
STDMETHOD(get_VersionString)(BSTR* pVal);
};
OBJECT_ENTRY_AUTO(__uuidof(About), CAbout)

27
SlnkDWFCom/About.rgs Normal file
View File

@@ -0,0 +1,27 @@
HKCR
{
SLNKDWF.About.1 = s 'About Class'
{
CLSID = s '{2BA64B82-1A96-4F15-9815-40B291B505EB}'
}
SLNKDWF.About = s 'About Class'
{
CLSID = s '{2BA64B82-1A96-4F15-9815-40B291B505EB}'
CurVer = s 'SLNKDWF.About.1'
}
NoRemove CLSID
{
ForceRemove {2BA64B82-1A96-4F15-9815-40B291B505EB} = s 'About Class'
{
ProgID = s 'SLNKDWF.About.1'
VersionIndependentProgID = s 'SLNKDWF.About'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '%APPID%'
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

View File

@@ -0,0 +1,17 @@
// BoundingBox.cpp : Implementation of CBoundingBox
#include "stdafx.h"
#include "BoundingBox.h"
// CBoundingBox
STDMETHODIMP CBoundingBox::get_min(IDWGPoint** pVal)
{
return m_minPoint->QueryInterface(IID_IDWGPoint, (void**)pVal);
}
STDMETHODIMP CBoundingBox::get_max(IDWGPoint** pVal)
{
return m_maxPoint->QueryInterface(IID_IDWGPoint, (void**)pVal);
};

75
SlnkDWFCom/BoundingBox.h Normal file
View File

@@ -0,0 +1,75 @@
// BoundingBox.h : Declaration of the CBoundingBox
#pragma once
#include "resource.h" // main symbols
#include "SLNKDWF.h"
#include "DWGPoint.h"
// CBoundingBox
class ATL_NO_VTABLE CBoundingBox :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CBoundingBox, &CLSID_BoundingBox>,
public IDispatchImpl<IBoundingBox, &IID_IBoundingBox, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CBoundingBox()
{
}
//REMOVED DECLARE_REGISTRY_RESOURCEID(IDR_BOUNDINGBOX)
BEGIN_COM_MAP(CBoundingBox)
COM_INTERFACE_ENTRY(IBoundingBox)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
//
// Maak object m_minPoint
//
CComObject<CDWGPoint> *pDWGPoint;
HRESULT hr = CComObject<CDWGPoint>::CreateInstance(&pDWGPoint);
if(FAILED(hr)) return hr;
pDWGPoint->AddRef();
hr = pDWGPoint->QueryInterface(IID_IDWGPoint, (void **)&m_minPoint);
pDWGPoint->Release();
if(FAILED(hr)) return hr;
//
// Maak object m_maxPoint
//
hr = CComObject<CDWGPoint>::CreateInstance(&pDWGPoint);
if(FAILED(hr)) return hr;
pDWGPoint->AddRef();
hr = pDWGPoint->QueryInterface(IID_IDWGPoint, (void **)&m_maxPoint);
pDWGPoint->Release();
if(FAILED(hr)) return hr;
return S_OK;
}
void FinalRelease()
{
}
private:
CComQIPtr<IDWGPoint> m_minPoint;
CComQIPtr<IDWGPoint> m_maxPoint;
public:
STDMETHOD(get_min)(IDWGPoint** pVal);
STDMETHOD(get_max)(IDWGPoint** pVal);
};
//REMOVED OBJECT_ENTRY_AUTO(__uuidof(BoundingBox), CBoundingBox)

View File

@@ -0,0 +1,27 @@
HKCR
{
SLNKDWF.BoundingBox.1 = s 'BoundingBox Class'
{
CLSID = s '{FCEF1E56-36FF-4F66-BEA5-FD08D860524F}'
}
SLNKDWF.BoundingBox = s 'BoundingBox Class'
{
CLSID = s '{FCEF1E56-36FF-4F66-BEA5-FD08D860524F}'
CurVer = s 'SLNKDWF.BoundingBox.1'
}
NoRemove CLSID
{
ForceRemove {FCEF1E56-36FF-4F66-BEA5-FD08D860524F} = s 'BoundingBox Class'
{
ProgID = s 'SLNKDWF.BoundingBox.1'
VersionIndependentProgID = s 'SLNKDWF.BoundingBox'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '%APPID%'
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

83
SlnkDWFCom/DWFFile.cpp Normal file
View File

@@ -0,0 +1,83 @@
// DWFFile.cpp : Implementation of CDWFFile
#include "stdafx.h"
#include "assert.h"
#include "DWFFile.h"
#include "myEPlotSection.h"
// CDWFFile
STDMETHODIMP CDWFFile::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IDWFFile
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
//CDWFFile::~CDWFFile()
//{
// // It seems we never get here? Use FinalRelease
//};
HRESULT CDWFFile::FinalConstruct()
{
m_EPlotSections.SetParent(this);
m_EPlotSections.SetOuterUnknown(GetControllingUnknown());
return m_EPlotSections.FinalConstruct();
}
// Omdat de tellingen gekoppeld zijn weten we zeker dat de refcount van
// onze eigen objecten ook 0 zal zijn en is het dus veilig ze weg te gooien (toch...?)
void CDWFFile::FinalRelease()
{
m_EPlotSections.FinalRelease();
}
STDMETHODIMP CDWFFile::Open(BSTR DWFPath)
{
try
{
if (CDWFFileImpl::Open(CString(DWFPath)))
{
return S_OK;
}
else
return E_FAIL;
}
catch (CString& e)
{
return myAtlReportError (GetObjectCLSID(), e);
}
}
STDMETHODIMP CDWFFile::get_PropertiesXML(BSTR* pVal)
{
CString s;
if (CDWFFileImpl::get_PropertiesXML(s))
{
CComBSTR bstrString(s);
return bstrString.CopyTo(pVal);
}
else
return E_FAIL;
return S_OK;
}
STDMETHODIMP CDWFFile::get_EPlotSections(IEPlotSections **ppEPlotSections)
{
// if (!m_isOpen)
// return myAtlReportError (GetObjectCLSID(), "\nDWF File is not opened");
return m_EPlotSections.QueryInterface(ppEPlotSections);
}

55
SlnkDWFCom/DWFFile.h Normal file
View File

@@ -0,0 +1,55 @@
// DWFFile.h : Declaration of the CDWFFile
#pragma once
#include "resource.h" // main symbols
#include "DWFFileImpl.h"
#include "ComObjectEmbed.h"
#include "EPlotSections.h"
#include "SLNKDWF.h"
// CDWFFile
class ATL_NO_VTABLE CDWFFile :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CDWFFile, &CLSID_myDWFFile>,
public ISupportErrorInfo,
public IDispatchImpl<IDWFFile, &IID_IDWFFile, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public CDWFFileImpl
{
public:
CDWFFile()
{
m_EPlotSections.InitImpl(&(CDWFFileImpl::m_EPlotSections));
}
DECLARE_REGISTRY_RESOURCEID(IDR_DWFFILE)
DECLARE_GET_CONTROLLING_UNKNOWN() //ADDED
BEGIN_COM_MAP(CDWFFile)
COM_INTERFACE_ENTRY(IDWFFile)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct();
void FinalRelease();
protected:
CComObjectEmbed<CEPlotSections> m_EPlotSections;
public:
STDMETHOD(Open)(BSTR DWFPath);
STDMETHOD(get_PropertiesXML)(BSTR* pVal);
STDMETHOD(get_EPlotSections)(IEPlotSections **ppEPlotSections);
};
OBJECT_ENTRY_AUTO(__uuidof(myDWFFile), CDWFFile)

27
SlnkDWFCom/DWFFile.rgs Normal file
View File

@@ -0,0 +1,27 @@
HKCR
{
SLNKDWF.DWFFile.1 = s 'DWFFile Class'
{
CLSID = s '{BE2BCD58-4971-49E6-9A70-CDDD5C01224D}'
}
SLNKDWF.DWFFile = s 'DWFFile Class'
{
CLSID = s '{BE2BCD58-4971-49E6-9A70-CDDD5C01224D}'
CurVer = s 'SLNKDWF.DWFFile.1'
}
NoRemove CLSID
{
ForceRemove {BE2BCD58-4971-49E6-9A70-CDDD5C01224D} = s 'DWFFile Class'
{
ProgID = s 'SLNKDWF.DWFFile.1'
VersionIndependentProgID = s 'SLNKDWF.DWFFile'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '%APPID%'
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

32
SlnkDWFCom/DWGPoint.cpp Normal file
View File

@@ -0,0 +1,32 @@
// DWGPoint.cpp : Implementation of CDWGPoint
#include "stdafx.h"
#include "DWGPoint.h"
// CDWGPoint
STDMETHODIMP CDWGPoint::get_DwgX(DOUBLE* pVal)
{
(*pVal) = m_DwgX;
return S_OK;
}
STDMETHODIMP CDWGPoint::put_DwgX(DOUBLE newVal)
{
m_DwgX = newVal;
return S_OK;
}
STDMETHODIMP CDWGPoint::get_DwgY(DOUBLE* pVal)
{
(*pVal) = m_DwgY;
return S_OK;
}
STDMETHODIMP CDWGPoint::put_DwgY(DOUBLE newVal)
{
m_DwgY = newVal;
return S_OK;
}

51
SlnkDWFCom/DWGPoint.h Normal file
View File

@@ -0,0 +1,51 @@
// DWGPoint.h : Declaration of the CDWGPoint
#pragma once
#include "resource.h" // main symbols
#include "SLNKDWF.h"
// CDWGPoint
class ATL_NO_VTABLE CDWGPoint :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CDWGPoint, &CLSID_DWGPoint>,
public IDispatchImpl<IDWGPoint, &IID_IDWGPoint, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CDWGPoint()
{
}
//REMOVED DECLARE_REGISTRY_RESOURCEID(IDR_DWGPOINT)
BEGIN_COM_MAP(CDWGPoint)
COM_INTERFACE_ENTRY(IDWGPoint)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
protected:
double m_DwgX, m_DwgY;
public:
STDMETHOD(get_DwgX)(DOUBLE* pVal);
STDMETHOD(put_DwgX)(DOUBLE newVal);
STDMETHOD(get_DwgY)(DOUBLE* pVal);
STDMETHOD(put_DwgY)(DOUBLE newVal);
};
//REMOVED OBJECT_ENTRY_AUTO(__uuidof(DWGPoint), CDWGPoint)

27
SlnkDWFCom/DWGPoint.rgs Normal file
View File

@@ -0,0 +1,27 @@
HKCR
{
SLNKDWF.DWGPoint.1 = s 'DWGPoint Class'
{
CLSID = s '{96301A8D-1DC9-4900-B89D-C745C4CAEFF4}'
}
SLNKDWF.DWGPoint = s 'DWGPoint Class'
{
CLSID = s '{96301A8D-1DC9-4900-B89D-C745C4CAEFF4}'
CurVer = s 'SLNKDWF.DWGPoint.1'
}
NoRemove CLSID
{
ForceRemove {96301A8D-1DC9-4900-B89D-C745C4CAEFF4} = s 'DWGPoint Class'
{
ProgID = s 'SLNKDWF.DWGPoint.1'
VersionIndependentProgID = s 'SLNKDWF.DWGPoint'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '%APPID%'
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

View File

@@ -0,0 +1,27 @@
HKCR
{
SLNKDWF.EPlotSection.1 = s 'EPlotSection Class'
{
CLSID = s '{F2599AE6-8A08-4B5E-9C68-BD975229F0D1}'
}
SLNKDWF.EPlotSection = s 'EPlotSection Class'
{
CLSID = s '{F2599AE6-8A08-4B5E-9C68-BD975229F0D1}'
CurVer = s 'SLNKDWF.EPlotSection.1'
}
NoRemove CLSID
{
ForceRemove {F2599AE6-8A08-4B5E-9C68-BD975229F0D1} = s 'EPlotSection Class'
{
ProgID = s 'SLNKDWF.EPlotSection.1'
VersionIndependentProgID = s 'SLNKDWF.EPlotSection'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '%APPID%'
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

View File

@@ -0,0 +1,59 @@
// EPlotSections.h : Declaration of the CEPlotSections
#pragma once
#include "resource.h" // main symbols
#include "SLNKDWF.h"
#include "EPlotSectionsImpl.h"
#include "ComObjectEmbed.h"
#include "myEPlotSection.h"
// CEPlotSections
class ATL_NO_VTABLE CEPlotSections :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CEPlotSections, &CLSID_EPlotSections>,
public ISupportErrorInfo,
public IDispatchImpl<IEPlotSections, &IID_IEPlotSections, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CEPlotSections()
{
}
DECLARE_GET_CONTROLLING_UNKNOWN() //ADDED
BEGIN_COM_MAP(CEPlotSections)
COM_INTERFACE_ENTRY(IEPlotSections)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease() ;
protected:
IDWFFile *m_pParent; // Non-addreffed!
CEPlotSectionsImpl *m_pSectionsImpl; // Pointer naar onderliggende sections
CAtlArray<CComObjectEmbed<CEPlotSection>> m_EPlotSections;
public:
void InitImpl(CEPlotSectionsImpl *epl);
void SetParent(IDWFFile *pParent);
BOOL ProcessManifest(DWFToolkit::DWFManifest& rManifest, CString sourceDescription);
STDMETHODIMP get_Parent(IDWFFile **ppParent);
STDMETHOD(get_Count)(LONG* pVal);
STDMETHOD(get_Item)(LONG i, IDispatch** pVal);
};

View File

@@ -0,0 +1,27 @@
HKCR
{
SLNKDWF.EPlotSections.1 = s 'EPlotSections Class'
{
CLSID = s '{7B2E7661-9B9A-4217-A19E-745EFFF8E86D}'
}
SLNKDWF.EPlotSections = s 'EPlotSections Class'
{
CLSID = s '{7B2E7661-9B9A-4217-A19E-745EFFF8E86D}'
CurVer = s 'SLNKDWF.EPlotSections.1'
}
NoRemove CLSID
{
ForceRemove {7B2E7661-9B9A-4217-A19E-745EFFF8E86D} = s 'EPlotSections Class'
{
ProgID = s 'SLNKDWF.EPlotSections.1'
VersionIndependentProgID = s 'SLNKDWF.EPlotSections'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '%APPID%'
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

135
SlnkDWFCom/Metafile.cpp Normal file
View File

@@ -0,0 +1,135 @@
/******************************************************************************
* File : Metafile.cpp (c) 1997-2002, Furix
*
* Author : J. Groot Lipman
* Project : BetterWMF
* Version : 4.00
*
* Function : Core file of BetterWMF. Contains all functions to convert a
* WMF-file or Clipboard object to a better one
*****************************************************************************/
#include "stdafx.h"
#include "metafile.h"
/*****************************************************************************
* Static variables for CMetafile. Only temporary used for/in static playback
* procedures
*/
// ==========================================================================
/*
FUNCTION : WriteMetaFileAsPlaceable
PARAMETERS : HMETAFILE - a handle to the metafile
LPCSTR lpstrOutFileName - filename to write to
PURPOSE : Write a metafile in placeable format
RETURNS : BOOL - TRUE is Success, FALSE is failure
COMMENTS : Fills out and writes a placeable header, followed by the
metafile bits, to the file.
HISTORY : 4/17/95 - Created
*/
BOOL CMetafile::WriteMetaFileAsPlaceable( HMETAFILE hOld, CSize Size, double Inch, LPCSTR lpstrOutFileName)
{
FILE *OutFile;
//OFSTRUCT outof;
DWORD dwSize;
LPBYTE pBits;
ALDUSMFHEADER pAldusMFHdr;
// Fill out the placeable header
pAldusMFHdr.key = ALDUS_KEY;
pAldusMFHdr.hmf = NULL;
pAldusMFHdr.inch = (unsigned short)Inch;
;
pAldusMFHdr.reserved = 0;
pAldusMFHdr.bbox.left = (short)0;
pAldusMFHdr.bbox.top = (short)0;
pAldusMFHdr.bbox.right = (short)Size.cx;
pAldusMFHdr.bbox.bottom = (short)Size.cy;
pAldusMFHdr.checksum = CalculateAPMCheckSum( pAldusMFHdr );
// Get the bits
if( (dwSize = GetMetaFileBitsEx( hOld, 0, NULL )) == 0 )
{
DeleteMetaFile( hOld );
// myErrorBox(NULL, "Failed to Get MetaFile Bits Size");
return NULL;
}
// Allocate that much memory
if( (pBits = (LPBYTE) malloc( dwSize )) == NULL )
{
DeleteMetaFile( hOld );
// myErrorBox(NULL, "Failed to Allocate Memory for Metafile Bits");
return NULL;
}
// Get the metafile bits
if( GetMetaFileBitsEx( hOld, dwSize, pBits ) == 0 )
{
free( pBits );
DeleteMetaFile( hOld );
// myErrorBox(NULL, "Failed to Get MetaFile Bits");
return NULL;
}
// TODO: Error checking
// Open the file
OutFile = fopen( lpstrOutFileName, "wb" );
// Write the header
fwrite(&pAldusMFHdr, 1, sizeof( APMFILEHEADER ), OutFile);
// Write the bits
fwrite(pBits, 1, dwSize, OutFile );
// Close the file
fclose(OutFile);
// Clean up
free( pBits );
return TRUE;
}
// End WriteMetaFileAsPlaceable
// ==========================================================================
// ==========================================================================
/*
FUNCTION : CalculateAPMCheckSum
PARAMETERS : APMFILEHEADER apmfh - A placeable header
PURPOSE : Calculates the checksum for a placeable header
RETURNS : WORD - the checksum
COMMENTS : The checksum is derived by XORing each word.
HISTORY : 4/17/95 - Created
*/
WORD CMetafile::CalculateAPMCheckSum( ALDUSMFHEADER pAldusMFHdr )
{
LPWORD lpWord;
WORD wResult, i;
// Start with the first word
wResult = *(lpWord = (LPWORD)(&pAldusMFHdr));
// XOR in each of the other 9 words
for(i=1;i<=9;i++)
{
wResult ^= lpWord[i];
}
return wResult;
}
// End CalculateAPMCheckSum
// ==========================================================================

39
SlnkDWFCom/Metafile.h Normal file
View File

@@ -0,0 +1,39 @@
#ifndef __METAFILE_H_
#define __METAFILE_H_
#pragma pack(1)
//
//placeable metafile data definitions
//
typedef struct tagOLDRECT
{
short left;
short top;
short right;
short bottom;
} OLDRECT;
typedef struct
{
DWORD key;
WORD hmf;
OLDRECT bbox;
WORD inch;
DWORD reserved;
WORD checksum;
} ALDUSMFHEADER, * LPALDUSMFHEADER, APMFILEHEADER;
#pragma pack()
#define OFFSET_TO_META sizeof (ALDUSMFHEADER)
#define METAHEADER_SIZE sizeof (METAHEADER)
#define ALDUS_KEY 0x9AC6CDD7
class CMetafile
{
// Operations
public:
static BOOL WriteMetaFileAsPlaceable( HMETAFILE hOld, CSize Size, double Inch, LPCSTR lpstrOutFileName);
static WORD CalculateAPMCheckSum( ALDUSMFHEADER pAldusMFHdr );
};
#endif // __METAFILE_H_

50
SlnkDWFCom/Options.cpp Normal file
View File

@@ -0,0 +1,50 @@
// Options.cpp : Implementation of COptions
#include "stdafx.h"
#include "Options.h"
CSLNKOptions g_SLNKOptions; // The one and only
// Set all default values
CSLNKOptions::CSLNKOptions()
{
m_MinContSize = 0.20e6; // Minimale grootte voor een contour om herkend te worden
m_SkipContLeader = FALSE; // ARKEY tekeningen hebben een leading lijntje voor de contour
}
// COptions
STDMETHODIMP COptions::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IOptions
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
STDMETHODIMP COptions::SetOption(BSTR optionName, VARIANT OptionValue)
{
CComVariant val(OptionValue);
CString nm(optionName);
nm.MakeUpper();
if (nm=="MINCONTSIZE")
{
HRESULT hr = val.ChangeType(VT_R8);
if (FAILED(hr)) return hr;
g_SLNKOptions.m_MinContSize = val.dblVal;
}
if (nm=="SKIPCONTLEADER")
{
HRESULT hr = val.ChangeType(VT_BOOL);
if (FAILED(hr)) return hr;
g_SLNKOptions.m_SkipContLeader = val.boolVal;
}
return S_OK;
}

66
SlnkDWFCom/Options.h Normal file
View File

@@ -0,0 +1,66 @@
// Options.h : Declaration of the COptions
#pragma once
#include "resource.h" // main symbols
#include "SLNKDWF.h"
#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
#endif
class CSLNKOptions
{
public:
CSLNKOptions();
double m_MinContSize; // In DWG Units
BOOL m_SkipContLeader; //
};
extern CSLNKOptions g_SLNKOptions; // The one and only
// COptions
class ATL_NO_VTABLE COptions :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<COptions, &CLSID_Options>,
public ISupportErrorInfo,
public IDispatchImpl<IOptions, &IID_IOptions, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
COptions()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_OPTIONS)
BEGIN_COM_MAP(COptions)
COM_INTERFACE_ENTRY(IOptions)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
STDMETHOD(SetOption)(BSTR optionName, VARIANT OptionValue);
};
OBJECT_ENTRY_AUTO(__uuidof(Options), COptions)

26
SlnkDWFCom/Options.rgs Normal file
View File

@@ -0,0 +1,26 @@
HKCR
{
SLNKDWF.Options.1 = s 'Options Class'
{
CLSID = s '{168678A9-6FA7-49C3-B839-DFDF07E0A79A}'
}
SLNKDWF.Options = s 'Options Class'
{
CLSID = s '{168678A9-6FA7-49C3-B839-DFDF07E0A79A}'
CurVer = s 'SLNKDWF.Options.1'
}
NoRemove CLSID
{
ForceRemove {168678A9-6FA7-49C3-B839-DFDF07E0A79A} = s 'Options Class'
{
ProgID = s 'SLNKDWF.Options.1'
VersionIndependentProgID = s 'SLNKDWF.Options'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

138
SlnkDWFCom/SLNKContour.cpp Normal file
View File

@@ -0,0 +1,138 @@
// SLNKContour.cpp : Implementation of CSLNKContour
#include "stdafx.h"
#include "SLNKContour.h"
#include "Whipfile.h"
// Merk op dat sommige functies ook nog in WhipFile zijn gedefinieerd. Die moeten daar weg omdat we
// tegenwoordig (mei 2007) via WhipFile.Contour("label") een Contour object opleveren waar je alles
// maar op doet, of beter nog mettertijd WhipFile.Contours.Item("label")
// Voor backward compatibiliteit laten we de Whipfile nog maar even intact
// CSLNKContour
void CSLNKContour::SetImpl(CSLNKContourImpl * pSLNKContour)
{
m_SLNKContour = pSLNKContour;
if (m_SLNKContour->m_fromSymbol) return; // Die zijn vast nog niet getransformeerd
WT_Logical_Box bx = pSLNKContour->bounds();
WT_Point3D dwgPt;
CComQIPtr<IDWGPoint> pt;
dwgPt = pSLNKContour->m_parentWhipFileState->m_contunits.transform(bx.minpt());
m_dwgBounding->get_min(&pt);
pt->put_DwgX(dwgPt.m_x);
pt->put_DwgY(dwgPt.m_y);
pt.Release();
dwgPt = pSLNKContour->m_parentWhipFileState->m_contunits.transform(bx.maxpt());
m_dwgBounding->get_max(&pt);
pt->put_DwgX(dwgPt.m_x);
pt->put_DwgY(dwgPt.m_y);
pt.Release();
WT_Logical_Point lp = CSLNKContourImpl::Centroid(*pSLNKContour);
dwgPt = pSLNKContour->m_parentWhipFileState->m_contunits.transform(lp);
m_dwgCenter->put_DwgX(dwgPt.m_x);
m_dwgCenter->put_DwgY(dwgPt.m_y);
};
STDMETHODIMP CSLNKContour::SetColor(ULONG rgb, BYTE Alpha /*=0*/)
{
int b=rgb%256;
int g=(rgb>>8)%256;
int r=(rgb>>16)%256;
m_SLNKContour->m_Color.set(r, g, b, Alpha);
return S_OK;
}
// De FriendlyName verschijnt uiteindelijk als tooltip
STDMETHODIMP CSLNKContour::SetUrl(BSTR Url, BSTR FriendlyName)
{
CString fName(FriendlyName);
if (fName=="")
fName=m_SLNKContour->m_contLabel.ascii();
// Merk op: \n lijkt \012 te zijn?
fName.Replace("\012", "\\n"); // Anders corrupte (ascii?) DWF
fName.Replace("\015", "\\n"); // Anders corrupte (ascii?) DWF
if (WT_String::is_ascii(fName.GetLength(), fName))
m_SLNKContour->m_Url.set( WD_URL_Optimize, (LPCSTR)CString(Url), (LPCSTR)fName);
else
{ // Use UNICODE for example for Micha<68>l
CStringW s(fName);
m_SLNKContour->m_Url.set( WD_URL_Optimize, Url, s);
}
return S_OK;
}
STDMETHODIMP CSLNKContour::get_Area(DOUBLE* pVal)
{
*pVal = m_SLNKContour->m_DWGArea;
return S_OK;
}
STDMETHODIMP CSLNKContour::get_Extents(IBoundingBox** pVal)
{
if (m_SLNKContour->m_fromSymbol)
return E_NOTIMPL; // (nog) niet op symbolen
return m_dwgBounding->QueryInterface(IID_IBoundingBox, (void**)pVal);
}
STDMETHODIMP CSLNKContour::get_Center(IDWGPoint** pVal)
{
if (m_SLNKContour->m_fromSymbol)
return E_NOTIMPL; // (nog) niet op symbolen
return m_dwgCenter->QueryInterface(IID_IDWGPoint, (void**)pVal);
}
STDMETHODIMP CSLNKContour::get_Key(BSTR* pVal)
{
CComBSTR bstrString(m_SLNKContour->m_Key);
return bstrString.CopyTo(pVal);
}
STDMETHODIMP CSLNKContour::put_Key(BSTR newVal)
{
CString key(newVal);
m_SLNKContour->m_Key = key;
return S_OK;
}
STDMETHODIMP CSLNKContour::get_Label(BSTR* pVal)
{
CComBSTR bstrString(m_SLNKContour->m_ExtraLabel);
return bstrString.CopyTo(pVal);
}
STDMETHODIMP CSLNKContour::put_Label(BSTR newVal)
{
CString key(newVal);
m_SLNKContour->m_ExtraLabel = newVal;
return S_OK;
}
STDMETHODIMP CSLNKContour::get_Hatch(BYTE* pVal)
{
(*pVal) = m_SLNKContour->m_Pattern;
return S_OK;
}
STDMETHODIMP CSLNKContour::put_Hatch(BYTE newVal)
{
WT_Fill_Pattern patt = WT_Fill_Pattern((WT_Fill_Pattern::WT_Pattern_ID)newVal);
m_SLNKContour->m_Pattern.set(patt);
//contour->m_Pattern.pattern_scale() = 1.0;
return S_OK;
}

104
SlnkDWFCom/SLNKContour.h Normal file
View File

@@ -0,0 +1,104 @@
// SLNKContour.h : Declaration of the CSLNKContour
#pragma once
#include "resource.h" // main symbols
#include "SLNKDWF.h"
#include "SLNKContourImpl.h"
#include "BoundingBox.h"
#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
#endif
// CSLNKContour
class ATL_NO_VTABLE CSLNKContour :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSLNKContour, &CLSID_SLNKContour>,
public IDispatchImpl<ISLNKContour, &IID_ISLNKContour, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CSLNKContour()
{
}
//REMOVED DECLARE_REGISTRY_RESOURCEID(IDR_SLNKCONTOUR)
BEGIN_COM_MAP(CSLNKContour)
COM_INTERFACE_ENTRY(ISLNKContour)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
//
// Maak object m_dwgBounding
//
CComObject<CBoundingBox> *pBoundingBox;
HRESULT hr = CComObject<CBoundingBox>::CreateInstance(&pBoundingBox);
if(FAILED(hr)) return hr;
pBoundingBox->AddRef();
hr = pBoundingBox->QueryInterface(IID_IBoundingBox, (void **)&m_dwgBounding);
pBoundingBox->Release();
if(FAILED(hr)) return hr;
//
// Maak object m_dwgCenter
//
CComObject<CDWGPoint> *pDWGPoint;
hr = CComObject<CDWGPoint>::CreateInstance(&pDWGPoint);
if(FAILED(hr)) return hr;
pDWGPoint->AddRef();
hr = pDWGPoint->QueryInterface(IID_IDWGPoint, (void **)&m_dwgCenter);
pDWGPoint->Release();
if(FAILED(hr)) return hr;
return S_OK;
}
void FinalRelease()
{
}
// Deze SLNKContour wijst naar een CSLNKContourImpl in een WhipFile object. We moeten voorkomen
// dat deze te snel uit de scope wegvalt. Dat doen we mbv SetParent
// Omgekeerd is geen probleem: de WhipFile verwijst niet(!) naar de CSLNKContour en heeft er dus
// geen last van dat die wegvalt (van zijn SLNKContourImpl objecten is hij gewoon eigenaar)
void SetParent(IWhipFile *pParent)
{
HRESULT hr = pParent->QueryInterface(IID_IWhipFile, (void **)&m_parent_iWhipFile);
};
void SetImpl(CSLNKContourImpl * pSLNKContour);
private:
CSLNKContourImpl * m_SLNKContour;
CComQIPtr<IDWGPoint> m_dwgCenter;
CComQIPtr<IBoundingBox> m_dwgBounding;
CComQIPtr<IWhipFile> m_parent_iWhipFile; // Om scope levend te houden
public:
STDMETHOD(SetColor)(ULONG rgb, BYTE Alpha);
STDMETHOD(SetUrl) (BSTR Url, BSTR FriendlyName);
STDMETHOD(get_Area)(DOUBLE* pVal);
STDMETHOD(get_Extents)(IBoundingBox** pVal);
STDMETHOD(get_Center)(IDWGPoint** pVal);
STDMETHOD(get_Key)(BSTR* pVal);
STDMETHOD(put_Key)(BSTR newVal);
STDMETHOD(get_Label)(BSTR* pVal);
STDMETHOD(put_Label)(BSTR newVal);
STDMETHOD(get_Hatch)(BYTE* pVal);
STDMETHOD(put_Hatch)(BYTE newVal);
};
//REMOVED OBJECT_ENTRY_AUTO(__uuidof(SLNKContour), CSLNKContour)

View File

@@ -0,0 +1,26 @@
HKCR
{
SLNKDWFCom.SLNKContour.1 = s 'SLNKContour Class'
{
CLSID = s '{476C0F28-5860-485D-BEBD-D03F68E1C930}'
}
SLNKDWFCom.SLNKContour = s 'SLNKContour Class'
{
CLSID = s '{476C0F28-5860-485D-BEBD-D03F68E1C930}'
CurVer = s 'SLNKDWFCom.SLNKContour.1'
}
NoRemove CLSID
{
ForceRemove {476C0F28-5860-485D-BEBD-D03F68E1C930} = s 'SLNKContour Class'
{
ProgID = s 'SLNKDWFCom.SLNKContour.1'
VersionIndependentProgID = s 'SLNKDWFCom.SLNKContour'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

115
SlnkDWFCom/SLNKDWF.cpp Normal file
View File

@@ -0,0 +1,115 @@
// SLNKDWF.cpp : Implementation of DLL Exports.
#include "stdafx.h"
#include "resource.h"
#include "SLNKDWF.h"
#include "dlldatax.h"
// Detect Memory Leaks
#ifdef _DEBUG
//CMemLeakDetect memLeakDetect;
#endif
HINSTANCE g_hInstance;
extern CString buildDATE;
extern CString buildTIME;
class CSLNKDWFModule : public CAtlDllModuleT< CSLNKDWFModule >
{
public :
DECLARE_LIBID(LIBID_SLNKDWFLib)
DECLARE_REGISTRY_APPID_RESOURCEID(IDR_SLNKDWF, "{71B32202-1B68-4E92-9C86-8F53FB298011}")
};
CSLNKDWFModule _AtlModule;
// DLL Entry Point
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
g_hInstance = hInstance;
char module[_MAX_PATH]; // HMODULE
GetModuleFileName(g_hInstance, module, sizeof(module));
char *txt;
switch (dwReason)
{
case DLL_PROCESS_ATTACH: txt = "DLL_PROCESS_ATTACH"; break;
case DLL_PROCESS_DETACH: txt = "DLL_PROCESS_DETACH"; break;
case DLL_THREAD_ATTACH: txt = "DLL_THREAD_ATTACH"; break;
case DLL_THREAD_DETACH: txt = "DLL_THREAD_DETACH"; break;
default: txt = "UNKNOWN reason";
}
DWORD pid = GetCurrentProcessId();
if (dwReason == DLL_PROCESS_ATTACH)
myDoTRACE("\nLoading SLNKDWF: built on %s, %s"
"\n DLL: %s"
"\n PID: %d"
// "\n Handle: %x\n"
, buildDATE, buildTIME, module, pid, hInstance);
// else
// myDoTRACE("\nUn/Loading SLNKDWF handle %x, reason %s", hInstance, txt);
#ifdef _MERGE_PROXYSTUB
if (!PrxDllMain(hInstance, dwReason, lpReserved))
return FALSE;
#endif
hInstance;
return _AtlModule.DllMain(dwReason, lpReserved);
}
// Used to determine whether the DLL can be unloaded by OLE
STDAPI DllCanUnloadNow(void)
{
#ifdef _MERGE_PROXYSTUB
HRESULT hr = PrxDllCanUnloadNow();
if (FAILED(hr))
return hr;
#endif
return _AtlModule.DllCanUnloadNow();
}
// Returns a class factory to create an object of the requested type
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
#ifdef _MERGE_PROXYSTUB
if (PrxDllGetClassObject(rclsid, riid, ppv) == S_OK)
return S_OK;
#endif
return _AtlModule.DllGetClassObject(rclsid, riid, ppv);
}
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
// registers object, typelib and all interfaces in typelib
HRESULT hr = _AtlModule.DllRegisterServer();
#ifdef _MERGE_PROXYSTUB
if (FAILED(hr))
return hr;
hr = PrxDllRegisterServer();
#endif
return hr;
}
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
HRESULT hr = _AtlModule.DllUnregisterServer();
#ifdef _MERGE_PROXYSTUB
if (FAILED(hr))
return hr;
hr = PrxDllRegisterServer();
if (FAILED(hr))
return hr;
hr = PrxDllUnregisterServer();
#endif
return hr;
}

9
SlnkDWFCom/SLNKDWF.def Normal file
View File

@@ -0,0 +1,9 @@
; SLNKDWF.def : Declares the module parameters.
LIBRARY "SLNKDWF.DLL"
EXPORTS
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE

364
SlnkDWFCom/SLNKDWF.idl Normal file
View File

@@ -0,0 +1,364 @@
// SLNKDWF.idl : IDL source for SLNKDWF
//
// This file will be processed by the MIDL tool to
// produce the type library (SLNKDWF.tlb) and marshalling code.
#include "olectl.h"
import "oaidl.idl";
import "ocidl.idl";
interface IEPlotSection;
interface IEPlotSections;
interface ISLNKEvent;
interface IBoundingBox;
interface IDWGPoint;
//interface IChild;
//interface ISubChild;
[
object,
uuid(3C57EFD2-B1A1-4B70-A6B2-14D05401F458),
dual,
nonextensible,
helpstring("IDWFFile Interface"),
pointer_default(unique)
]
interface IDWFFile : IDispatch{
[id(1), helpstring("method Open")] HRESULT Open(BSTR DWFPath);
[propget, id(9), helpstring("property PropertiesXML")] HRESULT PropertiesXML([out, retval] BSTR* pVal);
[propget, id(10), helpstring("property EPlotSections")] HRESULT EPlotSections([out,retval] IEPlotSections **ppEPlotSections);
};
[
object,
uuid(B0C6AC9F-3D1E-4489-9CE9-436A220ED12F),
dual,
nonextensible,
helpstring("IWhipFile Interface"),
pointer_default(unique)
]
interface IWhipFile : IDispatch{
[id(1), helpstring("method Load")] HRESULT Load([in] BSTR WhipPath);
[id(2), helpstring("method LoadStream")] HRESULT LoadStream([in] VARIANT EPlotStream);
[id(3), helpstring("method SaveAs")] HRESULT SaveAs([in] BSTR WhipPath);
[id(4), helpstring("method SetLabel")] HRESULT SetLabel([in] BSTR IdentLabel, [in] BSTR ExtraLabel);
[id(5), helpstring("method SetColor")] HRESULT SetColor([in] BSTR IdentLabel, [in] ULONG rgb, [in, defaultvalue(0)] BYTE Alpha);
[id(8), helpstring("method SetLabelFont")] HRESULT SetLabelFont([in] BSTR FontName, [in] DOUBLE FontHeight, [in, defaultvalue(0)] DOUBLE FontHeightSymbols);
[id(9), helpstring("method SetLabelPosition")] HRESULT SetLabelPosition([in, defaultvalue(1)] BYTE LabelPos);
[propget, id(10), helpstring("method ContoursXML")] HRESULT ContoursXML([out, retval] BSTR* pVal);
[id(12), helpstring("method SetLayers")] HRESULT SetLayers([in] BSTR reContouren, [in] BSTR reLabels);
[propget, id(14), helpstring("property AddSymbol")] HRESULT AddSymbol([in] DOUBLE dwgX, [in] DOUBLE dwgY, BSTR symbolName, [out, retval] IUnknown** pVal);
[id(15), helpstring("method DefineSymbol")] HRESULT DefineSymbol([in] BSTR symbolName, [in] VARIANT EPlotStream);
[id(16), helpstring("method DefineBitmapSymbol")] HRESULT DefineBitmapSymbol([in] BSTR symbolName, [in] BSTR symbolPath, [in] DOUBLE height);
[propget, id(17), helpstring("property Contour")] HRESULT Contour([in] BSTR IdentLabel, [out, retval] IUnknown** pVal);
[id(18), helpstring("method SetFilterLayers")] HRESULT SetFilterLayers([in] BSTR reLayers);
[propget, id(19), helpstring("property hintScale")] HRESULT hintScale([out, retval] DOUBLE* pVal);
[propput, id(19), helpstring("property hintScale")] HRESULT hintScale([in] DOUBLE newVal);
[propget, id(20), helpstring("property FindInContour")] HRESULT FindInContour([in] DOUBLE dwgX, [in] DOUBLE dwgY, [out, retval] BSTR* pVal);
};
[
object,
uuid(FB9CAA9B-CA0A-4BF0-AA2C-47579BEFA214),
dual,
nonextensible,
helpstring("IWhip2PNG Interface"),
pointer_default(unique)
]
interface IWhip2PNG : IDispatch{
[id(1), helpstring("method Load")] HRESULT Load([in] BSTR WhipPath);
[id(2), helpstring("method SaveAsPng")] HRESULT SaveAsPNG([in] BSTR PNGPath);
[id(3), helpstring("method SaveAsWMF")] HRESULT SaveAsWMF([in] BSTR WMFPath);
[id(4), helpstring("method Find")] HRESULT Find([in] LONG findX, [in] LONG findY, [out, retval] BSTR* foundLabel);
[id(5), helpstring("method SetDimensions")] HRESULT SetDimensions([in] LONG sizeX,
[in] LONG sizeY, [in] LONG offsetX, [in] LONG offsetY, [in] DOUBLE dScale, [in, defaultvalue(0)] LONG lRotation);
[id(6), helpstring("method GetAsMap")] HRESULT GetAsMap( [out, retval] BSTR* AsMap);
// [id(7), helpstring("method FindCoords")] HRESULT FindCoords([in] LONG findX, [in] LONG findY, [out] VARIANT* dwgX, [out] VARIANT* dwgY);
[propget, id(8), helpstring("property AtlRegExp")] HRESULT AtlRegExp([in] BSTR RegExp, [in] BSTR TestExp, [out, retval] BSTR* pVal);
[id(9), helpstring("method TextAsPNG")] HRESULT TextAsPNG(BSTR Message, [out, retval] VARIANT *ImageData);
[id(10), helpstring("property GetAsPNG")] HRESULT GetAsPNG([out, retval] VARIANT *ImageData);
[id(11), helpstring("property GetAsTransGIF")] HRESULT GetAsTransGIF([out, retval] VARIANT *ImageData);
[id(12), helpstring("method LoadStream")] HRESULT LoadStream([in] VARIANT DWFStream);
[id(13), helpstring("method SetLayers")] HRESULT SetLayers([in] BSTR RegExp);
[propget, id(14), helpstring("property forceBW2")] HRESULT forceBW([out, retval] VARIANT_BOOL* pVal);
[propput, id(14), helpstring("property forceBW2")] HRESULT forceBW([in] VARIANT_BOOL newVal);
[propget, id(15), helpstring("property SLNKEvent")] HRESULT SLNKEvent([out, retval] ISLNKEvent** pVal);
[propget, id(16), helpstring("property paperColor")] HRESULT paperColor([out, retval] LONG* pVal);
[propput, id(16), helpstring("property paperColor")] HRESULT paperColor([in] LONG newVal);
[id(17), helpstring("method ReplaceColor")] HRESULT ReplaceColor([in] LONG paperColor, [in] LONG oldColor, [in] LONG newColor);
[propget, id(18), helpstring("property Maximize")] HRESULT Maximize([out, retval] VARIANT_BOOL* pVal);
[propput, id(18), helpstring("property Maximize")] HRESULT Maximize([in] VARIANT_BOOL newVal);
[propget, id(19), helpstring("property dwgScale")] HRESULT dwgScale([out, retval] DOUBLE* pVal);
[propput, id(19), helpstring("property dwgScale")] HRESULT dwgScale([in] DOUBLE newVal);
[propget, id(21), helpstring("property forceGray")] HRESULT forceGray([out, retval] VARIANT_BOOL* pVal);
[propput, id(21), helpstring("property forceGray")] HRESULT forceGray([in] VARIANT_BOOL newVal);
};
[
object,
uuid(68FBB9BF-FD4C-42D4-9670-459CCF7480BE),
dual,
nonextensible,
helpstring("IAbout Interface"),
pointer_default(unique)
]
interface IAbout : IDispatch{
[propget, id(1), helpstring("property All")] HRESULT All([out, retval] BSTR* pVal);
[propget, id(2), helpstring("property DLLPath")] HRESULT DLLPath([out, retval] BSTR* pVal);
[propget, id(3), helpstring("property Buildtime")] HRESULT Buildtime([out, retval] BSTR* pVal);
[propget, id(4), helpstring("property UserContext")] HRESULT UserContext([out, retval] BSTR* pVal);
[propget, id(5), helpstring("property VersionMajor")] HRESULT VersionMajor([out, retval] LONG* pVal);
[propget, id(6), helpstring("property VersionMinor")] HRESULT VersionMinor([out, retval] LONG* pVal);
[propget, id(7), helpstring("property VersionString")] HRESULT VersionString([out, retval] BSTR* pVal);
};
[
object,
uuid(99560CEF-C2CE-4CB3-AE7F-6AD6CE72CC97),
dual,
nonextensible,
helpstring("IEPlotSection Interface"),
pointer_default(unique)
]
interface IEPlotSection : IDispatch{
// [id(1), helpstring("method Init"),hidden] HRESULT Init([in] long *ptr);
// [id(2), helpstring("method GetEPlotSection"),hidden] HRESULT GetEPlotSection([out] long **ptr);
[propget, helpstring("My Parent")] HRESULT Parent([out, retval] IEPlotSections **ppParent);
[propget, id(3), helpstring("property Name")] HRESULT Name([out, retval] BSTR* pVal);
[propget, id(4), helpstring("property Title")] HRESULT Title([out, retval] BSTR* pVal);
[local]
[id(6), helpstring("method Read")] HRESULT
Read([out, size_is(cb), length_is(*pcbRead)]void *pv, [in]ULONG cb, [out]ULONG *pcbRead);
[local]
[id(7), helpstring("method Write")] HRESULT
Write([in, size_is(cb)] const void *pv, [in]ULONG cb, [out]ULONG *pcbWritten);
[propget, id(8), helpstring("property PaperColor")] HRESULT PaperColor([out, retval] ULONG* pVal);
[id(9), helpstring("method Open")] HRESULT Open([in]BOOL bForWrite);
[id(10), helpstring("method Close")] HRESULT Close(void);
[propget, id(11), helpstring("property SourceDescription")] HRESULT SourceDescription([out, retval] BSTR* pVal);
[propget, id(12), helpstring("property PropertiesXML")] HRESULT PropertiesXML([out, retval] BSTR* pVal);
[propget, id(13), helpstring("property PaperClipWidth")] HRESULT PaperClipWidth([out, retval] DOUBLE* pVal);
[propget, id(14), helpstring("property EPlotSectionImpl"), hidden] HRESULT EPlotSectionImpl([out, retval] /*CEPlotSectionImpl*/BYTE ** pVal);
[propput, id(14), helpstring("property EPlotSectionImpl"), hidden] HRESULT EPlotSectionImpl([in] /*CEPlotSectionImpl*/ BYTE * newVal);
};
[
object,
uuid(32292BE4-2ACB-4BDD-AF3C-DF91ADD4EF36),
dual,
nonextensible,
helpstring("IEPlotSections Interface"),
pointer_default(unique)
]
interface IEPlotSections : IDispatch{
[propget, helpstring("My Parent")] HRESULT Parent([out, retval] IDWFFile **ppParent);
[propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] LONG* pVal);
[propget, id(2), helpstring("property Item")] HRESULT Item([in] LONG i, [out, retval] IDispatch** pVal);
};
[
object,
uuid(BA3EEF9F-BEB1-4478-870B-3E274AF8506A),
dual,
nonextensible,
helpstring("ISLNKEvent Interface"),
pointer_default(unique)
]
interface ISLNKEvent : IDispatch{
[propget, id(1), helpstring("property DwgX")] HRESULT DwgX([out, retval] DOUBLE* pVal);
[propput, id(1), helpstring("property DwgX")] HRESULT DwgX([in] DOUBLE newVal);
[propget, id(2), helpstring("property DwgY")] HRESULT DwgY([out, retval] DOUBLE* pVal);
[propput, id(2), helpstring("property DwgY")] HRESULT DwgY([in] DOUBLE newVal);
[propget, id(7), helpstring("property ContourLabel")] HRESULT ContourLabel([out, retval] BSTR* pVal);
[propput, id(7), helpstring("property ContourLabel")] HRESULT ContourLabel([in] BSTR newVal);
[propget, id(8), helpstring("property ContourLayer")] HRESULT ContourLayer([out, retval] BSTR* pVal);
[propput, id(8), helpstring("property ContourLayer")] HRESULT ContourLayer([in] BSTR newVal);
[propget, id(9), helpstring("property TextLabel")] HRESULT TextLabel([out, retval] BSTR* pVal);
[propput, id(9), helpstring("property TextLabel")] HRESULT TextLabel([in] BSTR newVal);
[propget, id(10), helpstring("property TextLayer")] HRESULT TextLayer([out, retval] BSTR* pVal);
[propput, id(10), helpstring("property TextLayer")] HRESULT TextLayer([in] BSTR newVal);
[propget, id(11), helpstring("property found")] HRESULT found([out, retval] IDWGPoint** pVal);
[propget, id(12), helpstring("property dwgExtents")] HRESULT dwgExtents([out, retval] IBoundingBox** pVal);
[propget, id(13), helpstring("property viewExtents")] HRESULT viewExtents([out, retval] IBoundingBox** pVal);
};
[
object,
uuid(102FE53F-3C9A-47C6-9BAD-1434838FF53D),
dual,
nonextensible,
helpstring("IBoundingBox Interface"),
pointer_default(unique)
]
interface IBoundingBox : IDispatch{
[propget, id(1), helpstring("property min")] HRESULT min([out, retval] IDWGPoint** pVal);
[propget, id(2), helpstring("property max")] HRESULT max([out, retval] IDWGPoint** pVal);
};
[
object,
uuid(C5678016-EF7B-4476-966E-8AFD4514DB2A),
dual,
nonextensible,
helpstring("IDWGPoint Interface"),
pointer_default(unique)
]
interface IDWGPoint : IDispatch{
[propget, id(1), helpstring("property DwgX")] HRESULT DwgX([out, retval] DOUBLE* pVal);
[propput, id(1), helpstring("property DwgX")] HRESULT DwgX([in] DOUBLE newVal);
[propget, id(2), helpstring("property DwgY")] HRESULT DwgY([out, retval] DOUBLE* pVal);
[propput, id(2), helpstring("property DwgY")] HRESULT DwgY([in] DOUBLE newVal);
};
[
object,
uuid(A505B2D9-4D41-411F-B2A7-B297AA399278),
dual,
nonextensible,
helpstring("ISLNKContour Interface"),
pointer_default(unique)
]
interface ISLNKContour : IDispatch{
[id(2), helpstring("method SetColor")] HRESULT SetColor([in] ULONG rgb, [in, defaultvalue(0)] BYTE Alpha);
[id(3), helpstring("method SetUrl")] HRESULT SetUrl([in] BSTR Url, [in] BSTR FriendlyName);
[propget, id(5), helpstring("property Area")] HRESULT Area([out, retval] DOUBLE* pVal);
[propget, id(6), helpstring("property Extents")] HRESULT Extents([out, retval] IBoundingBox ** pVal);
[propget, id(7), helpstring("property Center")] HRESULT Center([out, retval] IDWGPoint** pVal);
[propget, id(8), helpstring("property Key")] HRESULT Key([out, retval] BSTR* pVal);
[propput, id(8), helpstring("property Key")] HRESULT Key([in] BSTR newVal);
[propget, id(9), helpstring("property Label")] HRESULT Label([out, retval] BSTR* pVal);
[propput, id(9), helpstring("property Label")] HRESULT Label([in] BSTR newVal);
[propget, id(10), helpstring("property Hatch")] HRESULT Hatch([out, retval] BYTE* pVal);
[propput, id(10), helpstring("property Hatch")] HRESULT Hatch([in] BYTE newVal);
};
[
object,
uuid(FE75E3AB-5047-4CB6-A910-FF3156CB7946),
dual,
nonextensible,
helpstring("ISLNKSymbol Interface"),
pointer_default(unique)
]
interface ISLNKSymbol : IDispatch{
[propget, id(2), helpstring("property Scale")] HRESULT Scale([out, retval] DOUBLE* pVal);
[propput, id(2), helpstring("property Scale")] HRESULT Scale([in] DOUBLE newVal);
[propget, id(3), helpstring("property Rotation")] HRESULT Rotation([out, retval] LONG* pVal);
[propput, id(3), helpstring("property Rotation")] HRESULT Rotation([in] LONG newVal);
[propget, id(4), helpstring("property Contour")] HRESULT Contour([out, retval] IUnknown** pVal);
};
[
object,
uuid(FC848365-3C85-490D-8CC0-DB66D73FA34E),
dual,
nonextensible,
helpstring("IOptions Interface"),
pointer_default(unique)
]
interface IOptions : IDispatch{
[id(1), helpstring("method SetOption")] HRESULT SetOption([in] BSTR optionName, VARIANT OptionValue);
};
[
uuid(B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8),
version(1.0),
helpstring("SLNKDWF 1.0 Type Library")
]
library SLNKDWFLib
{
importlib("stdole2.tlb");
[
uuid(BE2BCD58-4971-49E6-9A70-CDDD5C01224D),
helpstring("DWFFile Class")
]
coclass myDWFFile
{
[default] interface IDWFFile;
};
[
uuid(C2632BD5-3157-45A6-8FFC-57063FF2B169),
helpstring("WhipFile Class")
]
coclass WhipFile
{
[default] interface IWhipFile;
};
[
uuid(783AC7F0-E6E1-4CE1-A38B-FA047D44DC1C),
helpstring("Whip2PNG Class")
]
coclass Whip2PNG
{
[default] interface IWhip2PNG;
};
[
uuid(2BA64B82-1A96-4F15-9815-40B291B505EB),
helpstring("About Class")
]
coclass About
{
[default] interface IAbout;
};
[
uuid(F2599AE6-8A08-4B5E-9C68-BD975229F0D1),
helpstring("EPlotSection Class"),
noncreatable
]
coclass EPlotSection
{
[default] interface IEPlotSection;
};
[
uuid(7B2E7661-9B9A-4217-A19E-745EFFF8E86D),
helpstring("EPlotSections Class"),
noncreatable
]
coclass EPlotSections
{
[default] interface IEPlotSections;
};
[
uuid(F7226C2D-B5C7-4C72-AA43-6D5013EF7C96),
helpstring("SLNKEvent Class"),
noncreatable
]
coclass SLNKEvent
{
[default] interface ISLNKEvent;
};
[
uuid(FCEF1E56-36FF-4F66-BEA5-FD08D860524F),
helpstring("BoundingBox Class"),
noncreatable
]
coclass BoundingBox
{
[default] interface IBoundingBox;
};
[
uuid(96301A8D-1DC9-4900-B89D-C745C4CAEFF4),
helpstring("DWGPoint Class"),
noncreatable
]
coclass DWGPoint
{
[default] interface IDWGPoint;
};
[
uuid(476C0F28-5860-485D-BEBD-D03F68E1C930),
helpstring("SLNKContour Class"),
noncreatable
]
coclass SLNKContour
{
[default] interface ISLNKContour;
};
[
uuid(8CEBC89F-658A-49C8-96E4-852FFFA9B10F),
helpstring("SLNKSymbol Class"),
noncreatable
]
coclass SLNKSymbol
{
[default] interface ISLNKSymbol;
};
[
uuid(168678A9-6FA7-49C3-B839-DFDF07E0A79A),
helpstring("Options Class")
]
coclass Options
{
[default] interface IOptions;
};
};

11
SlnkDWFCom/SLNKDWF.rgs Normal file
View File

@@ -0,0 +1,11 @@
HKCR
{
NoRemove AppID
{
'%APPID%' = s 'SLNKDWF'
'SLNKDWF.DLL'
{
val AppID = s '%APPID%'
}
}
}

533
SlnkDWFCom/SLNKDWF.vcproj Normal file
View File

@@ -0,0 +1,533 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8,00"
Name="SLNKDWFCom"
ProjectGUID="{7F9F1060-C14D-4DD5-91D3-FA7263FECF5E}"
RootNamespace="SLNKDWF"
Keyword="AtlProj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="Debug"
IntermediateDirectory="Debug"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC70.vsprops"
UseOfATL="1"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="false"
TargetEnvironment="1"
GenerateStublessProxies="true"
TypeLibraryName="$(IntDir)/SLNKDWF.tlb"
HeaderFileName="SLNKDWF.h"
DLLDataFileName=""
InterfaceIdentifierFileName="SLNKDWF_i.c"
ProxyFileName="SLNKDWF_p.c"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="d:\library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;..\SlnkDWFImpl"
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;_USRDLL;_MERGE_PROXYSTUB;_CRT_SECURE_NO_DEPRECATE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
TreatWChar_tAsBuiltInType="false"
UsePrecompiledHeader="2"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"
AdditionalIncludeDirectories="$(IntDir)"
/>
<Tool
Name="VCPreLinkEventTool"
Description="Unload IIS..."
CommandLine="UnloadIIS.bat"
/>
<Tool
Name="VCLinkerTool"
IgnoreImportLibrary="true"
AdditionalDependencies="..\SlnkdwfImpl\DebugRW\SLNKDWFStaticRW.lib Secur32.lib"
OutputFile="c:\SLNKDWF.dll"
LinkIncremental="2"
AdditionalLibraryDirectories="d:\Library\Dwf702\develop\global\lib\static\debug\vc8.0"
IgnoreDefaultLibraryNames=""
ModuleDefinitionFile=".\SLNKDWF.def"
GenerateDebugInformation="true"
GenerateMapFile="false"
SubSystem="2"
ImportLibrary="$(OutDir)/SLNKDWF.lib"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
Description="Performing registration"
CommandLine="regsvr32 /s /c &quot;$(TargetPath)&quot;"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="Release"
IntermediateDirectory="Release"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC70.vsprops"
UseOfATL="1"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="false"
TargetEnvironment="1"
GenerateStublessProxies="true"
TypeLibraryName="$(IntDir)/SLNKDWF.tlb"
HeaderFileName="SLNKDWF.h"
DLLDataFileName=""
InterfaceIdentifierFileName="SLNKDWF_i.c"
ProxyFileName="SLNKDWF_p.c"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="d:\library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;..\SlnkDWFImpl"
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;_USRDLL;_MERGE_PROXYSTUB;_CRT_SECURE_NO_DEPRECATE"
GeneratePreprocessedFile="0"
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
TreatWChar_tAsBuiltInType="false"
UsePrecompiledHeader="2"
AssemblerOutput="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1033"
AdditionalIncludeDirectories="$(IntDir)"
/>
<Tool
Name="VCPreLinkEventTool"
Description="Unloading IIS..."
CommandLine="unloadIIS.bat"
/>
<Tool
Name="VCLinkerTool"
IgnoreImportLibrary="true"
AdditionalDependencies="..\SlnkdwfImpl\ReleaseRW\SLNKDWFStaticRW.lib Secur32.lib"
OutputFile="c:\SLNKDWF.dll"
LinkIncremental="1"
AdditionalLibraryDirectories="d:\library\Dwf702\develop\global\lib\static\release\vc8.0;.\CxImage\"
ModuleDefinitionFile=".\SLNKDWF.def"
GenerateDebugInformation="false"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
LinkTimeCodeGeneration="1"
ImportLibrary="$(OutDir)/FCLTDWF.lib"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
Description="Performing registration"
CommandLine="regsvr32 /s /c &quot;$(TargetPath)&quot;"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
>
<File
RelativePath="About.cpp"
>
</File>
<File
RelativePath="BoundingBox.cpp"
>
</File>
<File
RelativePath=".\dlldatax.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
</File>
<File
RelativePath="DWFFile.cpp"
>
</File>
<File
RelativePath="DWGPoint.cpp"
>
</File>
<File
RelativePath="EPlotSections.cpp"
>
</File>
<File
RelativePath="Metafile.cpp"
>
</File>
<File
RelativePath="myEPlotSection.cpp"
>
</File>
<File
RelativePath=".\Options.cpp"
>
</File>
<File
RelativePath=".\SLNKContour.cpp"
>
</File>
<File
RelativePath="SLNKDWF.cpp"
>
</File>
<File
RelativePath="SLNKDWF.def"
>
</File>
<File
RelativePath="SLNKDWF.idl"
>
</File>
<File
RelativePath="SLNKEvent.cpp"
>
</File>
<File
RelativePath="SLNKSymbol.cpp"
>
</File>
<File
RelativePath=".\SLNKSymbolDefImpl.cpp"
>
</File>
<File
RelativePath=".\SLNKSymbolImpl.cpp"
>
</File>
<File
RelativePath="stdafx.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
</File>
<File
RelativePath="Whip2PNG.cpp"
>
</File>
<File
RelativePath="WhipFile.cpp"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc"
>
<File
RelativePath="About.h"
>
</File>
<File
RelativePath="About.rgs"
>
</File>
<File
RelativePath="ASPObject.h"
>
</File>
<File
RelativePath="ASPObject.rgs"
>
</File>
<File
RelativePath="BoundingBox.h"
>
</File>
<File
RelativePath="BoundingBox.rgs"
>
</File>
<File
RelativePath="dlldatax.h"
>
</File>
<File
RelativePath="DWFFile.h"
>
</File>
<File
RelativePath="DWGPoint.h"
>
</File>
<File
RelativePath="DWGPoint.rgs"
>
</File>
<File
RelativePath="EPlotSection.rgs"
>
</File>
<File
RelativePath="EPlotSections.h"
>
</File>
<File
RelativePath="EPlotSections.rgs"
>
</File>
<File
RelativePath="Jglutil.h"
>
</File>
<File
RelativePath="myControl.rgs"
>
</File>
<File
RelativePath="myEPlotSection.h"
>
</File>
<File
RelativePath="Resource.h"
>
</File>
<File
RelativePath=".\SLNKContour.h"
>
</File>
<File
RelativePath="SLNKDWF.rgs"
>
</File>
<File
RelativePath="SLNKDWFVersion.h"
>
</File>
<File
RelativePath="SLNKEvent.h"
>
</File>
<File
RelativePath="SLNKEvent.rgs"
>
</File>
<File
RelativePath="stdafx.h"
>
</File>
<File
RelativePath="Whip2DC.h"
>
</File>
<File
RelativePath="Whip2DC.rgs"
>
</File>
<File
RelativePath="Whip2DCState.h"
>
</File>
<File
RelativePath="Whip2PNG.h"
>
</File>
<File
RelativePath="WhipFile.h"
>
</File>
<File
RelativePath="WriterTest.h"
>
</File>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
>
<File
RelativePath="DWFFile.rgs"
>
</File>
<File
RelativePath=".\slnkcont.bin"
>
</File>
<File
RelativePath=".\SLNKContour.rgs"
>
</File>
<File
RelativePath="SLNKdwf.rc"
>
</File>
<File
RelativePath="Whip2PNG.rgs"
>
</File>
<File
RelativePath="WhipFile.rgs"
>
</File>
</Filter>
</Filter>
<Filter
Name="Generated Files"
SourceControlFiles="false"
>
<File
RelativePath="SLNKDWF_i.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -0,0 +1,18 @@
// Zorg dat versies alfabetisch altijd op elkaar volgen!
#define SLNK_MAJOR_VERSION 2
#define SLNK_MINOR_VERSION 00
#define SLNK_BUILD_VERSION 0
// Define resource strings
#define ECHO(a) #a
#define STRINGIZE_SLNK_BUILD(major, minor, build) ECHO(major) "," ECHO(minor) ",0," ECHO(build)
#define STRINGIZE_SLNK_FULL(major, minor) ECHO(major) "." ECHO(minor)
// Deze wordt gebruikt in SLNKDWF.RC2 en eindigt in Version Tab van de properties
// Daar conformeren we aan de standaard(?)
#define SLNK_BUILDVERSION STRINGIZE_SLNK_BUILD(SLNK_MAJOR_VERSION, SLNK_MINOR_VERSION, SLNK_BUILD_VERSION)
// Deze wordt in splashscherm getoond en in About-scherm
// Bovendien wordt DonShowSplashVersion hiervan afgeleid
// Ergo: Voor de eenvoud niet de BUILD_VERSION tonen aan eindgebruikers
#define SLNK_FULLVERSION STRINGIZE_SLNK_FULL(SLNK_MAJOR_VERSION, SLNK_MINOR_VERSION)

95
SlnkDWFCom/SLNKEvent.cpp Normal file
View File

@@ -0,0 +1,95 @@
// SLNKEvent.cpp : Implementation of CSLNKEvent
#include "stdafx.h"
#include "SLNKEvent.h"
// CSLNKEvent
STDMETHODIMP CSLNKEvent::get_DwgX(DOUBLE* pVal)
{
(*pVal) = m_DwgX;
return S_OK;
}
STDMETHODIMP CSLNKEvent::put_DwgX(DOUBLE newVal)
{
m_DwgX = newVal;
return S_OK;
}
STDMETHODIMP CSLNKEvent::get_DwgY(DOUBLE* pVal)
{
(*pVal) = m_DwgY;
return S_OK;
}
STDMETHODIMP CSLNKEvent::put_DwgY(DOUBLE newVal)
{
m_DwgY = newVal;
return S_OK;
}
STDMETHODIMP CSLNKEvent::get_ContourLabel(BSTR* pVal)
{
CComBSTR bstrString(m_ContourLabel);
return bstrString.CopyTo(pVal);
}
STDMETHODIMP CSLNKEvent::put_ContourLabel(BSTR newVal)
{
m_ContourLabel = newVal;
return S_OK;
}
STDMETHODIMP CSLNKEvent::get_ContourLayer(BSTR* pVal)
{
CComBSTR bstrString(m_ContourLayer);
return bstrString.CopyTo(pVal);
}
STDMETHODIMP CSLNKEvent::put_ContourLayer(BSTR newVal)
{
m_ContourLayer = newVal;
return S_OK;
}
STDMETHODIMP CSLNKEvent::get_TextLabel(BSTR* pVal)
{
CComBSTR bstrString(m_TextLabel);
return bstrString.CopyTo(pVal);
}
STDMETHODIMP CSLNKEvent::put_TextLabel(BSTR newVal)
{
m_TextLabel = newVal;
return S_OK;
}
STDMETHODIMP CSLNKEvent::get_TextLayer(BSTR* pVal)
{
CComBSTR bstrString(m_TextLayer);
return bstrString.CopyTo(pVal);
}
STDMETHODIMP CSLNKEvent::put_TextLayer(BSTR newVal)
{
m_TextLayer = newVal;
return S_OK;
}
STDMETHODIMP CSLNKEvent::get_found(IDWGPoint** pVal)
{
return S_OK;
}
STDMETHODIMP CSLNKEvent::get_dwgExtents(IBoundingBox** pVal)
{
return m_dwgBounding->QueryInterface(IID_IBoundingBox, (void**)pVal);
}
STDMETHODIMP CSLNKEvent::get_viewExtents(IBoundingBox** pVal)
{
return m_viewBounding->QueryInterface(IID_IBoundingBox, (void**)pVal);
}

93
SlnkDWFCom/SLNKEvent.h Normal file
View File

@@ -0,0 +1,93 @@
// SLNKEvent.h : Declaration of the CSLNKEvent
#pragma once
#include "resource.h" // main symbols
#include "SLNKDWF.h"
#include "BoundingBox.h"
// CSLNKEvent
class ATL_NO_VTABLE CSLNKEvent :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSLNKEvent, &CLSID_SLNKEvent>,
public IDispatchImpl<ISLNKEvent, &IID_ISLNKEvent, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CSLNKEvent()
{
}
//REMOVED DECLARE_REGISTRY_RESOURCEID(IDR_SLNKEVENT)
BEGIN_COM_MAP(CSLNKEvent)
COM_INTERFACE_ENTRY(ISLNKEvent)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
//
// Maak object m_dwgBounding
//
CComObject<CBoundingBox> *pBoundingBox;
HRESULT hr = CComObject<CBoundingBox>::CreateInstance(&pBoundingBox);
if(FAILED(hr)) return hr;
pBoundingBox->AddRef();
hr = pBoundingBox->QueryInterface(IID_IBoundingBox, (void **)&m_dwgBounding);
pBoundingBox->Release();
if(FAILED(hr)) return hr;
//
// Maak object m_viewBounding
//
hr = CComObject<CBoundingBox>::CreateInstance(&pBoundingBox);
if(FAILED(hr)) return hr;
pBoundingBox->AddRef();
hr = pBoundingBox->QueryInterface(IID_IBoundingBox, (void **)&m_viewBounding);
pBoundingBox->Release();
if(FAILED(hr)) return hr;
return S_OK;
}
void FinalRelease()
{
}
private:
CComQIPtr<IBoundingBox> m_dwgBounding;
CComQIPtr<IBoundingBox> m_viewBounding;
double m_DwgX, m_DwgY;
double m_minDwgX, m_maxDwgY;
double m_maxDwgX, m_minDwgY;
CString m_ContourLabel, m_ContourLayer;
CString m_TextLabel, m_TextLayer;
public:
STDMETHOD(get_DwgX)(DOUBLE* pVal);
STDMETHOD(put_DwgX)(DOUBLE newVal);
STDMETHOD(get_DwgY)(DOUBLE* pVal);
STDMETHOD(put_DwgY)(DOUBLE newVal);
STDMETHOD(get_ContourLabel)(BSTR* pVal);
STDMETHOD(put_ContourLabel)(BSTR newVal);
STDMETHOD(get_ContourLayer)(BSTR* pVal);
STDMETHOD(put_ContourLayer)(BSTR newVal);
STDMETHOD(get_TextLabel)(BSTR* pVal);
STDMETHOD(put_TextLabel)(BSTR newVal);
STDMETHOD(get_TextLayer)(BSTR* pVal);
STDMETHOD(put_TextLayer)(BSTR newVal);
STDMETHOD(get_found)(IDWGPoint** pVal);
STDMETHOD(get_dwgExtents)(IBoundingBox** pVal);
STDMETHOD(get_viewExtents)(IBoundingBox** pVal);
};
//REMOVED OBJECT_ENTRY_AUTO(__uuidof(SLNKEvent), CSLNKEvent)

27
SlnkDWFCom/SLNKEvent.rgs Normal file
View File

@@ -0,0 +1,27 @@
HKCR
{
SLNKDWF.SLNKEvent.1 = s 'SLNKEvent Class'
{
CLSID = s '{F7226C2D-B5C7-4C72-AA43-6D5013EF7C96}'
}
SLNKDWF.SLNKEvent = s 'SLNKEvent Class'
{
CLSID = s '{F7226C2D-B5C7-4C72-AA43-6D5013EF7C96}'
CurVer = s 'SLNKDWF.SLNKEvent.1'
}
NoRemove CLSID
{
ForceRemove {F7226C2D-B5C7-4C72-AA43-6D5013EF7C96} = s 'SLNKEvent Class'
{
ProgID = s 'SLNKDWF.SLNKEvent.1'
VersionIndependentProgID = s 'SLNKDWF.SLNKEvent'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '%APPID%'
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

75
SlnkDWFCom/SLNKSymbol.cpp Normal file
View File

@@ -0,0 +1,75 @@
// SLNKSymbol.cpp : Implementation of CSLNKSymbol
#include "stdafx.h"
#include "SLNKSymbol.h"
#include "SLNKContour.h"
// CSLNKSymbol
STDMETHODIMP CSLNKSymbol::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IWhipFile
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
void CSLNKSymbol::SetImpl(CSLNKSymbolImpl * pSLNKSymbol)
{
m_SLNKSymbol = pSLNKSymbol;
}
STDMETHODIMP CSLNKSymbol::get_Scale(DOUBLE* pVal)
{
(*pVal) = m_SLNKSymbol->m_Scale;
return S_OK;
}
STDMETHODIMP CSLNKSymbol::put_Scale(DOUBLE newVal)
{
m_SLNKSymbol->m_Scale = newVal;
return S_OK;
}
STDMETHODIMP CSLNKSymbol::get_Rotation(LONG* pVal)
{
(*pVal) = m_SLNKSymbol->m_Rotation;
return S_OK;
}
STDMETHODIMP CSLNKSymbol::put_Rotation(LONG newVal)
{
long rotation = (newVal%360+360)%360; // Normaliseren
if (rotation%90 != 0)
return myAtlReportError (GetObjectCLSID(), "ERROR Symbol rotation must be 0/90/180/270.");
m_SLNKSymbol->m_Rotation = newVal;
return S_OK;
}
STDMETHODIMP CSLNKSymbol::get_Contour(IUnknown** pVal)
{
CSLNKContourImpl *contour= &m_SLNKSymbol->m_SLNKContour;
CComObject<CSLNKContour> *theContour;
HRESULT hr = CComObject<CSLNKContour>::CreateInstance(&theContour);
if(FAILED(hr)) return hr;
theContour->AddRef();
hr = theContour->QueryInterface(IID_ISLNKContour, (void **)pVal);
if(FAILED(hr)) return hr;
theContour->SetParent(m_parent_iWhipFile); // Zelfde parent maar
theContour->Release();
theContour->SetImpl(contour); // Heel belangrijk: zet de implementatie waar we een interface op bieden
return S_OK;
}

26
SlnkDWFCom/SLNKSymbol.rgs Normal file
View File

@@ -0,0 +1,26 @@
HKCR
{
SLNKDWFCom.SLNKSymbol.1 = s 'SLNKSymbol Class'
{
CLSID = s '{8CEBC89F-658A-49C8-96E4-852FFFA9B10F}'
}
SLNKDWFCom.SLNKSymbol = s 'SLNKSymbol Class'
{
CLSID = s '{8CEBC89F-658A-49C8-96E4-852FFFA9B10F}'
CurVer = s 'SLNKDWFCom.SLNKSymbol.1'
}
NoRemove CLSID
{
ForceRemove {8CEBC89F-658A-49C8-96E4-852FFFA9B10F} = s 'SLNKSymbol Class'
{
ProgID = s 'SLNKDWFCom.SLNKSymbol.1'
VersionIndependentProgID = s 'SLNKDWFCom.SLNKSymbol'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

View File

@@ -0,0 +1,427 @@
#include "StdAfx.h"
#include "myEPlotSection.h"
#include "SLNKSymbolDefImpl.h"
#include "../SLNKDWFImpl/CxImage\CxImage\ximage.h"
#include "../SLNKDWFImpl/Whip2DCImpl.h"
#include "SLNKContourImpl.h"
#include <math.h>
// Bij EPlotsection (external DWF)
CSLNKSymbolDefinition::CSLNKSymbolDefinition(CComQIPtr<IEPlotSection> EPlotSection)
{
m_iEPlotSection = EPlotSection;
CEPlotSectionImpl *epli;
m_iEPlotSection->get_EPlotSectionImpl((BYTE **)&epli);
m_wtFile.set_eplotsection(epli);
m_AsBitmap = NULL;
m_BuiltIn = false;
calculateBoundary();
};
// Bij Contour list (builtin symbol)
CSLNKSymbolDefinition::CSLNKSymbolDefinition(int count, WT_Logical_Point const *points)
{
m_BuiltIn = true;
m_wtFile.set_eplotsection(NULL);
this->m_dwgScale = 1.0;
m_AsBitmap = NULL;
m_BoundingContour.set(count, points, false);
m_Origin = CSLNKContourImpl::Centroid(m_BoundingContour);
};
// By bitmap
CSLNKSymbolDefinition::CSLNKSymbolDefinition(CString const filepath, double const height)
{
m_wtFile.set_eplotsection(NULL);
m_AsBitmap = NULL;
m_BuiltIn = false;
CxImage img;
if (!img.Load(filepath))
{ // Rood kruisje?
img.Create(32, 32, 24);
img.Clear(255); // Wit
img.DrawLine(0,31,0,31,RGB(255,0,0));
img.DrawLine(0,31,31,0,RGB(255,0,0));
};
BYTE *m_Buffer=NULL;
long m_size;
img.Encode(m_Buffer, m_size, CXIMAGE_FORMAT_PNG);
this->m_dwgScale = (double)img.GetHeight()/ height;
//myDoTRACE("\nCreates symbol bitmap (%d,%d)->PNG %d byte (W2D was %d)", pixeldx,pixeldy,m_size, epli->size());
m_AsBitmap = new
WT_PNG_Group4_Image(
(int)img.GetHeight(), /*rows*/
(int)img.GetWidth(), /*cols*/
WT_PNG_Group4_Image::PNG,
3,
NULL,
m_size,
(WT_Byte*)m_Buffer,
WT_Logical_Point(0,0),
WT_Logical_Point(img.GetWidth(),img.GetHeight()),
WD_False); // Geen copy, we verwijderen zelf expliciet
WT_Logical_Point pts4[4] = { WT_Logical_Point(0, 0),
WT_Logical_Point(img.GetWidth(), 0),
WT_Logical_Point(img.GetWidth(), img.GetHeight()),
WT_Logical_Point(0, img.GetHeight())};
m_BoundingContour.set(4, pts4, true);
m_Origin = CSLNKContourImpl::Centroid(m_BoundingContour);
};
CSLNKSymbolDefinition::~CSLNKSymbolDefinition(void)
{
if (m_AsBitmap)
{
CxImage xx;xx.FreeMemory((void *)m_AsBitmap->data()); // We hebben een copy gedaan dus dit mag/moet
delete m_AsBitmap;
}
}
// Bepaal een bounding contour van ons symbool. Die is eventueel later leuk te gebruiken voor een HitTest
// v0: bounding box
// v1: bounding octagon
// Algoritm: search google for Bounding Octagon
// http://geometryalgorithms.com/Archive/algorithm_0107/algorithm_0107.htm
// (v2: bounding convex hull waarschijnlijk overkill)
#include <assert.h>
WT_Result CSLNKSymbolDefinition::calculateBoundary ()
{
WT_Result result;
m_wtFile.set_file_mode(WT_File::File_Read);
result = m_wtFile.open();
if (result != WT_Result::Success)
return result;
// Door de enorm grote dwf-coordinaten lopen we een integer overflow risico tijdens
// onze bepaling van Pmin en Pmax (die min en max van x+y bepalen) en in theorie
// ook van Qmin en Qmax (die over het verschil x-y gaan) hoewel dat in de praktijk rond 0 zal liggen
// Daarom rekenen we systematisch met de helft. Dat moet risico's voorkomen en de afrondfout nemen
// we voor lief
// Merk op dat de resulterende Octagon kleiner is dan de de bounding box, die zeker binnen de coordinaat
// ruimte valt dus voor het eindresultaat is er geen risico. Alleen oppassen voor tussenresultaten dus
// Ging concreet mis met 41610ev_symbols.dwf
WT_Integer32 Xmin, Xmax, Ymin, Ymax;
WT_Integer32 Pmin2, Pmax2, Qmin2, Qmax2;
// Signal invalid
Xmin = Ymin = Pmin2 = Qmin2 = INT_MAX;
Xmax = Ymax = Pmax2 = Qmax2 = INT_MIN;
BOOL ViewportDone = FALSE; // We doen alleen de eerste viewport.
// Gaf problemen bij symbolen die vanuit paperspace waren geexporteerd
// Do the actual reading.
while ((result = m_wtFile.process_next_object()) == WT_Result::Success)
{
//myTRACE("Attribute '%s'\n", wtFile->file_stats()->descriptions());
switch(m_wtFile.current_object()->object_type())
{
case WT_Object::Attribute:
{
const WT_Attribute *obj = (WT_Attribute *)m_wtFile.current_object();
if (obj->object_id() == WT_Object::Viewport_ID)
{
if (ViewportDone)
{
myTRACE("\nSkipping second viewport in symbol");
break;
}
ViewportDone = TRUE;
WT_Viewport *viewport = (WT_Viewport *)m_wtFile.current_object();
WT_Units symbolunits = viewport->viewport_units();
m_dwgScale = symbolunits.application_to_dwf_transform()(0,0); // Symbol's dScale
break;
}
break;
}
case WT_Object::Drawable:
{
WT_Drawable *obj = (WT_Drawable *)m_wtFile.current_object();
if (obj->object_id() != WT_Object::Origin_ID)// Belachelijk dat die Drawable is?
{
WT_Logical_Box bx = obj->bounds(&m_wtFile);
Xmin = min(Xmin, bx.minpt().m_x);
Ymin = min(Ymin, bx.minpt().m_y);
Xmax = max(Xmax, bx.maxpt().m_x);
Ymax = max(Ymax, bx.maxpt().m_y);
// Voor echte (deel)cirkels gaan we de diagonaal bounding box scherper berekenen
if (obj->object_id() == WT_Object::Outline_Ellipse_ID || obj->object_id() == WT_Object::Filled_Ellipse_ID)
{
WT_Ellipse *elp = (WT_Ellipse *)obj;
if (elp->minor() == elp->major()) // Anders te ingewikkeld
{ // Bepaal het ingeschreven vierkant van de cirkel
WT_Integer32 dr = myRound(elp->minor() / sqrt(2.0) + 0.5); // Altijd omhoog afronden
WT_Logical_Box bx2;
bx2.minpt() = WT_Logical_Point(elp->position().m_x - dr, elp->position().m_y - dr);
bx2.maxpt() = WT_Logical_Point(elp->position().m_x + dr, elp->position().m_y + dr);
// Houdt er wel rekening mee dat bij partiele cirkels het origineel scherper kan
// zijn omdat wij er geen rekening houden dat de cirkel misschien partieel is
Pmin2 = min(Pmin2, max(bx.minpt().m_x/2 + bx.minpt().m_y/2,bx2.minpt().m_x/2 + bx2.minpt().m_y/2)); // Linksonder
Qmax2 = max(Qmax2, min(bx.maxpt().m_x/2 - bx.minpt().m_y/2,bx2.maxpt().m_x/2 - bx2.minpt().m_y/2)); // Rechtsonder
Pmax2 = max(Pmax2, min(bx.maxpt().m_x/2 + bx.maxpt().m_y/2,bx2.maxpt().m_x/2 + bx2.maxpt().m_y/2)); // Rechtsboven
Qmin2 = min(Qmin2, max(bx.minpt().m_x/2 - bx.maxpt().m_y/2,bx2.minpt().m_x/2 - bx2.maxpt().m_y/2)); // Linksboven
break;
}
// else gewoon 'doorvallen' naar standaard Pmin2 etc.
}
// Voor WT_Pointset gebaseerde objecten kunnen we het ook wel beter
if (obj->object_id() == WT_Object::Polygon_ID ||
obj->object_id() == WT_Object::Polyline_ID ||
obj->object_id() == WT_Object::Polytriangle_ID)
{
WT_Point_Set *pts;
// Rechtstreekse cast naar (WT_Point_Set *) gaf memory violations?
switch (obj->object_id())
{
case WT_Object::Polygon_ID : pts = (WT_Polygon *)m_wtFile.current_object(); break;
case WT_Object::Polyline_ID : pts = (WT_Polyline *)m_wtFile.current_object(); break;
case WT_Object::Polytriangle_ID: pts = (WT_Polytriangle *)m_wtFile.current_object(); break;
}
for (int i=0;i<pts->count(); i++)
{
WT_Logical_Point &pt = pts->points()[i];
Pmin2 = min(Pmin2, pt.m_x/2 + pt.m_y/2); // Linksonder
Qmax2 = max(Qmax2, pt.m_x/2 - pt.m_y/2); // Rechtsonder
Pmax2 = max(Pmax2, pt.m_x/2 + pt.m_y/2); // Rechtsboven
Qmin2 = min(Qmin2, pt.m_x/2 - pt.m_y/2); // Linksboven
}
break; // we zijn wel klaar
}
Pmin2 = min(Pmin2, bx.minpt().m_x/2 + bx.minpt().m_y/2); // Linksonder
Qmax2 = max(Qmax2, bx.maxpt().m_x/2 - bx.minpt().m_y/2); // Rechtsonder
Pmax2 = max(Pmax2, bx.maxpt().m_x/2 + bx.maxpt().m_y/2); // Rechtsboven
Qmin2 = min(Qmin2, bx.minpt().m_x/2 - bx.maxpt().m_y/2); // Linksboven
}
}
break;
default:
//myTRACE("Skipping '%s'\n", wtFile->file_stats()->descriptions());
break;
}
}
// if (result == WT_Result::End_Of_DWF_Opcode_Found)
// dwfresult = DwfResult::Success;
m_wtFile.close();
// Rechthoek
// WT_Logical_Point pts1[4] = { WT_Logical_Point(Xmin, Ymin),
// WT_Logical_Point(Xmax, Ymin),
// WT_Logical_Point(Xmax, Ymax),
// WT_Logical_Point(Xmin, Ymax)};
m_BoundingBox = WT_Logical_Box(Xmin, Ymin, Xmax, Ymax);
// Diamant heeft overflow risico
// WT_Logical_Point pts2[4] = { WT_Logical_Point(Pmin2+Qmin2, Pmin2-Qmin2),
// WT_Logical_Point(Pmin2+Qmax2, Pmin2-Qmax2),
// WT_Logical_Point(Pmax2+Qmax2, Pmax2-Qmax2),
// WT_Logical_Point(Pmax2+Qmin2, Pmax2-Qmin2)};
// Octagon
// Expressievolgorde is telkens belangrijk om overflow te voorkomen
WT_Logical_Point pts3[8] = { WT_Logical_Point(Pmin2-Ymin+Pmin2, Ymin),
WT_Logical_Point(Qmax2+Ymin+Qmax2, Ymin),
WT_Logical_Point(Xmax, Xmax-Qmax2-Qmax2),
WT_Logical_Point(Xmax, Pmax2-Xmax+Pmax2),
WT_Logical_Point(Pmax2-Ymax+Pmax2, Ymax),
WT_Logical_Point(Qmin2+Ymax+Qmin2, Ymax),
WT_Logical_Point(Xmin, Xmin-Qmin2-Qmin2),
WT_Logical_Point(Xmin, Pmin2-Xmin+Pmin2)};
m_BoundingContour.set(sizeof(pts3)/sizeof(pts3[0]), pts3, true);
m_Origin = CSLNKContourImpl::Centroid(m_BoundingContour);
return result;
}
#ifdef NO_BITMAPPEREN
WT_Drawable *CSLNKSymbolDefinition::asBitmap(int pixeldx, int pixeldy, long paperColor)
{
if (m_AsBitmap)
{
// TODO: Wat als pixeldy != m_AsBitmap->rows()
// Dat dwfdx anders is is minder boeiend, dat verschaalt wel
WT_PNG_Group4_Image *newBitmap = new
WT_PNG_Group4_Image(
m_AsBitmap->rows(), /*rows*/
m_AsBitmap->columns(), /*cols*/
WT_PNG_Group4_Image::PNG,
3,
NULL,
m_AsBitmap->data_size(),
(WT_Byte *)m_AsBitmap->data(),
m_BoundingBox.minpt(),
m_BoundingBox.maxpt(),
WD_False); // Don't copy
m_AsBitmap = newBitmap;
return m_AsBitmap; // Dan zijn we rap klaar. Dat is onze winst
}
// Blijkbaar de eerste keer hier. Tijd om de bitmap te bakken
CWhip2DCImpl iWhip2DC;
HDC pDC = ::GetDC(0);
HDC myDC = CreateCompatibleDC(pDC);
//ReleaseDC(pDC);
CEPlotSectionImpl *epli = NULL;
m_iEPlotSection->get_EPlotSectionImpl((BYTE **)&epli);
iWhip2DC.Load(myDC, epli,
"", ".*",
myRound(pixeldx), myRound(pixeldy),
VARIANT_TRUE /*center*/, VARIANT_TRUE /*m_Maximize*/);
BITMAPINFO bmInfo;
memset(&bmInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
bmInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmInfo.bmiHeader.biWidth=pixeldx;
bmInfo.bmiHeader.biHeight=pixeldy;
bmInfo.bmiHeader.biPlanes=1;
bmInfo.bmiHeader.biCompression=BI_RGB; // Geen compressie
bmInfo.bmiHeader.biBitCount=24;
//create a new bitmap and select it in the memory dc
BYTE *pbase;
HBITMAP TmpBmp = CreateDIBSection(pDC, &bmInfo,DIB_RGB_COLORS,(void**)&pbase,0,0);
HGDIOBJ TmpObj=SelectObject(myDC,TmpBmp);
iWhip2DC.put_paperColor(paperColor); // Op zich maken we hem transparant maar onze zwart/wit toggle moet wel kloppen
SUCCEEDED(iWhip2DC.Paint(VARIANT_FALSE /*m_forceBW*/));
CxImage img;
img.CreateFromHBITMAP(TmpBmp);
img.DecreaseBpp(8, FALSE); // Werkt averechts voor kleine plaatjes (pallette is groot?)
// Maar CxImage::Draw2 lijkt alleen te werken met palette achtergrond dus het moet maar
RGBQUAD back = {GetBValue(paperColor), // RGBQUAD is BGR!!
GetGValue(paperColor),
GetRValue(paperColor),0};
///RGBQUAD back = {0,0,0,0};
img.SetTransIndex(img.GetNearestIndex(back));
// img.SetTransColor(back); // Voor als we zonder pallette werken
BYTE *m_Buffer=NULL;
long m_size;
img.Encode(m_Buffer, m_size, CXIMAGE_FORMAT_PNG);
myDoTRACE("\nCreates symbol bitmap (%d,%d)->PNG %d byte (W2D was %d)", pixeldx,pixeldy,m_size, epli->size());
DeleteObject(TmpBmp);
DeleteDC(myDC);
ReleaseDC( NULL, pDC ); //Do not forget!
m_AsBitmap = new
WT_PNG_Group4_Image(
pixeldy, /*rows*/
pixeldy, /*cols*/
WT_PNG_Group4_Image::PNG,
3,
NULL,
m_size,
(WT_Byte*)m_Buffer,
m_BoundingBox.minpt(),
m_BoundingBox.maxpt(),
WD_False); // Geen copy, we verwijderen zelf expliciet
return m_AsBitmap;
}
#endif
WT_Result CSLNKSymbolDefinition::serialize(WT_File & file)
{
if (m_AsBitmap)
{ // Wel even kopietje trekken omdat anders niet opnieuw getransformeerd wordt
WT_PNG_Group4_Image(
m_AsBitmap->rows(), /*rows*/
m_AsBitmap->columns(), /*cols*/
WT_PNG_Group4_Image::PNG,
3,
NULL,
m_AsBitmap->data_size(),
(WT_Byte *)m_AsBitmap->data(),
m_AsBitmap->bounds().minpt(),
m_AsBitmap->bounds().maxpt(),
WD_False).serialize(file);
return WT_Result::Success;
}
if (m_BuiltIn)
return WT_Result::Success;
WT_Result result;
// Open onze symbool DWF
m_wtFile.set_file_mode(WT_File::File_Read);
result = m_wtFile.open();
if (result != WT_Result::Success)
return result; // Waarschijnlijk builtin symbol?
// Op zich is er minder kans op overflow als we het symbool tijden het inlezen
// al richting (0,0) zetten. Dan wordt echter niet meer de definitieve transform
// uitgevoerd omdat m_transformed op WD_True staat.
// WT_Logical_Point lshift(- m_Origin.m_x,- m_Origin.m_y);
//
// m_wtFile.heuristics().set_transform(WT_Transform (lshift, 0, 0, 0));
// m_wtFile.heuristics().set_apply_transform(true);
// Do the actual reading.
// Een apply_transform is door de aanroeper al op file gezet.
// Dankzij set_apply_transform gaat de rest miraculeus vanzelf
while ((result = m_wtFile.process_next_object()) == WT_Result::Success)
{
//myTRACE("Attribute '%s'\n", wtFile->file_stats()->descriptions());
switch(m_wtFile.current_object()->object_type())
{
case WT_Object::Drawable:
#ifdef _DEBUG
if (m_wtFile.current_object()->object_id() == WT_Object::Origin_ID
&& !file.heuristics().allow_binary_data()
)
{ // Origin is niet toegestaan bij ASCII
break;
}
#endif
m_wtFile.current_object()->serialize(file);
break;
case WT_Object::Attribute:
{
const WT_Attribute *obj = (WT_Attribute *)m_wtFile.current_object();
// myTRACE("Attribute '%s'\n", my_plan_file.file_stats()->descriptions());
// Hoewel een Attibute gaat hij toch niet via desired_rendition
// Omdat we weten dat we net uit uit een DWF komen kunnen we best
// wel rechtstreeks serializen
// Let wel: desired_rendition is dan niet meer te vertrouwen. Zie @@@
if (obj->object_id() == WT_Object::View_ID)
{
// De view komt VOOR de Viewport dus wordt niet goed vertaald
// bovendien doen we er toch niets mee
break;
}
if (obj->object_id() == WT_Object::Layer_ID)
{
// Zou toch wel erg complex worden. Werkt ook maar matig
break;
}
if (obj->object_id() == WT_Object::Color_ID)
{ // Misschien een zwart-wit toggle doorvoeren? Of zelfs highlight?
// m_iEPlotSection->get_PaperColor()
}
if (obj->object_id() == WT_Object::Viewport_ID)
{
break; // Voorkom dat het Viewport object in de DWF komt
// Dan krijgen we last omdat we er op clippen
// eigenlijk moeten we de originele viewport
// terug zetten na afloop
}
obj->serialize(file);
}
break;
default:
//myTRACE("Skipping '%s'\n", wtFile->file_stats()->descriptions());
break;
}
}
m_wtFile.close();
return WT_Result::Success;
}

View File

@@ -0,0 +1,27 @@
#pragma once
#include "Whiptk/whip_toolkit.h"
#include "myWT_File.h"
class CSLNKSymbolDefinition
{
public:
CSLNKSymbolDefinition(CComQIPtr<IEPlotSection> EPlotSection);
CSLNKSymbolDefinition(int count, WT_Logical_Point const *points) ;
CSLNKSymbolDefinition(CString const filepath, double const height);
~CSLNKSymbolDefinition(void);
CComQIPtr<IEPlotSection> m_iEPlotSection; // Om scope levend te houden
myWT_File m_wtFile; // Beetje redundant?
WT_Logical_Box m_BoundingBox;
WT_Polygon m_BoundingContour;
WT_Logical_Point m_Origin;
double m_dwgScale;
WT_Drawable *asBitmap(int pixeldx, int pixeldy, long paperColor);
WT_Result serialize(WT_File & file);
private:
bool m_BuiltIn;
WT_Result calculateBoundary();
WT_PNG_Group4_Image *m_AsBitmap;
};

View File

@@ -0,0 +1,188 @@
#include "StdAfx.h"
#include "myEPlotSection.h"
#include "SLNKSymbolDefImpl.h"
#include "SLNKSymbolImpl.h"
#include "../SLNKDWFImpl/CxImage\CxImage\ximage.h"
#include "../SLNKDWFImpl/Whip2DCImpl.h"
#include <math.h>
CSLNKSymbolImpl::CSLNKSymbolImpl(void)
{
}
CSLNKSymbolImpl::~CSLNKSymbolImpl(void)
{
}
CSLNKSymbolImpl::CSLNKSymbolImpl(double dwgX, double dwgY, CWhipFileState *State)
{
m_dwgX = dwgX;
m_dwgY = dwgY;
m_symbolName = "";
m_Rotation = 0;
m_Scale = 1.0;
m_SLNKContour.m_parentWhipFileState = State;
m_SLNKContour.m_fromSymbol=true;
}
WT_Result CSLNKSymbolImpl::serialize (WT_File & file, WT_Units & units,
CSLNKSymbolDefinition *symbdef, double hintScale)
{
ATLASSERT(symbdef != NULL);
WT_Point3D insertion(m_dwgX, m_dwgY);
//m_SLNKContour.m_parentWhipFileState->m_contunits
double dScale = units.application_to_dwf_transform()(0,0); // Drawing's dScale
WT_Transform wasTransform = file.heuristics().transform();
WT_Boolean wasApplyTransform = file.heuristics().apply_transform();
WT_Logical_Point LPInsertion = units.transform(insertion);
// Onze file had mogelijk al een transform staan. Die moeten we wel blijven ondersteunen
// (terugzetten komt wel)
if (wasApplyTransform)
{
LPInsertion *= wasTransform;
}
// WT_Transform ondersteunt wel rotaties 0,90,180 en 270. Dat gaat echter altijd om DWF 0,0
// terwijl wij toch echt om ons insertionpoint willen.
// Het (b)lijkt oplosbaar door ons punt te tegenroteren
WT_Transform tr0;
tr0.set_rotation((360-m_Rotation)%360);
LPInsertion *= tr0;
WT_Result result;
#ifdef _xDEBUG
{ // Cirkel onder het symbool tekenen
WT_Logical_Point center = units.transform(insertion);
// Binnenkant cirkel
file.desired_rendition().color() = WT_Color(128, 128, 128, 0); // doorzichtig werkt (nog) niet voor ellipsen
WT_Filled_Ellipse(center, 1500, 1500).serialize(file);
// Buitenkant cirkel
file.desired_rendition().color() = WT_Color(0, 255, 0, 0); // doorzichtig werkt (nog) niet voor ellipsen
file.desired_rendition().line_weight() = WT_Line_Weight(100);
WT_Outline_Ellipse(center, 1500, 1500).serialize(file);
file.desired_rendition().line_weight() = WT_Line_Weight(0);
}
#endif
#ifdef _DEBUG
{ // klein cirkeltje op insertion
WT_Logical_Point center = units.transform(insertion);
// Binnenkant cirkel
file.desired_rendition().color() = WT_Color(0, 0, 128, 0); // doorzichtig werkt (nog) niet voor ellipsen
WT_Filled_Ellipse(center, 50, 50).serialize(file);
// Buitenkant cirkel
file.desired_rendition().color() = WT_Color(0, 128, 0, 0); // doorzichtig werkt (nog) niet voor ellipsen
file.desired_rendition().line_weight() = WT_Line_Weight(10);
WT_Outline_Ellipse(center, 50, 50).serialize(file);
file.desired_rendition().line_weight() = WT_Line_Weight(0);
}
#endif
// Vertrouw de huidige rendition niet! Het eerste lijntje van een symbool kan default wit verwachten (CO206.DWF)
// Tijdens het serializen van het symbool hebben we niets met (desired)_rendition te maken
WT_Color().serialize(file); // Op de default zetten. TODO: Moet eigenlijk voor alle attributen
double dx, dy;
dx = dy = m_Scale * dScale / symbdef->m_dwgScale;
// PAS OP: (SDU tekening) je kunt hier in overflow problemen komen
// als dx*symbdef->m_Origin.m_x>MAXINT ofwel eigenlijk al als dx>1.0
// ofwel als d(rawing)Scale > symbdef->m_dwgScale (en dan heb ik het nog
// niet over verschaalde symbolen).
if (dx*symbdef->m_Origin.m_x > INT_MAX || dy*symbdef->m_Origin.m_y > INT_MAX)
{
throw myCString("\nSLNKDWF symbol coordinate overflow. Possible solutions:"
"\nDecrease drawing dwf resolution (%.6f)"
"\nIncrease symbool dwf resolution (%.6f)"
"\nDecrease symbol scale (%.6f)",dScale, symbdef->m_dwgScale, m_Scale
);
}
//myDoTRACE("\nSymbool m_Scale = %.6f, dScale = %.6f, symbdef->m_dwgScale = %.6f==>dx=%.6g", m_Scale, dScale, symbdef->m_dwgScale, dx);
// WT_Logical_Point lshift(LPInsertion);
WT_Logical_Point lshift(LPInsertion.m_x - myRound(dx*symbdef->m_Origin.m_x),
LPInsertion.m_y - myRound(dy*symbdef->m_Origin.m_y));
file.heuristics().set_transform(WT_Transform (lshift, dx, dy, m_Rotation));
file.heuristics().set_apply_transform(true);
#ifdef NO_BITMAPPEREN
// Vooralsnog uitgeschakeld: we hebben de (hoognodige) achtergrondkleur niet
Merk op dat builtin symbols (star) geen nog geen boundingbox ingevuld hebben
int pixeldx = 1000;
int pixeldy = 1000;
if (hintScale>0)
{
WT_Logical_Box bx = symbdef->m_BoundingBox;
pixeldx = myRound((bx.maxpt().m_x - bx.minpt().m_x)*m_Scale/symbdef->m_dwgScale/hintScale);
pixeldy = myRound((bx.maxpt().m_y - bx.minpt().m_y)*m_Scale/symbdef->m_dwgScale/hintScale);
//myDoTRACE("\nbx=(%d,%d)-(%d,%d)",bx.minpt().m_x,bx.minpt().m_y,bx.maxpt().m_x,bx.maxpt().m_y);
//myDoTRACE(" makes (%d,%d) pixels",pixeldx,pixeldy);
}
if ( 0 && pixeldx < 100 && pixeldy < 100 ) // Heel weinig pixels
{ // Bitmap versie van het symbool gebruiken
//double rescale = 1.0; //m_Scale/symbdef->m_dwgScale*dScale;
if (pixeldx > 0 && pixeldy > 0)
{
symbdef->asBitmap(pixeldx, pixeldy, 0xffffff)->serialize(file);
}
}
else
#endif
{ //Gewone vector versie
symbdef->serialize(file);
}
#ifdef _DEBUG
WT_Comments cmt;
CString s; s.Format("About to insert symbol contour %s", m_symbolName);
cmt.set(s);
cmt.serialize(file);
#endif
//Cirkeltje op symbool zwaartepunt
//file.desired_rendition().color() = WT_Color(255, 0, 0, 0);
//WT_Filled_Ellipse(symbdef->m_Center, 50, 50).serialize(file);
#ifdef _DEBUG
m_SLNKContour.m_outlineAlpha = 255; // Zichtbaar maken
#else
m_SLNKContour.m_outlineAlpha = 0; // Onzichtbaar maken
#endif
// En vervolgens nog een mooi bounding contourtje er om heen.
// Die is essentieel voor het aanwijzen. Doordat hierboven de alpha op 0 is gezet wordt hij wel transparant
WT_Color().serialize(file); // Op de default zetten.
file.desired_rendition().color() = file.rendition().color() = WT_Color();
m_SLNKContour.serialize(file, true);
// Nu contour aanpassen. Is handig voor later teksten bijplaatsen
// Echter: die willen we exclusief 'wasTranform' hebben. Daarvoor tegencorrigeren we
//
LPInsertion = units.transform(insertion);
WT_Transform tr1;
tr1.set_rotation((360-m_Rotation)%360);
LPInsertion *= tr1;
lshift = WT_Logical_Point(LPInsertion.m_x - myRound(dx*symbdef->m_Origin.m_x),
LPInsertion.m_y - myRound(dy*symbdef->m_Origin.m_y));
WT_Transform tm(lshift, dx, dy, m_Rotation);
m_SLNKContour.transform(tm); // Pas op: de bounds zijn nu misschien nog verkeerd
#if 0
// Tegencorrectie werkte niet goed met rotatie. Daarom maar zoals hierboven
WT_Transform tm(file.heuristics().transform());
WT_Logical_Point wasT(wasTransform.m_translate);
WT_Transform tr1;
tr1.set_rotation((360-m_Rotation)%360);
wasT *= tr1;
tm.m_translate.m_x -= wasT.m_x;
tm.m_translate.m_y -= wasT.m_y;
m_SLNKContour.transform(tm); // Pas op: de bounds zijn nu misschien nog verkeerd
#endif
// En transform weer terug
file.heuristics().set_transform(wasTransform);
file.heuristics().set_apply_transform(wasApplyTransform);
// ASSERT: Deze werkt nu ook m_SLNKContour.serialize(file, true, true);
return result;
};

View File

@@ -0,0 +1,27 @@
#pragma once
#include "Whiptk/whip_toolkit.h"
#include "SLNKContourImpl.h"
class CSLNKSymbolImpl
{
public:
CSLNKSymbolImpl(void);
CSLNKSymbolImpl(double dwgX, double dwgY, CWhipFileState *State);
WT_Result serialize (WT_File & file, WT_Units & units,
CSLNKSymbolDefinition *symbdef,
double hintScale);
WT_Result calculateBoundary (myWT_File *wtFile);
~CSLNKSymbolImpl(void);
public:
double m_dwgX, m_dwgY;
//CString m_Label;
//CString m_Key;
CString m_symbolName;
int m_Rotation;
double m_Scale;
CSLNKContourImpl m_SLNKContour;
};

BIN
SlnkDWFCom/SLNKdwf.aps Normal file

Binary file not shown.

158
SlnkDWFCom/SLNKdwf.rc Normal file
View File

@@ -0,0 +1,158 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""winres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"1 TYPELIB ""SLNKDWF.tlb""\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
#include "SLNKDWFVersion.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION SLNK_MAJOR_VERSION, SLNK_MINOR_VERSION, 0, SLNK_BUILD_VERSION
PRODUCTVERSION SLNK_MAJOR_VERSION, SLNK_MINOR_VERSION, 0, SLNK_BUILD_VERSION
FILEFLAGSMASK 0x1fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Dijkoraad IT"
VALUE "FileDescription", "Superlink DWF "
VALUE "FileVersion", SLNK_BUILDVERSION "\0"
VALUE "InternalName", "SLNKDWF.dll"
VALUE "LegalCopyright", "(c) Dijkoraad IT 2005-2007. All rights reserved."
VALUE "OriginalFilename", "SLNKDWF.dll"
VALUE "ProductName", "Superlink"
VALUE "ProductVersion", SLNK_BUILDVERSION "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
/////////////////////////////////////////////////////////////////////////////
//
// REGISTRY
//
IDR_SLNKDWF REGISTRY "SLNKDWF.rgs"
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_PROJNAME "SLNKDWF"
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Dutch (Netherlands) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NLD)
#ifdef _WIN32
LANGUAGE LANG_DUTCH, SUBLANG_DUTCH
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// REGISTRY
//
IDR_DWFFILE REGISTRY "DWFFile.rgs"
IDR_WHIPFILE REGISTRY "WhipFile.rgs"
IDR_WHIP2PNG REGISTRY "Whip2PNG.rgs"
IDR_ABOUT REGISTRY "About.rgs"
IDR_EPLOTSECTION REGISTRY "EPlotSection.rgs"
IDR_EPLOTSECTIONS REGISTRY "EPlotSections.rgs"
IDR_SLNKEVENT REGISTRY "SLNKEvent.rgs"
IDR_BOUNDINGBOX REGISTRY "BoundingBox.rgs"
IDR_DWGPOINT REGISTRY "DWGPoint.rgs"
IDR_SLNKCONTOUR REGISTRY "SLNKContour.rgs"
IDR_SLNKSYMBOL REGISTRY "SLNKSymbol.rgs"
IDR_OPTIONS REGISTRY "Options.rgs"
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
#endif // Dutch (Netherlands) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
1 TYPELIB "SLNKDWF.tlb"
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

608
SlnkDWFCom/Whip2PNG.cpp Normal file
View File

@@ -0,0 +1,608 @@
// Whip2PNG.cpp : Implementation of CWhip2PNG
#include "stdafx.h"
#include "CxImage\CxImage\ximage.h"
#include "Whip2DCImpl.h"
#include "Whip2PNG.h"
#include "metafile.h"
CWhip2PNG::CWhip2PNG()
{
m_sizeX = 800;
m_sizeY = 600;
m_offsetX = 0;
m_offsetY = 0;
m_dScale = 1.0;
m_lRotation = 0;
m_RegExp = ".*";
m_forcePaper = FALSE;
m_forceBW = FALSE;
m_forceGray = FALSE;
m_Maximize = FALSE;
m_dwgScale = 0.0;
}
STDMETHODIMP CWhip2PNG::Load(BSTR WhipPath)
{
myDoTRACE("\nCWhip2PNG::Load('%ls')", WhipPath);
m_WhipPath = WhipPath;
return S_OK;
}
STDMETHODIMP CWhip2PNG::LoadStream(VARIANT EPlotStream)
{
myDoTRACE("\nCWhip2PNG::LoadStream()");
if (EPlotStream.vt!=VT_ERROR)
{
VARIANT *var2 = &EPlotStream;
if (var2->vt==(VT_VARIANT|VT_BYREF)) // ByRef
var2 = (VARIANT *)var2->pvarVal;
if (var2->vt==VT_DISPATCH)
{
m_iEPlotSection = var2->pdispVal;
if (!m_iEPlotSection)
return E_INVALIDARG;
}
else
return E_INVALIDARG;
}
return S_OK;
}
// Werkt nog niet echt goed?
STDMETHODIMP CWhip2PNG::SaveAsWMF(BSTR WMFPath)
{
CmyTimer timer("CWhip2PNG::SaveAsWMF");
#if 0
HDC myDC = CreateEnhMetaFile(NULL,CString(WMFPath),NULL,NULL); // In memory
InitDC(myDC);
if (m_forcePaper)
HRESULT res = m_iWhip2DC.set_paperColor(m_paperColor);
res = m-iWhip2DC->Paint(m_forceBW);
HENHMETAFILE hMF = CloseEnhMetaFile(myDC);
DeleteEnhMetaFile(hMF);
DeleteDC(myDC);
#endif
#if 1
HDC myDC = CreateMetaFile(NULL); // In memory
InitDC(myDC);
HRESULT res;
if (m_forcePaper)
res = m_iWhip2DC.put_paperColor(m_paperColor);
res = m_iWhip2DC.Paint(m_forceBW);
HMETAFILE hMF = CloseMetaFile(myDC);
CMetafile::WriteMetaFileAsPlaceable(hMF, CSize(m_sizeX, m_sizeY),m_sizeX/4,CString(WMFPath));
DeleteMetaFile(hMF);
DeleteDC(myDC);
#endif
putDWGInfo(); // Generieke info naar het event
return S_OK;
}
bool CWhip2PNG::CreateCxImage(CxImage *img)
{
CmyTimer timer("CWhip2PNG::CreateCXImage");
bool res = true;
//----
HDC pDC = ::GetDC(0);
HDC myDC = CreateCompatibleDC(pDC);
//ReleaseDC(pDC);
InitDC(myDC); // Stelt ook definitieve m_SizeX en m_SizeY vast
#if 1
BITMAPINFO bmInfo;
memset(&bmInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
bmInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmInfo.bmiHeader.biWidth=m_sizeX;
bmInfo.bmiHeader.biHeight=m_sizeY;
bmInfo.bmiHeader.biPlanes=1;
bmInfo.bmiHeader.biCompression=BI_RGB; // Geen compressie
bmInfo.bmiHeader.biBitCount=24;
//create a new bitmap and select it in the memory dc
BYTE *pbase;
HBITMAP TmpBmp = CreateDIBSection(pDC, &bmInfo,DIB_RGB_COLORS,(void**)&pbase,0,0);
//----
#else
// Deze werkt ook wel maar is 10% langzamer? Je zou sneller verwachten?
// Bovendien ben je nu afhankelijk van de display instellingen?
// En het converteren CreateFromHBITMAP is veel langzamer
HBITMAP TmpBmp = CreateCompatibleBitmap ( pDC, m_sizeX, m_sizeY );
//BITMAP bm;
//GetObject(TmpBmp, sizeof(BITMAP), (LPSTR) &bm);
//als bm.bmBits nu NULL is hebben we wel een echte DFB;
#endif
if (!TmpBmp)
{
myDoTRACE("\nTmpBmp==NULL when creating (%d, %d)??", m_sizeX, m_sizeY);
return false;
}
HGDIOBJ TmpObj=SelectObject(myDC,TmpBmp);
if (m_forcePaper)
m_iWhip2DC.put_paperColor(m_paperColor);
res = res && SUCCEEDED(m_iWhip2DC.Paint(m_forceBW));
if (!res)myDoTRACE("Paint faalt??");
if (!img->CreateFromHBITMAP(TmpBmp))
{
myDoTRACE("CreateFromHBITMAP faalt??");
return false;
}
if (m_lRotation%360 == 90 || m_lRotation%360 == -270)
img->RotateLeft();
if (m_lRotation%360 == -90 || m_lRotation%360 == 270)
img->RotateRight();
if (m_lRotation == -180 || m_lRotation == 180) // Voor te draggen symbolen
img->Rotate180();
putDWGInfo(); // Generieke info naar het event
DeleteObject(TmpBmp);
DeleteDC(myDC);
ReleaseDC( NULL, pDC ); //Do not forget!
return res;
}
// Alleen gebruikt in testscripts
STDMETHODIMP CWhip2PNG::SaveAsPNG(BSTR PNGPath)
{
myDoTRACE("\nCWhip2PNG::SaveAsPNG('%ls')", PNGPath);
CxImage img;
bool res = CreateCxImage(&img);
if (!res)
{
CString err; err.Format("Could not CreateCxImage: %s", img.GetLastError());
return myAtlReportError (GetObjectCLSID(), "\nCWhip2PNG::SaveAsPNG('%ls')\n%s", (LPCSTR)m_WhipPath, err);
}
{
CmyTimer timer("PNG Save");
if (!img.Save(CString(PNGPath), CXIMAGE_FORMAT_PNG))
return myAtlReportError (GetObjectCLSID(), "\nSaveAsPNG save failed: %s", img.GetLastError());
}
return S_OK;
}
// Handig om GetIMG.asp errormessages te laten opleveren
// Ondersteunt ook m_Maximize: dan wordt de witruimte geminimaliseerd;
STDMETHODIMP CWhip2PNG::TextAsPNG(BSTR Message, VARIANT *ImageData)
{
// Indirect via een tempDC omdat anders de CompatibleBitmap Z/W wordt
// TODO: Als de server Windows in 256 kleuren draait, wat krijg je dan?
HDC tempDC = CreateDC("DISPLAY",NULL,NULL,NULL);
HDC myDC = CreateCompatibleDC ( tempDC );
CString tok(Message);
tok.Replace("~", "\n"); // We ondersteunen ook ~ als newline
RECT rc = { 0, 0, m_sizeX, 0};
DrawText(myDC, tok, tok.GetLength(), &rc, DT_CALCRECT); // Grootte bepalen
if (m_Maximize)
{
m_sizeX = rc.right;
m_sizeY = rc.bottom;
}
HBITMAP memBM = CreateCompatibleBitmap ( tempDC, m_sizeX, m_sizeY );
DeleteDC(tempDC);
SelectObject(myDC, memBM);
HBRUSH tempBrush = CreateSolidBrush(RGB(255,255,255));
HBRUSH oldbrush = (HBRUSH) SelectObject(myDC,tempBrush);
FillRect(myDC,CRect(0,0,m_sizeX, m_sizeY),tempBrush);
SelectObject(myDC,oldbrush);
DeleteObject(tempBrush);
// Nu het echte tekenen
rc.top = m_sizeY/2 - rc.bottom/2; // Vertikaal centreren
rc.bottom = m_sizeY/2 + rc.bottom/2;
DrawText(myDC, tok, tok.GetLength(), &rc, DT_TOP);
CxImage img;
if (!img.CreateFromHBITMAP(memBM))
return myAtlReportError (GetObjectCLSID(), "\nTextAsPNG CreateFromHBITMAP failed: %s", img.GetLastError());
DeleteObject(memBM);
DeleteDC(tempDC);
DeleteDC(myDC);
return StreamPNG(img, ImageData, TRUE);
}
// Als we dan toch door de tekening zijn gegaan is het soms
// wel handig informatie over de tekening te hebben
// Dat stoppen we grotendeels in m_SLNKEvent
void CWhip2PNG::putDWGInfo()
{
HRESULT res;
res = m_iWhip2DC.get_paperColor((LONG*)&m_paperColor); // Weten we nu ook
double resX, resY;
res = m_iWhip2DC.DPtoDWG(0, m_sizeY, &resX, &resY);
CComQIPtr<IBoundingBox> bbView;
m_SLNKEvent->get_viewExtents(&bbView);
CComQIPtr<IDWGPoint> pt;
bbView->get_min(&pt);
pt->put_DwgX(resX);
pt->put_DwgY(resY);
pt.Release(); // Voor re-use
res = m_iWhip2DC.DPtoDWG(m_sizeX, 0, &resX, &resY);
bbView->get_max(&pt);
pt->put_DwgX(resX);
pt->put_DwgY(resY);
pt.Release();
double resMX, resMY;
res = m_iWhip2DC.DWGExtents(&resX, &resY, &resMX, &resMY);
CComQIPtr<IBoundingBox> bbDWG;
m_SLNKEvent->get_dwgExtents(&bbDWG);
bbDWG->get_min(&pt);
pt->put_DwgX(resX);
pt->put_DwgY(resY);
pt.Release();
bbDWG->get_max(&pt);
pt->put_DwgX(resMX);
pt->put_DwgY(resMY);
pt.Release();
}
// Zoek een punt dat de gebruiker in de tekening geklikt heeft.
// Er wordt alleen een simpele tekst opgeleverd (hetzij aangeklikte truetype tekst
// of een Contour label). Meer details zijn via get_SLNKEvent te verkrijgen
STDMETHODIMP CWhip2PNG::Find(LONG findX, LONG findY, BSTR* foundLabel)
{
CmyTimer timer("CWhip2PNG::Find");
HDC pDC = ::GetDC(0);
HDC myDC = CreateCompatibleDC(pDC);
//ReleaseDC(pDC);
// Er hoeft geen bitmap naar myDC omdat we toch niet painten
InitDC(myDC);
CString ContourLabel, ContourLayer, TextLabel, TextLayer;
HRESULT res = m_iWhip2DC.Find(findX, findY,
FALSE,
ContourLabel, ContourLayer, TextLabel, TextLayer);
if (TextLabel != "")
(*foundLabel) = TextLabel.AllocSysString();
else if (ContourLabel != "")
(*foundLabel) = ContourLabel.AllocSysString();
double resX, resY;
res = m_iWhip2DC.DPtoDWG(findX, findY, &resX, &resY);
m_SLNKEvent->put_DwgX(resX);
m_SLNKEvent->put_DwgY(resY);
m_SLNKEvent->put_ContourLabel(CComBSTR(ContourLabel));
m_SLNKEvent->put_ContourLayer(CComBSTR(ContourLayer));
m_SLNKEvent->put_TextLabel(CComBSTR(TextLabel));
m_SLNKEvent->put_TextLayer(CComBSTR(TextLayer));
putDWGInfo(); // Generieke info naar het event
DeleteDC(myDC);
ReleaseDC( NULL, pDC ); //Do not forget!
return S_OK;
}
STDMETHODIMP CWhip2PNG::SetDimensions(LONG sizeX, LONG sizeY, // PNG image size
LONG offsetX, LONG offsetY, // Panning
DOUBLE dScale, // Zooming, 1.0 default
LONG lRotation) // Rotation, 0 default, multiple of 90
{
if (sizeX*dScale <=0 ||
sizeY*dScale <=0 ||
sizeX*dScale >=LONG_MAX+0.5 ||
sizeY*dScale >=LONG_MAX+0.5)
return myAtlReportError (GetObjectCLSID(), "\nCWhip2PNG::SetDimensions invalid zoom");
m_sizeX = sizeX;
m_sizeY = sizeY;
m_offsetX = offsetX;
m_offsetY = offsetY;
m_dScale = dScale;
m_lRotation = lRotation;
return S_OK;
}
STDMETHODIMP CWhip2PNG::GetAsMap(BSTR* AsMap)
{
myDoTRACE("\nCWhip2PNG::GetAsMAP()");
CmyTimer timer("CWhip2PNG::GetAsMap");
HDC pDC = ::GetDC(0);
HDC myDC = CreateCompatibleDC(pDC);
// Er hoeft geen bitmap naar myDC omdat we toch niet painten
// Let wel: daardoor kunnen we niet optimaliseren met RectVisible?
InitDC(myDC);
//ReleaseDC(pDC);
CString result, dummy;
HRESULT res = m_iWhip2DC.Find(0, 0,
TRUE, /*AsMap*/
result, dummy, dummy, dummy);
// Als we dan toch door de tekening zijn gegaan is dit wel handig om te hebben
putDWGInfo(); // Generieke info naar het event
(*AsMap) = result.AllocSysString();
DeleteDC(myDC);
ReleaseDC( NULL, pDC ); //Do not forget!
return S_OK;
}
// Testfunctie om RegExp's te testen
STDMETHODIMP CWhip2PNG::get_AtlRegExp(BSTR RegExp, BSTR TestExp, BSTR* pVal)
{
CAtlRegExp<> reLayers; // Welke layers moeten aan
REParseError status = reLayers.Parse( CString(RegExp), false );
if (REPARSE_ERROR_OK != status)
{
myTRACE("\nSorry, kan reguliere expressie layersOn niet parsen");
// Unexpected error.
return S_FALSE;
}
CAtlREMatchContext<> mcUrl;
//CAtlREMatchContext<> mcUrl2;
BOOL b1 = reLayers.Match(CString(TestExp), &mcUrl);
// b &= (mcUrl.m_uNumGroups > 0);
CString res;
res.Format("Testing: %ls for %ls: %d", RegExp, TestExp, b1);
CComBSTR bstrString(res);
return bstrString.CopyTo(pVal);
return S_OK;
}
// Stream een CImage als PNG (bPNG) of als GIF (!bPNG)
HRESULT CWhip2PNG::StreamPNG(CxImage &img, VARIANT *ImageData, BOOL bPNG)
{
SAFEARRAY *psaData; BYTE *pData;
SAFEARRAYBOUND rgsabound[1];
long size=0;
BYTE* pBuffer=0;
{
{
CmyTimer timer("CWhip2PNG::StreamPNG/de PNG encoden");
if (!img.Encode(pBuffer,size, bPNG?CXIMAGE_FORMAT_PNG:CXIMAGE_FORMAT_GIF))
return myAtlReportError (GetObjectCLSID(), "\nStreamPNG encode failed: %s", img.GetLastError());
}
// TODO: Echt netjes zou zijn om hier een IStream op te leveren?
// create safe array and copy image data
rgsabound[0].lLbound = 0; rgsabound[0].cElements = size;
psaData = SafeArrayCreate(VT_UI1, 1, rgsabound);
SafeArrayAccessData(psaData, (void **)&pData);
memcpy(pData,pBuffer,size);
SafeArrayUnaccessData(psaData);
img.FreeMemory (pBuffer);
// put data in variant
ImageData->vt = (VT_ARRAY | VT_UI1);
ImageData->parray = psaData;
}
myDoTRACE("\nCWhip2PNG::StreamPNG done, sending %d bytes", size);
return S_OK;
}
// Draggable symbolen
STDMETHODIMP CWhip2PNG::GetAsTransGIF(VARIANT *ImageData)
{
return CWhip2PNG::GetAsXXX(ImageData, FALSE);
}
STDMETHODIMP CWhip2PNG::GetAsPNG(VARIANT *ImageData)
{
return CWhip2PNG::GetAsXXX(ImageData, TRUE);
}
STDMETHODIMP CWhip2PNG::GetAsXXX(VARIANT *ImageData, BOOL bPNG)
{
try
{
myDoTRACE("\nCWhip2PNG::GetAsPNG()");
CxImage img;
BOOL res = CreateCxImage(&img);
if (!res)
{
CString err; err.Format("Could not CreateCxImage: %s", img.GetLastError());
throw err;
}
if (!bPNG)
{ // Transparante GIF.
RGBQUAD back = {GetBValue(m_paperColor), // RGBQUAD is BGR!!
GetGValue(m_paperColor),
GetRValue(m_paperColor),0};
if (m_forceGray)
{
img.GrayScale();
BYTE gray = RGB2GRAY(GetRValue(m_paperColor),
GetGValue(m_paperColor),
GetBValue(m_paperColor));
back.rgbBlue = back.rgbGreen = back.rgbRed = gray;
}
else
{
}
// GIF is 8 bit.
img.DecreaseBpp(8, FALSE);
img.SetTransIndex(img.GetNearestIndex(back));
// GIF kent geen Alpha, IE6 geen PNG transparantie
//img.AlphaCreate();
//img.AlphaSet(192);
}
return StreamPNG(img, ImageData, bPNG);
}
catch (DWFException& ex)
{
CString err;
err.Format("%ls\n%ls\n%s\n%ls(%d)",ex.type(),ex.message(),ex.function(),ex.file(),ex.line());
return myAtlReportError (GetObjectCLSID(), "\nCWhip2PNG::GetAsPNG('%s')\n%s", m_WhipPath, err);
}
catch (CString& err)
{
return myAtlReportError (GetObjectCLSID(), "\nCWhip2PNG::GetAsPNG('%s')\n%s", m_WhipPath, err);
}
}
STDMETHODIMP CWhip2PNG::SetLayers(BSTR RegExp)
{
m_RegExp = RegExp;
return S_OK;
}
STDMETHODIMP CWhip2PNG::get_SLNKEvent(ISLNKEvent** pVal)
{
return m_SLNKEvent->QueryInterface(IID_ISLNKEvent, (void**)pVal);
}
void CWhip2PNG::InitDC(HDC &myDC)
{
SetViewportOrgEx(myDC, m_offsetX, m_offsetY, NULL);
CEPlotSectionImpl *epli = NULL;
if (m_iEPlotSection) // Via stream?
m_iEPlotSection->get_EPlotSectionImpl((BYTE **)&epli);
m_iWhip2DC.Load(myDC, epli,
m_WhipPath, m_RegExp,
myRound(m_sizeX*m_dScale), myRound(m_sizeY*m_dScale),
VARIANT_TRUE /*center*/, m_Maximize, m_dwgScale);
// Als m_dwgScale was gespecificeerd moeten we wel een goede bitmapgrootte kiezen
if (m_dwgScale > 0.0)
{
CSize newsize = m_iWhip2DC.get_Size();
m_sizeX = newsize.cx; // Veronderstel m_dScale = 1.0
m_sizeY = newsize.cy;
}
}
STDMETHODIMP CWhip2PNG::get_paperColor(LONG* pVal)
{
(*pVal) = m_paperColor;
return S_OK;
}
STDMETHODIMP CWhip2PNG::put_paperColor(LONG newVal)
{
m_paperColor = newVal;
m_forcePaper = TRUE;
return S_OK;
}
// Zet een vertaal kleur (afhankelijk van papierkleur)
STDMETHODIMP CWhip2PNG::ReplaceColor(LONG paperColor, LONG oldColor, LONG newColor)
{
m_iWhip2DC.ReplaceColor(paperColor, oldColor, newColor);
return S_OK;
}
STDMETHODIMP CWhip2PNG::get_Maximize(VARIANT_BOOL* pVal)
{
(*pVal) = m_Maximize;
return S_OK;
}
STDMETHODIMP CWhip2PNG::put_Maximize(VARIANT_BOOL newVal)
{
m_Maximize = newVal;
return S_OK;
}
STDMETHODIMP CWhip2PNG::get_dwgScale(DOUBLE* pVal)
{
(*pVal) = m_dwgScale;
return S_OK;
}
STDMETHODIMP CWhip2PNG::put_dwgScale(DOUBLE newVal)
{
if (newVal <= 0.0)
return myAtlReportError (GetObjectCLSID(), "\nInvalid dwgScale");
m_dwgScale = newVal;
return S_OK;
}
STDMETHODIMP CWhip2PNG::get_forceBW(VARIANT_BOOL* pVal)
{
(*pVal) = m_forceBW;
return S_OK;
}
STDMETHODIMP CWhip2PNG::put_forceBW(VARIANT_BOOL newVal)
{
m_forceBW = newVal;
if (m_forceBW)
{
m_paperColor = 0xFFFFFF; // Op wit alvast
m_forcePaper = TRUE;
}
return S_OK;
}
STDMETHODIMP CWhip2PNG::get_forceGray(VARIANT_BOOL* pVal)
{
(*pVal) = m_forceGray;
return S_OK;
}
STDMETHODIMP CWhip2PNG::put_forceGray(VARIANT_BOOL newVal)
{
m_forceGray = newVal;
return S_OK;
}

121
SlnkDWFCom/Whip2PNG.h Normal file
View File

@@ -0,0 +1,121 @@
// Whip2PNG.h : Declaration of the CWhip2PNG
#pragma once
#include "resource.h" // main symbols
#include "SLNKDWF.h"
#include "SLNKEvent.h"
// CWhip2PNG
class ATL_NO_VTABLE CWhip2PNG :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CWhip2PNG, &CLSID_Whip2PNG>,
public IDispatchImpl<IWhip2PNG, &IID_IWhip2PNG, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
DECLARE_REGISTRY_RESOURCEID(IDR_WHIP2PNG)
BEGIN_COM_MAP(CWhip2PNG)
COM_INTERFACE_ENTRY(IWhip2PNG)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
CComObject<CSLNKEvent> *pSLNKEvent; // For when the user has clicked on the drawing
HRESULT hr = CComObject<CSLNKEvent>::CreateInstance(&pSLNKEvent);
if(FAILED(hr)) return hr;
pSLNKEvent->AddRef();
hr = pSLNKEvent->QueryInterface(IID_ISLNKEvent, (void **)&m_SLNKEvent);
pSLNKEvent->Release();
if(FAILED(hr)) return hr;
// CComObject< CWhip2DC >* pWhip2DC;
// hr = CComObject<CWhip2DC>::CreateInstance(&pWhip2DC);
// if(FAILED(hr)) return hr;
// pWhip2DC->AddRef();
// hr = pWhip2DC->QueryInterface(&m_iWhip2DC);
// pWhip2DC->Release();
return hr;
}
void FinalRelease()
{
}
public:
CWhip2PNG(); // Default constructor
// Een van de volgende twee moet gebruikt worden om de file te laden
STDMETHOD(Load)(BSTR WhipPath);
STDMETHOD(LoadStream)(VARIANT EPlotStream);
STDMETHOD(SetDimensions)(LONG sizeX, LONG sizeY, LONG offsetX, LONG offsetY, DOUBLE dScale, LONG lRotation);
STDMETHOD(SetLayers)(BSTR RegExp);
STDMETHOD(SaveAsPNG)(BSTR PNGPath);
STDMETHOD(SaveAsWMF)(BSTR WMFPath);
STDMETHOD(TextAsPNG)(BSTR Message, VARIANT *ImageData);
STDMETHOD(GetAsPNG)(VARIANT *ImageData);
STDMETHOD(GetAsTransGIF)(VARIANT *ImageData);
STDMETHOD(GetAsXXX)(VARIANT *ImageData, BOOL bPNG);
STDMETHOD(Find)(LONG findX, LONG findY, BSTR* foundLabel);
STDMETHOD(GetAsMap)(BSTR* AsMap);
STDMETHOD(get_AtlRegExp)(BSTR RegExp, BSTR TestExp, BSTR* pVal);
private:
bool CreateCxImage(CxImage* img);
void InitDC(HDC &myDC);
HRESULT StreamPNG(CxImage &img, VARIANT *ImageData, BOOL bPNG);
CComQIPtr<ISLNKEvent> m_SLNKEvent; // For when the user has clicked on the drawing
// Will also hold minmax drawing XY?
//CComQIPtr<IWhip2DC> m_iWhip2DC;
CWhip2DCImpl m_iWhip2DC;
// Een van de volgende twee zal gezet zijn
CComQIPtr<IEPlotSection> m_iEPlotSection;
CString m_WhipPath;
void putDWGInfo();
LONG m_sizeX, m_sizeY;
LONG m_offsetX, m_offsetY;
double m_dScale;
LONG m_lRotation;
COLORREF m_paperColor; BOOL m_forcePaper;
BOOL m_forceBW;
BOOL m_forceGray;
BOOL m_Maximize;
double m_dwgScale;
CString m_RegExp;
public:
STDMETHOD(get_SLNKEvent)(ISLNKEvent** pVal);
STDMETHOD(get_paperColor)(LONG* pVal);
STDMETHOD(put_paperColor)(LONG newVal);
STDMETHOD(ReplaceColor)(LONG paperColor, LONG oldColor, LONG newColor);
STDMETHOD(get_Maximize)(VARIANT_BOOL* pVal);
STDMETHOD(put_Maximize)(VARIANT_BOOL newVal);
STDMETHOD(get_dwgScale)(DOUBLE* pVal);
STDMETHOD(put_dwgScale)(DOUBLE newVal);
STDMETHOD(get_forceBW)(VARIANT_BOOL* pVal);
STDMETHOD(put_forceBW)(VARIANT_BOOL newVal);
STDMETHOD(get_forceGray)(VARIANT_BOOL* pVal);
STDMETHOD(put_forceGray)(VARIANT_BOOL newVal);
};
OBJECT_ENTRY_AUTO(__uuidof(Whip2PNG), CWhip2PNG)

27
SlnkDWFCom/Whip2PNG.rgs Normal file
View File

@@ -0,0 +1,27 @@
HKCR
{
SLNKDWF.Whip2PNG.1 = s 'Whip2PNG Class'
{
CLSID = s '{783AC7F0-E6E1-4CE1-A38B-FA047D44DC1C}'
}
SLNKDWF.Whip2PNG = s 'Whip2PNG Class'
{
CLSID = s '{783AC7F0-E6E1-4CE1-A38B-FA047D44DC1C}'
CurVer = s 'SLNKDWF.Whip2PNG.1'
}
NoRemove CLSID
{
ForceRemove {783AC7F0-E6E1-4CE1-A38B-FA047D44DC1C} = s 'Whip2PNG Class'
{
ProgID = s 'SLNKDWF.Whip2PNG.1'
VersionIndependentProgID = s 'SLNKDWF.Whip2PNG'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '%APPID%'
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

1065
SlnkDWFCom/WhipFile.cpp Normal file

File diff suppressed because it is too large Load Diff

193
SlnkDWFCom/WhipFile.h Normal file
View File

@@ -0,0 +1,193 @@
// WhipFile.h : Declaration of the CWhipFile
#pragma once
#include "resource.h" // main symbols
#include "whiptk\whip_toolkit.h"
#include "myWT_File.h"
using namespace DWFCore;
using namespace DWFToolkit;
#include "SLNKContourImpl.h"
#include "SLNKSymbol.h"
#include "SLNKDWF.h"
class CWhipFileState
{
public:
CWhipFileState()
{
m_reContouren.Parse(".*", FALSE);
m_reLabels.Parse(".*", FALSE);
m_reLayers.Parse(".*", FALSE);
m_hintScale = -1.0;
};
BOOL SetLayers(BSTR reContouren, BSTR reLabels)
{
REParseError status = m_reContouren.Parse( CString(reContouren), false );
if (REPARSE_ERROR_OK != status)
{
myTRACE("\nSorry, kan reguliere expressie contouren niet parsen");
// Unexpected error.
return FALSE;
}
status = m_reLabels.Parse( CString(reLabels), false );
if (REPARSE_ERROR_OK != status)
{
myTRACE("\nSorry, kan reguliere expressie labelsB niet parsen");
// Unexpected error.
return FALSE;
}
return TRUE;
}
BOOL SetFilterLayers(BSTR reLayers)
{
REParseError status = m_reLayers.Parse( CString(reLayers), false );
if (REPARSE_ERROR_OK != status)
{
myTRACE("\nSorry, kan reguliere expressie filterlayers niet parsen");
// Unexpected error.
return FALSE;
}
return TRUE;
}
~CWhipFileState()
{
for (size_t i=0; i<m_SLNKContouren.GetCount(); i++)
delete m_SLNKContouren[i];
for (size_t i=0; i<m_SLNKSymbols.GetCount(); i++)
delete m_SLNKSymbols[i];
POSITION pos;
CString key;
CSLNKSymbolDefinition * value;
pos = m_SLNKSymbolDefinitions.GetStartPosition();
// Now iterate the map, element by element
while (pos != NULL) {
key = m_SLNKSymbolDefinitions.GetKeyAt(pos);
value = m_SLNKSymbolDefinitions.GetNextValue(pos);
delete value;
}
}
// Is dit een contour laag
BOOL contMatch(const char* str)
{
CAtlREMatchContext<> mcUrl;
return m_reContouren.Match(str, &mcUrl);
}
// Is dit een contourlabel laag
BOOL labelMatch(const char* str)
{
CAtlREMatchContext<> mcUrl;
return m_reLabels.Match(str, &mcUrl);
}
// Is dit een 'gewone' laag die in het resultaat moet verschijnen?
BOOL layerMatch(const char* str)
{
CAtlREMatchContext<> mcUrl;
return m_reLayers.Match(str, &mcUrl);
}
CAtlArray<CSLNKContourImpl *> m_SLNKContouren;
CAtlArray<CSLNKSymbolImpl *> m_SLNKSymbols;
CAtlMap<CString, CSLNKSymbolDefinition *> m_SLNKSymbolDefinitions;
CAtlArray<WT_Text> m_SLNKLabels;
WT_Units m_contunits;
BOOL contLayerActive;
BOOL labelLayerActive;
double m_hintScale; // Kunnen we gebruiken om symbolen te 'geeken'
private:
CAtlRegExp<> m_reContouren;
CAtlRegExp<> m_reLabels;
CAtlRegExp<> m_reLayers; // Die met SaveAs moeten blijven
};
// CWhipFile
class ATL_NO_VTABLE CWhipFile :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CWhipFile, &CLSID_WhipFile>,
public ISupportErrorInfo,
public IDispatchImpl<IWhipFile, &IID_IWhipFile, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CWhipFile();
DECLARE_REGISTRY_RESOURCEID(IDR_WHIPFILE)
BEGIN_COM_MAP(CWhipFile)
COM_INTERFACE_ENTRY(IWhipFile)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
STDMETHOD(Load)(BSTR WhipPath);
STDMETHOD(LoadStream)(VARIANT EPlotStream);
STDMETHOD(SetLayers)(BSTR reContouren, BSTR reLabels);
STDMETHOD(SaveAs)(BSTR WhipPath);
STDMETHOD(SaveAs2)(BSTR WhipPath);
STDMETHOD(SetLabel)(BSTR IdentLabel, BSTR ExtraLabel);
STDMETHOD(SetColor)(BSTR IdentLabel, ULONG rgb, BYTE Alpha);
STDMETHOD(SetLabelFont)(BSTR FontName, DOUBLE FontHeight, DOUBLE FontHeightSymbols);
STDMETHOD(SetLabelPosition)(BYTE LabelPos);
STDMETHOD(get_ContoursXML)(BSTR* pVal);
STDMETHOD(get_AddSymbol)(DOUBLE dwgX, DOUBLE dwgY, BSTR symbolName, IUnknown** pVal);
STDMETHOD(DefineSymbol)(BSTR symbolName, VARIANT EPlotStream);
STDMETHOD(DefineBitmapSymbol)(BSTR symbolName, BSTR symbolPath, DOUBLE height);
STDMETHOD(get_Contour)(BSTR IdentLabel, IUnknown** pVal);
STDMETHOD(SetFilterLayers)(BSTR reLayers);
STDMETHOD(get_FindInContour)(DOUBLE dwgX, DOUBLE dwgY, BSTR* pVal);
private:
CWhipFileState m_State;
WT_String m_FontName;
double m_FontHeight, m_FontHeightSymbols;
CSLNKContourImpl::LABELPOS m_LabelPos;
CComQIPtr<IEPlotSection> m_iEPlotSection; // Om scope levend te houden
myWT_File m_W2DFile;
WT_View m_view; // Initial view
HRESULT ProcessContouren();
HRESULT SerializePlan(WT_File & my_plan_file, myWT_File & my_file, double scale);
bool GenerateSymbols(myWT_File &my_file);
bool GenerateSymbolLabels(myWT_File &my_file);
bool GenerateContouren(WT_File &my_planfile, myWT_File &my_file,
double scale, BOOL solidOnly);
bool GenerateLabels(WT_File &my_planfile, myWT_File &my_file, double scale);
STDMETHOD(Generate)(myWT_File &my_file);
void read_for_contours();
void processLabels();
static WT_Result my_process_layer (WT_Layer & layer, WT_File & file);
//static WT_Result my_process_polygon(WT_Polygon & polygon, WT_File & file);
static WT_Result my_process_polyline(WT_Polyline & polyline, WT_File & file);
static WT_Result my_process_polytriangle(WT_Polytriangle & polytriangle, WT_File & file);
static WT_Result my_process_text (WT_Text & text, WT_File & file);
public:
STDMETHOD(get_hintScale)(DOUBLE* pVal);
STDMETHOD(put_hintScale)(DOUBLE newVal);
};
OBJECT_ENTRY_AUTO(__uuidof(WhipFile), CWhipFile)

27
SlnkDWFCom/WhipFile.rgs Normal file
View File

@@ -0,0 +1,27 @@
HKCR
{
SLNKDWF.WhipFile.1 = s 'WhipFile Class'
{
CLSID = s '{C2632BD5-3157-45A6-8FFC-57063FF2B169}'
}
SLNKDWF.WhipFile = s 'WhipFile Class'
{
CLSID = s '{C2632BD5-3157-45A6-8FFC-57063FF2B169}'
CurVer = s 'SLNKDWF.WhipFile.1'
}
NoRemove CLSID
{
ForceRemove {C2632BD5-3157-45A6-8FFC-57063FF2B169} = s 'WhipFile Class'
{
ProgID = s 'SLNKDWF.WhipFile.1'
VersionIndependentProgID = s 'SLNKDWF.WhipFile'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '%APPID%'
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

View File

@@ -0,0 +1,50 @@
#ifndef __COMOBJECTEMBED_H_
#define __COMOBJECTEMBED_H_
template <class Base> //Base must be derived from CComObjectRoot
class CComObjectEmbed : public Base
{
public:
typedef Base _BaseClass;
CComObjectEmbed() {m_pOuterUnknown = NULL;}
CComObjectEmbed(void* pv) {m_pOuterUnknown = (IUnknown*)pv;}
void SetOuterUnknown(IUnknown *punkContainer) {m_pOuterUnknown = punkContainer;}
#ifdef xx_ATL_DEBUG_INTERFACES
~CComObjectEmbed()
{
_Module.DeleteNonAddRefThunk(_GetRawUnknown());
_Module.DeleteNonAddRefThunk(m_pOuterUnknown);
}
#endif
STDMETHOD_(ULONG, AddRef)() {return OuterAddRef();}
STDMETHOD_(ULONG, Release)() {return OuterRelease();}
STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject)
{
return _InternalQueryInterface(iid, ppvObject);
}
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp)
{
return QueryInterface(__uuidof(Q), (void**)pp);
}
//GetControllingUnknown may be virtual if the Base class has declared
//DECLARE_GET_CONTROLLING_UNKNOWN()
IUnknown* GetControllingUnknown()
{
#ifdef xx_ATL_DEBUG_INTERFACES
IUnknown* p;
_Module.AddNonAddRefThunk(m_pOuterUnknown, _T("CComObjectEmbed"), &p);
return p;
#else
return m_pOuterUnknown;
#endif
}
};
#endif /* !__COMOBJECTEMBED_H_ */

View File

@@ -0,0 +1,88 @@
// EPlotSections.cpp : Implementation of CEPlotSections
#include "stdafx.h"
#include "EPlotSections.h"
// CEPlotSections
STDMETHODIMP CEPlotSections::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IEPlotSections
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
// Omdat de tellingen gekoppeld zijn weten we zeker dat de refcount van
// onze eigen objecten ook 0 zal zijn en is het dus veilig ze weg te gooien (toch...?)
void CEPlotSections::FinalRelease()
{
return;
for (int i=0; i<(LONG)m_EPlotSections.GetCount(); i++)
{
CComObjectEmbed<CEPlotSection> *mySection;
mySection = &m_EPlotSections.GetAt(i);
mySection->FinalRelease();
// Gebeurt in de destructor van AtlArray! delete (&m_EPlotSections.GetAt(i));
}
}
void CEPlotSections::InitImpl(CEPlotSectionsImpl *epl)
{
m_pSectionsImpl = epl;
}
STDMETHODIMP CEPlotSections::get_Parent(IDWFFile **ppParent)
{
return m_pParent->QueryInterface(IID_IDWFFile, (void**)ppParent);
}
void CEPlotSections::SetParent(IDWFFile *pParent)
{
m_pParent = pParent;
}
// Actually process the EPlotSections and add them to our collection
BOOL CEPlotSections::ProcessManifest(DWFManifest& rManifest, CString sourceDescription)
{
ATLASSERT(false);
return TRUE;
}
STDMETHODIMP CEPlotSections::get_Count(LONG* pVal)
{
(*pVal) = (LONG)m_pSectionsImpl->get_Count();
return S_OK;
}
STDMETHODIMP CEPlotSections::get_Item(LONG i, IDispatch** pVal)
{
if (i<0 || i>=(LONG)m_pSectionsImpl->get_Count())
return E_INVALIDARG;
if (m_EPlotSections.GetCount() == 0)
{ // Tijd om de myEplotSectionImpl's te wrappen met onze myEplotSection's
for (int j=0; j<m_pSectionsImpl->get_Count(); j++)
{
CComObjectEmbed<CEPlotSection> *mySection = new CComObjectEmbed<CEPlotSection>; //= new tMyEplot;
mySection->SetParent(this);
CEPlotSectionImpl *ps;
ps = m_pSectionsImpl->get_Item(j);
mySection->InitImpl(ps);
mySection->SetOuterUnknown(GetControllingUnknown());
mySection->FinalConstruct();
m_EPlotSections.Add(*mySection);
}
}
ATLASSERT(i<(LONG)m_EPlotSections.GetCount());
return (m_EPlotSections.GetAt(i).QueryInterface(pVal));
}

View File

@@ -0,0 +1,121 @@
// EPlotSection.cpp : Implementation of CEPlotSection
#include "stdafx.h"
#include "myEPlotSection.h"
// CEPlotSection
STDMETHODIMP CEPlotSection::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IEPlotSection
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
void CEPlotSection::InitImpl(CEPlotSectionImpl *epl)
{
m_pSectionImpl = epl;
}
void CEPlotSection::FinalRelease()
{
}
STDMETHODIMP CEPlotSection::get_Parent(IEPlotSections **ppParent)
{
return m_pParent->QueryInterface(IID_IEPlotSections, (void**)ppParent);
}
void CEPlotSection::SetParent(IEPlotSections *pParent)
{
m_pParent = pParent;
}
STDMETHODIMP CEPlotSection::get_Name(BSTR* pVal)
{
CComBSTR bstrString(m_pSectionImpl->get_Name());
return bstrString.CopyTo(pVal);
}
STDMETHODIMP CEPlotSection::get_Title(BSTR* pVal)
{
CComBSTR bstrString(m_pSectionImpl->get_Title());
return bstrString.CopyTo(pVal);
}
STDMETHODIMP CEPlotSection::get_PaperColor(ULONG* pVal)
{
(*pVal) = m_pSectionImpl->get_PaperColor();
return S_OK;
}
// Always inches
STDMETHODIMP CEPlotSection::get_PaperClipWidth(DOUBLE* pVal)
{
(*pVal) = m_pSectionImpl->get_PaperClipWidth();
return S_OK;
}
STDMETHODIMP CEPlotSection::Open(BOOL bForWrite)
{
try
{
m_pSectionImpl->Open( bForWrite);
return S_OK;
}
catch (CString &err)
{
return myAtlReportError (GetObjectCLSID(), err);
}
}
HRESULT CEPlotSection::Read( void *pv, ULONG cb, ULONG *pcbRead)
{
return m_pSectionImpl->Read( pv, cb, pcbRead);
};
HRESULT CEPlotSection::Write( const void *pv, ULONG cb, ULONG *pcbWritten)
{
return m_pSectionImpl->Write( pv, cb, pcbWritten) ;
};
STDMETHODIMP CEPlotSection::Close(void)
{
return m_pSectionImpl->Close();
}
STDMETHODIMP CEPlotSection::get_SourceDescription(BSTR* pVal)
{
CString s;
HRESULT res = m_pSectionImpl->get_SourceDescription(s);
(*pVal) = s.AllocSysString();
return res;
}
STDMETHODIMP CEPlotSection::get_PropertiesXML(BSTR* pVal)
{
CString s;
HRESULT res = m_pSectionImpl->get_PropertiesXML(s);
(*pVal) = s.AllocSysString();
return res;
}
STDMETHODIMP CEPlotSection::get_EPlotSectionImpl(/* CEPlotSectionImpl ** */ BYTE ** pVal)
{
(*pVal) = (BYTE *)m_pSectionImpl;
return S_OK;
}
STDMETHODIMP CEPlotSection::put_EPlotSectionImpl(/* CEPlotSectionImpl * */ BYTE * newVal)
{
return E_FAIL;
return S_OK;
}

View File

@@ -0,0 +1,78 @@
// EPlotSection.h : Declaration of the CEPlotSection
#pragma once
#include "resource.h" // main symbols
#include "SLNKDWF.h"
#include "myEPlotSectionImpl.h"
#include "Whiptk/whip_toolkit.h"
// CEPlotSection
class ATL_NO_VTABLE CEPlotSection :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CEPlotSection, &CLSID_EPlotSection>,
public ISupportErrorInfo,
public IDispatchImpl<IEPlotSection, &IID_IEPlotSection, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
// public CEPlotSectionImpl
{
public:
CEPlotSection()
{
}
//REMOVED DECLARE_REGISTRY_RESOURCEID(IDR_EPLOTSECTION)
BEGIN_COM_MAP(CEPlotSection)
COM_INTERFACE_ENTRY(IEPlotSection)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease();
protected:
IEPlotSections *m_pParent; // Non-addreffed!
private:
CEPlotSectionImpl *m_pSectionImpl;
public:
void SetParent(IEPlotSections *pParent);
STDMETHODIMP get_Parent(IEPlotSections **ppParent);
STDMETHOD(get_Name)(BSTR* pVal);
STDMETHOD(get_Title)(BSTR* pVal);
void InitImpl(CEPlotSectionImpl *epl);
// IWhipSequentialStream Methods
public:
STDMETHOD(Open)(BOOL bForWrite);
STDMETHOD(Read) ( void *pv, ULONG cb, ULONG *pcbRead);
STDMETHOD(Write)( const void *pv, ULONG cb,ULONG *pcbWritten);
STDMETHOD(Close)(void);
STDMETHOD(get_PaperColor)(ULONG* pVal);
STDMETHOD(get_SourceDescription)(BSTR* pVal);
#if DESIRED_CODE(WHIP_OUTPUT)
STDMETHOD(get_PropertiesXML)(BSTR* pVal);
#endif
STDMETHOD(get_PaperClipWidth)(DOUBLE* pVal);
public:
STDMETHOD(get_EPlotSectionImpl)(/* CEPlotSectionImpl ** */ BYTE ** pVal);
public:
STDMETHOD(put_EPlotSectionImpl)(/* CEPlotSectionImpl * */ BYTE * newVal);
};
//REMOVED OBJECT_ENTRY_AUTO(__uuidof(EPlotSection), CEPlotSection)

38
SlnkDWFCom/resource.h Normal file
View File

@@ -0,0 +1,38 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by SLNKdwf.rc
//
#define IDS_PROJNAME 100
#define IDR_SLNKDWF 101
#define IDR_DWFFILE 102
#define IDR_WHIPFILE 103
#define IDR_WHIP2PNG 104
#define IDR_ABOUT 105
#define IDR_SLNKEPLOTSECTION 106
#define IDR_EPLOTSECTION 107
#define IDR_EPLOTSECTIONS 108
#define IDR_WHIPSEQUENTIALSTREAM 109
#define IDR_TEST 110
#define IDR_TEST2 111
#define IDR_SLNKEVENT 112
#define IDR_ASPOBJECT 113
#define IDR_WHIP2DC 114
#define IDR_DC2PNG 115
#define IDB_MYCONTROL 116
#define IDR_MYCONTROL 117
#define IDR_BOUNDINGBOX 118
#define IDR_DWGPOINT 119
#define IDR_SLNKCONTOUR 120
#define IDR_SLNKSYMBOL 126
#define IDR_OPTIONS 127
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 201
#define _APS_NEXT_COMMAND_VALUE 32768
#define _APS_NEXT_CONTROL_VALUE 201
#define _APS_NEXT_SYMED_VALUE 128
#endif
#endif

26
SlnkDWFCom/slnkcont.bin Normal file
View File

@@ -0,0 +1,26 @@
HKCR
{
SLNKDWFCom.SLNKContour.1 = s 'SLNKContour Class'
{
CLSID = s '{476C0F28-5860-485D-BEBD-D03F68E1C930}'
}
SLNKDWFCom.SLNKContour = s 'SLNKContour Class'
{
CLSID = s '{476C0F28-5860-485D-BEBD-D03F68E1C930}'
CurVer = s 'SLNKDWFCom.SLNKContour.1'
}
NoRemove CLSID
{
ForceRemove {476C0F28-5860-485D-BEBD-D03F68E1C930} = s 'SLNKContour Class'
{
ProgID = s 'SLNKDWFCom.SLNKContour.1'
VersionIndependentProgID = s 'SLNKDWFCom.SLNKContour'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
'TypeLib' = s '{B6FCDE6E-141C-4601-B3AC-4DF4D5F25DF8}'
}
}
}

74
SlnkDWFCom/slnksymbol.h Normal file
View File

@@ -0,0 +1,74 @@
// SLNKSymbol.h : Declaration of the CSLNKSymbol
#pragma once
#include "resource.h" // main symbols
#include "SLNKDWF.h"
#include "SLNKSymbolDefImpl.h"
#include "SLNKSymbolImpl.h"
#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
#endif
// CSLNKSymbol
class ATL_NO_VTABLE CSLNKSymbol :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSLNKSymbol, &CLSID_SLNKSymbol>,
public IDispatchImpl<ISLNKSymbol, &IID_ISLNKSymbol, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CSLNKSymbol()
{
}
//REMOVED DECLARE_REGISTRY_RESOURCEID(IDR_SLNKSYMBOL)
BEGIN_COM_MAP(CSLNKSymbol)
COM_INTERFACE_ENTRY(ISLNKSymbol)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
// Deze SLNKSymbol wijst naar een CSLNKSymbolImpl in een WhipFile object. We moeten voorkomen
// dat deze te snel uit de scope wegvalt. Dat doen we mbv SetParent
// Omgekeerd is geen probleem: de WhipFile verwijst niet(!) naar de CSLNKSymbol en heeft er dus
// geen last van dat die wegvalt (van zijn SLNKSymbolImpl objecten is hij gewoon eigenaar)
void SetParent(IWhipFile *pParent)
{
HRESULT hr = pParent->QueryInterface(IID_IWhipFile, (void **)&m_parent_iWhipFile);
};
void SetImpl(CSLNKSymbolImpl * pSLNKSymbol);
private:
CSLNKSymbolImpl * m_SLNKSymbol;
CComQIPtr<IWhipFile> m_parent_iWhipFile; // Om scope levend te houden
public:
STDMETHOD(get_Scale)(DOUBLE* pVal);
STDMETHOD(put_Scale)(DOUBLE newVal);
STDMETHOD(get_Rotation)(LONG* pVal);
STDMETHOD(put_Rotation)(LONG newVal);
STDMETHOD(get_Contour)(IUnknown** pVal);
};
//REMOVED OBJECT_ENTRY_AUTO(__uuidof(SLNKSymbol), CSLNKSymbol)

5
SlnkDWFCom/stdafx.cpp Normal file
View File

@@ -0,0 +1,5 @@
// stdafx.cpp : source file that includes just the standard includes
// SLNKDWF.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"

77
SlnkDWFCom/stdafx.h Normal file
View File

@@ -0,0 +1,77 @@
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently,
// but are changed infrequently
#pragma once
#ifndef STRICT
#define STRICT
#endif
// Modify the following defines if you have to target a platform prior to the ones specified below.
// Refer to MSDN for the latest info on corresponding values for different platforms.
#ifndef WINVER // Allow use of features specific to Windows XP or later.
#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.
#endif
#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
#endif
#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
#endif
#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later.
#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE.
#endif
#define _ATL_APARTMENT_THREADED
#define _ATL_NO_AUTOMATIC_NAMESPACE
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
// turns off ATL's hiding of some common and often safely ignored warning messages
#define _ATL_ALL_WARNINGS
#ifdef _DEBUG
//#define _ATL_DEBUG_INTERFACES
#endif
#include "resource.h"
#include <atlbase.h>
#include <atlcom.h>
using namespace ATL;
// [JGL] added manually
#include <atltypes.h>
#include "atlstr.h"
#include "atlrx.h"
#include "../SLNKDwfImpl/jglutil.h"
#include "Options.h"
#include "SLNKDWFStaticRW.h"
#include "dwfcore/File.h"
#include "dwfcore/String.h"
#include "dwf/package/Constants.h"
#include "dwf/package/Manifest.h"
#include "dwf/package/EPlotSection.h"
#include "dwf/package/reader/PackageReader.h"
//#include "dwf/package/writer/PackageWriter.h"
#include "dwf/package/xml.h"
#include "dwf/package/reader/DuplicateAttributeFilter.h"
using namespace DWFCore;
using namespace DWFToolkit;
//using namespace DWFManifest;
//using namespace DWFXmlObjects;
//using namespace DWFEPlot;
//using DWF::DwfResult;
#ifdef _DEBUG
#include "MemLeakDetect.h"
#endif

4
SlnkDWFCom/unloadIIS.bat Normal file
View File

@@ -0,0 +1,4 @@
C:\Inetpub\AdminScripts\adsutil.vbs APPUNLOAD W3SVC/1/Root/SLNKDWF
C:\Inetpub\AdminScripts\adsutil.vbs APPUNLOAD W3SVC/1/Root/Vigor
C:\Inetpub\AdminScripts\adsutil.vbs APPUNLOAD W3SVC/1/Root/FacilitorWork
C:\Inetpub\AdminScripts\adsutil.vbs START_SERVER W3SVC/1

View File

@@ -0,0 +1,13 @@
// CxImageCrtDll.cpp : Defines the entry point for the CxImageCrtDll application.
//
#include "stdcrt.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

View File

@@ -0,0 +1,346 @@
# Microsoft Developer Studio Project File - Name="CxImageCrtDll" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=CxImageCrtDll - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "CxImageCrtDll.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "CxImageCrtDll.mak" CFG="CxImageCrtDll - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "CxImageCrtDll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "CxImageCrtDll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "CxImageCrtDll - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRCxImageCrtDll" /D "CxImageCrtDll_EXPORTS" /Yu"stdafx.h" /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../zlib" /I "../../jasper/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JAS_WIN_MSVC_BUILD" /FD /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /machine:I386 /CxImageCrtDll
# ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /dll /machine:I386 /out:"../../bin/cximagecrt.dll"
# SUBTRACT LINK32 /pdb:none
!ELSEIF "$(CFG)" == "CxImageCrtDll - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRCxImageCrtDll" /D "CxImageCrtDll_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../zlib" /I "../../jasper/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JAS_WIN_MSVC_BUILD" /FD /GZ /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /debug /machine:I386 /pdbtype:sept /CxImageCrtDll
# ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /dll /debug /machine:I386 /out:"../../bin/cximagecrtd.dll" /pdbtype:sept
# SUBTRACT LINK32 /pdb:none
!ENDIF
# Begin Target
# Name "CxImageCrtDll - Win32 Release"
# Name "CxImageCrtDll - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\CxImageCrtDll.cpp
# End Source File
# Begin Source File
SOURCE=.\CxImageCrtDll.rc
# End Source File
# Begin Source File
SOURCE=..\tif_xfile.cpp
# End Source File
# Begin Source File
SOURCE=..\ximabmp.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximadsp.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximaenc.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximaexif.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximage.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximagif.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximahist.cpp
# End Source File
# Begin Source File
SOURCE=..\ximaico.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximainfo.cpp
# End Source File
# Begin Source File
SOURCE=..\ximaint.cpp
# End Source File
# Begin Source File
SOURCE=..\ximaj2k.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximajas.cpp
# End Source File
# Begin Source File
SOURCE=..\ximajbg.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximajpg.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximalpha.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximalyr.cpp
# End Source File
# Begin Source File
SOURCE=..\ximamng.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximapal.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximapcx.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximapng.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximasel.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximatga.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximath.cpp
# End Source File
# Begin Source File
SOURCE=..\ximatif.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximatran.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximawbmp.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximawmf.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\ximawnd.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=..\xmemfile.cpp
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\StdAfx.h
# End Source File
# Begin Source File
SOURCE=..\xfile.h
# End Source File
# Begin Source File
SOURCE=..\ximabmp.h
# End Source File
# Begin Source File
SOURCE=..\ximadefs.h
# End Source File
# Begin Source File
SOURCE=..\xImage.h
# End Source File
# Begin Source File
SOURCE=..\ximagif.h
# End Source File
# Begin Source File
SOURCE=..\ximaico.h
# End Source File
# Begin Source File
SOURCE=..\ximaiter.h
# End Source File
# Begin Source File
SOURCE=..\ximaj2k.h
# End Source File
# Begin Source File
SOURCE=..\ximajas.h
# End Source File
# Begin Source File
SOURCE=..\ximajbg.h
# End Source File
# Begin Source File
SOURCE=..\ximajpg.h
# End Source File
# Begin Source File
SOURCE=..\ximamng.h
# End Source File
# Begin Source File
SOURCE=..\ximapcx.h
# End Source File
# Begin Source File
SOURCE=..\ximapng.h
# End Source File
# Begin Source File
SOURCE=..\ximatga.h
# End Source File
# Begin Source File
SOURCE=..\ximath.h
# End Source File
# Begin Source File
SOURCE=..\ximatif.h
# End Source File
# Begin Source File
SOURCE=..\ximawbmp.h
# End Source File
# Begin Source File
SOURCE=..\ximawmf.h
# End Source File
# Begin Source File
SOURCE=..\xiofile.h
# End Source File
# Begin Source File
SOURCE=..\xmemfile.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@@ -0,0 +1,123 @@
//Microsoft Developer Studio generated resource script.
//
#include "resrc1.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "resource.h"
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Neutral resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
#ifdef _WIN32
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(1252)
#endif //_WIN32
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 5,9,9,3
PRODUCTVERSION 5,9,9,3
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "000004b0"
BEGIN
VALUE "Comments", "CxImage 5.99c CRT DLL\0"
VALUE "CompanyName", "Pizzolato Davide - www.xdp.it\0"
VALUE "FileDescription", "cximage\0"
VALUE "FileVersion", "5, 9, 9, c\0"
VALUE "InternalName", "cximage\0"
VALUE "LegalCopyright", "Copyright <20> 2001 - 2004\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "cximagecrt.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "cximage\0"
VALUE "ProductVersion", "5, 9, 9, c\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0, 1200
END
END
#endif // !_MAC
#endif // Neutral resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Italian (Italy) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ITA)
#ifdef _WIN32
LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resrc1.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""resource.h""\r\n"
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // Italian (Italy) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8,00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="PC53_JGL"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="PC53_JGL"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@@ -0,0 +1,152 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "CxImageCrtDll"=.\CxImageCrtDll.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name j2000
End Project Dependency
Begin Project Dependency
Project_Dep_Name jbig
End Project Dependency
Begin Project Dependency
Project_Dep_Name jpeg
End Project Dependency
Begin Project Dependency
Project_Dep_Name png
End Project Dependency
Begin Project Dependency
Project_Dep_Name tiff
End Project Dependency
Begin Project Dependency
Project_Dep_Name zlib
End Project Dependency
Begin Project Dependency
Project_Dep_Name j2k
End Project Dependency
}}}
###############################################################################
Project: "CxImageMfcDll"=.\cximagemfcdll.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name j2k
End Project Dependency
Begin Project Dependency
Project_Dep_Name jbig
End Project Dependency
Begin Project Dependency
Project_Dep_Name jpeg
End Project Dependency
Begin Project Dependency
Project_Dep_Name png
End Project Dependency
Begin Project Dependency
Project_Dep_Name tiff
End Project Dependency
Begin Project Dependency
Project_Dep_Name zlib
End Project Dependency
}}}
###############################################################################
Project: "j2k"=..\..\j2k\j2k.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "jbig"=..\..\jbig\jbig.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "jpeg"=..\..\jpeg\Jpeg.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "png"=..\..\png\png.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "tiff"=..\..\tiff\Tiff.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "zlib"=..\..\zlib\zlib.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -0,0 +1,16 @@
; CLW file contains information for the MFC ClassWizard
[General Info]
Version=1
ClassCount=1
Class1=CcximagemfcdllApp
LastClass=CcximagemfcdllApp
NewFileInclude2=#include "cximagemfcdll.h"
ResourceCount=0
NewFileInclude1=#include "stdafx.h"
[CLS:CcximagemfcdllApp]
Type=0
HeaderFile=cximagemfcdll.h
ImplementationFile=cximagemfcdll.cpp
Filter=N

View File

@@ -0,0 +1,62 @@
// cximagemfcdll.cpp : Defines the initialization routines for the DLL.
//
#include "stdafx.h"
#include "cximagemfcdll.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//
// Note!
//
// If this DLL is dynamically linked against the MFC
// DLLs, any functions exported from this DLL which
// call into MFC must have the AFX_MANAGE_STATE macro
// added at the very beginning of the function.
//
// For example:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // normal function body here
// }
//
// It is very important that this macro appear in each
// function, prior to any calls into MFC. This means that
// it must appear as the first statement within the
// function, even before any object variable declarations
// as their constructors may generate calls into the MFC
// DLL.
//
// Please see MFC Technical Notes 33 and 58 for additional
// details.
//
/////////////////////////////////////////////////////////////////////////////
// CcximagemfcdllApp
BEGIN_MESSAGE_MAP(CcximagemfcdllApp, CWinApp)
//{{AFX_MSG_MAP(CcximagemfcdllApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CcximagemfcdllApp construction
CcximagemfcdllApp::CcximagemfcdllApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CcximagemfcdllApp object
CcximagemfcdllApp theApp;

View File

@@ -0,0 +1,45 @@
// cximagemfcdll.h : main header file for the cximagemfcdll DLL
//
#if !defined(AFX_cximagemfcdll_H__E98F71A6_B361_11D6_BB83_CAEE2E1CB77B__INCLUDED_)
#define AFX_cximagemfcdll_H__E98F71A6_B361_11D6_BB83_CAEE2E1CB77B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// CcximagemfcdllApp
// See cximagemfcdll.cpp for the implementation of this class
//
class CcximagemfcdllApp : public CWinApp
{
public:
CcximagemfcdllApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CcximagemfcdllApp)
//}}AFX_VIRTUAL
//{{AFX_MSG(CcximagemfcdllApp)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_cximagemfcdll_H__E98F71A6_B361_11D6_BB83_CAEE2E1CB77B__INCLUDED_)

View File

@@ -0,0 +1,123 @@
//Microsoft Developer Studio generated resource script.
//
#include "resrc1.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "resource.h"
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Neutral resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
#ifdef _WIN32
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(1252)
#endif //_WIN32
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 5,9,9,3
PRODUCTVERSION 5,9,9,3
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "000004b0"
BEGIN
VALUE "Comments", "CxImage 5.99c MFC DLL\0"
VALUE "CompanyName", "Pizzolato Davide - www.xdp.it\0"
VALUE "FileDescription", "cximage\0"
VALUE "FileVersion", "5, 9, 9, c\0"
VALUE "InternalName", "cximage\0"
VALUE "LegalCopyright", "Copyright <20> 2001 - 2004\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "cximage.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "cximage\0"
VALUE "ProductVersion", "5, 9, 9, c\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0, 1200
END
END
#endif // !_MAC
#endif // Neutral resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Italian (Italy) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ITA)
#ifdef _WIN32
LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resrc1.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""resource.h""\r\n"
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // Italian (Italy) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@@ -0,0 +1,8 @@
// stdafx.cpp : source file that includes just the standard includes
// cximagemfcdll.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"

View File

@@ -0,0 +1,42 @@
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__E98F71A8_B361_11D6_BB83_CAEE2E1CB77B__INCLUDED_)
#define AFX_STDAFX_H__E98F71A8_B361_11D6_BB83_CAEE2E1CB77B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxole.h> // MFC OLE classes
#include <afxodlgs.h> // MFC OLE dialog classes
#include <afxdisp.h> // MFC Automation classes
#endif // _AFX_NO_OLE_SUPPORT
#ifndef _AFX_NO_DB_SUPPORT
#include <afxdb.h> // MFC ODBC database classes
#endif // _AFX_NO_DB_SUPPORT
#ifndef _AFX_NO_DAO_SUPPORT
#include <afxdao.h> // MFC DAO database classes
#endif // _AFX_NO_DAO_SUPPORT
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__E98F71A8_B361_11D6_BB83_CAEE2E1CB77B__INCLUDED_)

View File

@@ -0,0 +1,24 @@
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__F30A8A60_284F_4DF6_9431_6283105686F6__INCLUDED_)
#define AFX_STDAFX_H__F30A8A60_284F_4DF6_9431_6283105686F6__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Insert your headers here
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
// TODO: reference additional headers your program requires here
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__F30A8A60_284F_4DF6_9431_6283105686F6__INCLUDED_)

View File

@@ -0,0 +1,330 @@
# Microsoft Developer Studio Project File - Name="CxImageMfcDll" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=CxImageMfcDll - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "cximagemfcdll.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "cximagemfcdll.mak" CFG="CxImageMfcDll - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "CxImageMfcDll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "CxImageMfcDll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "CxImageMfcDll - Win32 Release"
# PROP BASE Use_MFC 6
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 6
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /Yu"stdafx.h" /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../zlib" /I "../../jasper/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /D "JAS_WIN_MSVC_BUILD" /FD /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x410 /d "NDEBUG" /d "_AFXDLL"
# ADD RSC /l 0x410 /d "NDEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:windows /dll /machine:I386
# ADD LINK32 /nologo /subsystem:windows /dll /machine:I386 /out:"../../bin/cximage.dll"
!ELSEIF "$(CFG)" == "CxImageMfcDll - Win32 Debug"
# PROP BASE Use_MFC 6
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 6
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /Yu"stdafx.h" /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../zlib" /I "../../jasper/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /D "JAS_WIN_MSVC_BUILD" /FD /GZ /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x410 /d "_DEBUG" /d "_AFXDLL"
# ADD RSC /l 0x410 /d "_DEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /out:"../../bin/cximaged.dll" /pdbtype:sept
!ENDIF
# Begin Target
# Name "CxImageMfcDll - Win32 Release"
# Name "CxImageMfcDll - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\cximagemfcdll.cpp
# End Source File
# Begin Source File
SOURCE=.\cximagemfcdll.rc
# End Source File
# Begin Source File
SOURCE=.\StdAfx.cpp
# ADD CPP /Yc"stdafx.h"
# End Source File
# Begin Source File
SOURCE=..\tif_xfile.cpp
# End Source File
# Begin Source File
SOURCE=..\ximabmp.cpp
# End Source File
# Begin Source File
SOURCE=..\ximadsp.cpp
# End Source File
# Begin Source File
SOURCE=..\ximaenc.cpp
# End Source File
# Begin Source File
SOURCE=..\ximaexif.cpp
# End Source File
# Begin Source File
SOURCE=..\ximage.cpp
# End Source File
# Begin Source File
SOURCE=..\ximagif.cpp
# End Source File
# Begin Source File
SOURCE=..\ximahist.cpp
# End Source File
# Begin Source File
SOURCE=..\ximaico.cpp
# End Source File
# Begin Source File
SOURCE=..\ximainfo.cpp
# End Source File
# Begin Source File
SOURCE=..\ximaint.cpp
# End Source File
# Begin Source File
SOURCE=..\ximaj2k.cpp
# End Source File
# Begin Source File
SOURCE=..\ximajas.cpp
# End Source File
# Begin Source File
SOURCE=..\ximajbg.cpp
# End Source File
# Begin Source File
SOURCE=..\ximajpg.cpp
# End Source File
# Begin Source File
SOURCE=..\ximalpha.cpp
# End Source File
# Begin Source File
SOURCE=..\ximalyr.cpp
# End Source File
# Begin Source File
SOURCE=..\ximamng.cpp
# End Source File
# Begin Source File
SOURCE=..\ximapal.cpp
# End Source File
# Begin Source File
SOURCE=..\ximapcx.cpp
# End Source File
# Begin Source File
SOURCE=..\ximapng.cpp
# End Source File
# Begin Source File
SOURCE=..\ximasel.cpp
# End Source File
# Begin Source File
SOURCE=..\ximatga.cpp
# End Source File
# Begin Source File
SOURCE=..\ximath.cpp
# End Source File
# Begin Source File
SOURCE=..\ximatif.cpp
# End Source File
# Begin Source File
SOURCE=..\ximatran.cpp
# End Source File
# Begin Source File
SOURCE=..\ximawbmp.cpp
# End Source File
# Begin Source File
SOURCE=..\ximawmf.cpp
# End Source File
# Begin Source File
SOURCE=..\ximawnd.cpp
# End Source File
# Begin Source File
SOURCE=..\xmemfile.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\cximagemfcdll.h
# End Source File
# Begin Source File
SOURCE=.\Resource.h
# End Source File
# Begin Source File
SOURCE=.\StdAfx.h
# End Source File
# Begin Source File
SOURCE=..\xfile.h
# End Source File
# Begin Source File
SOURCE=..\ximabmp.h
# End Source File
# Begin Source File
SOURCE=..\ximadefs.h
# End Source File
# Begin Source File
SOURCE=..\ximage.h
# End Source File
# Begin Source File
SOURCE=..\ximagif.h
# End Source File
# Begin Source File
SOURCE=..\ximaico.h
# End Source File
# Begin Source File
SOURCE=..\ximaiter.h
# End Source File
# Begin Source File
SOURCE=..\ximaj2k.h
# End Source File
# Begin Source File
SOURCE=..\ximajas.h
# End Source File
# Begin Source File
SOURCE=..\ximajpg.h
# End Source File
# Begin Source File
SOURCE=..\ximamng.h
# End Source File
# Begin Source File
SOURCE=..\ximapcx.h
# End Source File
# Begin Source File
SOURCE=..\ximapng.h
# End Source File
# Begin Source File
SOURCE=..\ximatga.h
# End Source File
# Begin Source File
SOURCE=..\ximath.h
# End Source File
# Begin Source File
SOURCE=..\ximatif.h
# End Source File
# Begin Source File
SOURCE=..\ximawbmp.h
# End Source File
# Begin Source File
SOURCE=..\ximawmf.h
# End Source File
# Begin Source File
SOURCE=..\xiofile.h
# End Source File
# Begin Source File
SOURCE=..\xmemfile.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8,00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="PC53_JGL"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="PC53_JGL"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@@ -0,0 +1,15 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by CxImageMFCdll.rc
//
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 6000
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 6000
#define _APS_NEXT_SYMED_VALUE 6000
#endif
#endif

View File

@@ -0,0 +1,15 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by CxImageCrtDll.rc
//
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 6000
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 6000
#define _APS_NEXT_SYMED_VALUE 6000
#endif
#endif

View File

@@ -0,0 +1,52 @@
#if !defined(__ximaCFG_h)
#define __ximaCFG_h
/////////////////////////////////////////////////////////////////////////////
// CxImage supported features
#define CXIMAGE_SUPPORT_ALPHA 1
#define CXIMAGE_SUPPORT_SELECTION 1
#define CXIMAGE_SUPPORT_TRANSFORMATION 1
#define CXIMAGE_SUPPORT_DSP 1
#define CXIMAGE_SUPPORT_LAYERS 1
#define CXIMAGE_SUPPORT_INTERPOLATION 1
#define CXIMAGE_SUPPORT_DECODE 1
#define CXIMAGE_SUPPORT_ENCODE 1 //<vho><T.Peck>
#define CXIMAGE_SUPPORT_WINDOWS 1
#define CXIMAGE_SUPPORT_WINCE 0 //<T.Peck>
/////////////////////////////////////////////////////////////////////////////
// CxImage supported formats
#define CXIMAGE_SUPPORT_BMP 1
#define CXIMAGE_SUPPORT_GIF 1
#define CXIMAGE_SUPPORT_JPG 1
#define CXIMAGE_SUPPORT_PNG 1
#define CXIMAGE_SUPPORT_MNG 0
#define CXIMAGE_SUPPORT_ICO 1
#define CXIMAGE_SUPPORT_TIF 1
#define CXIMAGE_SUPPORT_TGA 1
#define CXIMAGE_SUPPORT_PCX 1
#define CXIMAGE_SUPPORT_WBMP 1
#define CXIMAGE_SUPPORT_WMF 1
#define CXIMAGE_SUPPORT_J2K 0 // Beta, use JP2
#define CXIMAGE_SUPPORT_JBG 0 // GPL'd see ../jbig/copying.txt & ../jbig/patents.htm
#define CXIMAGE_SUPPORT_JP2 1
#define CXIMAGE_SUPPORT_JPC 1
#define CXIMAGE_SUPPORT_PGX 1
#define CXIMAGE_SUPPORT_PNM 1
#define CXIMAGE_SUPPORT_RAS 1
/////////////////////////////////////////////////////////////////////////////
#define CXIMAGE_MAX_MEMORY 256000000
#define CXIMAGE_ERR_NOFILE "null file handler"
#define CXIMAGE_ERR_NOIMAGE "null image!!!"
/////////////////////////////////////////////////////////////////////////////
//color to grey mapping <H. Muelner> <jurgene>
//#define RGB2GRAY(r,g,b) (((b)*114 + (g)*587 + (r)*299)/1000)
#define RGB2GRAY(r,g,b) (((b)*117 + (g)*601 + (r)*306) >> 10)
#endif

View File

@@ -0,0 +1,302 @@
# Microsoft Developer Studio Project File - Name="CxImage" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=CxImage - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "cximage.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "cximage.mak" CFG="CxImage - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "CxImage - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "CxImage - Win32 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "CxImage - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 2
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\jpeg" /I "..\png" /I "..\zlib" /I "..\mng" /I "..\tiff" /I "..\j2k" /I "..\jasper\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_AFXDLL" /D "JAS_WIN_MSVC_BUILD" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x410 /d "NDEBUG"
# ADD RSC /l 0x410 /d "NDEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "CxImage - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 2
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\jpeg" /I "..\png" /I "..\zlib" /I "..\mng" /I "..\tiff" /I "..\j2k" /I "..\jasper\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "_AFXDLL" /D "JAS_WIN_MSVC_BUILD" /FD /GZ /c
# SUBTRACT CPP /Fr /YX
# ADD BASE RSC /l 0x410 /d "_DEBUG"
# ADD RSC /l 0x410 /d "_DEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ENDIF
# Begin Target
# Name "CxImage - Win32 Release"
# Name "CxImage - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\tif_xfile.cpp
# End Source File
# Begin Source File
SOURCE=.\ximabmp.cpp
# End Source File
# Begin Source File
SOURCE=.\ximadsp.cpp
# End Source File
# Begin Source File
SOURCE=.\ximaenc.cpp
# End Source File
# Begin Source File
SOURCE=.\ximaexif.cpp
# End Source File
# Begin Source File
SOURCE=.\xImage.cpp
# End Source File
# Begin Source File
SOURCE=.\ximagif.cpp
# End Source File
# Begin Source File
SOURCE=.\ximahist.cpp
# End Source File
# Begin Source File
SOURCE=.\ximaico.cpp
# End Source File
# Begin Source File
SOURCE=.\ximainfo.cpp
# End Source File
# Begin Source File
SOURCE=.\ximaint.cpp
# End Source File
# Begin Source File
SOURCE=.\ximaj2k.cpp
# End Source File
# Begin Source File
SOURCE=.\ximajas.cpp
# End Source File
# Begin Source File
SOURCE=.\ximajbg.cpp
# End Source File
# Begin Source File
SOURCE=.\ximajpg.cpp
# End Source File
# Begin Source File
SOURCE=.\ximalpha.cpp
# End Source File
# Begin Source File
SOURCE=.\ximalyr.cpp
# End Source File
# Begin Source File
SOURCE=.\ximamng.cpp
# End Source File
# Begin Source File
SOURCE=.\ximapal.cpp
# End Source File
# Begin Source File
SOURCE=.\ximapcx.cpp
# End Source File
# Begin Source File
SOURCE=.\ximapng.cpp
# End Source File
# Begin Source File
SOURCE=.\ximasel.cpp
# End Source File
# Begin Source File
SOURCE=.\ximatga.cpp
# End Source File
# Begin Source File
SOURCE=.\ximath.cpp
# End Source File
# Begin Source File
SOURCE=.\ximatif.cpp
# End Source File
# Begin Source File
SOURCE=.\ximatran.cpp
# End Source File
# Begin Source File
SOURCE=.\ximawbmp.cpp
# End Source File
# Begin Source File
SOURCE=.\ximawmf.cpp
# End Source File
# Begin Source File
SOURCE=.\ximawnd.cpp
# End Source File
# Begin Source File
SOURCE=.\xmemfile.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\xfile.h
# End Source File
# Begin Source File
SOURCE=.\ximabmp.h
# End Source File
# Begin Source File
SOURCE=.\ximacfg.h
# End Source File
# Begin Source File
SOURCE=.\ximadef.h
# End Source File
# Begin Source File
SOURCE=.\ximage.h
# End Source File
# Begin Source File
SOURCE=.\ximagif.h
# End Source File
# Begin Source File
SOURCE=.\ximaico.h
# End Source File
# Begin Source File
SOURCE=.\ximaiter.h
# End Source File
# Begin Source File
SOURCE=.\ximaj2k.h
# End Source File
# Begin Source File
SOURCE=.\ximajas.h
# End Source File
# Begin Source File
SOURCE=.\ximajbg.h
# End Source File
# Begin Source File
SOURCE=.\ximajpg.h
# End Source File
# Begin Source File
SOURCE=.\ximamng.h
# End Source File
# Begin Source File
SOURCE=.\ximapcx.h
# End Source File
# Begin Source File
SOURCE=.\ximapng.h
# End Source File
# Begin Source File
SOURCE=.\ximatga.h
# End Source File
# Begin Source File
SOURCE=.\ximath.h
# End Source File
# Begin Source File
SOURCE=.\ximatif.h
# End Source File
# Begin Source File
SOURCE=.\ximawbmp.h
# End Source File
# Begin Source File
SOURCE=.\ximawmf.h
# End Source File
# Begin Source File
SOURCE=.\xiofile.h
# End Source File
# Begin Source File
SOURCE=.\xmemfile.h
# End Source File
# End Group
# End Target
# End Project

View File

@@ -0,0 +1,29 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "CxImage"=.\CxImage.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -0,0 +1,21 @@
Microsoft Visual Studio Solution File, Format Version 7.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CxImage", "CxImage.vcproj", "{E6F8F128-84D9-48D6-81D6-C427EAFE738D}"
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
ConfigName.0 = Debug
ConfigName.1 = Release
EndGlobalSection
GlobalSection(ProjectDependencies) = postSolution
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{E6F8F128-84D9-48D6-81D6-C427EAFE738D}.Debug.ActiveCfg = Debug|Win32
{E6F8F128-84D9-48D6-81D6-C427EAFE738D}.Debug.Build.0 = Debug|Win32
{E6F8F128-84D9-48D6-81D6-C427EAFE738D}.Release.ActiveCfg = Release|Win32
{E6F8F128-84D9-48D6-81D6-C427EAFE738D}.Release.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,932 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8,00"
Name="CxImage"
ProjectGUID="{C8E16319-530C-47D5-BED8-B18AB41FC01F}"
Keyword="MFCProj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\Release"
IntermediateDirectory=".\Release"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="2"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\jpeg,..\png,..\zlib,..\mng,..\tiff,..\j2k,..\jasper\include"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;JAS_WIN_MSVC_BUILD"
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\Release/cximage.pch"
AssemblerListingLocation=".\Release/"
ObjectFile=".\Release/"
ProgramDataBaseFileName=".\Release/"
WarningLevel="3"
SuppressStartupBanner="true"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1040"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\Release\cximage.lib"
SuppressStartupBanner="true"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile=".\Release/cximage.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="4"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="2"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\jpeg,..\png,..\zlib,..\mng,..\tiff,..\j2k,..\jasper\include"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;JAS_WIN_MSVC_BUILD"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
PrecompiledHeaderFile=".\Debug/cximage.pch"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1040"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\Debug\cximage.lib"
SuppressStartupBanner="true"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile=".\Debug/cximage.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
>
<File
RelativePath="tif_xfile.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximabmp.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximadsp.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximaenc.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximaexif.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="xImage.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximagif.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximahist.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximaico.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximainfo.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximaint.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximaj2k.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximajas.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximajbg.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximajpg.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximalpha.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximalyr.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximamng.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximapal.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximapcx.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximapng.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximasel.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximatga.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximath.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximatif.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximatran.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximawbmp.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximawmf.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="ximawnd.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="xmemfile.cpp"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl"
>
<File
RelativePath="xfile.h"
>
</File>
<File
RelativePath="ximabmp.h"
>
</File>
<File
RelativePath="ximacfg.h"
>
</File>
<File
RelativePath="ximadef.h"
>
</File>
<File
RelativePath="ximage.h"
>
</File>
<File
RelativePath="ximagif.h"
>
</File>
<File
RelativePath="ximaico.h"
>
</File>
<File
RelativePath="ximaiter.h"
>
</File>
<File
RelativePath="ximaj2k.h"
>
</File>
<File
RelativePath="ximajas.h"
>
</File>
<File
RelativePath="ximajbg.h"
>
</File>
<File
RelativePath="ximajpg.h"
>
</File>
<File
RelativePath="ximamng.h"
>
</File>
<File
RelativePath="ximapcx.h"
>
</File>
<File
RelativePath="ximapng.h"
>
</File>
<File
RelativePath="ximatga.h"
>
</File>
<File
RelativePath="ximath.h"
>
</File>
<File
RelativePath="ximatif.h"
>
</File>
<File
RelativePath="ximawbmp.h"
>
</File>
<File
RelativePath="ximawmf.h"
>
</File>
<File
RelativePath="xiofile.h"
>
</File>
<File
RelativePath="xmemfile.h"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8,00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="PC53_JGL"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="PC53_JGL"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@@ -0,0 +1,272 @@
<?xml version="1.0" encoding = "Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.00"
Name="CxImage2003"
ProjectGUID="{8C3365D1-9920-4ACA-8CB2-B85DE4469A9B}"
Keyword="MFCProj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\Release"
IntermediateDirectory=".\Release"
ConfigurationType="4"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\jpeg,..\png,..\zlib,..\mng,..\tiff,..\j2k,..\jasper\include"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;JAS_WIN_MSVC_BUILD"
StringPooling="TRUE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="TRUE"
PrecompiledHeaderFile=".\Release/cximage.pch"
AssemblerListingLocation=".\Release/"
ObjectFile=".\Release/"
ProgramDataBaseFileName=".\Release/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\Release\cximage.lib"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_AFXDLL;NDEBUG"
Culture="1040"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="4"
UseOfMFC="2"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\jpeg,..\png,..\zlib,..\mng,..\tiff,..\j2k,..\jasper\include"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;JAS_WIN_MSVC_BUILD"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
PrecompiledHeaderFile=".\Debug/cximage.pch"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="4"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\Debug\cximage.lib"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_AFXDLL;_DEBUG"
Culture="1040"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
</Configuration>
</Configurations>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath=".\tif_xfile.cpp">
</File>
<File
RelativePath=".\xImage.cpp">
</File>
<File
RelativePath=".\ximabmp.cpp">
</File>
<File
RelativePath=".\ximadsp.cpp">
</File>
<File
RelativePath=".\ximaenc.cpp">
</File>
<File
RelativePath=".\ximaexif.cpp">
</File>
<File
RelativePath=".\ximagif.cpp">
</File>
<File
RelativePath=".\ximahist.cpp">
</File>
<File
RelativePath=".\ximaico.cpp">
</File>
<File
RelativePath=".\ximainfo.cpp">
</File>
<File
RelativePath=".\ximaint.cpp">
</File>
<File
RelativePath=".\ximaj2k.cpp">
</File>
<File
RelativePath=".\ximajas.cpp">
</File>
<File
RelativePath=".\ximajbg.cpp">
</File>
<File
RelativePath=".\ximajpg.cpp">
</File>
<File
RelativePath=".\ximalpha.cpp">
</File>
<File
RelativePath=".\ximalyr.cpp">
</File>
<File
RelativePath=".\ximamng.cpp">
</File>
<File
RelativePath=".\ximapal.cpp">
</File>
<File
RelativePath=".\ximapcx.cpp">
</File>
<File
RelativePath=".\ximapng.cpp">
</File>
<File
RelativePath=".\ximasel.cpp">
</File>
<File
RelativePath=".\ximatga.cpp">
</File>
<File
RelativePath=".\ximath.cpp">
</File>
<File
RelativePath=".\ximatif.cpp">
</File>
<File
RelativePath=".\ximatran.cpp">
</File>
<File
RelativePath=".\ximawbmp.cpp">
</File>
<File
RelativePath=".\ximawmf.cpp">
</File>
<File
RelativePath=".\ximawnd.cpp">
</File>
<File
RelativePath=".\xmemfile.cpp">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath=".\xfile.h">
</File>
<File
RelativePath=".\ximabmp.h">
</File>
<File
RelativePath=".\ximacfg.h">
</File>
<File
RelativePath=".\ximadef.h">
</File>
<File
RelativePath=".\ximage.h">
</File>
<File
RelativePath=".\ximagif.h">
</File>
<File
RelativePath=".\ximaico.h">
</File>
<File
RelativePath=".\ximaiter.h">
</File>
<File
RelativePath=".\ximaj2k.h">
</File>
<File
RelativePath=".\ximajas.h">
</File>
<File
RelativePath=".\ximajbg.h">
</File>
<File
RelativePath=".\ximajpg.h">
</File>
<File
RelativePath=".\ximamng.h">
</File>
<File
RelativePath=".\ximapcx.h">
</File>
<File
RelativePath=".\ximapng.h">
</File>
<File
RelativePath=".\ximatga.h">
</File>
<File
RelativePath=".\ximath.h">
</File>
<File
RelativePath=".\ximatif.h">
</File>
<File
RelativePath=".\ximawbmp.h">
</File>
<File
RelativePath=".\ximawmf.h">
</File>
<File
RelativePath=".\xiofile.h">
</File>
<File
RelativePath=".\xmemfile.h">
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -0,0 +1,48 @@
This copy of the CxImage notices is provided for your convenience. In case of
any discrepancy between this copy and the notices in the file ximage.h that is
included in the CxImage distribution, the latter shall prevail.
If you modify CxImage you may insert additional notices immediately following
this sentence.
--------------------------------------------------------------------------------
COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
CxImage version 5.99c 17/Oct/2004
CxImage : Copyright (C) 2001 - 2004, Davide Pizzolato
Original CImage and CImageIterator implementation are:
Copyright (C) 1995, Alejandro Aguilar Sierra (asierra(at)servidor(dot)unam(dot)mx)
Covered code is provided under this license on an "as is" basis, without warranty
of any kind, either expressed or implied, including, without limitation, warranties
that the covered code is free of defects, merchantable, fit for a particular purpose
or non-infringing. The entire risk as to the quality and performance of the covered
code is with you. Should any covered code prove defective in any respect, you (not
the initial developer or any other contributor) assume the cost of any necessary
servicing, repair or correction. This disclaimer of warranty constitutes an essential
part of this license. No use of any covered code is authorized hereunder except under
this disclaimer.
Permission is hereby granted to use, copy, modify, and distribute this
source code, or portions hereof, for any purpose, including commercial applications,
freely and without fee, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
--------------------------------------------------------------------------------
Other information: about CxImage, and the latest version, can be found at the
CxImage home page: http://www.xdp.it
--------------------------------------------------------------------------------

View File

@@ -0,0 +1,208 @@
/*
* TIFF file IO, using CxFile.
*/
#ifdef WIN32
#include <windows.h>
#endif
#include <stdio.h>
#include "ximage.h"
#if CXIMAGE_SUPPORT_TIF
#include "../tiff/tiffiop.h"
#include "xfile.h"
static tsize_t
_tiffReadProcEx(thandle_t fd, tdata_t buf, tsize_t size)
{
return ((CxFile*)fd)->Read(buf, 1, size);
}
static tsize_t
_tiffWriteProcEx(thandle_t fd, tdata_t buf, tsize_t size)
{
return ((CxFile*)fd)->Write(buf, 1, size);
}
static toff_t
_tiffSeekProcEx(thandle_t fd, toff_t off, int whence)
{
if ( off == 0xFFFFFFFF )
return 0xFFFFFFFF;
if (!((CxFile*)fd)->Seek(off, whence))
return 0xFFFFFFFF;
if (whence == SEEK_SET)
return off;
return (toff_t)((CxFile*)fd)->Tell();
}
// Return nonzero if error
static int
_tiffCloseProcEx(thandle_t fd)
{
// return !((CxFile*)fd)->Close(); // "//" needed for memory files <DP>
return 0;
}
#include <sys/stat.h>
static toff_t
_tiffSizeProcEx(thandle_t fd)
{
return ((CxFile*)fd)->Size();
}
static int
_tiffMapProcEx(thandle_t fd, tdata_t* pbase, toff_t* psize)
{
return (0);
}
static void
_tiffUnmapProcEx(thandle_t fd, tdata_t base, toff_t size)
{
}
// Open a TIFF file descriptor for read/writing.
/*
TIFF*
TIFFOpen(const char* name, const char* mode)
{
static const char module[] = "TIFFOpen";
FILE* stream = fopen(name, mode);
if (stream == NULL)
{
TIFFError(module, "%s: Cannot open", name);
return NULL;
}
return (TIFFFdOpen((int)stream, name, mode));
}
*/
TIFF*
_TIFFFdOpen(int fd, const char* name, const char* mode)
{
TIFF* tif;
tif = TIFFClientOpen(name, mode,
(thandle_t) fd,
_tiffReadProcEx, _tiffWriteProcEx, _tiffSeekProcEx, _tiffCloseProcEx,
_tiffSizeProcEx, _tiffMapProcEx, _tiffUnmapProcEx);
if (tif)
tif->tif_fd = fd;
return (tif);
}
extern "C" TIFF* _TIFFOpenEx(CxFile* stream, const char* mode)
{
return (_TIFFFdOpen((int)stream, "TIFF IMAGE", mode));
}
#ifdef __GNUC__
extern char* malloc();
extern char* realloc();
#else
#include <malloc.h>
#endif
tdata_t
_TIFFmalloc(tsize_t s)
{
return (malloc((size_t) s));
}
void
_TIFFfree(tdata_t p)
{
free(p);
}
tdata_t
_TIFFrealloc(tdata_t p, tsize_t s)
{
return (realloc(p, (size_t) s));
}
void
_TIFFmemset(tdata_t p, int v, tsize_t c)
{
memset(p, v, (size_t) c);
}
void
_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
{
memcpy(d, s, (size_t) c);
}
int
_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
{
return (memcmp(p1, p2, (size_t) c));
}
static void
Win32WarningHandler(const char* module, const char* fmt, va_list ap)
{
#ifdef _DEBUG
#if (!defined(_CONSOLE) && defined(WIN32))
LPTSTR szTitle;
LPTSTR szTmp;
LPCTSTR szTitleText = "%s Warning";
LPCTSTR szDefaultModule = "TIFFLIB";
szTmp = (module == NULL) ? (LPTSTR)szDefaultModule : (LPTSTR)module;
if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, (lstrlen(szTmp) +
lstrlen(szTitleText) + lstrlen(fmt) + 128)*sizeof(TCHAR))) == NULL)
return;
wsprintf(szTitle, szTitleText, szTmp);
szTmp = szTitle + (lstrlen(szTitle)+2)*sizeof(TCHAR);
wvsprintf(szTmp, fmt, ap);
MessageBox(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONINFORMATION);
LocalFree(szTitle);
return;
#else
if (module != NULL)
fprintf(stderr, "%s: ", module);
fprintf(stderr, "Warning, ");
vfprintf(stderr, fmt, ap);
fprintf(stderr, ".\n");
#endif
#endif
}
TIFFErrorHandler _TIFFwarningHandler = Win32WarningHandler;
static void
Win32ErrorHandler(const char* module, const char* fmt, va_list ap)
{
#ifdef _DEBUG
#if (!defined(_CONSOLE) && defined(WIN32))
LPTSTR szTitle;
LPTSTR szTmp;
LPCTSTR szTitleText = "%s Error";
LPCTSTR szDefaultModule = "TIFFLIB";
szTmp = (module == NULL) ? (LPTSTR)szDefaultModule : (LPTSTR)module;
if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, (lstrlen(szTmp) +
lstrlen(szTitleText) + lstrlen(fmt) + 128)*sizeof(TCHAR))) == NULL)
return;
wsprintf(szTitle, szTitleText, szTmp);
szTmp = szTitle + (lstrlen(szTitle)+2)*sizeof(TCHAR);
wvsprintf(szTmp, fmt, ap);
MessageBox(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONEXCLAMATION);
LocalFree(szTitle);
return;
#else
if (module != NULL)
fprintf(stderr, "%s: ", module);
vfprintf(stderr, fmt, ap);
fprintf(stderr, ".\n");
#endif
#endif
}
TIFFErrorHandler _TIFFerrorHandler = Win32ErrorHandler;
#endif

View File

@@ -0,0 +1,76 @@
/*
* File: xfile.h
* Purpose: General Purpose File Class
*/
/*
--------------------------------------------------------------------------------
COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
CxFile (c) 11/May/2002 Davide Pizzolato - www.xdp.it
CxFile version 2.00 23/Aug/2002
Special thanks to Chris Shearer Cooper for new features, enhancements and bugfixes
Covered code is provided under this license on an "as is" basis, without warranty
of any kind, either expressed or implied, including, without limitation, warranties
that the covered code is free of defects, merchantable, fit for a particular purpose
or non-infringing. The entire risk as to the quality and performance of the covered
code is with you. Should any covered code prove defective in any respect, you (not
the initial developer or any other contributor) assume the cost of any necessary
servicing, repair or correction. This disclaimer of warranty constitutes an essential
part of this license. No use of any covered code is authorized hereunder except under
this disclaimer.
Permission is hereby granted to use, copy, modify, and distribute this
source code, or portions hereof, for any purpose, including commercial applications,
freely and without fee, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
--------------------------------------------------------------------------------
*/
#if !defined(__xfile_h)
#define __xfile_h
#ifdef WIN32
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "ximadef.h"
class DLL_EXP CxFile
{
public:
CxFile(void) { };
virtual ~CxFile() { };
virtual bool Close() = 0;
virtual size_t Read(void *buffer, size_t size, size_t count) = 0;
virtual size_t Write(const void *buffer, size_t size, size_t count) = 0;
virtual bool Seek(long offset, int origin) = 0;
virtual long Tell() = 0;
virtual long Size() = 0;
virtual bool Flush() = 0;
virtual bool Eof() = 0;
virtual long Error() = 0;
virtual bool PutC(unsigned char c)
{
// Default implementation
size_t nWrote = Write(&c, 1, 1);
return (bool)(nWrote == 1);
}
virtual long GetC() = 0;
};
#endif //__xfile_h

View File

@@ -0,0 +1,361 @@
/*
* File: ximabmp.cpp
* Purpose: Platform Independent BMP Image Class Loader and Writer
* 07/Aug/2001 Davide Pizzolato - www.xdp.it
* CxImage version 5.99c 17/Oct/2004
*/
#include "ximabmp.h"
#if CXIMAGE_SUPPORT_BMP
#include "ximaiter.h"
////////////////////////////////////////////////////////////////////////////////
#if CXIMAGE_SUPPORT_ENCODE
////////////////////////////////////////////////////////////////////////////////
bool CxImageBMP::Encode(CxFile * hFile)
{
if (EncodeSafeCheck(hFile)) return false;
BITMAPFILEHEADER hdr;
hdr.bfType = 0x4d42; // 'BM' WINDOWS_BITMAP_SIGNATURE
hdr.bfSize = GetSize() + 14 /*sizeof(BITMAPFILEHEADER)*/;
hdr.bfReserved1 = hdr.bfReserved2 = 0;
hdr.bfOffBits = 14 /*sizeof(BITMAPFILEHEADER)*/ + head.biSize + GetPaletteSize();
//copy attributes
memcpy(pDib,&head,sizeof(BITMAPINFOHEADER));
// Write the file header
hFile->Write(&hdr,min(14,sizeof(BITMAPFILEHEADER)),1);
// Write the DIB header and the pixels
hFile->Write(pDib,GetSize(),1);
return true;
}
////////////////////////////////////////////////////////////////////////////////
#endif //CXIMAGE_SUPPORT_ENCODE
////////////////////////////////////////////////////////////////////////////////
#if CXIMAGE_SUPPORT_DECODE
////////////////////////////////////////////////////////////////////////////////
bool CxImageBMP::Decode(CxFile * hFile)
{
if (hFile == NULL) return false;
BITMAPFILEHEADER bf;
DWORD off = hFile->Tell(); //<CSC>
try {
if (hFile->Read(&bf,min(14,sizeof(bf)),1)==0) throw "Not a BMP";
if (bf.bfType != BFT_BITMAP) { //do we have a RC HEADER?
bf.bfOffBits = 0L;
hFile->Seek(off,SEEK_SET);
}
BITMAPINFOHEADER bmpHeader;
if (!DibReadBitmapInfo(hFile,&bmpHeader)) throw "Error reading BMP info";
DWORD dwCompression=bmpHeader.biCompression;
DWORD dwBitCount=bmpHeader.biBitCount; //preserve for BI_BITFIELDS compression <Thomas Ernst>
bool bIsOldBmp = bmpHeader.biSize == sizeof(BITMAPCOREHEADER);
bool bTopDownDib = bmpHeader.biHeight<0; //<Flanders> check if it's a top-down bitmap
if (bTopDownDib) bmpHeader.biHeight=-bmpHeader.biHeight;
if (info.nEscape == -1) {
// Return output dimensions only
head.biWidth = bmpHeader.biWidth;
head.biHeight = bmpHeader.biHeight;
throw "output dimensions returned";
}
if (!Create(bmpHeader.biWidth,bmpHeader.biHeight,bmpHeader.biBitCount,CXIMAGE_FORMAT_BMP))
throw "Can't allocate memory";
head.biXPelsPerMeter = bmpHeader.biXPelsPerMeter;
head.biYPelsPerMeter = bmpHeader.biYPelsPerMeter;
info.xDPI = (long) floor(bmpHeader.biXPelsPerMeter * 254.0 / 10000.0 + 0.5);
info.yDPI = (long) floor(bmpHeader.biYPelsPerMeter * 254.0 / 10000.0 + 0.5);
if (info.nEscape) throw "Cancelled"; // <vho> - cancel decoding
RGBQUAD *pRgb = GetPalette();
if (pRgb){
if (bIsOldBmp){
// convert a old color table (3 byte entries) to a new
// color table (4 byte entries)
hFile->Read((void*)pRgb,DibNumColors(&bmpHeader) * sizeof(RGBTRIPLE),1);
for (int i=DibNumColors(&head)-1; i>=0; i--){
pRgb[i].rgbRed = ((RGBTRIPLE *)pRgb)[i].rgbtRed;
pRgb[i].rgbBlue = ((RGBTRIPLE *)pRgb)[i].rgbtBlue;
pRgb[i].rgbGreen = ((RGBTRIPLE *)pRgb)[i].rgbtGreen;
pRgb[i].rgbReserved = (BYTE)0;
}
} else {
hFile->Read((void*)pRgb,DibNumColors(&bmpHeader) * sizeof(RGBQUAD),1);
//force rgbReserved=0, to avoid problems with some WinXp bitmaps
for (unsigned int i=0; i<head.biClrUsed; i++) pRgb[i].rgbReserved=0;
}
}
if (info.nEscape) throw "Cancelled"; // <vho> - cancel decoding
switch (dwBitCount) {
case 32 :
if (bf.bfOffBits != 0L) hFile->Seek(off + bf.bfOffBits,SEEK_SET);
if (dwCompression == BI_BITFIELDS || dwCompression == BI_RGB){
long imagesize=4*head.biHeight*head.biWidth;
BYTE* buff32=(BYTE*)malloc(imagesize);
if (buff32){
hFile->Read(buff32, imagesize,1); // read in the pixels
Bitfield2RGB(buff32,0,0,0,32);
free(buff32);
} else throw "can't allocate memory";
} else throw "unknown compression";
break;
case 24 :
if (bf.bfOffBits != 0L) hFile->Seek(off + bf.bfOffBits,SEEK_SET);
if (dwCompression == BI_RGB){
hFile->Read(info.pImage, head.biSizeImage,1); // read in the pixels
} else throw "unknown compression";
break;
case 16 :
{
DWORD bfmask[3];
if (dwCompression == BI_BITFIELDS)
{
hFile->Read(bfmask, 12, 1);
} else {
bfmask[0]=0x7C00; bfmask[1]=0x3E0; bfmask[2]=0x1F; //RGB555
}
// bf.bfOffBits required after the bitfield mask <Cui Ying Jie>
if (bf.bfOffBits != 0L) hFile->Seek(off + bf.bfOffBits,SEEK_SET);
// read in the pixels
hFile->Read(info.pImage, head.biHeight*((head.biWidth+1)/2)*4,1);
// transform into RGB
Bitfield2RGB(info.pImage,(WORD)bfmask[0],(WORD)bfmask[1],(WORD)bfmask[2],16);
break;
}
case 8 :
case 4 :
case 1 :
if (bf.bfOffBits != 0L) hFile->Seek(off + bf.bfOffBits,SEEK_SET);
switch (dwCompression) {
case BI_RGB :
hFile->Read(info.pImage, head.biSizeImage,1); // read in the pixels
break;
case BI_RLE4 :
{
BYTE status_byte = 0;
BYTE second_byte = 0;
int scanline = 0;
int bits = 0;
BOOL low_nibble = FALSE;
CImageIterator iter(this);
for (BOOL bContinue = TRUE; bContinue;) {
hFile->Read(&status_byte, sizeof(BYTE), 1);
switch (status_byte) {
case RLE_COMMAND :
hFile->Read(&status_byte, sizeof(BYTE), 1);
switch (status_byte) {
case RLE_ENDOFLINE :
bits = 0;
scanline++;
low_nibble = FALSE;
break;
case RLE_ENDOFBITMAP :
bContinue=FALSE;
break;
case RLE_DELTA :
{
// read the delta values
BYTE delta_x;
BYTE delta_y;
hFile->Read(&delta_x, sizeof(BYTE), 1);
hFile->Read(&delta_y, sizeof(BYTE), 1);
// apply them
bits += delta_x / 2;
scanline += delta_y;
break;
}
default :
hFile->Read(&second_byte, sizeof(BYTE), 1);
BYTE *sline = iter.GetRow(scanline);
for (int i = 0; i < status_byte; i++) {
if (low_nibble) {
if ((DWORD)(sline+bits) < (DWORD)(info.pImage+head.biSizeImage)){
*(sline + bits) |= (second_byte & 0x0F);
}
if (i != status_byte - 1)
hFile->Read(&second_byte, sizeof(BYTE), 1);
bits++;
} else {
if ((DWORD)(sline+bits) < (DWORD)(info.pImage+head.biSizeImage)){
*(sline + bits) = (BYTE)(second_byte & 0xF0);
}
}
low_nibble = !low_nibble;
}
if ((((status_byte+1) >> 1) & 1 )== 1)
hFile->Read(&second_byte, sizeof(BYTE), 1);
break;
};
break;
default :
{
BYTE *sline = iter.GetRow(scanline);
hFile->Read(&second_byte, sizeof(BYTE), 1);
for (unsigned i = 0; i < status_byte; i++) {
if (low_nibble) {
if ((DWORD)(sline+bits) < (DWORD)(info.pImage+head.biSizeImage)){
*(sline + bits) |= (second_byte & 0x0F);
}
bits++;
} else {
if ((DWORD)(sline+bits) < (DWORD)(info.pImage+head.biSizeImage)){
*(sline + bits) = (BYTE)(second_byte & 0xF0);
}
}
low_nibble = !low_nibble;
}
}
break;
};
}
break;
}
case BI_RLE8 :
{
BYTE status_byte = 0;
BYTE second_byte = 0;
int scanline = 0;
int bits = 0;
CImageIterator iter(this);
for (BOOL bContinue = TRUE; bContinue; ) {
hFile->Read(&status_byte, sizeof(BYTE), 1);
switch (status_byte) {
case RLE_COMMAND :
hFile->Read(&status_byte, sizeof(BYTE), 1);
switch (status_byte) {
case RLE_ENDOFLINE :
bits = 0;
scanline++;
break;
case RLE_ENDOFBITMAP :
bContinue=FALSE;
break;
case RLE_DELTA :
{
// read the delta values
BYTE delta_x;
BYTE delta_y;
hFile->Read(&delta_x, sizeof(BYTE), 1);
hFile->Read(&delta_y, sizeof(BYTE), 1);
// apply them
bits += delta_x;
scanline += delta_y;
break;
}
default :
hFile->Read((void *)(iter.GetRow(scanline) + bits), sizeof(BYTE) * status_byte, 1);
// align run length to even number of bytes
if ((status_byte & 1) == 1)
hFile->Read(&second_byte, sizeof(BYTE), 1);
bits += status_byte;
break;
};
break;
default :
BYTE *sline = iter.GetRow(scanline);
hFile->Read(&second_byte, sizeof(BYTE), 1);
for (unsigned i = 0; i < status_byte; i++) {
if ((DWORD)bits<info.dwEffWidth){
*(sline + bits) = second_byte;
bits++;
} else {
bContinue = FALSE;
break;
}
}
break;
};
}
break;
}
default :
throw "compression type not supported";
}
}
if (bTopDownDib) Flip(); //<Flanders>
} catch (char *message) {
strncpy(info.szLastError,message,255);
if (info.nEscape==-1) return true;
return false;
}
return true;
}
////////////////////////////////////////////////////////////////////////////////
/* ReadDibBitmapInfo()
*
* Will read a file in DIB format and return a global HANDLE to its
* BITMAPINFO. This function will work with both "old" and "new"
* bitmap formats, but will always return a "new" BITMAPINFO.
*/
bool CxImageBMP::DibReadBitmapInfo(CxFile* fh, BITMAPINFOHEADER *pdib)
{
if ((fh==NULL)||(pdib==NULL)) return false;
if (fh->Read(pdib,sizeof(BITMAPINFOHEADER),1)==0) return false;
BITMAPCOREHEADER bc;
switch (pdib->biSize) // what type of bitmap info is this?
{
case sizeof(BITMAPINFOHEADER):
break;
case 64: //sizeof(OS2_BMP_HEADER):
fh->Seek((long)(64 - sizeof(BITMAPINFOHEADER)),SEEK_CUR);
break;
case sizeof(BITMAPCOREHEADER):
bc = *(BITMAPCOREHEADER*)pdib;
pdib->biSize = bc.bcSize;
pdib->biWidth = (DWORD)bc.bcWidth;
pdib->biHeight = (DWORD)bc.bcHeight;
pdib->biPlanes = bc.bcPlanes;
pdib->biBitCount = bc.bcBitCount;
pdib->biCompression = BI_RGB;
pdib->biSizeImage = 0;
pdib->biXPelsPerMeter = 0;
pdib->biYPelsPerMeter = 0;
pdib->biClrUsed = 0;
pdib->biClrImportant = 0;
fh->Seek((long)(sizeof(BITMAPCOREHEADER)-sizeof(BITMAPINFOHEADER)), SEEK_CUR);
break;
default:
//give a last chance
if (pdib->biSize>(sizeof(BITMAPINFOHEADER))&&
(pdib->biSizeImage==(unsigned long)(pdib->biHeight*((((pdib->biBitCount*pdib->biWidth)+31)/32)*4)))&&
(pdib->biPlanes==1)&&(pdib->biCompression==BI_RGB)&&(pdib->biClrUsed==0))
{
fh->Seek((long)(pdib->biSize - sizeof(BITMAPINFOHEADER)),SEEK_CUR);
break;
}
return false;
}
FixBitmapInfo(pdib);
return true;
}
////////////////////////////////////////////////////////////////////////////////
#endif //CXIMAGE_SUPPORT_DECODE
////////////////////////////////////////////////////////////////////////////////
#endif // CXIMAGE_SUPPORT_BMP
////////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,79 @@
/*
* File: ximabmp.h
* Purpose: BMP Image Class Loader and Writer
*/
/* ==========================================================
* CxImageBMP (c) 07/Aug/2001 Davide Pizzolato - www.xdp.it
* For conditions of distribution and use, see copyright notice in ximage.h
*
* Special thanks to Troels Knakkergaard for new features, enhancements and bugfixes
*
* original CImageBMP and CImageIterator implementation are:
* Copyright: (c) 1995, Alejandro Aguilar Sierra <asierra(at)servidor(dot)unam(dot)mx>
*
* ==========================================================
*/
#if !defined(__ximaBMP_h)
#define __ximaBMP_h
#include "ximage.h"
const int RLE_COMMAND = 0;
const int RLE_ENDOFLINE = 0;
const int RLE_ENDOFBITMAP = 1;
const int RLE_DELTA = 2;
#if !defined(BI_RLE8)
#define BI_RLE8 1L
#endif
#if !defined(BI_RLE4)
#define BI_RLE4 2L
#endif
#if CXIMAGE_SUPPORT_BMP
class CxImageBMP: public CxImage
{
public:
CxImageBMP(): CxImage(CXIMAGE_FORMAT_BMP) {};
bool Decode(CxFile * hFile);
bool Decode(FILE *hFile) { CxIOFile file(hFile); return Decode(&file); }
#if CXIMAGE_SUPPORT_ENCODE
bool Encode(CxFile * hFile);
bool Encode(FILE *hFile) { CxIOFile file(hFile); return Encode(&file); }
#endif // CXIMAGE_SUPPORT_ENCODE
protected:
bool DibReadBitmapInfo(CxFile* fh, BITMAPINFOHEADER *pdib);
};
#define BFT_ICON 0x4349 /* 'IC' */
#define BFT_BITMAP 0x4d42 /* 'BM' */
#define BFT_CURSOR 0x5450 /* 'PT' */
#ifndef WIDTHBYTES
#define WIDTHBYTES(i) ((unsigned)((i+31)&(~31))/8) /* ULONG aligned ! */
#endif
#endif
#define DibWidthBytesN(lpbi, n) (UINT)WIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n))
#define DibWidthBytes(lpbi) DibWidthBytesN(lpbi, (lpbi)->biBitCount)
#define DibSizeImage(lpbi) ((lpbi)->biSizeImage == 0 \
? ((DWORD)(UINT)DibWidthBytes(lpbi) * (DWORD)(UINT)(lpbi)->biHeight) \
: (lpbi)->biSizeImage)
#define DibNumColors(lpbi) ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8 \
? (int)(1 << (int)(lpbi)->biBitCount) \
: (int)(lpbi)->biClrUsed)
#define FixBitmapInfo(lpbi) if ((lpbi)->biSizeImage == 0) \
(lpbi)->biSizeImage = DibSizeImage(lpbi); \
if ((lpbi)->biClrUsed == 0) \
(lpbi)->biClrUsed = DibNumColors(lpbi); \
#endif

View File

@@ -0,0 +1,52 @@
#if !defined(__ximaCFG_h)
#define __ximaCFG_h
/////////////////////////////////////////////////////////////////////////////
// CxImage supported features
#define CXIMAGE_SUPPORT_ALPHA 1
#define CXIMAGE_SUPPORT_SELECTION 0
#define CXIMAGE_SUPPORT_TRANSFORMATION 1
#define CXIMAGE_SUPPORT_DSP 0
#define CXIMAGE_SUPPORT_LAYERS 0
#define CXIMAGE_SUPPORT_INTERPOLATION 0
#define CXIMAGE_SUPPORT_DECODE 1
#define CXIMAGE_SUPPORT_ENCODE 1 //<vho><T.Peck>
#define CXIMAGE_SUPPORT_WINDOWS 1
#define CXIMAGE_SUPPORT_WINCE 0 //<T.Peck>
/////////////////////////////////////////////////////////////////////////////
// CxImage supported formats
#define CXIMAGE_SUPPORT_BMP 0
#define CXIMAGE_SUPPORT_GIF 1
#define CXIMAGE_SUPPORT_JPG 1
#define CXIMAGE_SUPPORT_PNG 1
#define CXIMAGE_SUPPORT_MNG 0
#define CXIMAGE_SUPPORT_ICO 0
#define CXIMAGE_SUPPORT_TIF 1
#define CXIMAGE_SUPPORT_TGA 0
#define CXIMAGE_SUPPORT_PCX 0
#define CXIMAGE_SUPPORT_WBMP 0
#define CXIMAGE_SUPPORT_WMF 0
#define CXIMAGE_SUPPORT_J2K 0 // Beta, use JP2
#define CXIMAGE_SUPPORT_JBG 0 // GPL'd see ../jbig/copying.txt & ../jbig/patents.htm
#define CXIMAGE_SUPPORT_JP2 0
#define CXIMAGE_SUPPORT_JPC 0
#define CXIMAGE_SUPPORT_PGX 0
#define CXIMAGE_SUPPORT_PNM 0
#define CXIMAGE_SUPPORT_RAS 0
/////////////////////////////////////////////////////////////////////////////
#define CXIMAGE_MAX_MEMORY 256000000
#define CXIMAGE_ERR_NOFILE "null file handler"
#define CXIMAGE_ERR_NOIMAGE "null image!!!"
/////////////////////////////////////////////////////////////////////////////
//color to grey mapping <H. Muelner> <jurgene>
//#define RGB2GRAY(r,g,b) (((b)*114 + (g)*587 + (r)*299)/1000)
#define RGB2GRAY(r,g,b) (((b)*117 + (g)*601 + (r)*306) >> 10)
#endif

View File

@@ -0,0 +1,197 @@
#if !defined(__ximadefs_h)
#define __ximadefs_h
#include "ximacfg.h"
#if defined(_AFXDLL)||defined(_USRDLL)
#define DLL_EXP __declspec(dllexport)
#elif defined(_MSC_VER)&&(_MSC_VER<1200)
#define DLL_EXP __declspec(dllimport)
#else
#define DLL_EXP
#endif
#if CXIMAGE_SUPPORT_JP2 || CXIMAGE_SUPPORT_JPC || CXIMAGE_SUPPORT_PGX || CXIMAGE_SUPPORT_PNM || CXIMAGE_SUPPORT_RAS
#define CXIMAGE_SUPPORT_JASPER 1
#else
#define CXIMAGE_SUPPORT_JASPER 0
#endif
#if CXIMAGE_SUPPORT_DSP
#undef CXIMAGE_SUPPORT_TRANSFORMATION
#define CXIMAGE_SUPPORT_TRANSFORMATION 1
#endif
#if CXIMAGE_SUPPORT_TRANSFORMATION || CXIMAGE_SUPPORT_TIF || CXIMAGE_SUPPORT_TGA || CXIMAGE_SUPPORT_BMP || CXIMAGE_SUPPORT_WINDOWS
#define CXIMAGE_SUPPORT_BASICTRANSFORMATIONS 1
#endif
#if CXIMAGE_SUPPORT_DSP || CXIMAGE_SUPPORT_TRANSFORMATION
#undef CXIMAGE_SUPPORT_INTERPOLATION
#define CXIMAGE_SUPPORT_INTERPOLATION 1
#endif
#if CXIMAGE_SUPPORT_WINCE
#undef CXIMAGE_SUPPORT_WMF
#define CXIMAGE_SUPPORT_WMF 0
#undef CXIMAGE_SUPPORT_WINDOWS
#define CXIMAGE_SUPPORT_WINDOWS 0
#endif
#ifndef WIN32
#undef CXIMAGE_SUPPORT_WINDOWS
#define CXIMAGE_SUPPORT_WINDOWS 0
#endif
#ifndef min
#define min(a,b) (((a)<(b))?(a):(b))
#endif
#ifndef max
#define max(a,b) (((a)>(b))?(a):(b))
#endif
#ifndef PI
#define PI 3.141592653589793f
#endif
#ifdef WIN32
#include <windows.h>
#include <tchar.h>
#endif
#include <stdio.h>
#include <math.h>
#ifdef __BORLANDC__
#ifndef _COMPLEX_DEFINED
typedef struct tagcomplex {
double x,y;
} _complex;
#endif
#define _cabs(c) sqrt(c.x*c.x+c.y*c.y)
#endif
#ifndef WIN32
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef unsigned int UINT;
typedef DWORD COLORREF;
typedef unsigned int HANDLE;
typedef void* HRGN;
#ifndef BOOL
#define BOOL bool
#endif
#ifndef TRUE
#define TRUE true
#endif
#ifndef FALSE
#define FALSE false
#endif
#ifndef TCHAR
#define TCHAR char
#define _T
#endif
typedef struct tagRECT
{
long left;
long top;
long right;
long bottom;
} RECT;
typedef struct tagPOINT
{
long x;
long y;
} POINT;
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
#pragma pack(1)
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
long biWidth;
long biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
typedef struct tagBITMAPCOREHEADER {
DWORD bcSize;
WORD bcWidth;
WORD bcHeight;
WORD bcPlanes;
WORD bcBitCount;
} BITMAPCOREHEADER;
typedef struct tagRGBTRIPLE {
BYTE rgbtBlue;
BYTE rgbtGreen;
BYTE rgbtRed;
} RGBTRIPLE;
#pragma pack()
#define BI_RGB 0L
#define BI_RLE8 1L
#define BI_RLE4 2L
#define BI_BITFIELDS 3L
#define GetRValue(rgb) ((BYTE)(rgb))
#define GetGValue(rgb) ((BYTE)(((WORD)(rgb)) >> 8))
#define GetBValue(rgb) ((BYTE)((rgb)>>16))
#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
#ifndef _COMPLEX_DEFINED
typedef struct tagcomplex {
double x,y;
} _complex;
#endif
#define _cabs(c) sqrt(c.x*c.x+c.y*c.y)
#endif
#endif //__ximadefs

Some files were not shown because too many files have changed in this diff Show More