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 <dxftblrd.hxx>
23 :
24 : //----------------------------------DXFLType-----------------------------------
25 :
26 0 : DXFLType::DXFLType()
27 : : pSucc(NULL)
28 : , nFlags(0)
29 : , nDashCount(0)
30 0 : , fPatternLength(0.0)
31 : {
32 0 : }
33 :
34 0 : void DXFLType::Read(DXFGroupReader & rDGR)
35 : {
36 0 : long nDashIndex=-1;
37 :
38 0 : while (rDGR.Read()!=0)
39 : {
40 0 : switch (rDGR.GetG())
41 : {
42 : case 2:
43 0 : m_sName = OString(rDGR.GetS());
44 0 : break;
45 : case 3:
46 0 : m_sDescription = OString(rDGR.GetS());
47 0 : break;
48 : case 70:
49 0 : nFlags=rDGR.GetI();
50 0 : break;
51 : case 73:
52 0 : if (nDashIndex!=-1)
53 : {
54 0 : rDGR.SetError();
55 0 : return;
56 : }
57 0 : nDashCount=rDGR.GetI();
58 0 : if (nDashCount>DXF_MAX_DASH_COUNT)
59 : {
60 0 : nDashCount=DXF_MAX_DASH_COUNT;
61 : }
62 0 : nDashIndex=0;
63 0 : break;
64 0 : case 40: fPatternLength=rDGR.GetF(); break;
65 : case 49:
66 0 : if (nDashCount==-1)
67 : {
68 0 : rDGR.SetError();
69 0 : return;
70 : }
71 0 : if (nDashIndex<nDashCount)
72 : {
73 0 : fDash[nDashIndex++]=rDGR.GetF();
74 : }
75 0 : break;
76 : }
77 : }
78 : }
79 :
80 : //----------------------------------DXFLayer-----------------------------------
81 :
82 0 : DXFLayer::DXFLayer()
83 : {
84 0 : pSucc=NULL;
85 0 : nFlags=0;
86 0 : nColor=-1;
87 0 : }
88 :
89 0 : void DXFLayer::Read(DXFGroupReader & rDGR)
90 : {
91 0 : while (rDGR.Read()!=0)
92 : {
93 0 : switch(rDGR.GetG())
94 : {
95 : case 2:
96 0 : m_sName = OString(rDGR.GetS());
97 0 : break;
98 : case 6:
99 0 : m_sLineType = OString(rDGR.GetS());
100 0 : break;
101 : case 70:
102 0 : nFlags=rDGR.GetI();
103 0 : break;
104 : case 62:
105 0 : nColor=rDGR.GetI();
106 0 : break;
107 : }
108 : }
109 0 : }
110 :
111 : //----------------------------------DXFStyle-----------------------------------
112 :
113 0 : DXFStyle::DXFStyle()
114 : {
115 0 : pSucc=NULL;
116 0 : nFlags=0;
117 0 : fHeight=0.0;
118 0 : fWidthFak=1.0;
119 0 : fOblAngle=0.0;
120 0 : nTextGenFlags=0;
121 0 : fLastHeightUsed=0.0;
122 0 : }
123 :
124 0 : void DXFStyle::Read(DXFGroupReader & rDGR)
125 : {
126 0 : while (rDGR.Read()!=0)
127 : {
128 0 : switch(rDGR.GetG())
129 : {
130 : case 2:
131 0 : m_sName = OString(rDGR.GetS());
132 0 : break;
133 : case 3:
134 0 : m_sPrimFontFile = OString(rDGR.GetS());
135 0 : break;
136 : case 4:
137 0 : m_sBigFontFile = OString(rDGR.GetS());
138 0 : break;
139 : case 70:
140 0 : nFlags=rDGR.GetI();
141 0 : break;
142 : case 40:
143 0 : fHeight=rDGR.GetF();
144 0 : break;
145 : case 41:
146 0 : fWidthFak=rDGR.GetF();
147 0 : break;
148 : case 42:
149 0 : fLastHeightUsed=rDGR.GetF();
150 0 : break;
151 : case 50:
152 0 : fOblAngle=rDGR.GetF();
153 0 : break;
154 : case 71:
155 0 : nTextGenFlags=rDGR.GetI();
156 0 : break;
157 : }
158 : }
159 0 : }
160 :
161 : //----------------------------------DXFVPort-----------------------------------
162 :
163 0 : DXFVPort::DXFVPort()
164 : {
165 0 : pSucc=NULL;
166 :
167 0 : nFlags=0;
168 0 : fMinX=0;
169 0 : fMinY=0;
170 0 : fMaxX=0;
171 0 : fMaxY=0;
172 0 : fCenterX=0;
173 0 : fCenterY=0;
174 0 : fSnapBaseX=0;
175 0 : fSnapBaseY=0;
176 0 : fSnapSapcingX=0;
177 0 : fSnapSpacingY=0;
178 0 : fGridX=0;
179 0 : fGridY=0;
180 0 : aDirection=DXFVector(0,0,1);
181 0 : aTarget=DXFVector(0,0,0);
182 0 : fHeight=0;
183 0 : fAspectRatio=0;
184 0 : fLensLength=0;
185 0 : fFrontClipPlane=0;
186 0 : fBackClipPlane=0;
187 0 : fTwistAngle=0;
188 0 : nStatus=0;
189 0 : nID=0;
190 0 : nMode=0;
191 0 : nCircleZoomPercent=0;
192 0 : nFastZoom=0;
193 0 : nUCSICON=0;
194 0 : nSnap=0;
195 0 : nGrid=0;
196 0 : nSnapStyle=0;
197 0 : nSnapIsopair=0;
198 0 : }
199 :
200 0 : void DXFVPort::Read(DXFGroupReader & rDGR)
201 : {
202 0 : while (rDGR.Read()!=0)
203 : {
204 0 : switch(rDGR.GetG())
205 : {
206 : case 2:
207 0 : m_sName = OString(rDGR.GetS());
208 0 : break;
209 0 : case 10: fMinX=rDGR.GetF(); break;
210 0 : case 11: fMaxX=rDGR.GetF(); break;
211 0 : case 12: fCenterX=rDGR.GetF(); break;
212 0 : case 13: fSnapBaseX=rDGR.GetF(); break;
213 0 : case 14: fSnapSapcingX=rDGR.GetF(); break;
214 0 : case 15: fGridX=rDGR.GetF(); break;
215 0 : case 16: aDirection.fx=rDGR.GetF(); break;
216 0 : case 17: aTarget.fx=rDGR.GetF(); break;
217 0 : case 20: fMinY=rDGR.GetF(); break;
218 0 : case 21: fMaxY=rDGR.GetF(); break;
219 0 : case 22: fCenterY=rDGR.GetF(); break;
220 0 : case 23: fSnapBaseY=rDGR.GetF(); break;
221 0 : case 24: fSnapSpacingY=rDGR.GetF(); break;
222 0 : case 25: fGridY=rDGR.GetF(); break;
223 0 : case 26: aDirection.fy=rDGR.GetF(); break;
224 0 : case 27: aTarget.fy=rDGR.GetF(); break;
225 0 : case 36: aDirection.fz=rDGR.GetF(); break;
226 0 : case 37: aTarget.fz=rDGR.GetF(); break;
227 0 : case 40: fHeight=rDGR.GetF(); break;
228 0 : case 41: fAspectRatio=rDGR.GetF(); break;
229 0 : case 42: fLensLength=rDGR.GetF(); break;
230 0 : case 43: fFrontClipPlane=rDGR.GetF(); break;
231 0 : case 44: fBackClipPlane=rDGR.GetF(); break;
232 0 : case 51: fTwistAngle=rDGR.GetF(); break;
233 0 : case 68: nStatus=rDGR.GetI(); break;
234 0 : case 69: nID=rDGR.GetI(); break;
235 0 : case 70: nFlags=rDGR.GetI(); break;
236 0 : case 71: nMode=rDGR.GetI(); break;
237 0 : case 72: nCircleZoomPercent=rDGR.GetI(); break;
238 0 : case 73: nFastZoom=rDGR.GetI(); break;
239 0 : case 74: nUCSICON=rDGR.GetI(); break;
240 0 : case 75: nSnap=rDGR.GetI(); break;
241 0 : case 76: nGrid=rDGR.GetI(); break;
242 0 : case 77: nSnapStyle=rDGR.GetI(); break;
243 0 : case 78: nSnapIsopair=rDGR.GetI(); break;
244 : }
245 : }
246 0 : }
247 :
248 : //----------------------------------DXFTables----------------------------------
249 :
250 :
251 0 : DXFTables::DXFTables()
252 : {
253 0 : pLTypes=NULL;
254 0 : pLayers=NULL;
255 0 : pStyles=NULL;
256 0 : pVPorts=NULL;
257 0 : }
258 :
259 :
260 0 : DXFTables::~DXFTables()
261 : {
262 0 : Clear();
263 0 : }
264 :
265 :
266 0 : void DXFTables::Read(DXFGroupReader & rDGR)
267 : {
268 : DXFLType * * ppLT, * pLT;
269 : DXFLayer * * ppLa, * pLa;
270 : DXFStyle * * ppSt, * pSt;
271 : DXFVPort * * ppVP, * pVP;
272 :
273 0 : ppLT=&pLTypes;
274 0 : while(*ppLT!=NULL) ppLT=&((*ppLT)->pSucc);
275 :
276 0 : ppLa=&pLayers;
277 0 : while(*ppLa!=NULL) ppLa=&((*ppLa)->pSucc);
278 :
279 0 : ppSt=&pStyles;
280 0 : while(*ppSt!=NULL) ppSt=&((*ppSt)->pSucc);
281 :
282 0 : ppVP=&pVPorts;
283 0 : while(*ppVP!=NULL) ppVP=&((*ppVP)->pSucc);
284 :
285 : for (;;) {
286 0 : while (rDGR.GetG()!=0) rDGR.Read();
287 0 : if (strcmp(rDGR.GetS(),"EOF")==0 ||
288 0 : strcmp(rDGR.GetS(),"ENDSEC")==0) break;
289 0 : else if (strcmp(rDGR.GetS(),"LTYPE")==0) {
290 0 : pLT=new DXFLType;
291 0 : pLT->Read(rDGR);
292 0 : *ppLT=pLT;
293 0 : ppLT=&(pLT->pSucc);
294 : }
295 0 : else if (strcmp(rDGR.GetS(),"LAYER")==0) {
296 0 : pLa=new DXFLayer;
297 0 : pLa->Read(rDGR);
298 0 : *ppLa=pLa;
299 0 : ppLa=&(pLa->pSucc);
300 : }
301 0 : else if (strcmp(rDGR.GetS(),"STYLE")==0) {
302 0 : pSt=new DXFStyle;
303 0 : pSt->Read(rDGR);
304 0 : *ppSt=pSt;
305 0 : ppSt=&(pSt->pSucc);
306 : }
307 0 : else if (strcmp(rDGR.GetS(),"VPORT")==0) {
308 0 : pVP=new DXFVPort;
309 0 : pVP->Read(rDGR);
310 0 : *ppVP=pVP;
311 0 : ppVP=&(pVP->pSucc);
312 : }
313 0 : else rDGR.Read();
314 0 : }
315 0 : }
316 :
317 :
318 0 : void DXFTables::Clear()
319 : {
320 : DXFLType * pLT;
321 : DXFLayer * pLa;
322 : DXFStyle * pSt;
323 : DXFVPort * pVP;
324 :
325 0 : while (pStyles!=NULL) {
326 0 : pSt=pStyles;
327 0 : pStyles=pSt->pSucc;
328 0 : delete pSt;
329 : }
330 0 : while (pLayers!=NULL) {
331 0 : pLa=pLayers;
332 0 : pLayers=pLa->pSucc;
333 0 : delete pLa;
334 : }
335 0 : while (pLTypes!=NULL) {
336 0 : pLT=pLTypes;
337 0 : pLTypes=pLT->pSucc;
338 0 : delete pLT;
339 : }
340 0 : while (pVPorts!=NULL) {
341 0 : pVP=pVPorts;
342 0 : pVPorts=pVP->pSucc;
343 0 : delete pVP;
344 : }
345 0 : }
346 :
347 :
348 0 : DXFLType * DXFTables::SearchLType(OString const& rName) const
349 : {
350 : DXFLType * p;
351 0 : for (p=pLTypes; p!=NULL; p=p->pSucc) {
352 0 : if (rName == p->m_sName) break;
353 : }
354 0 : return p;
355 : }
356 :
357 :
358 0 : DXFLayer * DXFTables::SearchLayer(OString const& rName) const
359 : {
360 : DXFLayer * p;
361 0 : for (p=pLayers; p!=NULL; p=p->pSucc) {
362 0 : if (rName == p->m_sName) break;
363 : }
364 0 : return p;
365 : }
366 :
367 :
368 0 : DXFVPort * DXFTables::SearchVPort(OString const& rName) const
369 : {
370 : DXFVPort * p;
371 0 : for (p=pVPorts; p!=NULL; p=p->pSucc) {
372 0 : if (rName == p->m_sName) break;
373 : }
374 0 : return p;
375 : }
376 :
377 :
378 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|