Statistics
| Revision:

svn-gvsig-desktop / branches / v10 / libraries / libDwg / src / com / iver / cit / jdwglib / dwg / readers / objreaders / v15 / DwgSplineReader15.java @ 10539

History | View | Annotate | Download (6.01 KB)

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

    
7
import java.util.ArrayList;
8

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

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

    
22
        /* (non-Javadoc)
23
         * @see com.iver.cit.jdwglib.dwg.readers.IDwgObjectReader#readSpecificObj(int[], int, com.iver.cit.jdwglib.dwg.DwgObject)
24
         */
25
        public void readSpecificObj(int[] data, int offset, DwgObject dwgObj) throws RuntimeException, CorruptedDwgEntityException {
26
                if(! (dwgObj instanceof DwgSpline))
27
                        throw new RuntimeException("ArcReader 15 solo puede leer DwgSpline");
28
                DwgSpline spline = (DwgSpline) dwgObj;
29
                int bitPos = offset;
30
                bitPos = headTailReader.readObjectHeader(data, bitPos, spline);
31
                ArrayList v = DwgUtil.getBitShort(data, bitPos);
32
                bitPos = ((Integer)v.get(0)).intValue();
33
                int sc = ((Integer)v.get(1)).intValue();
34
                spline.setScenario(sc);
35
                v = DwgUtil.getBitShort(data, bitPos);
36
                bitPos = ((Integer)v.get(0)).intValue();
37
                int deg = ((Integer)v.get(1)).intValue();
38
                spline.setDegree(deg);
39
                int knotsNumber = 0;
40
                int controlPointsNumber = 0;
41
                int fitPointsNumber = 0;
42
                boolean weight = false;
43
                if (sc==2) {
44
                        v = DwgUtil.getBitDouble(data, bitPos);
45
                        bitPos = ((Integer)v.get(0)).intValue();
46
                        double ft = ((Double)v.get(1)).doubleValue();
47
                        spline.setFitTolerance(ft);
48
                        v = DwgUtil.getBitDouble(data, bitPos);
49
                        bitPos = ((Integer)v.get(0)).intValue();
50
                        double x = ((Double)v.get(1)).doubleValue();
51
                        v = DwgUtil.getBitDouble(data, bitPos);
52
                        bitPos = ((Integer)v.get(0)).intValue();
53
                        double y = ((Double)v.get(1)).doubleValue();
54
                        v = DwgUtil.getBitDouble(data, bitPos);
55
                        bitPos = ((Integer)v.get(0)).intValue();
56
                        double z = ((Double)v.get(1)).doubleValue();
57
                        double[] coord = new double[]{x, y, z};
58
                        spline.setBeginTanVector(coord);
59
                        v = DwgUtil.getBitDouble(data, bitPos);
60
                        bitPos = ((Integer)v.get(0)).intValue();
61
                        x = ((Double)v.get(1)).doubleValue();
62
                        v = DwgUtil.getBitDouble(data, bitPos);
63
                        bitPos = ((Integer)v.get(0)).intValue();
64
                        y = ((Double)v.get(1)).doubleValue();
65
                        v = DwgUtil.getBitDouble(data, bitPos);
66
                        bitPos = ((Integer)v.get(0)).intValue();
67
                        z = ((Double)v.get(1)).doubleValue();
68
                        coord = new double[]{x, y, z};
69
                        spline.setEndTanVector(coord);
70
                        v = DwgUtil.getBitShort(data, bitPos);
71
                        bitPos = ((Integer)v.get(0)).intValue();
72
                        fitPointsNumber = ((Integer)v.get(1)).intValue();
73
                } else if (sc==1) {
74
                        v = DwgUtil.testBit(data, bitPos);
75
                        bitPos = ((Integer)v.get(0)).intValue();
76
                        boolean rat = ((Boolean)v.get(1)).booleanValue();
77
                        spline.setRational(rat);
78
                        v = DwgUtil.testBit(data, bitPos);
79
                        bitPos = ((Integer)v.get(0)).intValue();
80
                        boolean closed = ((Boolean)v.get(1)).booleanValue();
81
                        spline.setClosed(closed);
82
                        v = DwgUtil.testBit(data, bitPos);
83
                        bitPos = ((Integer)v.get(0)).intValue();
84
                        boolean per = ((Boolean)v.get(1)).booleanValue();
85
                        spline.setPeriodic(per);
86
                        v = DwgUtil.getBitDouble(data, bitPos);
87
                        bitPos = ((Integer)v.get(0)).intValue();
88
                        double ktol = ((Double)v.get(1)).doubleValue();
89
                        spline.setKnotTolerance(ktol);
90
                        v = DwgUtil.getBitDouble(data, bitPos);
91
                        bitPos = ((Integer)v.get(0)).intValue();
92
                        double ctol = ((Double)v.get(1)).doubleValue();
93
                        spline.setControlTolerance(ctol);
94
                        v = DwgUtil.getBitLong(data, bitPos);
95
                        bitPos = ((Integer)v.get(0)).intValue();
96
                        knotsNumber = ((Integer)v.get(1)).intValue();
97
                        v = DwgUtil.getBitLong(data, bitPos);
98
                        bitPos = ((Integer)v.get(0)).intValue();
99
                        controlPointsNumber = ((Integer)v.get(1)).intValue();
100
                        v = DwgUtil.testBit(data, bitPos);
101
                        bitPos = ((Integer)v.get(0)).intValue();
102
                        weight = ((Boolean)v.get(1)).booleanValue();
103
                } else {
104
                        System.out.println("ERROR: Escenario desconocido");
105
                }
106
                if (knotsNumber>0) {
107
                        double[] knotpts = new double[knotsNumber];
108
                        for (int i=0;i<knotsNumber;i++) {
109
                                v = DwgUtil.getBitDouble(data, bitPos);
110
                                bitPos = ((Integer)v.get(0)).intValue();
111
                                knotpts[i] = ((Double)v.get(1)).doubleValue();
112
                        }
113
                        spline.setKnotPoints(knotpts);
114
                }
115
                if (controlPointsNumber>0) {
116
                        // Si el n?mero de weights no coincide con el de ctrlpts habr? problemas ...
117
                        double[][] ctrlpts = new double[controlPointsNumber][3];
118
                        double[] weights = new double[controlPointsNumber];
119
                        for (int i=0;i<controlPointsNumber;i++) {
120
                                v = DwgUtil.getBitDouble(data, bitPos);
121
                                bitPos = ((Integer)v.get(0)).intValue();
122
                                double x = ((Double)v.get(1)).doubleValue();
123
                                v = DwgUtil.getBitDouble(data, bitPos);
124
                                bitPos = ((Integer)v.get(0)).intValue();
125
                                double y = ((Double)v.get(1)).doubleValue();
126
                                v = DwgUtil.getBitDouble(data, bitPos);
127
                                bitPos = ((Integer)v.get(0)).intValue();
128
                                double z = ((Double)v.get(1)).doubleValue();
129
                                //double[] coord = new double[]{x, y, z};
130
                                ctrlpts[i][0] = x;
131
                                ctrlpts[i][1] = y;
132
                                ctrlpts[i][2] = z;
133
                                if (weight) {
134
                                        v = DwgUtil.getBitDouble(data, bitPos);
135
                                        bitPos = ((Integer)v.get(0)).intValue();
136
                                        weights[i] = ((Double)v.get(1)).doubleValue();
137
                                }
138
                        }
139
                        spline.setControlPoints(ctrlpts);
140
                        if (weight) {
141
                                spline.setWeights(weights);
142
                        }
143
                }
144
                if (fitPointsNumber>0) {
145
                        double[][] fitpts = new double[fitPointsNumber][3];
146
                        for (int i=0;i<fitPointsNumber;i++) {
147
                                v = DwgUtil.getBitDouble(data, bitPos);
148
                                bitPos = ((Integer)v.get(0)).intValue();
149
                                double x = ((Double)v.get(1)).doubleValue();
150
                                v = DwgUtil.getBitDouble(data, bitPos);
151
                                bitPos = ((Integer)v.get(0)).intValue();
152
                                double y = ((Double)v.get(1)).doubleValue();
153
                                v = DwgUtil.getBitDouble(data, bitPos);
154
                                bitPos = ((Integer)v.get(0)).intValue();
155
                                double z = ((Double)v.get(1)).doubleValue();
156
                                fitpts[i][0] = x;
157
                                fitpts[i][1] = y;
158
                                fitpts[i][2] = z;
159
                        }
160
                        spline.setFitPoints(fitpts);
161
                }
162
                bitPos = headTailReader.readObjectTailer(data, bitPos, spline);
163
        }
164

    
165

    
166
}