Statistics
| Revision:

root / trunk / libraries / libDwg / src / com / iver / cit / jdwglib / dwg / readers / objreaders / v2004 / DwgSplineReader2004.java @ 23942

History | View | Annotate | Download (6.13 KB)

1
/*
2
 * Created on 25-ene-2007 by azabala
3
 *
4
 */
5
package com.iver.cit.jdwglib.dwg.readers.objreaders.v2004;
6

    
7
import java.util.ArrayList;
8

    
9
import org.apache.log4j.Logger;
10

    
11
import com.iver.cit.jdwglib.dwg.CorruptedDwgEntityException;
12
import com.iver.cit.jdwglib.dwg.DwgObject;
13
import com.iver.cit.jdwglib.dwg.DwgUtil;
14
import com.iver.cit.jdwglib.dwg.objects.DwgSpline;
15

    
16
/**
17
 * @author alzabord
18
 *
19
 * TODO To change the template for this generated type comment go to
20
 * Window - Preferences - Java - Code Style - Code Templates
21
 */
22
public class DwgSplineReader2004 extends AbstractDwg2004Reader{
23

    
24
        private static Logger logger = Logger.getLogger(DwgSplineReader2004.class.getName());
25

    
26
        /* (non-Javadoc)
27
         * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
28
         */
29
        public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
30
                if(! (dwgObj instanceof DwgSpline))
31
                        throw new RuntimeException("DwgSplineReader2004 solo puede leer DwgSpline");
32
                DwgSpline spline = (DwgSpline) dwgObj;
33
                int bitPos = offset;
34
                bitPos = readObjectHeader(data, bitPos, spline);
35
                System.out.println("posActual = "+bitPos);
36
                ArrayList v;
37
                v = DwgUtil.getBitShort(data, bitPos);
38
                bitPos = ((Integer)v.get(0)).intValue();
39
                int sc = ((Integer)v.get(1)).intValue();
40
                spline.setScenario(sc);
41

    
42
                v = DwgUtil.getBitShort(data, bitPos);
43
                bitPos = ((Integer)v.get(0)).intValue();
44
                int deg = ((Integer)v.get(1)).intValue();
45
                spline.setDegree(deg);
46

    
47
                int knotsNumber = 0;
48
                int controlPointsNumber = 0;
49
                int fitPointsNumber = 0;
50
                boolean weight = false;
51
                if (sc==2) {
52
                        v = DwgUtil.getBitDouble(data, bitPos);
53
                        bitPos = ((Integer)v.get(0)).intValue();
54
                        double ft = ((Double)v.get(1)).doubleValue();
55
                        spline.setFitTolerance(ft);
56

    
57
                        v = DwgUtil.getBitDouble(data, bitPos);
58
                        bitPos = ((Integer)v.get(0)).intValue();
59
                        double x = ((Double)v.get(1)).doubleValue();
60
                        v = DwgUtil.getBitDouble(data, bitPos);
61
                        bitPos = ((Integer)v.get(0)).intValue();
62
                        double y = ((Double)v.get(1)).doubleValue();
63
                        v = DwgUtil.getBitDouble(data, bitPos);
64
                        bitPos = ((Integer)v.get(0)).intValue();
65
                        double z = ((Double)v.get(1)).doubleValue();
66
                        double[] coord = new double[]{x, y, z};
67
                        spline.setBeginTanVector(coord);
68

    
69
                        v = DwgUtil.getBitDouble(data, bitPos);
70
                        bitPos = ((Integer)v.get(0)).intValue();
71
                        x = ((Double)v.get(1)).doubleValue();
72
                        v = DwgUtil.getBitDouble(data, bitPos);
73
                        bitPos = ((Integer)v.get(0)).intValue();
74
                        y = ((Double)v.get(1)).doubleValue();
75
                        v = DwgUtil.getBitDouble(data, bitPos);
76
                        bitPos = ((Integer)v.get(0)).intValue();
77
                        z = ((Double)v.get(1)).doubleValue();
78
                        coord = new double[]{x, y, z};
79
                        spline.setEndTanVector(coord);
80

    
81
                        v = DwgUtil.getBitShort(data, bitPos);
82
                        bitPos = ((Integer)v.get(0)).intValue();
83
                        fitPointsNumber = ((Integer)v.get(1)).intValue();
84

    
85
                } else if (sc==1) {
86
                        v = DwgUtil.testBit(data, bitPos);
87
                        bitPos = ((Integer)v.get(0)).intValue();
88
                        boolean rat = ((Boolean)v.get(1)).booleanValue();
89
                        spline.setRational(rat);
90

    
91
                        v = DwgUtil.testBit(data, bitPos);
92
                        bitPos = ((Integer)v.get(0)).intValue();
93
                        boolean closed = ((Boolean)v.get(1)).booleanValue();
94
                        spline.setClosed(closed);
95

    
96
                        v = DwgUtil.testBit(data, bitPos);
97
                        bitPos = ((Integer)v.get(0)).intValue();
98
                        boolean per = ((Boolean)v.get(1)).booleanValue();
99
                        spline.setPeriodic(per);
100

    
101
                        v = DwgUtil.getBitDouble(data, bitPos);
102
                        bitPos = ((Integer)v.get(0)).intValue();
103
                        double ktol = ((Double)v.get(1)).doubleValue();
104
                        spline.setKnotTolerance(ktol);
105

    
106
                        v = DwgUtil.getBitDouble(data, bitPos);
107
                        bitPos = ((Integer)v.get(0)).intValue();
108
                        double ctol = ((Double)v.get(1)).doubleValue();
109
                        spline.setControlTolerance(ctol);
110

    
111
                        v = DwgUtil.getBitLong(data, bitPos);
112
                        bitPos = ((Integer)v.get(0)).intValue();
113
                        knotsNumber = ((Integer)v.get(1)).intValue();
114

    
115
                        v = DwgUtil.getBitLong(data, bitPos);
116
                        bitPos = ((Integer)v.get(0)).intValue();
117
                        controlPointsNumber = ((Integer)v.get(1)).intValue();
118

    
119
                        v = DwgUtil.testBit(data, bitPos);
120
                        bitPos = ((Integer)v.get(0)).intValue();
121
                        weight = ((Boolean)v.get(1)).booleanValue();
122

    
123
                } else {
124
                        logger.warn("ERROR: Escenario desconocido");
125
                }
126
                if (knotsNumber>0) {
127
                        double[] knotpts = new double[knotsNumber];
128
                        for (int i=0;i<knotsNumber;i++) {
129
                                v = DwgUtil.getBitDouble(data, bitPos);
130
                                bitPos = ((Integer)v.get(0)).intValue();
131
                                knotpts[i] = ((Double)v.get(1)).doubleValue();
132
                        }
133
                        spline.setKnotPoints(knotpts);
134
                }
135
                if (controlPointsNumber>0) {
136
                        // Si el nĂºmero de weights no coincide con el de ctrlpts habrĂ¡ problemas ...
137
                        double[][] ctrlpts = new double[controlPointsNumber][3];
138
                        double[] weights = new double[controlPointsNumber];
139
                        for (int i=0;i<controlPointsNumber;i++) {
140
                                v = DwgUtil.getBitDouble(data, bitPos);
141
                                bitPos = ((Integer)v.get(0)).intValue();
142
                                double x = ((Double)v.get(1)).doubleValue();
143
                                v = DwgUtil.getBitDouble(data, bitPos);
144
                                bitPos = ((Integer)v.get(0)).intValue();
145
                                double y = ((Double)v.get(1)).doubleValue();
146
                                v = DwgUtil.getBitDouble(data, bitPos);
147
                                bitPos = ((Integer)v.get(0)).intValue();
148
                                double z = ((Double)v.get(1)).doubleValue();
149
                                ctrlpts[i][0] = x;
150
                                ctrlpts[i][1] = y;
151
                                ctrlpts[i][2] = z;
152
                                if (weight) {
153
                                        v = DwgUtil.getBitDouble(data, bitPos);
154
                                        bitPos = ((Integer)v.get(0)).intValue();
155
                                        weights[i] = ((Double)v.get(1)).doubleValue();
156
                                }
157
                        }
158
                        spline.setControlPoints(ctrlpts);
159
                        if (weight) {
160
                                spline.setWeights(weights);
161
                        }
162
                }
163
                if (fitPointsNumber>0) {
164
                        double[][] fitpts = new double[fitPointsNumber][3];
165
                        for (int i=0;i<fitPointsNumber;i++) {
166
                                v = DwgUtil.getBitDouble(data, bitPos);
167
                                bitPos = ((Integer)v.get(0)).intValue();
168
                                double x = ((Double)v.get(1)).doubleValue();
169
                                v = DwgUtil.getBitDouble(data, bitPos);
170
                                bitPos = ((Integer)v.get(0)).intValue();
171
                                double y = ((Double)v.get(1)).doubleValue();
172
                                v = DwgUtil.getBitDouble(data, bitPos);
173
                                bitPos = ((Integer)v.get(0)).intValue();
174
                                double z = ((Double)v.get(1)).doubleValue();
175
                                fitpts[i][0] = x;
176
                                fitpts[i][1] = y;
177
                                fitpts[i][2] = z;
178
                        }
179
                        spline.setFitPoints(fitpts);
180
                }
181
                bitPos = readObjectTailer(data, bitPos, spline);
182
        }
183

    
184
}