View Javadoc
1   /*
2    * Copyright (C) 2012 Alberto Irurueta Carro (alberto@irurueta.com)
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *         http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package com.irurueta.geometry.io;
17  
18  import java.io.IOException;
19  
20  public class Chunk3DS {
21      public static final int NULL_CHUNK = 0x0000;
22      public static final int M3DMAGIC = 0x4D4D;
23      public static final int SMAGIC = 0x2D2D;
24      public static final int LMAGIC = 0x2D3D;
25      public static final int MLIBMAGIC = 0x3DAA;
26      public static final int MATMAGIC = 0x3DFF;
27      public static final int CMAGIC = 0xC23D;
28      public static final int M3D_VERSION = 0x0002;
29      public static final int M3D_KFVERSION = 0x0005;
30  
31      public static final int COLOR_F = 0x0010;
32      public static final int COLOR_24 = 0x0011;
33      public static final int LIN_COLOR_24 = 0x0012;
34      public static final int LIN_COLOR_F = 0x0013;
35      public static final int INT_PERCENTAGE = 0x0030;
36      public static final int FLOAT_PERCENTAGE = 0x0031;
37  
38      public static final int MDATA = 0x3D3D;
39      public static final int MESH_VERSION = 0x3D3E;
40      public static final int MASTER_SCALE = 0x0100;
41      public static final int LO_SHADOW_BIAS = 0x1400;
42      public static final int HI_SHADOW_BIAS = 0x1410;
43      public static final int SHADOW_MAP_SIZE = 0x1420;
44      public static final int SHADOW_SAMPLES = 0x1430;
45      public static final int SHADOW_RANGE = 0x1440;
46      public static final int SHADOW_FILTER = 0x1450;
47      public static final int RAY_BIAS = 0x1460;
48      public static final int O_CONSTS = 0x1500;
49      public static final int AMBIENT_LIGHT = 0x2100;
50      public static final int BIT_MAP = 0x1100;
51      public static final int SOLID_BGND = 0x1200;
52      public static final int V_GRADIENT = 0x1300;
53      public static final int USE_BIT_MAP = 0x1101;
54      public static final int USE_SOLID_BGND = 0x1201;
55      public static final int USE_V_GRADIENT = 0x1301;
56      public static final int FOG = 0x2200;
57      public static final int FOG_BGND = 0x2210;
58      public static final int LAYER_FOG = 0x2302;
59      public static final int DISTANCE_CUE = 0x2300;
60      public static final int DCUE_BGND = 0x2310;
61      public static final int USE_FOG = 0x2201;
62      public static final int USE_LAYER_FOG = 0x2303;
63      public static final int USE_DISTANCE_CUE = 0x2301;
64  
65      public static final int MAT_ENTRY = 0xAFFF;
66      public static final int MAT_NAME = 0xA000;
67      public static final int MAT_AMBIENT = 0xA010;
68      public static final int MAT_DIFFUSE = 0xA020;
69      public static final int MAT_SPECULAR = 0xA030;
70      public static final int MAT_SHININESS = 0xA040;
71      public static final int MAT_SHIN2PCT = 0xA041;
72      public static final int MAT_TRANSPARENCY = 0xA050;
73      public static final int MAT_XPFALL = 0xA052;
74      public static final int MAT_USE_XPFALL = 0xA240;
75      public static final int MAT_REFBLUR = 0xA053;
76      public static final int MAT_SHADING = 0xA100;
77      public static final int MAT_USE_REFBLUR = 0xA250;
78      public static final int MAT_SELF_ILLUM = 0xA080;
79      public static final int MAT_TWO_SIDE = 0xA081;
80      public static final int MAT_DECAL = 0xA082;
81      public static final int MAT_ADDITIVE = 0xA083;
82      public static final int MAT_SELF_ILPCT = 0xA084;
83      public static final int MAT_WIRE = 0xA085;
84      public static final int MAT_FACEMAP = 0xA088;
85      public static final int MAT_PHONGSOFT = 0xA08C;
86      public static final int MAT_WIREABS = 0xA08E;
87      public static final int MAT_WIRE_SIZE = 0xA087;
88      public static final int MAT_TEXMAP = 0xA200;
89      public static final int MAT_SXP_TEXT_DATA = 0xA320;
90      public static final int MAT_TEXMASK = 0xA33E;
91      public static final int MAT_SXP_TEXTMASK_DATA = 0xA32A;
92      public static final int MAT_TEX2MAP = 0xA33A;
93      public static final int MAT_SXP_TEXT2_DATA = 0xA321;
94      public static final int MAT_TEX2MASK = 0xA340;
95      public static final int MAT_SXP_TEXT2MASK_DATA = 0xA32C;
96      public static final int MAT_OPACMAP = 0xA210;
97      public static final int MAT_SXP_OPAC_DATA = 0xA322;
98      public static final int MAT_OPACMASK = 0xA342;
99      public static final int MAT_SXP_OPACMASK_DATA = 0xA32E;
100     public static final int MAT_BUMPMAP = 0xA230;
101     public static final int MAT_SXP_BUMP_DATA = 0xA324;
102     public static final int MAT_BUMPMASK = 0xA344;
103     public static final int MAT_SXP_BUMPMASK_DATA = 0xA330;
104     public static final int MAT_SPECMAP = 0xA204;
105     public static final int MAT_SXP_SPEC_DATA = 0xA325;
106     public static final int MAT_SPECMASK = 0xA348;
107     public static final int MAT_SXP_SPECMASK_DATA = 0xA332;
108     public static final int MAT_SHINMAP = 0xA33C;
109     public static final int MAT_SXP_SHIN_DATA = 0xA326;
110     public static final int MAT_SHINMASK = 0xA346;
111     public static final int MAT_SXP_SHINMASK_DATA = 0xA334;
112     public static final int MAT_SELFIMAP = 0xA33D;
113     public static final int MAT_SXP_SELFI_DATA = 0xA328;
114     public static final int MAT_SELFIMASK = 0xA34A;
115     public static final int MAT_SXP_SELFIMASK_DATA = 0xA336;
116     public static final int MAT_REFLMAP = 0xA220;
117     public static final int MAT_REFLMASK = 0xA34C;
118     public static final int MAT_SXP_REFLMASK_DATA = 0xA338;
119     public static final int MAT_ACUBIC = 0xA310;
120     public static final int MAT_MAPNAME = 0xA300;
121     public static final int MAT_MAP_TILING = 0xA351;
122     public static final int MAT_MAP_TEXBLUR = 0xA353;
123     public static final int MAT_MAP_USCALE = 0xA354;
124     public static final int MAT_MAP_VSCALE = 0xA356;
125     public static final int MAT_MAP_UOFFSET = 0xA358;
126     public static final int MAT_MAP_VOFFSET = 0xA35A;
127     public static final int MAT_MAP_ANG = 0xA35C;
128     public static final int MAT_MAP_COL1 = 0xA360;
129     public static final int MAT_MAP_COL2 = 0xA362;
130     public static final int MAT_MAP_RCOL = 0xA364;
131     public static final int MAT_MAP_GCOL = 0xA366;
132     public static final int MAT_MAP_BCOL = 0xA368;
133 
134     public static final int NAMED_OBJECT = 0x4000;
135     public static final int N_DIRECT_LIGHT = 0x4600;
136     public static final int DL_OFF = 0x4620;
137     public static final int DL_OUTER_RANGE = 0x465A;
138     public static final int DL_INNER_RANGE = 0x4659;
139     public static final int DL_MULTIPLIER = 0x465B;
140     public static final int DL_EXCLUDE = 0x4654;
141     public static final int DL_ATTENUATE = 0x4625;
142     public static final int DL_SPOTLIGHT = 0x4610;
143     public static final int DL_SPOT_ROLL = 0x4656;
144     public static final int DL_SHADOWED = 0x4630;
145     public static final int DL_LOCAL_SHADOW2 = 0x4641;
146     public static final int DL_SEE_CONE = 0x4650;
147     public static final int DL_SPOT_RECTANGULAR = 0x4651;
148     public static final int DL_SPOT_ASPECT = 0x4657;
149     public static final int DL_SPOT_PROJECTOR = 0x4653;
150     public static final int DL_SPOT_OVERSHOOT = 0x4652;
151     public static final int DL_RAY_BIAS = 0x4658;
152     public static final int DL_RAYSHAD = 0x4627;
153     public static final int N_CAMERA = 0x4700;
154     public static final int CAM_SEE_CONE = 0x4710;
155     public static final int CAM_RANGES = 0x4720;
156     public static final int OBJ_HIDDEN = 0x4010;
157     public static final int OBJ_VIS_LOFTER = 0x4011;
158     public static final int OBJ_DOESNT_CAST = 0x4012;
159     public static final int OBJ_DONT_RCVSHADOW = 0x4017;
160     public static final int OBJ_MATTE = 0x4013;
161     public static final int OBJ_FAST = 0x4014;
162     public static final int OBJ_PROCEDURAL = 0x4015;
163     public static final int OBJ_FROZEN = 0x4016;
164     public static final int N_TRI_OBJECT = 0x4100;
165     public static final int POINT_ARRAY = 0x4110;
166     public static final int POINT_FLAG_ARRAY = 0x4111;
167     public static final int FACE_ARRAY = 0x4120;
168     public static final int MSH_MAT_GROUP = 0x4130;
169     public static final int SMOOTH_GROUP = 0x4150;
170     public static final int MSH_BOXMAP = 0x4190;
171     public static final int TEX_VERTS = 0x4140;
172     public static final int MESH_MATRIX = 0x4160;
173     public static final int MESH_COLOR = 0x4165;
174     public static final int MESH_TEXTURE_INFO = 0x4170;
175 
176     public static final int KFDATA = 0xB000;
177     public static final int KFHDR = 0xB00A;
178     public static final int KFSEG = 0xB008;
179     public static final int KFCURTIME = 0xB009;
180     public static final int AMBIENT_NODE_TAG = 0xB001;
181     public static final int OBJECT_NODE_TAG = 0xB002;
182     public static final int CAMERA_NODE_TAG = 0xB003;
183     public static final int TARGET_NODE_TAG = 0xB004;
184     public static final int LIGHT_NODE_TAG = 0xB005;
185     public static final int L_TARGET_NODE_TAG = 0xB006;
186     public static final int SPOTLIGHT_NODE_TAG = 0xB007;
187     public static final int NODE_ID = 0xB030;
188     public static final int NODE_HDR = 0xB010;
189     public static final int PIVOT = 0xB013;
190     public static final int INSTANCE_NAME = 0xB011;
191     public static final int MORPH_SMOOTH = 0xB015;
192     public static final int BOUNDBOX = 0xB014;
193     public static final int POS_TRACK_TAG = 0xB020;
194     public static final int COL_TRACK_TAG = 0xB025;
195     public static final int ROT_TRACK_TAG = 0xB021;
196     public static final int SCL_TRACK_TAG = 0xB022;
197     public static final int MORPH_TRACK_TAG = 0xB026;
198     public static final int FOV_TRACK_TAG = 0xB023;
199     public static final int ROLL_TRACK_TAG = 0xB024;
200     public static final int HOT_TRACK_TAG = 0xB027;
201     public static final int FALL_TRACK_TAG = 0xB028;
202     public static final int HIDE_TRACK_TAG = 0xB029;
203 
204     public static final int POLY_2D = 0x5000;
205     public static final int SHAPE_OK = 0x5010;
206     public static final int SHAPE_NOT_OK = 0x5011;
207     public static final int SHAPE_HOOK = 0x5020;
208     public static final int PATH_3D = 0x6000;
209     public static final int PATH_MATRIX = 0x6005;
210     public static final int SHAPE_2D = 0x6010;
211     public static final int M_SCALE = 0x6020;
212     public static final int M_TWIST = 0x6030;
213     public static final int M_TEETER = 0x6040;
214     public static final int M_FIT = 0x6050;
215     public static final int M_BEVEL = 0x6060;
216     public static final int XZ_CURVE = 0x6070;
217     public static final int YZ_CURVE = 0x6080;
218     public static final int INTERPCT = 0x6090;
219     public static final int DEFORM_LIMIT = 0x60A0;
220 
221     public static final int USE_CONTOUR = 0x6100;
222     public static final int USE_TWEEN = 0x6110;
223     public static final int USE_SCALE = 0x6120;
224     public static final int USE_TWIST = 0x6130;
225     public static final int USE_TEETER = 0x6140;
226     public static final int USE_FIT = 0x6150;
227     public static final int USE_BEVEL = 0x6160;
228 
229     public static final int DEFAULT_VIEW = 0x3000;
230     public static final int VIEW_TOP = 0x3010;
231     public static final int VIEW_BOTTOM = 0x3020;
232     public static final int VIEW_LEFT = 0x3030;
233     public static final int VIEW_RIGHT = 0x3040;
234     public static final int VIEW_FRONT = 0x3050;
235     public static final int VIEW_BACK = 0x3060;
236     public static final int VIEW_USER = 0x3070;
237     public static final int VIEW_CAMERA = 0x3080;
238     public static final int VIEW_WINDOW = 0x3090;
239 
240     public static final int VIEWPORT_LAYOUT_OLD = 0x7000;
241     public static final int VIEWPORT_DATA_OLD = 0x7010;
242     public static final int VIEWPORT_LAYOUT = 0x7001;
243     public static final int VIEWPORT_DATA = 0x7011;
244     public static final int VIEWPORT_DATA_3 = 0x7012;
245     public static final int VIEWPORT_SIZE = 0x7020;
246     public static final int NETWORK_VIEW = 0x7030;
247 
248     // uint16
249     private int chunkId;
250 
251     // uint32
252     private long size;
253 
254     private long startStreamPosition;
255     private long endStreamPosition;
256 
257     public Chunk3DS() {
258         chunkId = -1;
259         size = startStreamPosition = endStreamPosition = -1;
260     }
261 
262     public int getChunkId() {
263         return chunkId;
264     }
265 
266     public void setChunkId(final int chunkId) {
267         this.chunkId = chunkId;
268     }
269 
270     public boolean isChunkIdAvailable() {
271         return chunkId >= 0;
272     }
273 
274     public long getSize() {
275         return size;
276     }
277 
278     public void setSize(final long size) {
279         this.size = size;
280     }
281 
282     public boolean isSizeAvailable() {
283         return size >= 0;
284     }
285 
286     public long getStartStreamPosition() {
287         return startStreamPosition;
288     }
289 
290     public void setStartStreamPosition(final long startStreamPosition) {
291         this.startStreamPosition = startStreamPosition;
292     }
293 
294     public boolean isStartStreamPositionAvailable() {
295         return startStreamPosition >= 0;
296     }
297 
298     public long getEndStreamPosition() {
299         return endStreamPosition;
300     }
301 
302     public void setEndStreamPosition(final long endStreamPosition) {
303         this.endStreamPosition = endStreamPosition;
304     }
305 
306     public boolean isEndStreamPositionAvailable() {
307         return endStreamPosition >= 0;
308     }
309 
310     public static Chunk3DS load(final AbstractFileReaderAndWriter reader) throws IOException {
311         final var chunk = new Chunk3DS();
312         chunk.startStreamPosition = reader.getPosition();
313         chunk.chunkId = reader.readUnsignedShort(EndianType.LITTLE_ENDIAN_TYPE);
314         chunk.size = reader.readUnsignedInt(EndianType.LITTLE_ENDIAN_TYPE);
315         chunk.endStreamPosition = chunk.startStreamPosition + chunk.size;
316 
317         return chunk;
318     }
319 }