Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*
3 : : * This file is part of the LibreOffice project.
4 : : *
5 : : * This Source Code Form is subject to the terms of the Mozilla Public
6 : : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : : *
9 : : * This file incorporates work covered by the following license notice:
10 : : *
11 : : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : : * contributor license agreements. See the NOTICE file distributed
13 : : * with this work for additional information regarding copyright
14 : : * ownership. The ASF licenses this file to you under the Apache
15 : : * License, Version 2.0 (the "License"); you may not use this file
16 : : * except in compliance with the License. You may obtain a copy of
17 : : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : : */
19 : :
20 : :
21 : : #include <string.h>
22 : : #include <dxfentrd.hxx>
23 : :
24 : : //--------------------------DXFBasicEntity--------------------------------------
25 : :
26 : 0 : DXFBasicEntity::DXFBasicEntity(DXFEntityType eThisType)
27 : : {
28 : 0 : eType=eThisType;
29 : 0 : pSucc=NULL;
30 : 0 : strncpy(sLayer,"0", 2 );
31 : 0 : strncpy(sLineType,"BYLAYER", 8 );
32 : 0 : fElevation=0;
33 : 0 : fThickness=0;
34 : 0 : nColor=256;
35 : 0 : nSpace=0;
36 : 0 : aExtrusion.fx=0.0;
37 : 0 : aExtrusion.fy=0.0;
38 : 0 : aExtrusion.fz=1.0;
39 : 0 : }
40 : :
41 : 0 : void DXFBasicEntity::Read(DXFGroupReader & rDGR)
42 : : {
43 : 0 : while (rDGR.Read()!=0) EvaluateGroup(rDGR);
44 : 0 : }
45 : :
46 : 0 : void DXFBasicEntity::EvaluateGroup(DXFGroupReader & rDGR)
47 : : {
48 : 0 : switch (rDGR.GetG())
49 : : {
50 : 0 : case 8: strncpy( sLayer, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
51 : 0 : case 6: strncpy( sLineType, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
52 : 0 : case 38: fElevation=rDGR.GetF(); break;
53 : 0 : case 39: fThickness=rDGR.GetF(); break;
54 : 0 : case 62: nColor=rDGR.GetI(); break;
55 : 0 : case 67: nSpace=rDGR.GetI(); break;
56 : 0 : case 210: aExtrusion.fx=rDGR.GetF(); break;
57 : 0 : case 220: aExtrusion.fy=rDGR.GetF(); break;
58 : 0 : case 230: aExtrusion.fz=rDGR.GetF(); break;
59 : : }
60 : 0 : }
61 : :
62 : 0 : DXFBasicEntity::~DXFBasicEntity()
63 : : {
64 : 0 : }
65 : :
66 : : //--------------------------DXFLineEntity---------------------------------------
67 : :
68 : 0 : DXFLineEntity::DXFLineEntity() : DXFBasicEntity(DXF_LINE)
69 : : {
70 : 0 : }
71 : :
72 : 0 : void DXFLineEntity::EvaluateGroup(DXFGroupReader & rDGR)
73 : : {
74 : 0 : switch (rDGR.GetG()) {
75 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
76 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
77 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
78 : 0 : case 11: aP1.fx=rDGR.GetF(); break;
79 : 0 : case 21: aP1.fy=rDGR.GetF(); break;
80 : 0 : case 31: aP1.fz=rDGR.GetF(); break;
81 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
82 : : }
83 : 0 : }
84 : :
85 : : //--------------------------DXFPointEntity--------------------------------------
86 : :
87 : 0 : DXFPointEntity::DXFPointEntity() : DXFBasicEntity(DXF_POINT)
88 : : {
89 : 0 : }
90 : :
91 : 0 : void DXFPointEntity::EvaluateGroup(DXFGroupReader & rDGR)
92 : : {
93 : 0 : switch (rDGR.GetG()) {
94 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
95 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
96 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
97 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
98 : : }
99 : 0 : }
100 : :
101 : : //--------------------------DXFCircleEntity-------------------------------------
102 : :
103 : 0 : DXFCircleEntity::DXFCircleEntity() : DXFBasicEntity(DXF_CIRCLE)
104 : : {
105 : 0 : fRadius=1.0;
106 : 0 : }
107 : :
108 : 0 : void DXFCircleEntity::EvaluateGroup(DXFGroupReader & rDGR)
109 : : {
110 : 0 : switch (rDGR.GetG()) {
111 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
112 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
113 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
114 : 0 : case 40: fRadius=rDGR.GetF(); break;
115 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
116 : : }
117 : 0 : }
118 : :
119 : : //--------------------------DXFArcEntity----------------------------------------
120 : :
121 : 0 : DXFArcEntity::DXFArcEntity() : DXFBasicEntity(DXF_ARC)
122 : : {
123 : 0 : fRadius=1.0;
124 : 0 : fStart=0;
125 : 0 : fEnd=360.0;
126 : 0 : }
127 : :
128 : 0 : void DXFArcEntity::EvaluateGroup(DXFGroupReader & rDGR)
129 : : {
130 : 0 : switch (rDGR.GetG()) {
131 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
132 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
133 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
134 : 0 : case 40: fRadius=rDGR.GetF(); break;
135 : 0 : case 50: fStart=rDGR.GetF(); break;
136 : 0 : case 51: fEnd=rDGR.GetF(); break;
137 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
138 : : }
139 : 0 : }
140 : :
141 : : //--------------------------DXFTraceEntity--------------------------------------
142 : :
143 : 0 : DXFTraceEntity::DXFTraceEntity() : DXFBasicEntity(DXF_TRACE)
144 : : {
145 : 0 : }
146 : :
147 : 0 : void DXFTraceEntity::EvaluateGroup(DXFGroupReader & rDGR)
148 : : {
149 : 0 : switch (rDGR.GetG()) {
150 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
151 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
152 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
153 : 0 : case 11: aP1.fx=rDGR.GetF(); break;
154 : 0 : case 21: aP1.fy=rDGR.GetF(); break;
155 : 0 : case 31: aP1.fz=rDGR.GetF(); break;
156 : 0 : case 12: aP2.fx=rDGR.GetF(); break;
157 : 0 : case 22: aP2.fy=rDGR.GetF(); break;
158 : 0 : case 32: aP2.fz=rDGR.GetF(); break;
159 : 0 : case 13: aP3.fx=rDGR.GetF(); break;
160 : 0 : case 23: aP3.fy=rDGR.GetF(); break;
161 : 0 : case 33: aP3.fz=rDGR.GetF(); break;
162 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
163 : : }
164 : 0 : }
165 : :
166 : : //--------------------------DXFSolidEntity--------------------------------------
167 : :
168 : 0 : DXFSolidEntity::DXFSolidEntity() : DXFBasicEntity(DXF_SOLID)
169 : : {
170 : 0 : }
171 : :
172 : 0 : void DXFSolidEntity::EvaluateGroup(DXFGroupReader & rDGR)
173 : : {
174 : 0 : switch (rDGR.GetG()) {
175 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
176 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
177 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
178 : 0 : case 11: aP1.fx=rDGR.GetF(); break;
179 : 0 : case 21: aP1.fy=rDGR.GetF(); break;
180 : 0 : case 31: aP1.fz=rDGR.GetF(); break;
181 : 0 : case 12: aP2.fx=rDGR.GetF(); break;
182 : 0 : case 22: aP2.fy=rDGR.GetF(); break;
183 : 0 : case 32: aP2.fz=rDGR.GetF(); break;
184 : 0 : case 13: aP3.fx=rDGR.GetF(); break;
185 : 0 : case 23: aP3.fy=rDGR.GetF(); break;
186 : 0 : case 33: aP3.fz=rDGR.GetF(); break;
187 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
188 : : }
189 : 0 : }
190 : :
191 : : //--------------------------DXFTextEntity---------------------------------------
192 : :
193 : 0 : DXFTextEntity::DXFTextEntity() : DXFBasicEntity(DXF_TEXT)
194 : : {
195 : 0 : fHeight=1.0;
196 : 0 : sText[0]=0;
197 : 0 : fRotAngle=0.0;
198 : 0 : fXScale=1.0;
199 : 0 : fOblAngle=0.0;
200 : 0 : strncpy( sStyle, "STANDARD", 9 );
201 : 0 : nGenFlags=0;
202 : 0 : nHorzJust=0;
203 : 0 : nVertJust=0;
204 : 0 : }
205 : :
206 : 0 : void DXFTextEntity::EvaluateGroup(DXFGroupReader & rDGR)
207 : : {
208 : 0 : switch (rDGR.GetG()) {
209 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
210 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
211 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
212 : 0 : case 40: fHeight=rDGR.GetF(); break;
213 : 0 : case 1: strncpy( sText, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
214 : 0 : case 50: fRotAngle=rDGR.GetF(); break;
215 : 0 : case 41: fXScale=rDGR.GetF(); break;
216 : 0 : case 42: fOblAngle=rDGR.GetF(); break;
217 : 0 : case 7: strncpy( sStyle, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
218 : 0 : case 71: nGenFlags=rDGR.GetI(); break;
219 : 0 : case 72: nHorzJust=rDGR.GetI(); break;
220 : 0 : case 73: nVertJust=rDGR.GetI(); break;
221 : 0 : case 11: aAlign.fx=rDGR.GetF(); break;
222 : 0 : case 21: aAlign.fy=rDGR.GetF(); break;
223 : 0 : case 31: aAlign.fz=rDGR.GetF(); break;
224 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
225 : : }
226 : 0 : }
227 : :
228 : : //--------------------------DXFShapeEntity--------------------------------------
229 : :
230 : 0 : DXFShapeEntity::DXFShapeEntity() : DXFBasicEntity(DXF_SHAPE)
231 : : {
232 : 0 : fSize=1.0;
233 : 0 : sName[0]=0;
234 : 0 : fRotAngle=0;
235 : 0 : fXScale=1.0;
236 : 0 : fOblAngle=0;
237 : 0 : }
238 : :
239 : 0 : void DXFShapeEntity::EvaluateGroup(DXFGroupReader & rDGR)
240 : : {
241 : 0 : switch (rDGR.GetG()) {
242 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
243 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
244 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
245 : 0 : case 40: fSize=rDGR.GetF(); break;
246 : 0 : case 2: strncpy( sName, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
247 : 0 : case 50: fRotAngle=rDGR.GetF(); break;
248 : 0 : case 41: fXScale=rDGR.GetF(); break;
249 : 0 : case 51: fOblAngle=rDGR.GetF(); break;
250 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
251 : : }
252 : 0 : }
253 : :
254 : : //--------------------------DXFInsertEntity-------------------------------------
255 : :
256 : 0 : DXFInsertEntity::DXFInsertEntity() : DXFBasicEntity(DXF_INSERT)
257 : : {
258 : 0 : nAttrFlag=0;
259 : 0 : sName[0]=0;
260 : 0 : fXScale=1.0;
261 : 0 : fYScale=1.0;
262 : 0 : fZScale=1.0;
263 : 0 : fRotAngle=0.0;
264 : 0 : nColCount=1;
265 : 0 : nRowCount=1;
266 : 0 : fColSpace=0.0;
267 : 0 : fRowSpace=0.0;
268 : 0 : }
269 : :
270 : 0 : void DXFInsertEntity::EvaluateGroup(DXFGroupReader & rDGR)
271 : : {
272 : 0 : switch (rDGR.GetG()) {
273 : 0 : case 66: nAttrFlag=rDGR.GetI(); break;
274 : 0 : case 2: strncpy( sName, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
275 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
276 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
277 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
278 : 0 : case 41: fXScale=rDGR.GetF(); break;
279 : 0 : case 42: fYScale=rDGR.GetF(); break;
280 : 0 : case 43: fZScale=rDGR.GetF(); break;
281 : 0 : case 50: fRotAngle=rDGR.GetF(); break;
282 : 0 : case 70: nColCount=rDGR.GetI(); break;
283 : 0 : case 71: nRowCount=rDGR.GetI(); break;
284 : 0 : case 44: fColSpace=rDGR.GetF(); break;
285 : 0 : case 45: fRowSpace=rDGR.GetF(); break;
286 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
287 : : }
288 : 0 : }
289 : :
290 : : //--------------------------DXFAttDefEntity-------------------------------------
291 : :
292 : 0 : DXFAttDefEntity::DXFAttDefEntity() : DXFBasicEntity(DXF_ATTDEF)
293 : : {
294 : 0 : fHeight=1.0;
295 : 0 : sDefVal[0]=0;
296 : 0 : sPrompt[0]=0;
297 : 0 : sTagStr[0]=0;
298 : 0 : nAttrFlags=0;
299 : 0 : nFieldLen=0;
300 : 0 : fRotAngle=0.0;
301 : 0 : fXScale=1.0;
302 : 0 : fOblAngle=0.0;
303 : 0 : strncpy( sStyle, "STANDARD", 9 );
304 : 0 : nGenFlags=0;
305 : 0 : nHorzJust=0;
306 : 0 : nVertJust=0;
307 : 0 : }
308 : :
309 : 0 : void DXFAttDefEntity::EvaluateGroup(DXFGroupReader & rDGR)
310 : : {
311 : 0 : switch (rDGR.GetG()) {
312 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
313 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
314 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
315 : 0 : case 40: fHeight=rDGR.GetF(); break;
316 : 0 : case 1: strncpy( sDefVal, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
317 : 0 : case 3: strncpy( sPrompt, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
318 : 0 : case 2: strncpy( sTagStr, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
319 : 0 : case 70: nAttrFlags=rDGR.GetI(); break;
320 : 0 : case 73: nFieldLen=rDGR.GetI(); break;
321 : 0 : case 50: fRotAngle=rDGR.GetF(); break;
322 : 0 : case 41: fXScale=rDGR.GetF(); break;
323 : 0 : case 51: fOblAngle=rDGR.GetF(); break;
324 : 0 : case 7: strncpy( sStyle, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
325 : 0 : case 71: nGenFlags=rDGR.GetI(); break;
326 : 0 : case 72: nHorzJust=rDGR.GetI(); break;
327 : 0 : case 74: nVertJust=rDGR.GetI(); break;
328 : 0 : case 11: aAlign.fx=rDGR.GetF(); break;
329 : 0 : case 21: aAlign.fy=rDGR.GetF(); break;
330 : 0 : case 31: aAlign.fz=rDGR.GetF(); break;
331 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
332 : : }
333 : 0 : }
334 : :
335 : : //--------------------------DXFAttribEntity-------------------------------------
336 : :
337 : 0 : DXFAttribEntity::DXFAttribEntity() : DXFBasicEntity(DXF_ATTRIB)
338 : : {
339 : 0 : fHeight=1.0;
340 : 0 : sText[0]=0;
341 : 0 : sTagStr[0]=0;
342 : 0 : nAttrFlags=0;
343 : 0 : nFieldLen=0;
344 : 0 : fRotAngle=0.0;
345 : 0 : fXScale=1.0;
346 : 0 : fOblAngle=0.0;
347 : 0 : strncpy( sStyle, "STANDARD", 9 );
348 : 0 : nGenFlags=0;
349 : 0 : nHorzJust=0;
350 : 0 : nVertJust=0;
351 : 0 : }
352 : :
353 : 0 : void DXFAttribEntity::EvaluateGroup(DXFGroupReader & rDGR)
354 : : {
355 : 0 : switch (rDGR.GetG()) {
356 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
357 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
358 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
359 : 0 : case 40: fHeight=rDGR.GetF(); break;
360 : 0 : case 1: strncpy( sText, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
361 : 0 : case 2: strncpy( sTagStr, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
362 : 0 : case 70: nAttrFlags=rDGR.GetI(); break;
363 : 0 : case 73: nFieldLen=rDGR.GetI(); break;
364 : 0 : case 50: fRotAngle=rDGR.GetF(); break;
365 : 0 : case 41: fXScale=rDGR.GetF(); break;
366 : 0 : case 51: fOblAngle=rDGR.GetF(); break;
367 : 0 : case 7: strncpy( sStyle, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
368 : 0 : case 71: nGenFlags=rDGR.GetI(); break;
369 : 0 : case 72: nHorzJust=rDGR.GetI(); break;
370 : 0 : case 74: nVertJust=rDGR.GetI(); break;
371 : 0 : case 11: aAlign.fx=rDGR.GetF(); break;
372 : 0 : case 21: aAlign.fy=rDGR.GetF(); break;
373 : 0 : case 31: aAlign.fz=rDGR.GetF(); break;
374 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
375 : : }
376 : 0 : }
377 : :
378 : : //--------------------------DXFPolyLine-----------------------------------------
379 : :
380 : 0 : DXFPolyLineEntity::DXFPolyLineEntity() : DXFBasicEntity(DXF_POLYLINE)
381 : : {
382 : 0 : fElevation=0.0;
383 : 0 : nFlags=0;
384 : 0 : fSWidth=0.0;
385 : 0 : fEWidth=0.0;
386 : 0 : nMeshMCount=0;
387 : 0 : nMeshNCount=0;
388 : 0 : nMDensity=0;
389 : 0 : nNDensity=0;
390 : 0 : nCSSType=0;
391 : 0 : }
392 : :
393 : 0 : void DXFPolyLineEntity::EvaluateGroup(DXFGroupReader & rDGR)
394 : : {
395 : 0 : switch (rDGR.GetG()) {
396 : 0 : case 30: fElevation=rDGR.GetF(); break;
397 : 0 : case 70: nFlags=rDGR.GetI(); break;
398 : 0 : case 40: fSWidth=rDGR.GetF(); break;
399 : 0 : case 41: fEWidth=rDGR.GetF(); break;
400 : 0 : case 71: nMeshMCount=rDGR.GetI(); break;
401 : 0 : case 72: nMeshNCount=rDGR.GetI(); break;
402 : 0 : case 73: nMDensity=rDGR.GetI(); break;
403 : 0 : case 74: nNDensity=rDGR.GetI(); break;
404 : 0 : case 75: nCSSType=rDGR.GetI(); break;
405 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
406 : : }
407 : 0 : }
408 : :
409 : : //--------------------------DXFLWPolyLine---------------------------------------
410 : :
411 : 0 : DXFLWPolyLineEntity::DXFLWPolyLineEntity() :
412 : : DXFBasicEntity( DXF_LWPOLYLINE ),
413 : : nIndex( 0 ),
414 : : nCount( 0 ),
415 : : nFlags( 0 ),
416 : : fConstantWidth( 0.0 ),
417 : : fStartWidth( 0.0 ),
418 : : fEndWidth( 0.0 ),
419 : 0 : pP( NULL )
420 : : {
421 : 0 : }
422 : :
423 : 0 : void DXFLWPolyLineEntity::EvaluateGroup( DXFGroupReader & rDGR )
424 : : {
425 : 0 : switch ( rDGR.GetG() )
426 : : {
427 : : case 90 :
428 : : {
429 : 0 : nCount = rDGR.GetI();
430 : 0 : if ( nCount )
431 : 0 : pP = new DXFVector[ nCount ];
432 : : }
433 : 0 : break;
434 : 0 : case 70: nFlags = rDGR.GetI(); break;
435 : 0 : case 43: fConstantWidth = rDGR.GetF(); break;
436 : 0 : case 40: fStartWidth = rDGR.GetF(); break;
437 : 0 : case 41: fEndWidth = rDGR.GetF(); break;
438 : : case 10:
439 : : {
440 : 0 : if ( pP && ( nIndex < nCount ) )
441 : 0 : pP[ nIndex ].fx = rDGR.GetF();
442 : : }
443 : 0 : break;
444 : : case 20:
445 : : {
446 : 0 : if ( pP && ( nIndex < nCount ) )
447 : 0 : pP[ nIndex++ ].fy = rDGR.GetF();
448 : : }
449 : 0 : break;
450 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
451 : : }
452 : 0 : }
453 : :
454 : 0 : DXFLWPolyLineEntity::~DXFLWPolyLineEntity()
455 : : {
456 : 0 : delete[] pP;
457 : 0 : }
458 : :
459 : : //--------------------------DXFHatchEntity-------------------------------------
460 : :
461 : 0 : DXFEdgeTypeLine::DXFEdgeTypeLine() :
462 : 0 : DXFEdgeType( 1 )
463 : : {
464 : :
465 : 0 : }
466 : 0 : DXFEdgeTypeLine::~DXFEdgeTypeLine()
467 : : {
468 : :
469 : 0 : }
470 : 0 : sal_Bool DXFEdgeTypeLine::EvaluateGroup( DXFGroupReader & rDGR )
471 : : {
472 : 0 : sal_Bool bExecutingGroupCode = sal_True;
473 : 0 : switch ( rDGR.GetG() )
474 : : {
475 : 0 : case 10 : aStartPoint.fx = rDGR.GetF(); break;
476 : 0 : case 20 : aStartPoint.fy = rDGR.GetF(); break;
477 : 0 : case 11 : aEndPoint.fx = rDGR.GetF(); break;
478 : 0 : case 21 : aEndPoint.fy = rDGR.GetF(); break;
479 : 0 : default : bExecutingGroupCode = sal_False; break;
480 : : }
481 : 0 : return bExecutingGroupCode;
482 : : }
483 : :
484 : 0 : DXFEdgeTypeCircularArc::DXFEdgeTypeCircularArc() :
485 : : DXFEdgeType( 2 ),
486 : : fRadius( 0.0 ),
487 : : fStartAngle( 0.0 ),
488 : : fEndAngle( 0.0 ),
489 : 0 : nIsCounterClockwiseFlag( 0 )
490 : : {
491 : 0 : }
492 : 0 : DXFEdgeTypeCircularArc::~DXFEdgeTypeCircularArc()
493 : : {
494 : 0 : }
495 : 0 : sal_Bool DXFEdgeTypeCircularArc::EvaluateGroup( DXFGroupReader & rDGR )
496 : : {
497 : 0 : sal_Bool bExecutingGroupCode = sal_True;
498 : 0 : switch ( rDGR.GetG() )
499 : : {
500 : 0 : case 10 : aCenter.fx = rDGR.GetF(); break;
501 : 0 : case 20 : aCenter.fy = rDGR.GetF(); break;
502 : 0 : case 40 : fRadius = rDGR.GetF(); break;
503 : 0 : case 50 : fStartAngle = rDGR.GetF(); break;
504 : 0 : case 51 : fEndAngle = rDGR.GetF(); break;
505 : 0 : case 73 : nIsCounterClockwiseFlag = rDGR.GetI(); break;
506 : 0 : default : bExecutingGroupCode = sal_False; break;
507 : : }
508 : 0 : return bExecutingGroupCode;
509 : : }
510 : :
511 : 0 : DXFEdgeTypeEllipticalArc::DXFEdgeTypeEllipticalArc() :
512 : : DXFEdgeType( 3 ),
513 : : fLength( 0.0 ),
514 : : fStartAngle( 0.0 ),
515 : : fEndAngle( 0.0 ),
516 : 0 : nIsCounterClockwiseFlag( 0 )
517 : : {
518 : 0 : }
519 : 0 : DXFEdgeTypeEllipticalArc::~DXFEdgeTypeEllipticalArc()
520 : : {
521 : :
522 : 0 : }
523 : 0 : sal_Bool DXFEdgeTypeEllipticalArc::EvaluateGroup( DXFGroupReader & rDGR )
524 : : {
525 : 0 : sal_Bool bExecutingGroupCode = sal_True;
526 : 0 : switch( rDGR.GetG() )
527 : : {
528 : 0 : case 10 : aCenter.fx = rDGR.GetF(); break;
529 : 0 : case 20 : aCenter.fy = rDGR.GetF(); break;
530 : 0 : case 11 : aEndPoint.fx = rDGR.GetF(); break;
531 : 0 : case 21 : aEndPoint.fy = rDGR.GetF(); break;
532 : 0 : case 40 : fLength = rDGR.GetF(); break;
533 : 0 : case 50 : fStartAngle = rDGR.GetF(); break;
534 : 0 : case 51 : fEndAngle = rDGR.GetF(); break;
535 : 0 : case 73 : nIsCounterClockwiseFlag = rDGR.GetI(); break;
536 : 0 : default : bExecutingGroupCode = sal_False; break;
537 : : }
538 : 0 : return bExecutingGroupCode;
539 : : }
540 : :
541 : 0 : DXFEdgeTypeSpline::DXFEdgeTypeSpline() :
542 : : DXFEdgeType( 4 ),
543 : : nDegree( 0 ),
544 : : nRational( 0 ),
545 : : nPeriodic( 0 ),
546 : : nKnotCount( 0 ),
547 : 0 : nControlCount( 0 )
548 : : {
549 : 0 : }
550 : 0 : DXFEdgeTypeSpline::~DXFEdgeTypeSpline()
551 : : {
552 : :
553 : 0 : }
554 : 0 : sal_Bool DXFEdgeTypeSpline::EvaluateGroup( DXFGroupReader & rDGR )
555 : : {
556 : 0 : sal_Bool bExecutingGroupCode = sal_True;
557 : 0 : switch ( rDGR.GetG() )
558 : : {
559 : 0 : case 94 : nDegree = rDGR.GetI(); break;
560 : 0 : case 73 : nRational = rDGR.GetI(); break;
561 : 0 : case 74 : nPeriodic = rDGR.GetI(); break;
562 : 0 : case 95 : nKnotCount = rDGR.GetI(); break;
563 : 0 : case 96 : nControlCount = rDGR.GetI(); break;
564 : 0 : default : bExecutingGroupCode = sal_False; break;
565 : : }
566 : 0 : return bExecutingGroupCode;
567 : : }
568 : :
569 : 0 : DXFBoundaryPathData::DXFBoundaryPathData() :
570 : : nFlags( 0 ),
571 : : nHasBulgeFlag( 0 ),
572 : : nIsClosedFlag( 0 ),
573 : : nPointCount( 0 ),
574 : : fBulge( 0.0 ),
575 : : nSourceBoundaryObjects( 0 ),
576 : : nEdgeCount( 0 ),
577 : : bIsPolyLine( sal_True ),
578 : : nPointIndex( 0 ),
579 : 0 : pP( NULL )
580 : : {
581 : 0 : }
582 : :
583 : 0 : DXFBoundaryPathData::~DXFBoundaryPathData()
584 : : {
585 : 0 : sal_uInt32 i = 0;
586 : 0 : for ( i = 0; i < aEdges.size(); i++ )
587 : 0 : delete aEdges[ i ];
588 : 0 : delete[] pP;
589 : 0 : }
590 : :
591 : 0 : sal_Bool DXFBoundaryPathData::EvaluateGroup( DXFGroupReader & rDGR )
592 : : {
593 : 0 : sal_Bool bExecutingGroupCode = sal_True;
594 : 0 : if ( bIsPolyLine )
595 : : {
596 : 0 : switch( rDGR.GetG() )
597 : : {
598 : : case 92 :
599 : : {
600 : 0 : nFlags = rDGR.GetI();
601 : 0 : if ( ( nFlags & 2 ) == 0 )
602 : 0 : bIsPolyLine = sal_False;
603 : : }
604 : 0 : break;
605 : : case 93 :
606 : : {
607 : 0 : nPointCount = rDGR.GetI();
608 : 0 : if ( nPointCount )
609 : 0 : pP = new DXFVector[ nPointCount ];
610 : : }
611 : 0 : break;
612 : 0 : case 72 : nHasBulgeFlag = rDGR.GetI(); break;
613 : 0 : case 73 : nIsClosedFlag = rDGR.GetI(); break;
614 : 0 : case 97 : nSourceBoundaryObjects = rDGR.GetI(); break;
615 : 0 : case 42 : fBulge = rDGR.GetF(); break;
616 : : case 10:
617 : : {
618 : 0 : if ( pP && ( nPointIndex < nPointCount ) )
619 : 0 : pP[ nPointIndex ].fx = rDGR.GetF();
620 : : }
621 : 0 : break;
622 : : case 20:
623 : : {
624 : 0 : if ( pP && ( nPointIndex < nPointCount ) )
625 : 0 : pP[ nPointIndex++ ].fy = rDGR.GetF();
626 : : }
627 : 0 : break;
628 : :
629 : 0 : default : bExecutingGroupCode = sal_False; break;
630 : : }
631 : : }
632 : : else
633 : : {
634 : 0 : if ( rDGR.GetG() == 93 )
635 : 0 : nEdgeCount = rDGR.GetI();
636 : 0 : else if ( rDGR.GetG() == 72 )
637 : : {
638 : 0 : sal_Int32 nEdgeType = rDGR.GetI();
639 : 0 : switch( nEdgeType )
640 : : {
641 : 0 : case 1 : aEdges.push_back( new DXFEdgeTypeLine() ); break;
642 : 0 : case 2 : aEdges.push_back( new DXFEdgeTypeCircularArc() ); break;
643 : 0 : case 3 : aEdges.push_back( new DXFEdgeTypeEllipticalArc() ); break;
644 : 0 : case 4 : aEdges.push_back( new DXFEdgeTypeSpline() ); break;
645 : : }
646 : : }
647 : 0 : else if ( aEdges.size() )
648 : 0 : aEdges[ aEdges.size() - 1 ]->EvaluateGroup( rDGR );
649 : : else
650 : 0 : bExecutingGroupCode = sal_False;
651 : : }
652 : 0 : return bExecutingGroupCode;
653 : : }
654 : :
655 : 0 : DXFHatchEntity::DXFHatchEntity() :
656 : : DXFBasicEntity( DXF_HATCH ),
657 : : bIsInBoundaryPathContext( sal_False ),
658 : : nCurrentBoundaryPathIndex( -1 ),
659 : : nFlags( 0 ),
660 : : nAssociativityFlag( 0 ),
661 : : nBoundaryPathCount( 0 ),
662 : : nHatchStyle( 0 ),
663 : : nHatchPatternType( 0 ),
664 : : fHatchPatternAngle( 0.0 ),
665 : : fHatchPatternScale( 1.0 ),
666 : : nHatchDoubleFlag( 0 ),
667 : : nHatchPatternDefinitionLines( 0 ),
668 : : fPixelSize( 1.0 ),
669 : : nNumberOfSeedPoints( 0 ),
670 : 0 : pBoundaryPathData( NULL )
671 : : {
672 : 0 : }
673 : :
674 : 0 : void DXFHatchEntity::EvaluateGroup( DXFGroupReader & rDGR )
675 : : {
676 : 0 : switch ( rDGR.GetG() )
677 : : {
678 : : // case 10 : aElevationPoint.fx = rDGR.GetF(); break;
679 : : // case 20 : aElevationPoint.fy = rDGR.GetF(); break;
680 : : // case 30 : aElevationPoint.fz = rDGR.GetF(); break;
681 : 0 : case 70 : nFlags = rDGR.GetI(); break;
682 : 0 : case 71 : nAssociativityFlag = rDGR.GetI(); break;
683 : : case 91 :
684 : : {
685 : 0 : bIsInBoundaryPathContext = sal_True;
686 : 0 : nBoundaryPathCount = rDGR.GetI();
687 : 0 : if ( nBoundaryPathCount )
688 : 0 : pBoundaryPathData = new DXFBoundaryPathData[ nBoundaryPathCount ];
689 : : }
690 : 0 : break;
691 : : case 75 :
692 : : {
693 : 0 : nHatchStyle = rDGR.GetI();
694 : 0 : bIsInBoundaryPathContext = sal_False;
695 : : }
696 : 0 : break;
697 : 0 : case 76 : nHatchPatternType = rDGR.GetI(); break;
698 : 0 : case 52 : fHatchPatternAngle = rDGR.GetF(); break;
699 : 0 : case 41 : fHatchPatternScale = rDGR.GetF(); break;
700 : 0 : case 77 : nHatchDoubleFlag = rDGR.GetI(); break;
701 : 0 : case 78 : nHatchPatternDefinitionLines = rDGR.GetI(); break;
702 : 0 : case 47 : fPixelSize = rDGR.GetF(); break;
703 : 0 : case 98 : nNumberOfSeedPoints = rDGR.GetI(); break;
704 : :
705 : : //!! passthrough !!
706 : 0 : case 92 : nCurrentBoundaryPathIndex++;
707 : : default:
708 : : {
709 : 0 : sal_Bool bExecutingGroupCode = sal_False;
710 : 0 : if ( bIsInBoundaryPathContext )
711 : : {
712 : 0 : if ( ( nCurrentBoundaryPathIndex >= 0 ) &&
713 : : ( nCurrentBoundaryPathIndex < nBoundaryPathCount ) )
714 : 0 : bExecutingGroupCode = pBoundaryPathData[ nCurrentBoundaryPathIndex ].EvaluateGroup( rDGR );
715 : : }
716 : 0 : if ( bExecutingGroupCode == sal_False )
717 : 0 : DXFBasicEntity::EvaluateGroup(rDGR);
718 : : }
719 : 0 : break;
720 : : }
721 : 0 : }
722 : :
723 : 0 : DXFHatchEntity::~DXFHatchEntity()
724 : : {
725 : 0 : delete[] pBoundaryPathData;
726 : 0 : }
727 : :
728 : : //--------------------------DXFVertexEntity-------------------------------------
729 : :
730 : 0 : DXFVertexEntity::DXFVertexEntity() : DXFBasicEntity(DXF_VERTEX)
731 : : {
732 : 0 : fSWidth=-1.0;
733 : 0 : fEWidth=-1.0;
734 : 0 : fBulge=0.0;
735 : 0 : nFlags=0;
736 : 0 : fCFTDir=0.0;
737 : :
738 : 0 : }
739 : :
740 : 0 : void DXFVertexEntity::EvaluateGroup(DXFGroupReader & rDGR)
741 : : {
742 : 0 : switch (rDGR.GetG()) {
743 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
744 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
745 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
746 : 0 : case 40: fSWidth=rDGR.GetF(); break;
747 : 0 : case 41: fEWidth=rDGR.GetF(); break;
748 : 0 : case 42: fBulge=rDGR.GetF(); break;
749 : 0 : case 70: nFlags=rDGR.GetI(); break;
750 : 0 : case 50: fCFTDir=rDGR.GetF(); break;
751 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
752 : : }
753 : 0 : }
754 : :
755 : : //--------------------------DXFSeqEndEntity-------------------------------------
756 : :
757 : 0 : DXFSeqEndEntity::DXFSeqEndEntity() : DXFBasicEntity(DXF_SEQEND)
758 : : {
759 : 0 : }
760 : :
761 : : //--------------------------DXF3DFace-------------------------------------------
762 : :
763 : 0 : DXF3DFaceEntity::DXF3DFaceEntity() : DXFBasicEntity(DXF_3DFACE)
764 : : {
765 : 0 : nIEFlags=0;
766 : 0 : }
767 : :
768 : 0 : void DXF3DFaceEntity::EvaluateGroup(DXFGroupReader & rDGR)
769 : : {
770 : 0 : switch (rDGR.GetG()) {
771 : 0 : case 10: aP0.fx=rDGR.GetF(); break;
772 : 0 : case 20: aP0.fy=rDGR.GetF(); break;
773 : 0 : case 30: aP0.fz=rDGR.GetF(); break;
774 : 0 : case 11: aP1.fx=rDGR.GetF(); break;
775 : 0 : case 21: aP1.fy=rDGR.GetF(); break;
776 : 0 : case 31: aP1.fz=rDGR.GetF(); break;
777 : 0 : case 12: aP2.fx=rDGR.GetF(); break;
778 : 0 : case 22: aP2.fy=rDGR.GetF(); break;
779 : 0 : case 32: aP2.fz=rDGR.GetF(); break;
780 : 0 : case 13: aP3.fx=rDGR.GetF(); break;
781 : 0 : case 23: aP3.fy=rDGR.GetF(); break;
782 : 0 : case 33: aP3.fz=rDGR.GetF(); break;
783 : 0 : case 70: nIEFlags=rDGR.GetI(); break;
784 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
785 : : }
786 : 0 : }
787 : :
788 : :
789 : : //--------------------------DXFDimensionEntity----------------------------------
790 : :
791 : 0 : DXFDimensionEntity::DXFDimensionEntity() : DXFBasicEntity(DXF_DIMENSION)
792 : : {
793 : 0 : sPseudoBlock[0]=0;
794 : 0 : }
795 : :
796 : 0 : void DXFDimensionEntity::EvaluateGroup(DXFGroupReader & rDGR)
797 : : {
798 : 0 : switch (rDGR.GetG()) {
799 : 0 : case 2: strncpy( sPseudoBlock, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break;
800 : 0 : default: DXFBasicEntity::EvaluateGroup(rDGR);
801 : : }
802 : 0 : }
803 : :
804 : : //---------------------------- DXFEntites --------------------------------------
805 : :
806 : 0 : void DXFEntities::Read(DXFGroupReader & rDGR)
807 : : {
808 : : DXFBasicEntity * pE, * * ppSucc;
809 : :
810 : 0 : ppSucc=&pFirst;
811 : 0 : while (*ppSucc!=NULL) ppSucc=&((*ppSucc)->pSucc);
812 : :
813 : 0 : while (rDGR.GetG()!=0) rDGR.Read();
814 : :
815 : 0 : while (strcmp(rDGR.GetS(),"ENDBLK")!=0 &&
816 : 0 : strcmp(rDGR.GetS(),"ENDSEC")!=0 &&
817 : 0 : strcmp(rDGR.GetS(),"EOF")!=0 )
818 : : {
819 : :
820 : 0 : if (strcmp(rDGR.GetS(),"LINE" )==0) pE=new DXFLineEntity;
821 : 0 : else if (strcmp(rDGR.GetS(),"POINT" )==0) pE=new DXFPointEntity;
822 : 0 : else if (strcmp(rDGR.GetS(),"CIRCLE" )==0) pE=new DXFCircleEntity;
823 : 0 : else if (strcmp(rDGR.GetS(),"ARC" )==0) pE=new DXFArcEntity;
824 : 0 : else if (strcmp(rDGR.GetS(),"TRACE" )==0) pE=new DXFTraceEntity;
825 : 0 : else if (strcmp(rDGR.GetS(),"SOLID" )==0) pE=new DXFSolidEntity;
826 : 0 : else if (strcmp(rDGR.GetS(),"TEXT" )==0) pE=new DXFTextEntity;
827 : 0 : else if (strcmp(rDGR.GetS(),"SHAPE" )==0) pE=new DXFShapeEntity;
828 : 0 : else if (strcmp(rDGR.GetS(),"INSERT" )==0) pE=new DXFInsertEntity;
829 : 0 : else if (strcmp(rDGR.GetS(),"ATTDEF" )==0) pE=new DXFAttDefEntity;
830 : 0 : else if (strcmp(rDGR.GetS(),"ATTRIB" )==0) pE=new DXFAttribEntity;
831 : 0 : else if (strcmp(rDGR.GetS(),"POLYLINE" )==0) pE=new DXFPolyLineEntity;
832 : 0 : else if (strcmp(rDGR.GetS(),"LWPOLYLINE")==0) pE=new DXFLWPolyLineEntity;
833 : 0 : else if (strcmp(rDGR.GetS(),"VERTEX" )==0) pE=new DXFVertexEntity;
834 : 0 : else if (strcmp(rDGR.GetS(),"SEQEND" )==0) pE=new DXFSeqEndEntity;
835 : 0 : else if (strcmp(rDGR.GetS(),"3DFACE" )==0) pE=new DXF3DFaceEntity;
836 : 0 : else if (strcmp(rDGR.GetS(),"DIMENSION" )==0) pE=new DXFDimensionEntity;
837 : 0 : else if (strcmp(rDGR.GetS(),"HATCH" )==0) pE=new DXFHatchEntity;
838 : : else
839 : : {
840 : 0 : do {
841 : 0 : rDGR.Read();
842 : 0 : } while (rDGR.GetG()!=0);
843 : 0 : continue;
844 : : }
845 : 0 : *ppSucc=pE;
846 : 0 : ppSucc=&(pE->pSucc);
847 : 0 : pE->Read(rDGR);
848 : : }
849 : 0 : }
850 : :
851 : 0 : void DXFEntities::Clear()
852 : : {
853 : : DXFBasicEntity * ptmp;
854 : :
855 : 0 : while (pFirst!=NULL) {
856 : 0 : ptmp=pFirst;
857 : 0 : pFirst=ptmp->pSucc;
858 : 0 : delete ptmp;
859 : : }
860 : 0 : }
861 : :
862 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|