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