/
CadEntityFactory.cpp
158 lines (127 loc) · 4.28 KB
/
CadEntityFactory.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include "stdafx.h"
#include "CadEntityFactory.h"
#include "CadEntity.h"
#include "CadLine.h"
#include "CadPoint.h"
#include "CadPolygon.h"
CCadEntityFactory::CCadEntityFactory(void)
{
}
CCadEntityFactory::~CCadEntityFactory(void)
{
}
CCadEntity * CCadEntityFactory::GetCadEntity(FdoPtr<FdoIGeometry> geom)
{
FdoGeometryType type = geom->GetDerivedType();
switch (type) {
case FdoGeometryType_Point:
#ifdef LOG
acutPrintf(L"FdoGeometryType_Point\n");
#endif
return (CCadEntity *)new CCadPoint(static_cast<FdoIPoint*>(geom.p));
//return 0;
case FdoGeometryType_MultiPoint:
#ifdef LOG
acutPrintf(L"FdoGeometryType_MultiPoint\n");
#endif
return (CCadEntity *)new CCadPoint(static_cast<FdoIMultiPoint*>(geom.p));
//return 0;
case FdoGeometryType_LineString:
#ifdef LOG
acutPrintf(L"FdoGeometryType_LineString\n");
#endif
return (CCadEntity *)new CCadLine(static_cast<FdoILineString*>(geom.p));
case FdoGeometryType_MultiLineString:
#ifdef LOG
acutPrintf(L"FdoGeometryType_MultiLineString\n");
#endif
return (CCadEntity *)new CCadLine(static_cast<FdoIMultiLineString*>(geom.p));
case FdoGeometryType_Polygon:
#ifdef LOG
acutPrintf(L"FdoGeometryType_Polygon\n");
#endif
return (CCadEntity *)new CCadPolygon(static_cast<FdoIPolygon*>(geom.p));
case FdoGeometryType_MultiPolygon:
#ifdef LOG
acutPrintf(L"FdoGeometryType_MultiPolygon\n");
#endif
return (CCadEntity *)new CCadPolygon(static_cast<FdoIMultiPolygon*>(geom.p));
case FdoGeometryType_CurveString:
#ifdef LOG
#endif
acutPrintf(L"FdoGeometryType_CurveString\n");
//return (CCadEntity *)new CCadPolygon(static_cast<FdoIPolygon*>(geom.p));
return 0;
case FdoGeometryType_CurvePolygon:
#ifdef LOG
#endif
acutPrintf(L"FdoGeometryType_CurvePolygon\n");
//return (CCadEntity *)new CCadPolygon(static_cast<FdoIPolygon*>(geom.p));
return 0;
case FdoGeometryType_MultiCurveString:
#ifdef LOG
#endif
acutPrintf(L"FdoGeometryType_MultiCurveString\n");
//return (CCadEntity *)new CCadPolygon(static_cast<FdoIPolygon*>(geom.p));
return 0;
case FdoGeometryType_MultiCurvePolygon:
#ifdef LOG
#endif
acutPrintf(L"FdoGeometryType_MultiCurvePolygon\n");
//return (CCadEntity *)new CCadPolygon(static_cast<FdoIPolygon*>(geom.p));
return 0;
case FdoGeometryType_MultiGeometry:
#ifdef LOG
#endif
acutPrintf(L"FdoGeometryType_MultiGeometry\n");
//return (CCadEntity *)new CCadPolygon(static_cast<FdoIPolygon*>(geom.p));
return 0;
case FdoGeometryType_None:
#ifdef LOG
#endif
acutPrintf(L"FdoGeometryType_None\n");
return 0;
default:
#ifdef LOG
#endif
acutPrintf(L"FdoGeometryType_Unexpected\n");
return 0;
}
}
CCadEntity * CCadEntityFactory::GetCadEntity(AcDbObjectId & idEntity)
{
AcDbEntity * entity = 0;
if (acdbOpenObject(entity, idEntity, AcDb::kForRead) != Acad::eOk) return 0;
CCadEntity * cadEntity = CCadEntityFactory::GetCadEntity(entity);
entity->close();
return cadEntity;
}
CCadEntity * CCadEntityFactory::GetCadEntity(AcDbEntity * entity)
{
CCadEntity * cadEntity = 0;
if (entity->isKindOf(AcDbPoint::desc()) ||
entity->isKindOf(AcDbText::desc()) ||
entity->isKindOf(AcDbMText::desc()) ||
entity->isKindOf(AcDbBlockReference::desc())) {
cadEntity = new CCadPoint(entity);
} else if (entity->isKindOf(AcDbLine::desc()) ||
entity->isKindOf(AcDbArc::desc()) ||
entity->isKindOf(AcDbSpline::desc())) {
cadEntity = new CCadLine(entity);
} else if (entity->isKindOf(AcDbEllipse::desc()) ||
entity->isKindOf(AcDbCircle::desc())) {
cadEntity = new CCadPolygon(entity);
} else if (entity->isKindOf(AcDb2dPolyline::desc())) {
AcDb2dPolyline * e = AcDb2dPolyline::cast(entity);
if (e->isClosed()) cadEntity = new CCadPolygon(entity);
else cadEntity = new CCadLine(entity);
} else if (entity->isKindOf(AcDbPolyline::desc())) {
AcDbPolyline * e = AcDbPolyline::cast(entity);
if (e->isClosed()) cadEntity = new CCadPolygon(entity);
else cadEntity = new CCadLine(entity);
}
resbuf * data = entity->xData(APPNAME);
if (data != NULL) cadEntity->SetData(CFeatureData(data->rbnext->resval.rstring));
acutRelRb(data);
return cadEntity;
}