Versie 2.80

svn path=/Slnkdwf/trunk/; revision=12530
This commit is contained in:
Jos Groot Lipman
2012-01-11 19:23:50 +00:00
parent 7e0c797a7b
commit 185babff53
29 changed files with 835 additions and 409 deletions

View File

@@ -10,7 +10,6 @@ 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
m_SymbolOutlineAlpha = 0; // Zet op 255 om een bounding contour lijntje van symbolen te zien
}
// COptions
@@ -35,7 +34,7 @@ STDMETHODIMP COptions::SetOption(BSTR optionName, VARIANT OptionValue)
CString nm(optionName);
nm.MakeUpper();
if (nm=="MINCONTSIZE")
if (nm=="MINCONTSIZE") // deprecated sinds 2.80
{
HRESULT hr = val.ChangeType(VT_R8);
if (FAILED(hr)) return hr;
@@ -47,11 +46,5 @@ STDMETHODIMP COptions::SetOption(BSTR optionName, VARIANT OptionValue)
if (FAILED(hr)) return hr;
g_SLNKOptions.m_SkipContLeader = val.boolVal;
}
else if (nm=="SYMBOLOUTLINEALPHA")
{
HRESULT hr = val.ChangeType(VT_INT);
if (FAILED(hr)) return hr;
g_SLNKOptions.m_SymbolOutlineAlpha = val.intVal;
}
return S_OK;
}

View File

@@ -18,7 +18,6 @@ public:
double m_MinContSize; // In DWG Units
BOOL m_SkipContLeader; // voor ARKEY
int m_SymbolOutlineAlpha; // voor bounding contour symbolen
};
extern CSLNKOptions g_SLNKOptions; // The one and only

View File

@@ -21,20 +21,20 @@ void CSLNKContour::SetImpl(CSLNKContourImpl * pSLNKContour)
WT_Point3D dwgPt;
CComQIPtr<IDWGPoint> pt;
dwgPt = pSLNKContour->m_parentWhipFileState->m_contunits.transform(bx.minpt());
dwgPt = pSLNKContour->m_parentWhipFile->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());
dwgPt = pSLNKContour->m_parentWhipFile->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);
dwgPt = pSLNKContour->m_parentWhipFile->m_contunits.transform(lp);
m_dwgCenter->put_DwgX(dwgPt.m_x);
m_dwgCenter->put_DwgY(dwgPt.m_y);
};
@@ -49,6 +49,16 @@ STDMETHODIMP CSLNKContour::SetColor(ULONG rgb, BYTE Alpha /*=255*/)
return S_OK;
}
STDMETHODIMP CSLNKContour::SetoutlineColor(ULONG rgb, BYTE Alpha /*=255*/)
{
int b=rgb%256;
int g=(rgb>>8)%256;
int r=(rgb>>16)%256;
m_SLNKContour->m_outlineColor.set(r, g, b, Alpha);
return S_OK;
}
// De FriendlyName verschijnt uiteindelijk als tooltip
STDMETHODIMP CSLNKContour::SetUrl(BSTR Url, BSTR FriendlyName)
{
@@ -70,6 +80,11 @@ STDMETHODIMP CSLNKContour::SetUrl(BSTR Url, BSTR FriendlyName)
return S_OK;
}
STDMETHODIMP CSLNKContour::MoveTop()
{
m_SLNKContour->m_onTop = true;
return S_OK;
}
STDMETHODIMP CSLNKContour::get_Area(DOUBLE* pVal)
{
@@ -110,14 +125,14 @@ STDMETHODIMP CSLNKContour::put_Key(BSTR newVal)
STDMETHODIMP CSLNKContour::get_Label(BSTR* pVal)
{
CComBSTR bstrString(m_SLNKContour->m_ExtraLabel);
CComBSTR bstrString(m_SLNKContour->m_ShowLabel);
return bstrString.CopyTo(pVal);
}
STDMETHODIMP CSLNKContour::put_Label(BSTR newVal)
{
CString key(newVal);
m_SLNKContour->m_ExtraLabel = newVal;
m_SLNKContour->m_ShowLabel = newVal;
return S_OK;
}
@@ -136,3 +151,18 @@ STDMETHODIMP CSLNKContour::put_Hatch(BYTE newVal)
return S_OK;
}
STDMETHODIMP CSLNKContour::get_Lineweight(DOUBLE* pVal)
{
(*pVal) = m_SLNKContour->m_Lineweight;
return S_OK;
}
STDMETHODIMP CSLNKContour::put_Lineweight(DOUBLE newVal)
{
m_SLNKContour->m_Lineweight = newVal;
return S_OK;
}

View File

@@ -89,7 +89,9 @@ private:
public:
STDMETHOD(SetColor)(ULONG rgb, BYTE Alpha);
STDMETHOD(SetoutlineColor)(ULONG rgb, BYTE Alpha);
STDMETHOD(SetUrl) (BSTR Url, BSTR FriendlyName);
STDMETHOD(MoveTop) ();
STDMETHOD(get_Area)(DOUBLE* pVal);
STDMETHOD(get_Extents)(IBoundingBox** pVal);
STDMETHOD(get_Center)(IDWGPoint** pVal);
@@ -99,6 +101,8 @@ public:
STDMETHOD(put_Label)(BSTR newVal);
STDMETHOD(get_Hatch)(BYTE* pVal);
STDMETHOD(put_Hatch)(BYTE newVal);
STDMETHOD(get_Lineweight)(DOUBLE* pVal);
STDMETHOD(put_Lineweight)(DOUBLE newVal);
};
//REMOVED OBJECT_ENTRY_AUTO(__uuidof(SLNKContour), CSLNKContour)

View File

@@ -47,12 +47,12 @@ 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(255)] BYTE Alpha);
[id(4), helpstring("Deprecated method SetLabel")] HRESULT SetLabel([in] BSTR IdentLabel, [in] BSTR ShowLabel);
[id(5), helpstring("Deprecated method SetColor")] HRESULT SetColor([in] BSTR IdentLabel, [in] ULONG rgb, [in, defaultvalue(255)] BYTE Alpha);
[id(6), helpstring("method HighlightUnrecognized")] HRESULT HighlightUnrecognized();
[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);
[propget, id(10), helpstring("Deprecated 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] ISLNKSymbol** pVal);
[id(15), helpstring("method DefineSymbol")] HRESULT DefineSymbol([in] BSTR symbolName, [in] VARIANT EPlotStream);
@@ -65,6 +65,8 @@ interface IWhipFile : IDispatch{
[propput, id(21), helpstring("property forFind")] HRESULT forFind([in] VARIANT_BOOL newVal);
[propget, id(22), helpstring("property ContourCount")] HRESULT ContourCount([out, retval] LONG* pVal);
[propget, id(23), helpstring("property ContourItem")] HRESULT ContourItem([in] ULONG i, [out, retval] ISLNKContour** pVal);
[propget, id(24), helpstring("property minContSize")] HRESULT minContSize([out, retval] DOUBLE* pVal);
[propput, id(24), helpstring("property minContSize")] HRESULT minContSize([in] DOUBLE newVal);
};
[
object,
@@ -103,6 +105,7 @@ interface IWhip2PNG : IDispatch{
[propput, id(21), helpstring("property forceGray")] HRESULT forceGray([in] VARIANT_BOOL newVal);
[propget, id(22), helpstring("property LayerCount")] HRESULT LayerCount([out, retval] LONG* pVal);
[propget, id(23), helpstring("property LayerItem")] HRESULT LayerItem([in] ULONG i, [out, retval] BSTR* pVal);
[id(24), helpstring("method SetAntialias")] HRESULT SetAntialias([in] LONG lFactor, [in, defaultvalue(0)] LONG lMethod);
};
[
object,
@@ -178,8 +181,8 @@ interface ISLNKEvent : IDispatch{
[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(7), helpstring("property ContourLabel")] HRESULT ContourLabel([out, retval] BSTR* pVal); // DEPRECATED
[propput, id(7), helpstring("property ContourLabel")] HRESULT ContourLabel([in] BSTR newVal); // DEPRECATED
[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);
@@ -193,7 +196,9 @@ interface ISLNKEvent : IDispatch{
[propput, id(14), helpstring("property EdgeAngle")] HRESULT EdgeAngle([in] DOUBLE newVal);
[propget, id(15), helpstring("property EdgeDistance")] HRESULT EdgeDistance([out, retval] DOUBLE* pVal);
[propput, id(15), helpstring("property EdgeDistance")] HRESULT EdgeDistance([in] DOUBLE newVal);
};
[propget, id(16), helpstring("property ContourKey")] HRESULT ContourKey([out, retval] BSTR* pVal);
[propput, id(16), helpstring("property ContourKey")] HRESULT ContourKey([in] BSTR newVal);
};
[
object,
uuid(102FE53F-3C9A-47C6-9BAD-1434838FF53D),
@@ -229,8 +234,10 @@ interface IDWGPoint : IDispatch{
pointer_default(unique)
]
interface ISLNKContour : IDispatch{
[id(2), helpstring("method SetColor")] HRESULT SetColor([in] ULONG rgb, [in, defaultvalue(255)] BYTE Alpha);
[id(1), helpstring("method SetColor")] HRESULT SetColor([in] ULONG rgb, [in, defaultvalue(255)] BYTE Alpha);
[id(2), helpstring("method SetoutlineColor")] HRESULT SetoutlineColor([in] ULONG rgb, [in, defaultvalue(255)] BYTE Alpha);
[id(3), helpstring("method SetUrl")] HRESULT SetUrl([in] BSTR Url, [in] BSTR FriendlyName);
[id(4), helpstring("method MoveTop")] HRESULT MoveTop();
[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);
@@ -240,6 +247,8 @@ interface ISLNKContour : IDispatch{
[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);
[propget, id(11), helpstring("property Lineweight")] HRESULT Lineweight([out, retval] DOUBLE* pVal);
[propput, id(11), helpstring("property Lineweight")] HRESULT Lineweight([in] DOUBLE newVal);
};
[
object,

View File

@@ -1,6 +1,6 @@
// Zorg dat versies alfabetisch altijd op elkaar volgen!
#define SLNK_MAJOR_VERSION 2
#define SLNK_MINOR_VERSION 70
#define SLNK_MINOR_VERSION 80
#define SLNK_BUILD_VERSION 0
// Define resource strings

View File

@@ -383,6 +383,7 @@ WT_Result CSLNKSymbolDefinition::serialize(WT_File & file, WT_Color pColor, BOOL
WT_Color().serialize(file); // Op de default zetten.
//TODO: Moet eigenlijk voor alle attributen
file.desired_rendition().line_weight() = WT_Line_Weight(0);
WT_Line_Weight().serialize(file);
WT_Result result;

View File

@@ -8,7 +8,7 @@ class CSLNKSymbolImpl
public:
CSLNKSymbolImpl(void);
CSLNKSymbolImpl(double dwgX, double dwgY, CWhipFileState *State);
CSLNKSymbolImpl(double dwgX, double dwgY, CWhipFile *whipfile);
WT_Result serialize (WT_File & file, WT_Units & units,
CSLNKSymbolDefinition *symbdef,

View File

@@ -75,7 +75,7 @@ BEGIN
VALUE "FileDescription", "Superlink DWF "
VALUE "FileVersion", SLNK_BUILDVERSION "\0"
VALUE "InternalName", "SLNKDWF.dll"
VALUE "LegalCopyright", "(c) SG|facilitor 2005-2011. All rights reserved."
VALUE "LegalCopyright", "(c) SG|facilitor 2005-2012. All rights reserved."
VALUE "OriginalFilename", "SLNKDWF.dll"
VALUE "ProductName", "Superlink"
VALUE "ProductVersion", SLNK_BUILDVERSION "\0"

View File

@@ -17,6 +17,11 @@ CWhip2PNG::CWhip2PNG()
m_offsetY = 0;
m_dScale = 1.0;
m_lRotation = 0;
m_AAFactor = 1;
m_AAMethod = 0; // ximatran.cpp resample function
// 0 for slow (bilinear) method
// 1 for fast (nearest pixel) method, or
// 2 for accurate (bicubic spline interpolation) method.
m_RegExp = ".*";
m_forcePaper = FALSE;
m_forceBW = FALSE;
@@ -106,6 +111,10 @@ bool CWhip2PNG::CreateCxImage(CxImage *img)
HDC pDC = ::GetDC(0);
HDC myDC = CreateCompatibleDC(pDC);
//ReleaseDC(pDC);
m_sizeX *= m_AAFactor;
m_sizeY *= m_AAFactor;
m_offsetX *= m_AAFactor;
m_offsetY *= m_AAFactor;
InitDC(myDC); // Stelt ook definitieve m_SizeX en m_SizeY vast
#if 1
@@ -169,6 +178,15 @@ bool CWhip2PNG::CreateCxImage(CxImage *img)
DeleteDC(myDC);
ReleaseDC( NULL, pDC ); //Do not forget!
if (m_AAFactor != 1)
{
m_sizeX /= m_AAFactor;
m_sizeY /= m_AAFactor;
m_offsetX /= m_AAFactor;
m_offsetY /= m_AAFactor;
img->Resample(m_sizeX, m_sizeY, m_AAMethod);
}
return res;
}
@@ -290,7 +308,7 @@ void CWhip2PNG::putDWGInfo()
// 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
// of een Contour key(!)). Meer details zijn via get_SLNKEvent te verkrijgen
STDMETHODIMP CWhip2PNG::Find(LONG findX, LONG findY, BSTR* foundLabel)
{
CmyTimer timer("CWhip2PNG::Find");
@@ -301,24 +319,24 @@ STDMETHODIMP CWhip2PNG::Find(LONG findX, LONG findY, BSTR* foundLabel)
// Er hoeft geen bitmap naar myDC omdat we toch niet painten
InitDC(myDC);
CString ContourLabel, ContourLayer, TextLabel, TextLayer;
CString ContourKey, ContourLayer, TextLabel, TextLayer;
double EdgeAngle, EdgeDistance;
HRESULT res = m_iWhip2DC.Find(findX, findY,
FALSE,
ContourLabel, ContourLayer, TextLabel, TextLayer,
ContourKey, ContourLayer, TextLabel, TextLayer,
EdgeAngle, EdgeDistance);
if (TextLabel != "")
(*foundLabel) = TextLabel.AllocSysString();
else if (ContourLabel != "")
(*foundLabel) = ContourLabel.AllocSysString();
else if (ContourKey != "")
(*foundLabel) = ContourKey.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_ContourKey(CComBSTR(ContourKey));
m_SLNKEvent->put_ContourLayer(CComBSTR(ContourLayer));
m_SLNKEvent->put_TextLabel(CComBSTR(TextLabel));
m_SLNKEvent->put_TextLayer(CComBSTR(TextLayer));
@@ -333,6 +351,20 @@ STDMETHODIMP CWhip2PNG::Find(LONG findX, LONG findY, BSTR* foundLabel)
return S_OK;
}
STDMETHODIMP CWhip2PNG::SetAntialias(LONG lFactor, LONG lMethod)
{
if (lFactor < 1 ||
lFactor > 16 ||
lMethod < 0 ||
lMethod > 2)
return myAtlReportError (GetObjectCLSID(), "\nCWhip2PNG::SetAntialias invalid parameters");
m_AAFactor = lFactor;
m_AAMethod = lMethod;
return S_OK;
};
STDMETHODIMP CWhip2PNG::SetDimensions(LONG sizeX, LONG sizeY, // PNG image size
LONG offsetX, LONG offsetY, // Panning
DOUBLE dScale, // Zooming, 1.0 default

View File

@@ -94,6 +94,7 @@ private:
LONG m_sizeX, m_sizeY;
LONG m_offsetX, m_offsetY;
LONG m_AAFactor, m_AAMethod;
double m_dScale;
LONG m_lRotation;
COLORREF m_paperColor; BOOL m_forcePaper;
@@ -118,6 +119,8 @@ public:
STDMETHOD(put_forceGray)(VARIANT_BOOL newVal);
STDMETHOD(get_LayerCount)(LONG* pVal);
STDMETHOD(get_LayerItem)(ULONG i, BSTR* pVal);
STDMETHOD(SetAntialias)(LONG lFactor, LONG lMethod);
};
OBJECT_ENTRY_AUTO(__uuidof(Whip2PNG), CWhip2PNG)

View File

@@ -63,12 +63,20 @@ CWhipFile::CWhipFile()
m_FontHeight = 400.0;
m_FontHeightSymbols = 200.0;
m_reContouren.Parse(".*", FALSE);
m_reLabels.Parse(".*", FALSE);
m_reLayers.Parse(".*", FALSE);
m_hintScale = -1.0;
m_minContSize = g_SLNKOptions.m_MinContSize; // deprecated via globale setting. Later 0.20e6
m_forFind = TRUE; // backward compatible
m_activeLayerName = "";
// Predefine fixed symbols
CSLNKSymbolDefinition * symb = new CSLNKSymbolDefinition(sizeof(star)/sizeof(star[0]), star);
m_State.m_SLNKSymbolDefinitions.SetAt("*STAR", symb);
m_SLNKSymbolDefinitions.SetAt("*STAR", symb);
symb = new CSLNKSymbolDefinition(sizeof(octa)/sizeof(octa[0]), octa);
m_State.m_SLNKSymbolDefinitions.SetAt("*OCTAGON", symb);
m_SLNKSymbolDefinitions.SetAt("*OCTAGON", symb);
}
int xxxx;
@@ -137,19 +145,20 @@ HRESULT CWhipFile::ProcessContouren()
{
m_W2DFile.set_file_mode(WT_File::File_Read);
// Alle callback functies zijn static. Die kunnen de variabele
// m_State niet benaderen. Daarom maar via set_user_data
m_W2DFile.heuristics().set_user_data((void *)&m_State);
// Alle callback functies zijn static. Die kunnen de member-variabelen
// niet benaderen. Daarom maar via set_user_data onzelf doorgeven
// (voor 2.80 deden we dat complexer via een m_State)
m_W2DFile.heuristics().set_user_data((void *)this);
if (m_W2DFile.open() == WT_Result::Success)
{ xxxx=0;
CmyTimer xx("Contouren opzoeken");
m_State.contLayerActive = true;
m_State.labelLayerActive = true; // Kan bij de eerste laag anders blijken te zijn
m_contLayerActive = true;
m_labelLayerActive = true; // Kan bij de eerste laag anders blijken te zijn
read_for_contours(); // Zoek eerst alle contouren en labels
processLabels(); // En verwerk ze daarna
myDoTRACE("\nFound %d polylines, %d contours and %d labels.", xxxx, m_State.m_SLNKContouren.GetCount(), m_State.m_SLNKLabels.GetCount());
myDoTRACE("\nFound %d polylines, %d contours and %d labels.", xxxx, m_SLNKContouren.GetCount(), m_SLNKLabels.GetCount());
m_W2DFile.close(); // closing Input file.
}
@@ -164,8 +173,14 @@ STDMETHODIMP CWhipFile::SetLayers(BSTR reContouren, BSTR reLabels)
{
myTRACE("\nParsing met contouren %ls", reContouren);
myTRACE("\nParsing met labels %ls", (LPCTSTR)reLabels);
if (!m_State.SetLayers(reContouren, reLabels))
return myAtlReportError (GetObjectCLSID(), "ERROR: Unable to parse Whipfile regLayers");
REParseError status = m_reContouren.Parse( CString(reContouren), false );
if (REPARSE_ERROR_OK != status)
return myAtlReportError (GetObjectCLSID(), "ERROR: Unable to parse Whipfile contour regLayers");
status = m_reLabels.Parse( CString(reLabels), false );
if (REPARSE_ERROR_OK != status)
return myAtlReportError (GetObjectCLSID(), "ERROR: Unable to parse Whipfile label regLayers");
return S_OK;
}
@@ -174,8 +189,10 @@ STDMETHODIMP CWhipFile::SetLayers(BSTR reContouren, BSTR reLabels)
STDMETHODIMP CWhipFile::SetFilterLayers(BSTR reLayers)
{
myTRACE("\nFilter met lagen %ls", reLayers);
if (!m_State.SetFilterLayers(reLayers))
return myAtlReportError (GetObjectCLSID(), "ERROR: Unable to parse Whipfile SetFilterLayers");
REParseError status = m_reLayers.Parse( CString(reLayers), false );
if (REPARSE_ERROR_OK != status)
return myAtlReportError (GetObjectCLSID(), "ERROR: Unable to parse Whipfile SetFilterLayers");
return S_OK;
}
@@ -198,7 +215,10 @@ void CWhipFile::read_for_contours()
} while (result == WT_Result::Success);
// Nu zijn ze wel een keer bekend, we hebben ze later weer nodig
m_State.m_contunits=m_W2DFile.rendition().drawing_info().units();
// m_contunits=m_W2DFile.rendition().drawing_info().units();werkt niet goed met paperspace
// Deze doet het in de praktijk altijd wel?
m_contunits=m_W2DFile.rendition().viewport().viewport_units();
m_view=m_W2DFile.rendition().rendering_options().view();
// We gaan er later nog een keer door voor de plattegrond. Geen processing dan
@@ -229,16 +249,16 @@ double PolygonArea(WT_Point_Set * ps, WT_Units units)
// Iterate all labels and determine in which contour they fall
void CWhipFile::processLabels()
{
for (size_t lbl=0; lbl<m_State.m_SLNKLabels.GetCount(); lbl++)
for (size_t lbl=0; lbl<m_SLNKLabels.GetCount(); lbl++)
{
WT_Text text = m_State.m_SLNKLabels[lbl];
WT_Text text = m_SLNKLabels[lbl];
// Find inside which Polygon it falls
// When multiple: choose smallest!
CSLNKContourImpl *prevContour = NULL;
for (size_t i=0; i<m_State.m_SLNKContouren.GetCount(); i++)
for (size_t i=0; i<m_SLNKContouren.GetCount(); i++)
{
CSLNKContourImpl *contour= (m_State.m_SLNKContouren[i]);
CSLNKContourImpl *contour= (m_SLNKContouren[i]);
if (CSLNKContourImpl::PointInPolygon(text.position(), *contour))
{
myTRACE("\n%s with area %8.2fm2", text.string().ascii(), contour->m_DWGArea/1e6);
@@ -251,6 +271,8 @@ void CWhipFile::processLabels()
{
myTRACE(" en we hebben een kleinere. Reset prevContour");
prevContour->m_contLabel = "";
prevContour->m_ShowLabel = "";
prevContour->m_Key = "";
prevContour = contour;
}
else // Nieuwe contour is niet beter
@@ -265,6 +287,7 @@ void CWhipFile::processLabels()
// problemen als we via XML communiceren
prevContour->m_Key.Trim();
prevContour->m_contLabel = prevContour->m_Key;
prevContour->m_ShowLabel = prevContour->m_Key;
#ifdef SHAKE_FOR_TEST
if (1||prevContour->m_Label.equals("x706"))
{
@@ -302,13 +325,13 @@ WT_Result CWhipFile::my_process_layer (WT_Layer & layer, WT_File & file)
file.rendition().layer() = layer;
WT_Layer *ll;
CWhipFileState *m_State = (CWhipFileState *)file.heuristics().user_data();
CWhipFile *deze = (CWhipFile *)file.heuristics().user_data();
CString layer_name(layer.layer_name().ascii());
if (layer_name != "") // Anders zittie alleen maar in de weg
{ // Dat doet de default_process 'fout'
// Overbodige lagen negeren we:
if (layer_name == m_State->m_activeLayerName)
if (layer_name == deze->m_activeLayerName)
return WT_Result::Success;
file.layer_list().add_layer(layer);
@@ -318,13 +341,14 @@ WT_Result CWhipFile::my_process_layer (WT_Layer & layer, WT_File & file)
{
WT_Integer32 layer_num = layer.layer_num();
ll = file.layer_list().find_layer_from_index(layer_num);
layer_name = ll->layer_name().ascii();
}
if (ll)
{
m_State->m_activeLayerName = ll->layer_name().ascii();
m_State->labelLayerActive = m_State->labelMatch(m_State->m_activeLayerName);
m_State->contLayerActive = m_State->contMatch(m_State->m_activeLayerName);
deze->m_activeLayerName = layer_name;
deze->m_labelLayerActive = deze->labelMatch(layer_name);
deze->m_contLayerActive = deze->contMatch(layer_name);
}
return WT_Result::Success;
@@ -334,8 +358,8 @@ WT_Result CWhipFile::my_process_layer (WT_Layer & layer, WT_File & file)
// but also for the rendition of the character '0'
WT_Result CWhipFile::my_process_polyline(WT_Polyline & polyline, WT_File & file)
{
CWhipFileState *m_State = (CWhipFileState *)file.heuristics().user_data();
if (!m_State->contLayerActive)
CWhipFile *deze = (CWhipFile *)file.heuristics().user_data();
if (!deze->m_contLayerActive)
return WT_Result::Success; // Wrong layer
bool frstIsLast = (polyline.points()[0].m_x == polyline.points()[polyline.count()-1].m_x &&
@@ -361,14 +385,15 @@ WT_Result CWhipFile::my_process_polyline(WT_Polyline & polyline, WT_File & file)
xxxx++;
WT_Units units=file.rendition().drawing_info().units();
//WT_Units units=file.rendition().drawing_info().units(); werkt niet goed met paperspace
WT_Units units=file.rendition().viewport().viewport_units();
// WD_True as we are going to mess
CSLNKContourImpl *myContour;
if (scndIsLast) // eerste lijntje droppen
myContour = new CSLNKContourImpl(polyline.count()-1,polyline.points()+1, WD_True, m_State);
myContour = new CSLNKContourImpl(polyline.count()-1,polyline.points()+1, WD_True, deze);
else
myContour = new CSLNKContourImpl(polyline.count(),polyline.points(), WD_True, m_State);
myContour = new CSLNKContourImpl(polyline.count(),polyline.points(), WD_True, deze);
// A major problem: Sometimes AutoCAD's DWFOUT merges two adjacent polylines
// into one WT_Polyline. We hate that so we start splitting them again here
@@ -390,7 +415,7 @@ xxxx++;
dwgPt.m_x, dwgPt.m_y);
// Create a copy of the looping section
// Sample: i=6, j=2, diff=4 pt
CSLNKContourImpl *myContour2 = new CSLNKContourImpl(i, myContour->points(), WD_True, m_State);
CSLNKContourImpl *myContour2 = new CSLNKContourImpl(i, myContour->points(), WD_True, deze);
// Als alle volgende punten binnen myContour2 vallen hebben we met een (komend) eiland te maken.
// Dan hebben we spijt en gaan toch niet splitsen
@@ -405,7 +430,7 @@ xxxx++;
continue;
}
// Create a copy of the end section
CSLNKContourImpl *myContour3 = new CSLNKContourImpl(myContour->count()-i, myContour->points()+i, WD_True, m_State);
CSLNKContourImpl *myContour3 = new CSLNKContourImpl(myContour->count()-i, myContour->points()+i, WD_True, deze);
// Omgekeerd: Als alle myContour2 punten binnen myContour3 vallen
// is het *eerste* stuk het eiland.
@@ -423,7 +448,7 @@ xxxx++;
}
myContour2->m_DWGArea = PolygonArea(myContour2, units);
m_State->m_SLNKContouren.Add(myContour2);
deze->m_SLNKContouren.Add(myContour2);
// Delete the old one (seem all together a little overkill)
delete myContour;
@@ -455,16 +480,16 @@ xxxx++;
// myTRACE("\nSplit case %d-%d",i,myContour->count());
// Create a copy of the looping section
// Sample: i=6, j=2, diff=4 pt
CSLNKContourImpl *myContour2 = new CSLNKContourImpl(i-j+1, myContour->points()+j, WD_True, m_State);
CSLNKContourImpl *myContour2 = new CSLNKContourImpl(i-j+1, myContour->points()+j, WD_True, deze);
myContour2->m_DWGArea = PolygonArea(myContour2, units);
m_State->m_SLNKContouren.Add(myContour2);
deze->m_SLNKContouren.Add(myContour2);
// Close the hole in myContour
for (int k=j+1; k+i-j<myContour->count(); k++)
myContour->points()[k]=myContour->points()[k+i-j];
// Create a copy of the start section
CSLNKContourImpl *myContour3 = new CSLNKContourImpl(myContour->count()-(i-j), myContour->points(), WD_True, m_State);
CSLNKContourImpl *myContour3 = new CSLNKContourImpl(myContour->count()-(i-j), myContour->points(), WD_True, deze);
// Delete the old one (seem all together a little overkill)
delete myContour;
myContour = myContour3;
@@ -477,11 +502,12 @@ xxxx++;
myContour->m_DWGArea = PolygonArea(myContour, units);
WT_Point3D dwgPt = units.transform(myContour->points()[0]);
myTRACE("\nFound contour with area %8.2fm2 starting DWF(%d,%d) DWG(%.3f,%.3f)",
myContour->m_DWGArea/1e6, myContour->points()[0].m_x, myContour->points()[0].m_y,
myTRACE("\nFound contour with area %8.0f (%8.2fm2) starting DWF(%d,%d) DWG(%.3f,%.3f)",
myContour->m_DWGArea, myContour->m_DWGArea/1e6,
myContour->points()[0].m_x, myContour->points()[0].m_y,
dwgPt.m_x, dwgPt.m_y);
if (myContour->m_DWGArea >= g_SLNKOptions.m_MinContSize)
m_State->m_SLNKContouren.Add(myContour);// Doet uiteindelijk wel een delete op myContour
if (myContour->m_DWGArea >= deze->m_minContSize)
deze->m_SLNKContouren.Add(myContour);// Doet uiteindelijk wel een delete op myContour
else
{
myTRACE(" te klein bevonden");
@@ -495,12 +521,12 @@ xxxx++;
// which will get used here
WT_Result CWhipFile::my_process_text (WT_Text & text, WT_File & file)
{
CWhipFileState *m_State = (CWhipFileState *)file.heuristics().user_data();
if (!m_State->labelLayerActive)
CWhipFile *deze = (CWhipFile *)file.heuristics().user_data();
if (!deze->m_labelLayerActive)
return WT_Result::Success; // Wrong layer
if (text.string().is_ascii() && strlen(text.string().ascii()) > 0)
m_State->m_SLNKLabels.Add(text);
deze->m_SLNKLabels.Add(text);
return WT_Result::Success;
}
@@ -521,6 +547,8 @@ HRESULT CWhipFile::SerializePlan(WT_File & my_plan_file, myWT_File & my_file, do
my_plan_file.object_node_list().remove_all();
my_plan_file.dash_pattern_list().remove_all();
// TODO Is dit 2.70 nog wel nodig? We doen verderop ook een en ander
// Zet wel m_activeLayerName dus nog laten zo
my_plan_file.set_layer_action(my_process_layer); // Override default processing
// Do the actual reading.
CString last_layer;
@@ -550,13 +578,14 @@ HRESULT CWhipFile::SerializePlan(WT_File & my_plan_file, myWT_File & my_file, do
{ // TODO: Als !CurrentLayerOn dan zouden we ook nog fors kunnen schrappen in de WT_Attributes
// die vaak niet meer van toepassing zijn. Dan moeten we echter met desireded rendition gaan werken
// en dat is me nog even te veel werk.
// 2.80: WT_Color en WT_Font alvast wel via desired, scheelt best in de DWF-grootte
const WT_Attribute *obj = (WT_Attribute *)my_plan_file.current_object();
switch(obj->object_id())
{
case WT_Object::URL_ID: // Strippen omdat ze in de weg kunnen zitten met onze eigen URL's
case WT_Object::Object_Node_ID: // kunnen we ook niets mee. Had RWSN#20095 in 1101EM0108_01.dwf
break;
case WT_Object::Layer_ID:
case WT_Object::Layer_ID:
{ // Sla de oorspronkelijke contour lagen over
// En ook de lagen die we niet willen
CurrentLayerOn = TRUE;
@@ -573,21 +602,31 @@ HRESULT CWhipFile::SerializePlan(WT_File & my_plan_file, myWT_File & my_file, do
}
// Noot: gooi de originele contour-lagen er altijd uit
if ((m_State.labelMatch(m_State.m_activeLayerName) ||
m_State.contMatch(m_State.m_activeLayerName) ||
!m_State.layerMatch(m_State.m_activeLayerName))
if ((labelMatch(m_activeLayerName) ||
contMatch(m_activeLayerName) ||
!layerMatch(m_activeLayerName))
)
CurrentLayerOn = FALSE; // Layer object hoeft ook niet meer geserialized
else
{
if (m_State.m_activeLayerName != last_layer) // cleaning, scheelt fors bij RIJSWIJKHB-02.dwf
if (m_activeLayerName != last_layer) // cleaning, scheelt fors bij RIJSWIJKHB-02.dwf
{
layer->serialize(my_file);
last_layer = m_State.m_activeLayerName;
last_layer = m_activeLayerName;
}
}
break;
}
case WT_Object::Color_ID:
{
my_file.desired_rendition().color() = *((WT_Color *)obj);
break;
}
case WT_Object::Font_ID:
{
my_file.desired_rendition().font() = *((WT_Font *)obj);
break;
}
default:
{
#ifdef _DEBUG
@@ -612,7 +651,7 @@ HRESULT CWhipFile::SerializePlan(WT_File & my_plan_file, myWT_File & my_file, do
}
}
myDoTRACE("\nWritten %d/%d layers", my_plan_file.layer_list().count(), my_file.layer_list().count());
myDoTRACE("\nWritten %d/%d layers", my_file.layer_list().count(), my_plan_file.layer_list().count());
// if (result == WT_Result::End_Of_DWF_Opcode_Found)
// dwfresult = DwfResult::Success;
@@ -693,16 +732,16 @@ private:
bool CWhipFile::GenerateSymbols(myWT_File &my_file)
{
double scale = m_State.m_contunits.application_to_dwf_transform()(0,0);
double scale = m_contunits.application_to_dwf_transform()(0,0);
// TODO: Echt uniek layernum (en URL num) bepalen
my_file.desired_rendition().layer() = WT_Layer(my_file, 65530, "SLNK Symbols");
for (size_t i=0; i<m_State.m_SLNKSymbols.GetCount(); i++)
for (size_t i=0; i<m_SLNKSymbols.GetCount(); i++)
{
CSLNKSymbolImpl *symbol= m_State.m_SLNKSymbols[i];
if (symbol->m_symbolName == "" || !m_State.m_SLNKSymbolDefinitions.Lookup(symbol->m_symbolName))
symbol->serialize(my_file, m_State.m_contunits, NULL,
m_State.m_hintScale, m_State.m_forFind);
CSLNKSymbolImpl *symbol= m_SLNKSymbols[i];
if (symbol->m_symbolName == "" || !m_SLNKSymbolDefinitions.Lookup(symbol->m_symbolName))
symbol->serialize(my_file, m_contunits, NULL,
m_hintScale, m_forFind);
else
{
#ifdef _DEBUG
@@ -711,8 +750,8 @@ bool CWhipFile::GenerateSymbols(myWT_File &my_file)
cmt.set(s);
cmt.serialize(my_file);
#endif
symbol->serialize(my_file, m_State.m_contunits, m_State.m_SLNKSymbolDefinitions[symbol->m_symbolName],
m_State.m_hintScale, m_State.m_forFind);
symbol->serialize(my_file, m_contunits, m_SLNKSymbolDefinitions[symbol->m_symbolName],
m_hintScale, m_forFind);
}
}
return true;
@@ -720,7 +759,7 @@ bool CWhipFile::GenerateSymbols(myWT_File &my_file)
bool CWhipFile::GenerateSymbolLabels(myWT_File &my_file)
{
double scale = m_State.m_contunits.application_to_dwf_transform()(0,0);
double scale = m_contunits.application_to_dwf_transform()(0,0);
// Zet een DC op om bij 'Center' de afmetingen van de tekst te kunnen bepalen
int fontheight= myRound(m_FontHeightSymbols * scale);
tempFontDC myDC(m_FontName);
@@ -737,13 +776,13 @@ bool CWhipFile::GenerateSymbolLabels(myWT_File &my_file)
// TODO: Echt uniek layernum (en URL num) bepalen
my_file.desired_rendition().layer() = WT_Layer(my_file, 65531, "SLNK Symbol Labels");
for (size_t i=0; i<m_State.m_SLNKSymbols.GetCount(); i++)
for (size_t i=0; i<m_SLNKSymbols.GetCount(); i++)
{
CSLNKSymbolImpl *symbol= m_State.m_SLNKSymbols[i];
CSLNKSymbolImpl *symbol= m_SLNKSymbols[i];
// Pas op dat de WT_Polygon nog niet getransformeerd is!
// Dat maakt LABEL_CENTROID berekeningen tricky....
// Tegenwoordig: CSLNKSymbolImpl::serialize heeft de contour al getransformeerd
WT_Logical_Point center = m_State.m_contunits.transform(WT_Point3D(symbol->m_dwgX, symbol->m_dwgY));
WT_Logical_Point center = m_contunits.transform(WT_Point3D(symbol->m_dwgX, symbol->m_dwgY));
symbol->m_SLNKContour.m_ptLabel = center;
WT_Transform wasTransform = my_file.heuristics().transform();
@@ -763,15 +802,21 @@ bool CWhipFile::GenerateSymbolLabels(myWT_File &my_file)
// wegeschreven. Die komen dan helemaal onderop. Ze zouden anders afdekken
// In de tweede slag komen alle transparante contouren. Die komen na de
// plattegrond zodat de plattegrond doorschijnt.
// TODO: Sorteren op dunste contouren eerst, die dikke moeten bovenop?
bool CWhipFile::GenerateContouren(WT_File &my_planfile, myWT_File &my_file,
double scale, BOOL solidOnly)
{
// Zorg dat we zelf neutraal blijven
WT_Layer keepLayer = my_planfile.rendition().layer();
WT_Color keepColor = my_planfile.rendition().color();
WT_Line_Style keepStyle = my_planfile.rendition().line_style();
// Vertrouw de huidige rendition niet!
WT_Color().serialize(my_file);
WT_Line_Style style;
style.line_join() = WT_Line_Style::Diamond_Join;
my_file.desired_rendition().line_weight() = myRound(10 * scale);
style.serialize(my_file);
//Store the current object node hoewel die echt null zal zijn....
WT_Object_Node current_node = my_file.desired_rendition().object_node();
@@ -781,13 +826,29 @@ bool CWhipFile::GenerateContouren(WT_File &my_planfile, myWT_File &my_file,
// Beide 'slagen' forceren (FSN#14349)
my_file.desired_rendition().layer().serialize(my_file);
for (size_t i=0; i<m_State.m_SLNKContouren.GetCount(); i++)
// Sorteren: die met m_onTop zetten we achteraan/ bovenop
size_t last = m_SLNKContouren.GetCount() - 1; // alles na last heeft onTop
for (size_t i=0; i<last && i<m_SLNKContouren.GetCount(); i++)
{
CSLNKContourImpl *contour= m_State.m_SLNKContouren[i];
my_file.desired_rendition().line_weight() = myRound(10 * scale);
if (!m_State.layerMatch("SLNK Contours"))
contour->m_outlineAlpha=0; // Onzichtbaar maken
contour->serialize(my_file, solidOnly, m_State.m_forFind);
CSLNKContourImpl *contour= m_SLNKContouren[i];
if (contour->m_onTop)
{
while (last > i && last > 0 && m_SLNKContouren[last]->m_onTop)
last --;
if (last > i && last > 0)
{
m_SLNKContouren[i] = m_SLNKContouren[last];
m_SLNKContouren[last] = contour;
last--;
}
}
}
for (size_t i=0; i<m_SLNKContouren.GetCount(); i++)
{
CSLNKContourImpl *contour= m_SLNKContouren[i];
contour->serialize(my_file, solidOnly, m_forFind, scale);
}
my_file.desired_rendition().object_node() = current_node;
@@ -797,6 +858,9 @@ bool CWhipFile::GenerateContouren(WT_File &my_planfile, myWT_File &my_file,
if (keepLayer.layer_num()) keepLayer.serialize(my_file); // Zeker terugzetten
my_file.desired_rendition().color() = my_file.rendition().color() = keepColor;
keepColor.serialize(my_file); // Zeker terugzetten
my_file.desired_rendition().line_style() = my_file.rendition().line_style() = keepStyle;
keepStyle.serialize(my_file); //
return true;
}
@@ -820,12 +884,12 @@ bool CWhipFile::GenerateLabels(WT_File &my_planfile, myWT_File &my_file, double
myfont.serialize(my_file); // Vertrouw niets. Expliciete serialize. Zie @@@
// En nu nog een keer alle teksten
for (size_t i=0; i<m_State.m_SLNKContouren.GetCount(); i++)
for (size_t i=0; i<m_SLNKContouren.GetCount(); i++)
{
CSLNKContourImpl *contour= m_State.m_SLNKContouren[i];
CSLNKContourImpl *contour= m_SLNKContouren[i];
// Een polyline hebben we nu niet nodig
if (contour->m_contLabel.length()!=0 && contour->m_ExtraLabel != "")
if (contour->m_contLabel.length()!=0 && contour->m_ShowLabel != "")
{ // We have got a proper label/contour
// Alle teksten tekenen
contour->SerializeLabel(my_file, m_LabelPos, fontheight, scale, myDC);
@@ -846,7 +910,7 @@ STDMETHODIMP CWhipFile::Generate(myWT_File &my_file)
{
// Bepaal de te gebruiken hoogte in Logical Points
double scale = m_State.m_contunits.application_to_dwf_transform()(0,0);
double scale = m_contunits.application_to_dwf_transform()(0,0);
myDoTRACE("\nSchaal: %.2f", scale);
WT_Result result;
@@ -915,7 +979,7 @@ STDMETHODIMP CWhipFile::Generate(myWT_File &my_file)
// de teksten. Zodoende zijn de teksten altijd leesbaar
GenerateContouren(m_W2DFile, my_file, scale, false); // Alle transparante kleuren
//merging geeft vreemd effect op de contouren die we om symbolen tekenen in _DEBUG mode
// dan worden die contouren niet meer meegeschaalt? TODO: Uitzoeken
// dan worden die contouren niet meer meegeschaald? TODO: Uitzoeken
//my_file.heuristics().set_allow_drawable_merging(WD_True); // Voor symbolen kan het (na verschalen) wel schelen
GenerateSymbols(my_file); // Ook alle contouren van symbolen
GenerateSymbolLabels(my_file);
@@ -932,21 +996,21 @@ STDMETHODIMP CWhipFile::Generate(myWT_File &my_file)
// mei 2007: DEPRECATED
// Lege Identlabel zet alle labels op de extralabel+default
STDMETHODIMP CWhipFile::SetLabel(BSTR IdentLabel, BSTR ExtraLabel)
STDMETHODIMP CWhipFile::SetLabel(BSTR IdentLabel, BSTR ShowLabel)
{
try {
for (size_t i=0; i<m_State.m_SLNKContouren.GetCount(); i++)
for (size_t i=0; i<m_SLNKContouren.GetCount(); i++)
{
CSLNKContourImpl *contour= m_State.m_SLNKContouren[i];
CSLNKContourImpl *contour= m_SLNKContouren[i];
if (contour->m_contLabel.length()>0)
{
if (contour->m_contLabel.equals(IdentLabel) || SysStringLen(IdentLabel) == 0)
{
contour->m_ExtraLabel = ExtraLabel;
contour->m_ShowLabel = ShowLabel;
}
if (SysStringLen(IdentLabel) == 0)
contour->m_ExtraLabel += contour->m_contLabel.ascii();
contour->m_ShowLabel += contour->m_contLabel.ascii();
}
}
return S_OK;
@@ -964,9 +1028,9 @@ STDMETHODIMP CWhipFile::SetLabel(BSTR IdentLabel, BSTR ExtraLabel)
STDMETHODIMP CWhipFile::SetColor(BSTR IdentLabel, ULONG rgb, BYTE Alpha /*=255*/)
{
try {
for (size_t i=0; i<m_State.m_SLNKContouren.GetCount(); i++)
for (size_t i=0; i<m_SLNKContouren.GetCount(); i++)
{
CSLNKContourImpl *contour= m_State.m_SLNKContouren[i];
CSLNKContourImpl *contour= m_SLNKContouren[i];
if (contour->m_contLabel.length()>0 &&
(SysStringLen(IdentLabel) == 0 || contour->m_contLabel.equals(IdentLabel)))
{
@@ -991,9 +1055,9 @@ STDMETHODIMP CWhipFile::SetColor(BSTR IdentLabel, ULONG rgb, BYTE Alpha /*=255*/
STDMETHODIMP CWhipFile::HighlightUnrecognized()
{
try {
for (size_t i=0; i<m_State.m_SLNKContouren.GetCount(); i++)
for (size_t i=0; i<m_SLNKContouren.GetCount(); i++)
{
CSLNKContourImpl *contour= m_State.m_SLNKContouren[i];
CSLNKContourImpl *contour= m_SLNKContouren[i];
if (contour->m_contLabel.length()==0)
{
contour->m_Color.set(255, 0, 0);
@@ -1040,10 +1104,10 @@ STDMETHODIMP CWhipFile::get_ContoursXML(BSTR* pVal)
DWFXMLSerializer XML(_oUUID);
XML.attach(XMLProps);
XML.startElement( L"Contours", L"SLNKDWF" );
for (size_t i=0; i<m_State.m_SLNKContouren.GetCount(); i++)
for (size_t i=0; i<m_SLNKContouren.GetCount(); i++)
{
CSLNKContourImpl *contour= m_State.m_SLNKContouren[i];
contour->serializeXML(XML, contour->m_parentWhipFileState->m_contunits);
CSLNKContourImpl *contour= m_SLNKContouren[i];
contour->serializeXML(XML, contour->m_parentWhipFile->m_contunits);
}
XML.endElement();
XML.detach();
@@ -1058,8 +1122,8 @@ STDMETHODIMP CWhipFile::get_AddSymbol(DOUBLE dwgX, DOUBLE dwgY, BSTR symbolName,
myTRACE("\nAdding symbol %s at %.2f,%.2f", name, dwgX, dwgY);
CSLNKSymbolImpl *mySymbol = new CSLNKSymbolImpl(dwgX, dwgY, &m_State);
m_State.m_SLNKSymbols.Add(mySymbol);
CSLNKSymbolImpl *mySymbol = new CSLNKSymbolImpl(dwgX, dwgY, this);
m_SLNKSymbols.Add(mySymbol);
// Als resultaat leveren we een COM object op waar je eventueel de rest van
// de properties op kunt zetten
@@ -1074,25 +1138,19 @@ STDMETHODIMP CWhipFile::get_AddSymbol(DOUBLE dwgX, DOUBLE dwgY, BSTR symbolName,
if(FAILED(hr)) return hr;
theSymbol->SetImpl(mySymbol); // Heel belangrijk: zet de implementatie waar we een interface op bieden
if (!m_State.m_SLNKSymbolDefinitions.Lookup(name))
if (!m_SLNKSymbolDefinitions.Lookup(name))
name = "*STAR"; // Die vinden we altijd ja
ATLASSERT(m_State.m_SLNKSymbolDefinitions.Lookup(name));
ATLASSERT(m_SLNKSymbolDefinitions.Lookup(name));
mySymbol->m_symbolName = name;
mySymbol->m_SLNKContour.set(m_State.m_SLNKSymbolDefinitions[name]->m_BoundingContour.count(),
m_State.m_SLNKSymbolDefinitions[name]->m_BoundingContour.points(), true); // TODO: Is copy wel nodig?==>Ja, we gaan ze later transformeren!
mySymbol->m_SLNKContour.set(m_SLNKSymbolDefinitions[name]->m_BoundingContour.count(),
m_SLNKSymbolDefinitions[name]->m_BoundingContour.points(), true); // TODO: Is copy wel nodig?==>Ja, we gaan ze later transformeren!
// De voorgedefinieerde symbolen hebben alleen maar een contour. Die activeren we hier
if (name[0] == '*')
{
// Default rood
mySymbol->m_SLNKContour.m_Color = WT_Color(255,0,0,255);
mySymbol->m_SLNKContour.m_outlineAlpha = 255; // Anders wordtie helemaal niet getekend?
}
else
{
#ifdef _DEBUG
mySymbol->m_SLNKContour.m_outlineAlpha = 255; // Altijd Zichtbaar maken
#else
mySymbol->m_SLNKContour.m_outlineAlpha = g_SLNKOptions.m_SymbolOutlineAlpha; // default Onzichtbaar maken
#endif
mySymbol->m_SLNKContour.m_outlineColor = WT_Color(255,0,0,255); // Anders wordtie helemaal niet getekend?
}
return S_OK;
}
@@ -1117,7 +1175,7 @@ STDMETHODIMP CWhipFile::DefineSymbol(BSTR symbolName, VARIANT EPlotStream)
CSLNKSymbolDefinition * symb = new CSLNKSymbolDefinition(EPlotSection);
CString name(symbolName);
m_State.m_SLNKSymbolDefinitions.SetAt(name, symb);
m_SLNKSymbolDefinitions.SetAt(name, symb);
}
}
else
@@ -1132,7 +1190,7 @@ STDMETHODIMP CWhipFile::DefineBitmapSymbol(BSTR symbolName, BSTR symbolPath, dou
myTRACE("\nDefining bitmap symbol %ls", symbolName);
CSLNKSymbolDefinition * symb = new CSLNKSymbolDefinition(CString(symbolPath), height);
CString name(symbolName);
m_State.m_SLNKSymbolDefinitions.SetAt(name, symb);
m_SLNKSymbolDefinitions.SetAt(name, symb);
//return E_INVALIDARG;
return S_OK;
@@ -1144,10 +1202,10 @@ STDMETHODIMP CWhipFile::DefineBitmapSymbol(BSTR symbolName, BSTR symbolPath, dou
STDMETHODIMP CWhipFile::get_Contour(BSTR IdentLabel, ISLNKContour** pVal)
{
try {
for (size_t i=0; i<m_State.m_SLNKContouren.GetCount(); i++)
for (size_t i=0; i<m_SLNKContouren.GetCount(); i++)
{
CSLNKContourImpl *contour= m_State.m_SLNKContouren[i];
if (contour->m_contLabel.length()>0 && contour->m_contLabel.equals(IdentLabel))
CSLNKContourImpl *contour = m_SLNKContouren[i];
if (contour->m_Key == CString(IdentLabel))
{
return get_ContourItem((ULONG) i, pVal);
}
@@ -1166,14 +1224,14 @@ STDMETHODIMP CWhipFile::get_Contour(BSTR IdentLabel, ISLNKContour** pVal)
STDMETHODIMP CWhipFile::get_hintScale(DOUBLE* pVal)
{
(*pVal) = m_State.m_hintScale;
(*pVal) = m_hintScale;
return S_OK;
}
STDMETHODIMP CWhipFile::put_hintScale(DOUBLE newVal)
{
m_State.m_hintScale = newVal;
m_hintScale = newVal;
myTRACE("\nhintScale set to %.6f", newVal);
return S_OK;
@@ -1181,7 +1239,7 @@ STDMETHODIMP CWhipFile::put_hintScale(DOUBLE newVal)
STDMETHODIMP CWhipFile::put_forFind(VARIANT_BOOL newVal)
{
m_State.m_forFind = newVal;
m_forFind = newVal;
return S_OK;
}
@@ -1194,15 +1252,15 @@ STDMETHODIMP CWhipFile::get_FindInContour(DOUBLE dwgX, DOUBLE dwgY, BSTR* pVal)
{
CString result;
WT_Point3D insertion(dwgX, dwgY);
WT_Logical_Point LPInsertion = m_State.m_contunits.transform(WT_Point3D(dwgX, dwgY));
WT_Logical_Point LPInsertion = m_contunits.transform(WT_Point3D(dwgX, dwgY));
for (size_t i=0; i<m_State.m_SLNKContouren.GetCount(); i++)
for (size_t i=0; i<m_SLNKContouren.GetCount(); i++)
{
CSLNKContourImpl *contour= m_State.m_SLNKContouren[i];
if (contour->m_contLabel.length()>0)
CSLNKContourImpl *contour= m_SLNKContouren[i];
if (contour->m_Key != "")
if (CSLNKContourImpl::PointInPolygon(LPInsertion, *contour))
{
result = contour->m_contLabel;
result = contour->m_Key;
(*pVal) = result.AllocSysString();
}
}
@@ -1211,14 +1269,14 @@ STDMETHODIMP CWhipFile::get_FindInContour(DOUBLE dwgX, DOUBLE dwgY, BSTR* pVal)
STDMETHODIMP CWhipFile::get_ContourCount(LONG* pVal)
{
*pVal = (LONG)m_State.m_SLNKContouren.GetCount();
*pVal = (LONG)m_SLNKContouren.GetCount();
return S_OK;
}
STDMETHODIMP CWhipFile::get_ContourItem(ULONG i, ISLNKContour** pVal)
{
if (i < 0 || i >= m_State.m_SLNKContouren.GetCount())
if (i < 0 || i >= m_SLNKContouren.GetCount())
return E_INVALIDARG;
CComObject<CSLNKContour> *theContour;
HRESULT hr = CComObject<CSLNKContour>::CreateInstance(&theContour);
@@ -1230,7 +1288,21 @@ STDMETHODIMP CWhipFile::get_ContourItem(ULONG i, ISLNKContour** pVal)
theContour->Release();
if(FAILED(hr)) return hr;
theContour->SetImpl(m_State.m_SLNKContouren[i]); // Heel belangrijk: zet de implementatie waar we een interface op bieden
theContour->SetImpl(m_SLNKContouren[i]); // Heel belangrijk: zet de implementatie waar we een interface op bieden
return S_OK; // Wel gevonden
}
STDMETHODIMP CWhipFile::get_minContSize(DOUBLE* pVal)
{
(*pVal) = m_minContSize;
return S_OK;
}
STDMETHODIMP CWhipFile::put_minContSize(DOUBLE newVal)
{
m_minContSize = newVal;
return S_OK;
}

View File

@@ -13,48 +13,98 @@ using namespace DWFToolkit;
#include "SLNKDWF.h"
class CWhipFileState
// 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:
CWhipFileState()
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()
{
m_reContouren.Parse(".*", FALSE);
m_reLabels.Parse(".*", FALSE);
m_reLayers.Parse(".*", FALSE);
m_hintScale = -1.0;
m_forFind = TRUE; // backward compatible
m_activeLayerName = "";
};
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;
return S_OK;
}
BOOL SetFilterLayers(BSTR reLayers)
void FinalRelease()
{
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()
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 ShowLabel);
STDMETHOD(SetColor)(BSTR IdentLabel, ULONG rgb, BYTE Alpha);
STDMETHOD(HighlightUnrecognized)();
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, ISLNKSymbol** pVal);
STDMETHOD(DefineSymbol)(BSTR symbolName, VARIANT EPlotStream);
STDMETHOD(DefineBitmapSymbol)(BSTR symbolName, BSTR symbolPath, DOUBLE height);
STDMETHOD(get_Contour)(BSTR IdentLabel, ISLNKContour** pVal);
STDMETHOD(SetFilterLayers)(BSTR reLayers);
STDMETHOD(get_FindInContour)(DOUBLE dwgX, DOUBLE dwgY, BSTR* pVal);
private:
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);
STDMETHOD(put_forFind)(VARIANT_BOOL newVal);
STDMETHOD(get_ContourCount)(LONG* pVal);
STDMETHOD(get_ContourItem)(ULONG i, ISLNKContour** pVal);
STDMETHOD(get_minContSize)(DOUBLE* pVal);
STDMETHOD(put_minContSize)(DOUBLE newVal);
// Voorheen WhipFileState
public:
~CWhipFile()
{
for (size_t i=0; i<m_SLNKContouren.GetCount(); i++)
delete m_SLNKContouren[i];
@@ -98,9 +148,10 @@ public:
WT_Units m_contunits;
CString m_activeLayerName;
BOOL contLayerActive;
BOOL labelLayerActive;
BOOL m_contLayerActive;
BOOL m_labelLayerActive;
double m_hintScale; // Kunnen we gebruiken om symbolen te 'geeken'
double m_minContSize; // Minimale oppervlakte om als contour te erkend worden
BOOL m_forFind; // Extra info die we kunnen misbruiken
private:
@@ -109,93 +160,4 @@ private:
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(HighlightUnrecognized)();
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, ISLNKSymbol** pVal);
STDMETHOD(DefineSymbol)(BSTR symbolName, VARIANT EPlotStream);
STDMETHOD(DefineBitmapSymbol)(BSTR symbolName, BSTR symbolPath, DOUBLE height);
STDMETHOD(get_Contour)(BSTR IdentLabel, ISLNKContour** 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);
STDMETHOD(put_forFind)(VARIANT_BOOL newVal);
STDMETHOD(get_ContourCount)(LONG* pVal);
STDMETHOD(get_ContourItem)(ULONG i, ISLNKContour** pVal);
};
OBJECT_ENTRY_AUTO(__uuidof(WhipFile), CWhipFile)

View File

@@ -11,9 +11,10 @@
/*static*/ WT_Integer32 CSLNKContourImpl::m_next_node_num = 0; // Eigenlijk initialiseren op laatste van planfile
CSLNKContourImpl::CSLNKContourImpl(void)
: m_DWGArea(-1), m_outlineAlpha(255)
: m_DWGArea(-1), m_outlineColor(WT_RGBA32(128,128,128,255))
{
m_Color = WT_RGBA32(0,0,0,0); // alpha==0, 100% transparant
m_Color = WT_RGBA32(0,0,0,0); // alpha==0, onzichtbaar
m_Lineweight = 10.0; // 10mm default
}
CSLNKContourImpl::~CSLNKContourImpl(void)
@@ -244,7 +245,7 @@ Subject 1.02: How do I find the distance from a point to a line?
}
// Signed Area needed for centroid!
// Negative is clockwise, Positve counterclockwise
// Negative is clockwise, Positive counterclockwise
/*static*/double CSLNKContourImpl::DWFArea(const WT_Point_Set &pg)
{
int i;
@@ -341,7 +342,7 @@ void CSLNKContourImpl::SerializeLabel(WT_File &my_file, LABELPOS pos,
else
my_file.desired_rendition().color() = WT_Color(255,255,255,0); //Teksten wit
CString tok(m_ExtraLabel); // strtok seems to modify
CString tok(m_ShowLabel); // strtok seems to modify
tok.Replace("~", "\n"); // We ondersteunen ook ~ als newline
tok.Replace("[br]", "\n"); // We ondersteunen ook [br] als newline
tok.Replace("[BR]", "\n"); // We ondersteunen ook [BR] als newline
@@ -583,7 +584,7 @@ WT_Logical_Point CSLNKContourImpl::DrawOneLabel(WT_File &my_file,
Als solidOnly dan alleen als alpha==255 en een label (wel herkend)
****************************************************************************/
WT_Result CSLNKContourImpl::serialize(WT_File & file, BOOL solidOnly, BOOL forFind)
WT_Result CSLNKContourImpl::serialize(WT_File & file, BOOL solidOnly, BOOL forFind, double scale)
{
if (!m_fromSymbol && m_contLabel == "" && !solidOnly) // Alleen bij tweede slag
{ // May very well be a textobject itself, just emit it
@@ -662,21 +663,23 @@ WT_Result CSLNKContourImpl::serialize(WT_File & file, BOOL solidOnly, BOOL forFi
my_poly2.serialize(file);
file.desired_rendition().fill_pattern() = pOld;
}
//
// Nu nogmaals om de rand van de ruimte te tekenen
// Dikte is door de aanroeper al gezet
//
// TODO: Altijd contrasteren met achtergrond
if (m_outlineAlpha>0) // Voor symbolen niet nodig
{
file.desired_rendition().color() = WT_Color(128,128,128, m_outlineAlpha); // Set the color for the polyline
//my_file.desired_rendition().color() = WT_Color(0,0,0); // Zwart
WT_Polyline my_line( count(), points(), WD_False);
my_line.serialize(file);
}
file.desired_rendition().url().clear();
}
//
// Nu nogmaals om de zichtbare rand van de ruimte te tekenen
//
if (!solidOnly // Randje altijd alleen in de tweede slag zodat bij voorkeur bovenop
&& m_outlineColor.rgba().m_rgb.a>0) // Voor symbolen niet nodig
{
file.desired_rendition().color() = m_outlineColor; // Set the color for the polyline
file.desired_rendition().line_weight() = myRound(m_Lineweight * scale);
// Fraaier bij lijndikte aan begin/eind
file.desired_rendition().line_style().line_end_cap() = WT_Line_Style::Round_Cap;
WT_Polyline my_line( count(), points(), WD_False);
my_line.serialize(file);
}
}
return WT_Result::Success;
};

View File

@@ -3,7 +3,7 @@
#define FONT_SIZER 1000
class CWhipFileState; // Forward declaration
class CWhipFile; // Forward declaration
class CSLNKContourImpl :
public WT_Polygon
@@ -23,29 +23,32 @@ public:
int count, /**< The number of points in the array. */
WT_Logical_Point const * points, /**< Pointer to the array of points. */
WT_Boolean copy, /**< Whether the points should be copied or if their addresses should be used directly from the array. */
CWhipFileState *parent
CWhipFile *parent
)
: WT_Polygon(count, points, copy), m_outlineAlpha(255), m_fromSymbol(false)
: WT_Polygon(count, points, copy), m_outlineColor(128,128,128,255), m_fromSymbol(false), m_onTop(false)
{
m_Color = WT_RGBA32(0,0,0,0); // alpha==0, 100% transparant
m_parentWhipFileState = parent;
m_Lineweight = 10.0; // 10 mm default
m_parentWhipFile = parent;
}
~CSLNKContourImpl(void);
public:
WT_String m_contLabel; // As scanned from DWF-file
CString m_Key; // standaard m_contLabel voor contouren maar kan (en voor symbolen moet) een andere waarde krijgen
WT_Color m_Color;
int m_outlineAlpha; // Default 255, zet op 0 voor transparant
WT_Color m_Color; // Vul-kleur
WT_Color m_outlineColor; // Contour kleur
BOOL m_onTop; // Deze wordt later (bovenop) getekend dan degene die niet onTop hebben
BOOL m_fromSymbol; // Dan zijn onze bounds maar matig betrouwbaar zo lang ze niet getransformeerd zijn.
CWhipFileState *m_parentWhipFileState;
CWhipFile *m_parentWhipFile;
WT_Fill_Pattern m_Pattern;
WT_Logical_Point m_ptLabel; // Coordinates of the label
CString m_ExtraLabel; // Can be defined
CString m_ShowLabel; // As will be shown
WT_URL_Item m_Url; // Can be defined
double m_DWGArea; // As determined, original source drawing units
double m_Lineweight; // DWG coordinaten
WT_Result serialize(WT_File & file, BOOL solidOnly, BOOL forFind);
WT_Result serialize(WT_File & file, BOOL solidOnly, BOOL forFind, double scale);
static BOOL PointInPolygon(const WT_Logical_Point pt, const WT_Point_Set &ps);
static BOOL PointInPolygon(const CPoint pt, const CPoint *ps, int size);
static void EdgeAngle(const WT_Logical_Point pt, const WT_Point_Set &ps, double &EdgeAngle, double &EdgeDistance);

View File

@@ -16,8 +16,8 @@
// CWhip2DC
STDMETHODIMP CWhip2DCImpl::Load(HDC hDC, CEPlotSectionImpl *EPlotStream,
const CString &WhipPath,
STDMETHODIMP CWhip2DCImpl::Load(HDC hDC, CEPlotSectionImpl *EPlotStream,
const CString &WhipPath,
const CString & RegExp, long sizeX, long sizeY,
VARIANT_BOOL centerImage, VARIANT_BOOL maximize,/*=FALSE*/
double dwgScale/*=0.0*/, long lRotation /*=0*/)
@@ -94,10 +94,10 @@ if (0) { // altijd 'gewoon' recht rekenen
if (!maximize)
m_State.SetExtents(view->view()); // m_mul wordt gezet en de loop eindigt
else
{
{
// 'Move' alles naar het midden van het eerste kwadrant
// Anders kunnen we later bij bounds bepaling overflow krijgen
// Waar roteren we eigenlijk omheen?
WT_Logical_Point lCenter;
if (m_State.m_lRotation==0||m_State.m_lRotation==90||m_State.m_lRotation==180||m_State.m_lRotation==270)
@@ -123,7 +123,7 @@ if (0) { // altijd 'gewoon' recht rekenen
m_State.SetExtents(WT_Logical_Box(dwfPtmin, dwfPtmax)); // m_mul wordt gezet en de loop eindigt
}
}
break;
break;
}
break;
}
@@ -168,7 +168,7 @@ if (0) { // altijd 'gewoon' recht rekenen
double old_mul = m_State.m_mul;
CSize old_size = m_State.m_Size;
m_State.m_mul = 1.0/dwgScale/dScale;
if (m_State.m_Maximize) // Eventueel centreren ongedaan maken
m_State.m_MinMax = m_State.m_orgMinMax;
@@ -178,11 +178,12 @@ if (0) { // altijd 'gewoon' recht rekenen
m_State.m_Size.cx = max(m_State.m_Size.cx, 1);
m_State.m_Size.cy = max(m_State.m_Size.cy, 1);
myDoTRACE("\nm_mul forced from %.8f to %.8f and size from (%d, %d) to (%d, %d)",
myDoTRACE("\nm_mul forced from %.8f to %.8f and size from (%d, %d) to (%d, %d)",
old_mul, m_State.m_mul, old_size.cx,old_size.cy,m_State.m_Size.cx,m_State.m_Size.cy);
}
ATLASSERT(m_State.m_mul!=0);
return S_OK;
}
@@ -197,8 +198,29 @@ STDMETHODIMP CWhip2DCImpl::Paint(VARIANT_BOOL forceBW, VARIANT_BOOL markers /* =
#ifdef _DEBUG
/// CneutralGDI neutralGDI("CWhip2DCImpl::Paint");
#endif
//#define EXPERIMENT
// Helaas: bij sterk inzoomen (lijkt: m_mul > 1) komen er af en toe zwarte
// randen in de viewer te voorschijn
#ifdef EXPERIMENT
SetMapMode(m_State.myDC, MM_ANISOTROPIC);
SIZE wsz, vsz;
if (m_State.m_mul < 1.0)
{
SetWindowExtEx(m_State.myDC, myRound(m_State.m_Size.cx / m_State.m_mul), myRound(m_State.m_Size.cy / m_State.m_mul), &wsz);
SetViewportExtEx(m_State.myDC, m_State.m_Size.cx, m_State.m_Size.cy, &vsz);
}
else
{
SetWindowExtEx(m_State.myDC, m_State.m_Size.cx, m_State.m_Size.cy, &wsz);
SetViewportExtEx(m_State.myDC, myRound(m_State.m_Size.cx * m_State.m_mul), myRound(m_State.m_Size.cy * m_State.m_mul), &vsz);
}
m_State.m_mul = 1.0;
int mm = GetMapMode(m_State.myDC);
#endif
CmyTimer Timer("CWhip2DCImpl::Paint");
m_State.m_forceBW = forceBW;
m_State.findIt = FALSE;
@@ -236,6 +258,9 @@ STDMETHODIMP CWhip2DCImpl::Paint(VARIANT_BOOL forceBW, VARIANT_BOOL markers /* =
// Alle callback functies zijn static. Die kunnen de variabele
// m_State niet benaderen. Daarom maar via set_user_data
// Voortschrijdend inzicht: doorgeven van (void *)this was eigenlijk
// veel praktischer geweest. Bij whipfile.cpp doen we dat al sinds
// 2.80 maar hier is me dat nog even te veel werk.
my_input_file.heuristics().set_user_data((void *)&m_State);
if (m_State.m_lRotation != 0) // Tijdens het laden roteren
@@ -352,9 +377,9 @@ STDMETHODIMP CWhip2DCImpl::Paint(VARIANT_BOOL forceBW, VARIANT_BOOL markers /* =
{
CString txt;
txt.Format("%d", x);
TextOut(m_State.myDC, pt.x+5, pt.y, txt, txt.GetLength());
TextOut(m_State.myDC, pt.x+5, pt.y, txt, txt.GetLength());
txt.Format("%d", y);
TextOut(m_State.myDC, pt.x+5, pt.y+10, txt, txt.GetLength());
TextOut(m_State.myDC, pt.x+5, pt.y+10, txt, txt.GetLength());
}
}
}
@@ -367,9 +392,9 @@ STDMETHODIMP CWhip2DCImpl::Paint(VARIANT_BOOL forceBW, VARIANT_BOOL markers /* =
//CPoint pt1 = m_State.DWFToLP(WT_Logical_Point(INT_MAX, -100000000));
HPEN m_pen = CreatePen(PS_SOLID, 3, RGB(255,255,0));
HPEN oldpen = (HPEN) SelectObject(m_State.myDC, m_pen);
MoveToEx(m_State.myDC, pt0.x, pt0.y, NULL);
MoveToEx(m_State.myDC, pt0.x, pt0.y, NULL);
LineTo(m_State.myDC, pt1.x, pt1.y);
LineTo(m_State.myDC, pt1.x, pt1.y);
#endif
}
return S_OK;
@@ -440,12 +465,12 @@ STDMETHODIMP CWhip2DCImpl::FindTexts(const CString &findText)
* Return S_OK
*
* Called
* TODO: AsMap wordt voor steeds meer doeleinden gebruikt. Oppassen dat
* TODO: AsMap wordt voor steeds meer doeleinden gebruikt. Oppassen dat
* bijvoorbeeld extents wel correct worden bepaald
*****************************************************************************/
STDMETHODIMP CWhip2DCImpl::Find(LONG findX, LONG findY,
BYTE AsMap,
CString & pContourLabel,CString & pContourLayer,
STDMETHODIMP CWhip2DCImpl::Find(LONG findX, LONG findY,
BYTE AsMap,
CString & pContourKey, CString & pContourLayer,
CString & pTextLabel, CString & pTextLayer,
double &pEdgeAngle, double &pEdgeDistance)
{
@@ -468,7 +493,7 @@ STDMETHODIMP CWhip2DCImpl::Find(LONG findX, LONG findY,
CPoint ptback = m_State.DWFToLP(m_State.DWFfindXY);
myTRACE("\nTerugvertaling: (%d, %d)\n", ptback.x, ptback.y);
#endif
myWT_File my_input_file; // input file.
// For TextExtent32
@@ -515,7 +540,7 @@ STDMETHODIMP CWhip2DCImpl::Find(LONG findX, LONG findY,
my_input_file.close(); // closing Input file.
if (AsMap)
pContourLabel = m_State.MapBuilder;
pContourKey = m_State.MapBuilder;
else
{
if (m_State.foundTextLabel != "")
@@ -526,7 +551,7 @@ STDMETHODIMP CWhip2DCImpl::Find(LONG findX, LONG findY,
if (m_State.foundNode.object_node_name())
{
pContourLabel = CString(m_State.foundNode.object_node_name().ascii());
pContourKey = CString(m_State.foundNode.object_node_name().ascii());
pContourLayer = m_State.foundNodeLayer;
pEdgeAngle = m_State.foundEdgeAngle;
pEdgeDistance = m_State.foundEdgeDistance;
@@ -543,12 +568,12 @@ STDMETHODIMP CWhip2DCImpl::Find(LONG findX, LONG findY,
}
// Call Find() or Paint() first!!
STDMETHODIMP CWhip2DCImpl::DPtoDWG(LONG findX, LONG findY,
STDMETHODIMP CWhip2DCImpl::DPtoDWG(LONG findX, LONG findY,
DOUBLE* resX, DOUBLE* resY)
{
m_State.LPfindXY = CPoint(findX, findY);
DPtoLP(m_State.myDC, &m_State.LPfindXY, 1);
if ((resX != NULL) && (resY != NULL))
{
if (m_State.m_mul==0) // Geen extents, vast ook geen transform
@@ -566,7 +591,7 @@ STDMETHODIMP CWhip2DCImpl::DPtoDWG(LONG findX, LONG findY,
}
// Call Find() or Paint() first!!
STDMETHODIMP CWhip2DCImpl::DWGExtents(DOUBLE* resminX, DOUBLE* resminY,
STDMETHODIMP CWhip2DCImpl::DWGExtents(DOUBLE* resminX, DOUBLE* resminY,
DOUBLE* resmaxX, DOUBLE* resmaxY)
{
if (resminX && resminY && resmaxX && resmaxY)
@@ -663,27 +688,27 @@ WT_Result CWhip2DCImpl::my_process_viewport (WT_Viewport & viewport, WT_File & f
BOOL firstTime = (!file.rendition().viewport().contour());
file.rendition().viewport() = viewport;
// Voor de zekerheid opnieuw. ADT3_MTextFormattingCodesinScheduleTags.dwf had
// Voor de zekerheid opnieuw. ADT3_MTextFormattingCodesinScheduleTags.dwf had
// (waarschijnlijk door de DWFPrinter) de eerste (Font) voor de eerste (Viewport)
// en dan was de hoogte niet goed gezet
m_State->my_process_font(file.rendition().font());
double dScale = viewport.viewport_units().application_to_dwf_transform()(0,0);
myDoTRACE("\nThis viewport: 1 pixel = %.8f drawing units.", 1.0/(dScale*m_State->m_mul));
if (m_State->findIt) // When finding no need (or actually: support) for clipping
return WT_Result::Success;
if (!viewport.contour()) // dwftest_bc.dwf
{
SelectClipRgn(m_State->myDC, NULL);
return WT_Result::Success;
SelectClipRgn(m_State->myDC, NULL);
return WT_Result::Success;
}
// Viewports-ANSI A.dwf heeft diverse viewports
myTRACE("\nViewport met %d punten", viewport.contour()->total_points());
// TODO: Door afronding kan het gebeuren dat de clipregion ene pixel
// TODO: Door afronding kan het gebeuren dat de clipregion ene pixel
// te ver naar binnen valt waardoor meest rechtse lijntjes wegvallen
// Daarom viewport ter grootte van minmax niet aanzetten
// NOOT: Ook riskant als later symbolen net buiten de extents geplaatst zijn?
@@ -694,20 +719,20 @@ WT_Result CWhip2DCImpl::my_process_viewport (WT_Viewport & viewport, WT_File & f
return WT_Result::Success;
}
CPoint *vertexList =
m_State->new_DWFToLP(WT_Point_Set(viewport.contour()->total_points(),
CPoint *vertexList =
m_State->new_DWFToLP(WT_Point_Set(viewport.contour()->total_points(),
viewport.contour()->points(), false));
// LET OP: CreatePolyPolygonRgn verwacht Device Units!
LPtoDP(m_State->myDC, vertexList, viewport.contour()->total_points());
if (m_State->m_hrgn)
DeleteObject(m_State->m_hrgn);
m_State->m_hrgn = CreatePolyPolygonRgn(vertexList, (int *)viewport.contour()->counts(),
m_State->m_hrgn = CreatePolyPolygonRgn(vertexList, (int *)viewport.contour()->counts(),
viewport.contour()->contours(),
ALTERNATE);
ALTERNATE);
ATLASSERT(m_State->m_hrgn);
int res = SelectClipRgn(m_State->myDC, m_State->m_hrgn);
int res = SelectClipRgn(m_State->myDC, m_State->m_hrgn);
ATLASSERT(res != ERROR);
#ifdef _DEBUG
{
@@ -721,7 +746,7 @@ WT_Result CWhip2DCImpl::my_process_viewport (WT_Viewport & viewport, WT_File & f
myTRACE("\nRegion aangemaakt: %s", s);
}
#endif
return WT_Result::Success;
}
@@ -802,7 +827,7 @@ WT_Result CWhip2DCImpl::my_process_layer (WT_Layer & layer, WT_File & file)
m_State->bLayerVisible = FALSE;
// myTRACE("\nLayer %s .. does not match", ll->layer_name().ascii());
}
// myTRACE("\nLayer %s .. does not match", ll->layer_name().ascii());
m_State->bIsSymbolLayer = (m_State->m_activeLayerName == "SLNK Symbols");
//myDoTRACE("\nLayer %s %d", ll->layer_name().ascii(), m_State->bIsSymbolLayer);
@@ -909,8 +934,8 @@ WT_Result CWhip2DCImpl::my_process_Ellipse (WT_Ellipse & Ellipse, WT_File & file
pos.m_y+myRound(sin(end +tilt)*minor));
CPoint s = m_State->DWFToLP(ls);
CPoint e = m_State->DWFToLP(le);
MoveToEx(m_State->myDC, s.x, s.y, NULL);
LineTo(m_State->myDC, e.x, e.y);
MoveToEx(m_State->myDC, s.x, s.y, NULL);
LineTo(m_State->myDC, e.x, e.y);
return WT_Result::Success;
}
@@ -995,7 +1020,7 @@ CString CWhip2DCImpl::PolyToMap(WT_Polygon & polygon,
#endif
LPtoDP(m_State->myDC, &pt1, 1);
LPtoDP(m_State->myDC, &pt2, 1);
ptList.Format("%d,%d,%d,%d", min(pt1.x, pt2.x), min(pt1.y, pt2.y),
ptList.Format("%d,%d,%d,%d", min(pt1.x, pt2.x), min(pt1.y, pt2.y),
max(pt1.x, pt2.x), max(pt1.y, pt2.y));
}
else
@@ -1223,7 +1248,7 @@ WT_Result CWhip2DCImpl::my_process_pngGroup4Image (WT_PNG_Group4_Image & pngGrou
}
//CString s;
//s.Format("CWhip2DCImpl::my_process_pngGroup4Image sz=%d dx=%d dy=%d",
//s.Format("CWhip2DCImpl::my_process_pngGroup4Image sz=%d dx=%d dy=%d",
// pngGroup4Image.data_size(), dx, dy);
//CmyTimer p(s);
@@ -1244,7 +1269,7 @@ WT_Result CWhip2DCImpl::my_process_pngGroup4Image (WT_PNG_Group4_Image & pngGrou
pStream->Release();
if (SUCCEEDED(res))
{
::SetStretchBltMode(m_State->myDC, HALFTONE) ;
::SetStretchBltMode(m_State->myDC, HALFTONE) ;
m_pBitmap.Draw(m_State->myDC, Pt1.x, Pt2.y, dx, dy);
}
}
@@ -1294,12 +1319,12 @@ WT_Result CWhip2DCImpl::my_process_pngGroup4Image (WT_PNG_Group4_Image & pngGrou
// (GDI+ deed dat wel goed)
//img.SetTransIndex(-1);
//Draw2 (b)lijkt transparantie (op zwarte achtergrond) alleen goed te doen al we achtergrond/voorgrond zetten
COLORREF keepBk = SetBkColor(m_State->myDC, RGB(255, 255, 255));
COLORREF keepText = SetTextColor(m_State->myDC, RGB(0, 0, 0));
COLORREF keepBk = SetBkColor(m_State->myDC, RGB(255, 255, 255));
COLORREF keepText = SetTextColor(m_State->myDC, RGB(0, 0, 0));
img.Draw2(m_State->myDC, Pt1.x, Pt2.y, dx, dy);
SetBkColor(m_State->myDC, keepBk);
SetBkColor(m_State->myDC, keepBk);
SetTextColor(m_State->myDC, keepText);
}
else
@@ -1350,8 +1375,8 @@ WT_Result CWhip2DCImpl::my_process_image (WT_Image & image, WT_File & file)
HRESULT res = m_pBitmap.Load(pStream);
pStream->Release();
if (SUCCEEDED(res))
{
::SetStretchBltMode(m_State->myDC, HALFTONE) ;
{
::SetStretchBltMode(m_State->myDC, HALFTONE) ;
m_pBitmap.Draw(m_State->myDC, Pt1.x, Pt2.y, Pt2.x - Pt1.x, Pt1.y - Pt2.y);
}
}
@@ -1450,8 +1475,8 @@ if (!strcmp(text.string().ascii(),"TP036"))
return WT_Result::Success;
}
else
m_State->m_kfm.TextOutSpacing(m_State->myDC, acPt.x, acPt.y,
text.string().ascii(), text.string().length(),
m_State->m_kfm.TextOutSpacing(m_State->myDC, acPt.x, acPt.y,
text.string().ascii(), text.string().length(),
(m_State->m_spacing/1024.0));
//TextOut(m_State->myDC, acPt.x, acPt.y, text.string().ascii(), text.string().length());
}
@@ -1478,7 +1503,7 @@ WT_Result CWhip2DCImpl::my_process_text_scan (WT_Text & text, WT_File & file)
CString txt(text.string().ascii());
if (txt.Trim().GetLength() == 0) // Komt voor bij outlets van AC_C2_0
return WT_Result::Success;
CFoundText tFound;
tFound.m_FoundText = text;
WT_Integer32 layer_num = file.rendition().layer().layer_num();
@@ -1516,7 +1541,7 @@ WT_Result CWhip2DCImpl::my_process_text_find (WT_Text & text, WT_File & file)
if (text.bounds().bounds() != NULL)
{
CPoint pts[]=
{
{
m_State->DWFToLP(text.bounds().bounds()[0]),
m_State->DWFToLP(text.bounds().bounds()[1]),
m_State->DWFToLP(text.bounds().bounds()[2]),
@@ -1541,7 +1566,7 @@ WT_Result CWhip2DCImpl::my_process_text_find (WT_Text & text, WT_File & file)
// GetTextExtentPoint32W(m_State->myDC, text.string().unicode(), text.string().length(), &Size);
CPoint pts[]=
{
{
acPt,
CPoint(acPt.x+LPSize.cx, acPt.y),
CPoint(acPt.x+LPSize.cx, acPt.y-LPSize.cy),
@@ -1592,7 +1617,7 @@ WT_Result CWhip2DCImpl::my_process_background (WT_Background & background, WT_Fi
COLORREF DCclr = RGB(clr.m_rgb.r, clr.m_rgb.g, clr.m_rgb.b);
m_State->m_paperColor = DCclr; // Wordt later misschien opgevraagd.
if (m_State->findIt) // When finding no need for actuel painting
return WT_Result::Success;
@@ -1651,7 +1676,7 @@ WT_Result CWhip2DCImpl::my_process_gouraudPolyline (WT_Gouraud_Polyline & gourau
return WT_Result::Success;
//myTRACE("\n !! Don't know how to handle gouraudPolyline very well yet!! (%d points)", gouraudPolyline.count());
#if 1
int w=myRound(file.rendition().line_weight().weight_value()*m_State->m_mul);
@@ -1669,13 +1694,13 @@ WT_Result CWhip2DCImpl::my_process_gouraudPolyline (WT_Gouraud_Polyline & gourau
int j;
for (j = 0; j < dv; j++)
{
COLORREF DCclr = RGB((clr.m_rgb.r*j + prev_clr.m_rgb.r*(dv-j))/dv,
COLORREF DCclr = RGB((clr.m_rgb.r*j + prev_clr.m_rgb.r*(dv-j))/dv,
(clr.m_rgb.g*j + prev_clr.m_rgb.g*(dv-j))/dv,
(clr.m_rgb.b*j + prev_clr.m_rgb.b*(dv-j))/dv);
m_State->m_pen = CreatePen (PS_SOLID, w, DCclr);
HPEN oldpen = (HPEN) SelectObject(m_State->myDC, m_State->m_pen);
DeleteObject(oldpen);
LineTo(m_State->myDC, myRound(((double)pt.x*j+prev_pt.x*(dv-j))/dv),
LineTo(m_State->myDC, myRound(((double)pt.x*j+prev_pt.x*(dv-j))/dv),
myRound(((double)pt.y*j+prev_pt.y*(dv-j))/dv));
}
}
@@ -1711,18 +1736,18 @@ WT_Result CWhip2DCImpl::my_process_gouraudPolyline (WT_Gouraud_Polyline & gourau
for (int i = 0; i < gouraudPolyline.count(); i++)
{
WT_RGBA32 clr = gouraudPolyline.colors()[i];
vert[2*i].x = m_State->DWFToLP(gouraudPolyline.points()[i]).x;
vert[2*i].y = m_State->DWFToLP(gouraudPolyline.points()[i]).y;
vert[2*i].x = m_State->DWFToLP(gouraudPolyline.points()[i]).x;
vert[2*i].y = m_State->DWFToLP(gouraudPolyline.points()[i]).y;
// Pas op: TRIVERTEX verwacht 16 bit RGB!
vert[2*i].Red = clr.m_rgb.r<<8;
vert[2*i].Green = clr.m_rgb.g<<8;
vert[2*i].Blue = clr.m_rgb.b<<8;
vert[2*i+1].x = m_State->DWFToLP(gouraudPolyline.points()[i]).x;
vert[2*i+1].y = m_State->DWFToLP(gouraudPolyline.points()[i]).y+1;
vert[2*i].Red = clr.m_rgb.r<<8;
vert[2*i].Green = clr.m_rgb.g<<8;
vert[2*i].Blue = clr.m_rgb.b<<8;
vert[2*i+1].x = m_State->DWFToLP(gouraudPolyline.points()[i]).x;
vert[2*i+1].y = m_State->DWFToLP(gouraudPolyline.points()[i]).y+1;
// Pas op: TRIVERTEX verwacht 16 bit RGB!
vert[2*i+1].Red = clr.m_rgb.r<<8;
vert[2*i+1].Green = clr.m_rgb.g<<8;
vert[2*i+1].Blue = clr.m_rgb.b<<8;
vert[2*i+1].Red = clr.m_rgb.r<<8;
vert[2*i+1].Green = clr.m_rgb.g<<8;
vert[2*i+1].Blue = clr.m_rgb.b<<8;
vert[i].Alpha = clr.m_rgb.a<<8;
gTri[i].Vertex1 = 2*i;
gTri[i].Vertex2 = 2*(i+1);
@@ -1747,12 +1772,12 @@ WT_Result CWhip2DCImpl::my_process_gouraudPolytriangle (WT_Gouraud_Polytriangle
for (int i = 0; i < gouraudPolytriangle.count(); i++)
{
WT_RGBA32 clr = gouraudPolytriangle.colors()[i];
vert[i].x = m_State->DWFToLP(gouraudPolytriangle.points()[i]).x;
vert[i].y = m_State->DWFToLP(gouraudPolytriangle.points()[i]).y;
vert[i].x = m_State->DWFToLP(gouraudPolytriangle.points()[i]).x;
vert[i].y = m_State->DWFToLP(gouraudPolytriangle.points()[i]).y;
// Pas op: TRIVERTEX verwacht 16 bit RGB!
vert[i].Red = clr.m_rgb.r<<8;
vert[i].Green = clr.m_rgb.g<<8;
vert[i].Blue = clr.m_rgb.b<<8;
vert[i].Red = clr.m_rgb.r<<8;
vert[i].Green = clr.m_rgb.g<<8;
vert[i].Blue = clr.m_rgb.b<<8;
vert[i].Alpha = clr.m_rgb.a<<8;
gTri[i].Vertex1 = i;
gTri[i].Vertex2 = i+1;
@@ -1798,7 +1823,7 @@ STDMETHODIMP CWhip2DCImpl::get_TextItem(LONG i, CFoundText &pVal)
{
if (i<0 || i>=(LONG)m_State.m_FoundTexts.GetCount())
return E_INVALIDARG;
pVal = m_State.m_FoundTexts.GetAt(i);
return S_OK;
}
@@ -1807,7 +1832,7 @@ STDMETHODIMP CWhip2DCImpl::get_LayerItem(LONG i, CString* pVal)
{
if (i<0 || i>=(LONG)m_State.m_Layernames.GetSize())
return E_INVALIDARG;
(*pVal) = m_State.m_Layernames[i];
return S_OK;
}

View File

@@ -79,6 +79,7 @@ CPoint *CWhip2DCState::new_DWFToLP(WT_Point_Set const &pts)
}
// Schaal de Whip-coordinatenruimte terug naar een GDI geschikte ruimte
// TODO: Kan dit echt niet via setviewportext/setwindowext?
CPoint CWhip2DCState::DWFToLP(WT_Logical_Point const &pt)
{
return CPoint(myRound((pt.m_x - m_MinMax.minpt().m_x)*m_mul),
@@ -561,7 +562,7 @@ void CWhip2DCState::AlphaPolygon(LPPOINT lpPoints, int nCount ) const
#ifdef _DEBUG
if (!res)
{
myTRACE("\nHmmm, AlphaBlend failed?");
myTRACE("\nHmmm, AlphaBlend failed? Probeer je SaveAsWMF of zo?");
_CrtDbgBreak();
}
#endif

View File

@@ -17,7 +17,7 @@
<Configuration
Name="Debug|Win32"
OutputDirectory="Debug"
IntermediateDirectory="Debug"
IntermediateDirectory="D:\Temp\Slnkdwf\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
UseOfATL="1"
ATLMinimizesCRunTimeLibraryUsage="false"
@@ -50,10 +50,10 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="d:\Library\Wtl80\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\"
AdditionalIncludeDirectories="..\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\"
PreprocessorDefinitions="WIN32;_WINDOWS;STRICT;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
BasicRuntimeChecks="0"
RuntimeLibrary="3"
UsePrecompiledHeader="2"
WarningLevel="3"
@@ -66,7 +66,7 @@
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"
AdditionalIncludeDirectories="$(IntDir);D:\Library\Wtl80\include"
AdditionalIncludeDirectories="$(IntDir);..\Wtl81\include"
/>
<Tool
Name="VCPreLinkEventTool"
@@ -108,7 +108,98 @@
<Configuration
Name="Release|Win32"
OutputDirectory="Release"
IntermediateDirectory="Release"
IntermediateDirectory="D:\Temp\Slnkdwf\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
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)/SLNKDWFViewer.tlb"
HeaderFileName="SLNKDWFViewer.h"
DLLDataFileName=""
InterfaceIdentifierFileName="SLNKDWFViewer_i.c"
ProxyFileName="SLNKDWFViewer_p.c"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="..\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;.\CxImage\Zlib"
PreprocessorDefinitions="WIN32;_WINDOWS;STRICT;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
ExceptionHandling="1"
RuntimeLibrary="2"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="0"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1033"
AdditionalIncludeDirectories="$(IntDir);..\Wtl81\include"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\SlnkdwfImpl\ReleaseRO\SLNKDWFStaticRO.lib ..\Release\Viewer.lib"
LinkIncremental="1"
IgnoreDefaultLibraryNames=""
GenerateDebugInformation="false"
ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
EmbedManifest="true"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release MT|Win32"
OutputDirectory="$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfATL="1"
ATLMinimizesCRunTimeLibraryUsage="false"
@@ -234,6 +325,14 @@
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release MT|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
</File>
</Filter>
<Filter

View File

@@ -24,11 +24,11 @@ LRESULT CFindDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam
if (lCount > 0)
{
m_iWhip2DC.Load(NULL, piEPlotSections->get_Item(m_nPage), L"", L".*",
0, 0, VARIANT_TRUE /*center*/, VARIANT_FALSE /* Maximize */);
1000, 800, VARIANT_TRUE /*center*/, VARIANT_FALSE /* Maximize */);
}
else
{
m_iWhip2DC.Load(NULL, NULL, m_dwfPath, L".*", 0, 0, VARIANT_TRUE /*center*/, VARIANT_FALSE /* Maximize */);
m_iWhip2DC.Load(NULL, NULL, m_dwfPath, L".*", 1000, 800, VARIANT_TRUE /*center*/, VARIANT_FALSE /* Maximize */);
}
m_iWhip2DC.FindTexts("");
m_iWhip2DC.get_TextCount(&lCount);

View File

@@ -28,13 +28,30 @@ LRESULT CMainFrame::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/
{
CreateSimpleToolBar();
// CreateSimpleStatusBar();
CreateSimpleStatusBar();
m_status.Attach(m_hWndStatusBar);
ATLTRACE("\nEarly with m_Combo %x", m_Combo.m_hWnd);
m_hWndClient = m_view.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
m_wndSplit.Create ( *this, rcDefault );
m_hWndClient = m_wndSplit;
m_wndLayers.Create(m_wndSplit, rcDefault);
m_view.Create(m_wndSplit, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
m_wndSplit.SetSplitterPanes ( m_wndLayers, m_view );
m_wndLayers.AddColumn("Laag", 0);
m_wndLayers.SetColumnWidth(0, 195);
//m_wndLayers.AddColumn("#Cont", 1);
//m_wndLayers.AddItem(0, 0, "Hallo");
//m_wndLayers.AddItem(1, 1, "Jij");
UpdateLayout();
m_wndSplit.SetSplitterPos ( 200 );
UIAddToolBar(m_hWndToolBar);
// UISetCheck(ID_VIEW_TOOLBAR, 1);
UISetCheck(ID_VIEW_TOOLBAR, 1);
UISetCheck(ID_VIEW_STATUS_BAR, 1);
// register object for message filtering and idle updates
// TODO: Het volgende crashed en lijkt niet echt nodig?
@@ -61,6 +78,7 @@ void CMainFrame::SetDWF(const CString &dwfPath)
m_view.SetDWF(dwfPath);
// Maak de pagina's aan
m_Combo.ResetContent();
// m_wndLayers.resetcontent
try
{
CDWFFileImpl m_iDWFFile;
@@ -79,6 +97,28 @@ void CMainFrame::SetDWF(const CString &dwfPath)
m_Combo.AddString(piEPlotSection->get_Title());
}
ATLTRACE("\nDone filling ComboBox");
//CWhip2DCImpl *m_iWhip2DC = m_view.GetWhip2DC();
CWhip2DCImpl m_iWhip2DC;
if (lCount > 0)
{
m_iWhip2DC.Load(NULL, piEPlotSections->get_Item(0 /*m_nPage*/), L"", L".*",
1000, 800, VARIANT_TRUE /*center*/, VARIANT_FALSE /* Maximize */);
}
else
{
m_iWhip2DC.Load(NULL, NULL, dwfPath, L".*", 1000, 800, VARIANT_TRUE /*center*/, VARIANT_FALSE /* Maximize */);
}
m_iWhip2DC.FindTexts(""); // forceer een scan
m_iWhip2DC.get_LayerCount(&lCount);
for (int i=0;i < lCount;i++)
{
CString tLayer;
m_iWhip2DC.get_LayerItem(i, &tLayer);
m_wndLayers.AddItem(i, 0, tLayer);
}
ATLTRACE("\nDone filling layers");
}
catch (CString &ee)
{
@@ -106,6 +146,24 @@ LRESULT CMainFrame::OnFileExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCt
return 0;
}
LRESULT CMainFrame::OnViewToolBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
BOOL bVisible = !::IsWindowVisible(m_hWndToolBar);
::ShowWindow(m_hWndToolBar, bVisible ? SW_SHOWNOACTIVATE : SW_HIDE);
UISetCheck(ID_VIEW_TOOLBAR, bVisible);
UpdateLayout();
return 0;
}
LRESULT CMainFrame::OnViewStatusBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
BOOL bVisible = !::IsWindowVisible(m_hWndStatusBar);
::ShowWindow(m_hWndStatusBar, bVisible ? SW_SHOWNOACTIVATE : SW_HIDE);
UISetCheck(ID_VIEW_STATUS_BAR, bVisible);
UpdateLayout();
return 0;
}
LRESULT CMainFrame::onSelChange(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
int nTab = m_Combo.GetCurSel();

View File

@@ -4,13 +4,13 @@
#include "stdafx.h"
#include "atlgdix.h"
//#include "atlgdix.h"
#include "SLNKDwfViewerView.h"
#define SCL 1
CSLNKDwfViewerView::CSLNKDwfViewerView()
CSLNKDwfViewerView::CSLNKDwfViewerView(CMainFrame& parent): m_Parent(parent)
{
m_nPage = 0;
m_busyPanning = FALSE;
@@ -85,14 +85,15 @@ void PaintToDC(HDC dc, CString dwfPath, int nPage,
wSize.cx, wSize.cy, VARIANT_TRUE /*center*/, VARIANT_FALSE /* Maximize */);
}
int mm = GetMapMode(dc);
SetMapMode(dc, MM_TEXT);
//int mm = GetMapMode(dc);
//SetMapMode(dc, MM_TEXT);
//SetMapMode(dc, MM_ANISOTROPIC);
if (forPrint)
iWhip2DC.put_paperColor(0xFFFFFF); // Altijd wit papier
iWhip2DC.Paint(VARIANT_FALSE);
SetMapMode(dc, mm);
iWhip2DC.Paint(VARIANT_FALSE,VARIANT_TRUE); // geen bw, met markers
//SetMapMode(dc, mm);
}
catch (CString &ee)
{
@@ -124,12 +125,13 @@ BOOL CSLNKDwfViewerView::my_progress_action(void *param, double progress)
// Erg instabiel (door recursieve WM_PAINT?)
// if (!DoEvents())
// return FALSE;
if (GetSystemMetrics(SM_REMOTESESSION))
{ // App is running on a remote session.
return TRUE; // Geen preview bij terminal services
}
if (GetTickCount() - vw->m_Timer > 100)
if (GetTickCount() - vw->m_Timer > 333)
{ // Preview time
// Tijdens het blitten willen we geen vertalingen
CRect rc;
@@ -225,7 +227,30 @@ void CSLNKDwfViewerView::DoPaint(CDCHandle dc)
m_hDCOriginal = dc; // Hier gaan we wel progress op tekenen
m_iWhip2DC.set_progress_action(my_progress_action, (void *) this);
::PaintToDC(m_MemDC, m_dwfPath, m_nPage, m_iWhip2DC, wSize);
{
LARGE_INTEGER currTime;
LARGE_INTEGER endTime;
LARGE_INTEGER frequency;
if (!QueryPerformanceCounter(&currTime))
return;
if (!QueryPerformanceFrequency(&frequency))
return;
double tmStart = ((double)currTime.QuadPart)*1000/frequency.QuadPart;
::PaintToDC(m_MemDC, m_dwfPath, m_nPage, m_iWhip2DC, wSize);
if (!QueryPerformanceCounter(&endTime))
return;
if (!QueryPerformanceCounter(&currTime))
return;
double tmEnd = ((double)currTime.QuadPart)*1000/frequency.QuadPart;
// En nu?
//LPCTSTR lpszMessage = _T("Hello, World");
//::SendMessage(m_hWndStatusBar, SB_SETTEXT, 0, LPARAM(lpszMessage));
CString s;
s.Format("Klaar in %.0lf ms", tmEnd - tmStart);
m_Parent.m_status.SetText(0, s);
}
// Select the original bitmap back in
m_MemDC.SelectBitmap(pOldBitmap);
@@ -303,8 +328,8 @@ LRESULT CSLNKDwfViewerView::OnMouseWheel(UINT /*uMsg*/, WPARAM wParam, LPARAM lP
CRect rc;
GetClientRect(&rc);
CPoint newcenter(pt.x + (rc.right / 2.0 - pt.x) / zoom,
pt.y + (rc.bottom / 2.0 - pt.y) / zoom);
CPoint newcenter(pt.x + (rc.right / 2.0 - pt.x) / zoom + 0.5,
pt.y + (rc.bottom / 2.0 - pt.y) / zoom + 0.5);
Zoom(newcenter, GetZoomScale() * zoom);
@@ -353,7 +378,7 @@ LRESULT CSLNKDwfViewerView::OnMouseMove(UINT /*uMsg*/, WPARAM wParam, LPARAM lPa
// SetCursor(::LoadCursor(AfxGetResourceHandle(), MAKEINTRESOURCE(IDC_HANDJE)));
SetScrollOffset(m_PanStartScroll + traveled);
SetScrollOffset(m_PanStartScroll + traveled);
m_PanStartPoint = point;
GetScrollOffset(m_PanStartScroll);
}

View File

@@ -5,12 +5,13 @@
#pragma once
#include "resource.h"
#include "atlgdix.h"
//#include "atlgdix.h"
void PaintToDC(HDC dc, CString dwfPath, int nPage,
CWhip2DCImpl &iWhip2DC, CSize wSize,
BOOL forPrint = FALSE);
class CMainFrame;
class CSLNKDwfViewerView : public CZoomScrollWindowImpl<CSLNKDwfViewerView>
// , public CDoubleBufferImpl<CSLNKDwfViewerView>
// , public COffscreenDraw<CSLNKDwfViewerView>
@@ -19,9 +20,9 @@ class CSLNKDwfViewerView : public CZoomScrollWindowImpl<CSLNKDwfViewerView>
public:
DECLARE_WND_CLASS(NULL)
CSLNKDwfViewerView();
//CSLNKDwfViewerView();
~CSLNKDwfViewerView();
CSLNKDwfViewerView(CMainFrame& parent);
BOOL PreTranslateMessage(MSG* pMsg);
BEGIN_MSG_MAP(CSLNKDwfViewerView)
@@ -90,4 +91,6 @@ private:
CDCHandle m_hDCOriginal;
static BOOL my_progress_action(void *param, double progress);
time_t m_Timer;
CMainFrame & m_Parent;
};

View File

@@ -17,7 +17,7 @@
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
IntermediateDirectory="D:\Temp\Slnkdwf\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="4"
>
<Tool
@@ -39,7 +39,7 @@
Name="VCCLCompilerTool"
AdditionalOptions="/Zm118"
Optimization="0"
AdditionalIncludeDirectories="d:\Library\Wtl80\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;"
AdditionalIncludeDirectories="..\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;"
PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="3"
TreatWChar_tAsBuiltInType="false"
@@ -51,7 +51,7 @@
/>
<Tool
Name="VCResourceCompilerTool"
AdditionalIncludeDirectories="d:\Library\Wtl80\include"
AdditionalIncludeDirectories="..\Wtl81\include"
/>
<Tool
Name="VCPreLinkEventTool"
@@ -78,6 +78,68 @@
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="D:\Temp\Slnkdwf\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="4"
UseOfATL="0"
ATLMinimizesCRunTimeLibraryUsage="false"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/Zm118"
AdditionalIncludeDirectories="..\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;.\CxImage\Zlib"
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="2"
TreatWChar_tAsBuiltInType="false"
UsePrecompiledHeader="2"
BrowseInformation="0"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
AdditionalIncludeDirectories="..\Wtl81\include"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLibrarianTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release MT|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="4"
UseOfATL="0"
@@ -157,6 +219,14 @@
UsePrecompiledHeader="2"
/>
</FileConfiguration>
<FileConfiguration
Name="Release MT|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="2"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\FindDlg.cpp"
@@ -173,6 +243,14 @@
UsePrecompiledHeader="2"
/>
</FileConfiguration>
<FileConfiguration
Name="Release MT|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="2"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\SLNKDWFViewerView.cpp"
@@ -185,6 +263,14 @@
UsePrecompiledHeader="2"
/>
</FileConfiguration>
<FileConfiguration
Name="Release MT|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="2"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\stdafx.cpp"
@@ -205,6 +291,14 @@
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release MT|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
</File>
</Filter>
<Filter

View File

@@ -11,7 +11,7 @@
#include <atlstr.h>
#include <atlctrlx.h>
#include <atlprint.h>
#include <atlsplit.h>
#include "atlrx.h"
#include "../SLNKDWFImpl/SLNKDWFStaticRO.h"

View File

@@ -10,7 +10,7 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>, public CUpdateUI<CMainFr
public:
DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)
CMainFrame()
CMainFrame(): m_view(*this)
{
m_printer.OpenDefaultPrinter();
m_devmode.CopyFromPrinter(m_printer);
@@ -18,7 +18,10 @@ public:
};
CSplitterWindow m_wndSplit;
CCheckListViewCtrl m_wndLayers;
CSLNKDwfViewerView m_view;
CStatusBarCtrl m_status;
CComboBox m_Combo;
@@ -27,11 +30,14 @@ public:
BEGIN_UPDATE_UI_MAP(CMainFrame)
UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
END_UPDATE_UI_MAP()
BEGIN_MSG_MAP(CMainFrame)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)
COMMAND_ID_HANDLER(ID_VIEW_TOOLBAR, OnViewToolBar)
COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
COMMAND_ID_HANDLER(ID_ZOOM_EXTENTS, OnZoomExtents)
COMMAND_ID_HANDLER(ID_ZOOM_IN, OnZoomIn)
COMMAND_ID_HANDLER(ID_ZOOM_OUT, OnZoomOut)
@@ -60,6 +66,7 @@ public:
LRESULT OnFilePrint(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnViewToolBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnViewStatusBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
public:
LRESULT OnViewLayers(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);

View File

@@ -6,11 +6,14 @@
#pragma once
// Change these values to use different versions
//#define _WIN32_WINNT 0x0400
#define _WIN32_WINNT 0x0501 // XP en later
#define _WIN32_IE 0x0400
#define _RICHEDIT_VER 0x0100
#define _ATL_DEBUG_INTERFACES
#define _ATL_DEBUG_INTERFACES
#include "../SLNKDwfImpl/targetsxs.h"
#include <atlbase.h>
#include <atlapp.h>

View File

@@ -49,7 +49,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="d:\Library\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;.\CxImage\Zlib"
AdditionalIncludeDirectories="..\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;.\CxImage\Zlib"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FILESYS_EXPORTS;;_CRT_SECURE_NO_DEPRECATE"
StringPooling="true"
RuntimeLibrary="2"
@@ -146,7 +146,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="d:\Library\Wtl80\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\"
AdditionalIncludeDirectories="..\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FILESYS_EXPORTS;;_CRT_SECURE_NO_DEPRECATE"
MinimalRebuild="true"
BasicRuntimeChecks="0"

View File

@@ -49,7 +49,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="d:\Library\Wtl80\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;.\CxImage\Zlib"
AdditionalIncludeDirectories="..\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;.\CxImage\Zlib"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FILESYS_EXPORTS;;_CRT_SECURE_NO_DEPRECATE"
StringPooling="true"
RuntimeLibrary="2"
@@ -148,7 +148,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="d:\Library\Wtl80\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;"
AdditionalIncludeDirectories="..\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE"
MinimalRebuild="true"
BasicRuntimeChecks="0"

View File

@@ -40,7 +40,7 @@
Name="VCCLCompilerTool"
AdditionalOptions="/Zm118"
Optimization="0"
AdditionalIncludeDirectories="d:\Library\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\"
AdditionalIncludeDirectories="..\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\"
PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="3"
TreatWChar_tAsBuiltInType="false"
@@ -52,7 +52,7 @@
/>
<Tool
Name="VCResourceCompilerTool"
AdditionalIncludeDirectories="d:\Library\Wtl81\include"
AdditionalIncludeDirectories="..\Wtl81\include"
/>
<Tool
Name="VCPreLinkEventTool"
@@ -118,7 +118,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/Zm118"
AdditionalIncludeDirectories="d:\Library\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;.\CxImage\Zlib"
AdditionalIncludeDirectories="..\Wtl81\include;d:\Library\Dwf702\develop\global\src\dwf;d:\Library\Dwf702\develop\global\src\;.\CxImage\Zlib"
PreprocessorDefinitions="WIN32;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="2"
TreatWChar_tAsBuiltInType="false"
@@ -130,7 +130,7 @@
/>
<Tool
Name="VCResourceCompilerTool"
AdditionalIncludeDirectories="d:\Library\Wtl81\include"
AdditionalIncludeDirectories="..\Wtl81\include"
/>
<Tool
Name="VCPreLinkEventTool"