Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
cb91e095
Commit
cb91e095
authored
Aug 16, 2014
by
Wayne Stambaugh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Coding policy fixes and comment out debugging output.
parent
5f70ec63
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
394 additions
and
369 deletions
+394
-369
vrml_aux.cpp
3d-viewer/vrml_aux.cpp
+63
-56
vrml_v1_modelparser.cpp
3d-viewer/vrml_v1_modelparser.cpp
+84
-78
vrml_v2_modelparser.cpp
3d-viewer/vrml_v2_modelparser.cpp
+145
-140
vrmlmodelparser.cpp
3d-viewer/vrmlmodelparser.cpp
+8
-7
x3dmodelparser.cpp
3d-viewer/x3dmodelparser.cpp
+94
-88
No files found.
3d-viewer/vrml_aux.cpp
View file @
cb91e095
...
@@ -28,65 +28,63 @@
...
@@ -28,65 +28,63 @@
#include "vrml_aux.h"
#include "vrml_aux.h"
char
SkipGetChar
(
FILE
*
File
)
char
SkipGetChar
(
FILE
*
File
)
{
{
char
c
;
char
c
;
bool
re_parse
;
bool
re_parse
;
if
(
(
c
=
fgetc
(
File
)
)
==
EOF
)
if
(
(
c
=
fgetc
(
File
)
)
==
EOF
)
{
{
//DBG( printf( "EOF\n" ) );
//
DBG( printf( "EOF\n" ) );
return
EOF
;
return
EOF
;
}
}
//DBG( printf( "c %c 0x%02X\n", c, c ) );
//
DBG( printf( "c %c 0x%02X\n", c, c ) );
do
do
{
{
re_parse
=
false
;
re_parse
=
false
;
if
((
c
==
' '
)
||
(
c
==
'\t'
)
||
(
c
==
'{'
)
||
(
c
==
'['
)
)
if
(
(
c
==
' '
)
||
(
c
==
'\t'
)
||
(
c
==
'{'
)
||
(
c
==
'['
)
)
{
{
//DBG( printf( "Skipping space \\t or { or [\n" ) );
//
DBG( printf( "Skipping space \\t or { or [\n" ) );
do
do
{
{
if
(
(
c
=
fgetc
(
File
)
)
==
EOF
)
if
(
(
c
=
fgetc
(
File
)
)
==
EOF
)
{
{
//
DBG( printf( "EOF\n" ) );
//
DBG( printf( "EOF\n" ) );
return
EOF
;
return
EOF
;
}
}
}
}
while
(
(
c
==
' '
)
||
(
c
==
'\t'
)
||
(
c
==
'{'
)
||
(
c
==
'['
)
);
while
((
c
==
' '
)
||
(
c
==
'\t'
)
||
(
c
==
'{'
)
||
(
c
==
'['
));
}
}
if
((
c
==
'#'
)
||
(
c
==
'\n'
)
||
(
c
==
'\r'
)
||
(
c
==
0
)
||
(
c
==
','
)
)
if
(
(
c
==
'#'
)
||
(
c
==
'\n'
)
||
(
c
==
'\r'
)
||
(
c
==
0
)
||
(
c
==
','
)
)
{
{
if
(
c
==
'#'
)
if
(
c
==
'#'
)
{
{
//DBG( printf( "Skipping # \\n or \\r or 0, 0x%02X\n", c ) );
//
DBG( printf( "Skipping # \\n or \\r or 0, 0x%02X\n", c ) );
do
do
{
{
if
(
(
c
=
fgetc
(
File
)
)
==
EOF
)
if
(
(
c
=
fgetc
(
File
)
)
==
EOF
)
{
{
//DBG( printf( "EOF\n" ) );
//
DBG( printf( "EOF\n" ) );
return
EOF
;
return
EOF
;
}
}
}
}
while
(
(
c
!=
'\n'
)
&&
(
c
!=
'\r'
)
&&
(
c
!=
0
)
&&
(
c
!=
','
)
);
while
((
c
!=
'\n'
)
&&
(
c
!=
'\r'
)
&&
(
c
!=
0
)
&&
(
c
!=
','
));
}
}
else
else
{
{
if
(
(
c
=
fgetc
(
File
)
)
==
EOF
)
if
(
(
c
=
fgetc
(
File
)
)
==
EOF
)
{
{
//DBG( printf( "EOF\n" ) );
//
DBG( printf( "EOF\n" ) );
return
EOF
;
return
EOF
;
}
}
}
}
re_parse
=
true
;
re_parse
=
true
;
}
}
}
while
(
re_parse
==
true
);
}
while
(
re_parse
==
true
);
return
c
;
return
c
;
}
}
...
@@ -94,35 +92,38 @@ char SkipGetChar ( FILE* File )
...
@@ -94,35 +92,38 @@ char SkipGetChar ( FILE* File )
char
*
GetNextTag
(
FILE
*
File
,
char
*
tag
)
char
*
GetNextTag
(
FILE
*
File
,
char
*
tag
)
{
{
char
c
=
SkipGetChar
(
File
);
char
c
=
SkipGetChar
(
File
);
if
(
c
==
EOF
)
if
(
c
==
EOF
)
{
{
return
NULL
;
return
NULL
;
}
}
tag
[
0
]
=
c
;
tag
[
1
]
=
0
;
tag
[
0
]
=
c
;
//DBG( printf( "tag[0] %c\n", tag[0] ) );
tag
[
1
]
=
0
;
// DBG( printf( "tag[0] %c\n", tag[0] ) );
if
(
(
c
!=
'}'
)
&&
(
c
!=
']'
)
)
if
(
(
c
!=
'}'
)
&&
(
c
!=
']'
)
)
{
{
char
*
dst
=
&
tag
[
1
];
char
*
dst
=
&
tag
[
1
];
while
(
fscanf
(
File
,
"%c"
,
dst
)
)
while
(
fscanf
(
File
,
"%c"
,
dst
)
)
{
{
if
(
(
*
dst
==
' '
)
||
(
*
dst
==
'['
)
||
(
*
dst
==
'{'
)
||
if
(
(
*
dst
==
' '
)
||
(
*
dst
==
'['
)
||
(
*
dst
==
'{'
)
(
*
dst
==
'\t'
)
||
(
*
dst
==
'\n'
)
||
(
*
dst
==
'\r'
)
)
||
(
*
dst
==
'\t'
)
||
(
*
dst
==
'\n'
)
||
(
*
dst
==
'\r'
)
)
{
{
*
dst
=
0
;
*
dst
=
0
;
break
;
break
;
}
}
dst
++
;
dst
++
;
}
}
//DBG( printf( "tag %s\n", tag ) );
//
DBG( printf( "tag %s\n", tag ) );
c
=
SkipGetChar
(
File
);
c
=
SkipGetChar
(
File
);
if
(
c
!=
EOF
)
if
(
c
!=
EOF
)
{
{
// Puts again the read char in the buffer
// Puts again the read char in the buffer
ungetc
(
c
,
File
);
ungetc
(
c
,
File
);
...
@@ -133,40 +134,44 @@ char* GetNextTag( FILE* File, char* tag )
...
@@ -133,40 +134,44 @@ char* GetNextTag( FILE* File, char* tag )
}
}
int
read_NotImplemented
(
FILE
*
File
,
char
closeChar
)
int
read_NotImplemented
(
FILE
*
File
,
char
closeChar
)
{
{
char
c
;
char
c
;
//DBG( printf( "look for %c\n", closeChar) );
while
(
(
c
=
fgetc
(
File
))
!=
EOF
)
// DBG( printf( "look for %c\n", closeChar) );
while
(
(
c
=
fgetc
(
File
)
)
!=
EOF
)
{
{
if
(
c
==
'{'
)
if
(
c
==
'{'
)
{
{
//DBG( printf( "{\n") );
//
DBG( printf( "{\n") );
read_NotImplemented
(
File
,
'}'
);
read_NotImplemented
(
File
,
'}'
);
}
else
if
(
c
==
'['
)
}
else
if
(
c
==
'['
)
{
{
//DBG( printf( "[\n") );
//
DBG( printf( "[\n") );
read_NotImplemented
(
File
,
']'
);
read_NotImplemented
(
File
,
']'
);
}
else
if
(
c
==
closeChar
)
}
else
if
(
c
==
closeChar
)
{
{
//DBG( printf( "%c\n", closeChar) );
//
DBG( printf( "%c\n", closeChar) );
return
0
;
return
0
;
}
}
}
}
DBG
(
printf
(
" NotImplemented failed
\n
"
)
);
//
DBG( printf( " NotImplemented failed\n" ) );
return
-
1
;
return
-
1
;
}
}
int
parseVertexList
(
FILE
*
File
,
std
::
vector
<
glm
::
vec3
>
&
dst_vector
)
int
parseVertexList
(
FILE
*
File
,
std
::
vector
<
glm
::
vec3
>&
dst_vector
)
{
{
//DBG( printf( " parseVertexList\n" ) );
//
DBG( printf( " parseVertexList\n" ) );
dst_vector
.
clear
();
dst_vector
.
clear
();
glm
::
vec3
vertex
;
glm
::
vec3
vertex
;
while
(
parseVertex
(
File
,
vertex
)
==
3
)
while
(
parseVertex
(
File
,
vertex
)
==
3
)
{
{
dst_vector
.
push_back
(
vertex
);
dst_vector
.
push_back
(
vertex
);
}
}
...
@@ -175,32 +180,34 @@ int parseVertexList( FILE* File, std::vector< glm::vec3 > &dst_vector)
...
@@ -175,32 +180,34 @@ int parseVertexList( FILE* File, std::vector< glm::vec3 > &dst_vector)
}
}
int
parseVertex
(
FILE
*
File
,
glm
::
vec3
&
dst_vertex
)
int
parseVertex
(
FILE
*
File
,
glm
::
vec3
&
dst_vertex
)
{
{
float
a
,
b
,
c
;
float
a
,
b
,
c
;
int
ret
=
fscanf
(
File
,
"%e %e %e"
,
&
a
,
&
b
,
&
c
);
int
ret
=
fscanf
(
File
,
"%e %e %e"
,
&
a
,
&
b
,
&
c
);
dst_vertex
.
x
=
a
;
dst_vertex
.
x
=
a
;
dst_vertex
.
y
=
b
;
dst_vertex
.
y
=
b
;
dst_vertex
.
z
=
c
;
dst_vertex
.
z
=
c
;
char
s
=
SkipGetChar
(
File
);
char
s
=
SkipGetChar
(
File
);
if
(
s
!=
EOF
)
if
(
s
!=
EOF
)
{
{
// Puts again the read char in the buffer
// Puts again the read char in the buffer
ungetc
(
s
,
File
);
ungetc
(
s
,
File
);
}
}
//DBG( printf( "ret%d(%.9f,%.9f,%.9f)", ret, a,b,c) );
// DBG( printf( "ret%d(%.9f,%.9f,%.9f)", ret, a,b,c) );
return
ret
;
return
ret
;
}
}
int
parseFloat
(
FILE
*
File
,
float
*
dst_float
)
int
parseFloat
(
FILE
*
File
,
float
*
dst_float
)
{
{
float
value
;
float
value
;
int
ret
=
fscanf
(
File
,
"%e"
,
&
value
);
int
ret
=
fscanf
(
File
,
"%e"
,
&
value
);
*
dst_float
=
value
;
*
dst_float
=
value
;
return
ret
;
return
ret
;
...
...
3d-viewer/vrml_v1_modelparser.cpp
View file @
cb91e095
...
@@ -40,7 +40,7 @@ VRML1_MODEL_PARSER::VRML1_MODEL_PARSER( S3D_MASTER* aMaster ) :
...
@@ -40,7 +40,7 @@ VRML1_MODEL_PARSER::VRML1_MODEL_PARSER( S3D_MASTER* aMaster ) :
S3D_MODEL_PARSER
(
aMaster
)
S3D_MODEL_PARSER
(
aMaster
)
{
{
m_model
=
NULL
;
m_model
=
NULL
;
m_file
=
NULL
;
m_file
=
NULL
;
}
}
...
@@ -48,16 +48,16 @@ VRML1_MODEL_PARSER::~VRML1_MODEL_PARSER()
...
@@ -48,16 +48,16 @@ VRML1_MODEL_PARSER::~VRML1_MODEL_PARSER()
{
{
for
(
unsigned
int
idx
=
0
;
idx
<
childs
.
size
();
idx
++
)
for
(
unsigned
int
idx
=
0
;
idx
<
childs
.
size
();
idx
++
)
{
{
delete
childs
[
idx
];
delete
childs
[
idx
];
}
}
}
}
void
VRML1_MODEL_PARSER
::
Load
(
const
wxString
aFilename
)
void
VRML1_MODEL_PARSER
::
Load
(
const
wxString
aFilename
)
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( "Load %s\n", static_cast<const char*>(aFilename.mb_str()) ) );
//
DBG( printf( "Load %s\n", static_cast<const char*>(aFilename.mb_str()) ) );
m_file
=
wxFopen
(
aFilename
,
wxT
(
"rt"
)
);
m_file
=
wxFopen
(
aFilename
,
wxT
(
"rt"
)
);
if
(
m_file
==
NULL
)
if
(
m_file
==
NULL
)
...
@@ -71,19 +71,22 @@ void VRML1_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -71,19 +71,22 @@ void VRML1_MODEL_PARSER::Load( const wxString aFilename )
float
vrmlunits_to_3Dunits
=
g_Parm_3D_Visu
.
m_BiuTo3Dunits
*
UNITS3D_TO_UNITSPCB
;
float
vrmlunits_to_3Dunits
=
g_Parm_3D_Visu
.
m_BiuTo3Dunits
*
UNITS3D_TO_UNITSPCB
;
glScalef
(
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
);
glScalef
(
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
);
glm
::
vec3
matScale
(
GetMaster
()
->
m_MatScale
.
x
,
GetMaster
()
->
m_MatScale
.
y
,
GetMaster
()
->
m_MatScale
.
z
);
glm
::
vec3
matScale
(
GetMaster
()
->
m_MatScale
.
x
,
GetMaster
()
->
m_MatScale
.
y
,
glm
::
vec3
matRot
(
GetMaster
()
->
m_MatRotation
.
x
,
GetMaster
()
->
m_MatRotation
.
y
,
GetMaster
()
->
m_MatRotation
.
z
);
GetMaster
()
->
m_MatScale
.
z
);
glm
::
vec3
matPos
(
GetMaster
()
->
m_MatPosition
.
x
,
GetMaster
()
->
m_MatPosition
.
y
,
GetMaster
()
->
m_MatPosition
.
z
);
glm
::
vec3
matRot
(
GetMaster
()
->
m_MatRotation
.
x
,
GetMaster
()
->
m_MatRotation
.
y
,
GetMaster
()
->
m_MatRotation
.
z
);
glm
::
vec3
matPos
(
GetMaster
()
->
m_MatPosition
.
x
,
GetMaster
()
->
m_MatPosition
.
y
,
GetMaster
()
->
m_MatPosition
.
z
);
#define SCALE_3D_CONV (
(IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB
)
#define SCALE_3D_CONV (
(IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB
)
//glPushMatrix();
//
glPushMatrix();
glTranslatef
(
matPos
.
x
*
SCALE_3D_CONV
,
matPos
.
y
*
SCALE_3D_CONV
,
matPos
.
z
*
SCALE_3D_CONV
);
glTranslatef
(
matPos
.
x
*
SCALE_3D_CONV
,
matPos
.
y
*
SCALE_3D_CONV
,
matPos
.
z
*
SCALE_3D_CONV
);
glRotatef
(
-
matRot
.
z
,
0.0
f
,
0.0
f
,
1.0
f
);
glRotatef
(
-
matRot
.
z
,
0.0
f
,
0.0
f
,
1.0
f
);
glRotatef
(
-
matRot
.
y
,
0.0
f
,
1.0
f
,
0.0
f
);
glRotatef
(
-
matRot
.
y
,
0.0
f
,
1.0
f
,
0.0
f
);
glRotatef
(
-
matRot
.
x
,
1.0
f
,
0.0
f
,
0.0
f
);
glRotatef
(
-
matRot
.
x
,
1.0
f
,
0.0
f
,
0.0
f
);
glScalef
(
matScale
.
x
,
matScale
.
y
,
matScale
.
z
);
glScalef
(
matScale
.
x
,
matScale
.
y
,
matScale
.
z
);
...
@@ -94,8 +97,7 @@ void VRML1_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -94,8 +97,7 @@ void VRML1_MODEL_PARSER::Load( const wxString aFilename )
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
'}'
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
'}'
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
...
@@ -112,7 +114,7 @@ void VRML1_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -112,7 +114,7 @@ void VRML1_MODEL_PARSER::Load( const wxString aFilename )
SetLocaleTo_Default
();
// revert to the current locale
SetLocaleTo_Default
();
// revert to the current locale
//DBG( printf( "chils size:%lu\n", childs.size() ) );
//
DBG( printf( "chils size:%lu\n", childs.size() ) );
if
(
GetMaster
()
->
IsOpenGlAllowed
()
)
if
(
GetMaster
()
->
IsOpenGlAllowed
()
)
{
{
...
@@ -123,18 +125,18 @@ void VRML1_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -123,18 +125,18 @@ void VRML1_MODEL_PARSER::Load( const wxString aFilename )
}
}
}
}
int
VRML1_MODEL_PARSER
::
read_separator
()
int
VRML1_MODEL_PARSER
::
read_separator
()
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( "Separator\n" ) );
//
DBG( printf( "Separator\n" ) );
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
strcmp
(
text
,
"Material"
)
==
0
)
if
(
strcmp
(
text
,
"Material"
)
==
0
)
{
{
readMaterial
(
);
readMaterial
();
}
}
else
if
(
strcmp
(
text
,
"Coordinate3"
)
==
0
)
else
if
(
strcmp
(
text
,
"Coordinate3"
)
==
0
)
{
{
...
@@ -146,9 +148,9 @@ int VRML1_MODEL_PARSER::read_separator()
...
@@ -146,9 +148,9 @@ int VRML1_MODEL_PARSER::read_separator()
}
}
else
if
(
strcmp
(
text
,
"Separator"
)
==
0
)
else
if
(
strcmp
(
text
,
"Separator"
)
==
0
)
{
{
S3D_MESH
*
parent
=
m_model
;
S3D_MESH
*
parent
=
m_model
;
S3D_MESH
*
new_mesh_model
=
new
S3D_MESH
();
S3D_MESH
*
new_mesh_model
=
new
S3D_MESH
();
m_model
->
childs
.
push_back
(
new_mesh_model
);
m_model
->
childs
.
push_back
(
new_mesh_model
);
...
@@ -159,10 +161,10 @@ int VRML1_MODEL_PARSER::read_separator()
...
@@ -159,10 +161,10 @@ int VRML1_MODEL_PARSER::read_separator()
m_model
=
parent
;
m_model
=
parent
;
}
}
else
if
(
(
*
text
!=
'}'
)
)
else
if
(
(
*
text
!=
'}'
)
)
{
{
//DBG( printf( "read_NotImplemented %s\n", text ) );
//
DBG( printf( "read_NotImplemented %s\n", text ) );
read_NotImplemented
(
m_file
,
'}'
);
read_NotImplemented
(
m_file
,
'}'
);
}
}
else
else
{
{
...
@@ -176,12 +178,12 @@ int VRML1_MODEL_PARSER::read_separator()
...
@@ -176,12 +178,12 @@ int VRML1_MODEL_PARSER::read_separator()
int
VRML1_MODEL_PARSER
::
readMaterial
()
int
VRML1_MODEL_PARSER
::
readMaterial
()
{
{
char
text
[
128
];
char
text
[
128
];
S3D_MATERIAL
*
material
=
NULL
;
S3D_MATERIAL
*
material
=
NULL
;
//DBG( printf( " readMaterial\n" ) );
//
DBG( printf( " readMaterial\n" ) );
wxString
mat_name
;
wxString
mat_name
;
material
=
new
S3D_MATERIAL
(
GetMaster
(),
mat_name
);
material
=
new
S3D_MATERIAL
(
GetMaster
(),
mat_name
);
...
@@ -191,12 +193,12 @@ int VRML1_MODEL_PARSER::readMaterial()
...
@@ -191,12 +193,12 @@ int VRML1_MODEL_PARSER::readMaterial()
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
return
0
;
return
0
;
}
}
...
@@ -207,23 +209,23 @@ int VRML1_MODEL_PARSER::readMaterial()
...
@@ -207,23 +209,23 @@ int VRML1_MODEL_PARSER::readMaterial()
}
}
else
if
(
strcmp
(
text
,
"diffuseColor"
)
==
0
)
else
if
(
strcmp
(
text
,
"diffuseColor"
)
==
0
)
{
{
readMaterial_diffuseColor
(
);
readMaterial_diffuseColor
();
}
}
else
if
(
strcmp
(
text
,
"emissiveColor"
)
==
0
)
else
if
(
strcmp
(
text
,
"emissiveColor"
)
==
0
)
{
{
readMaterial_emissiveColor
(
);
readMaterial_emissiveColor
();
}
}
else
if
(
strcmp
(
text
,
"specularColor"
)
==
0
)
else
if
(
strcmp
(
text
,
"specularColor"
)
==
0
)
{
{
readMaterial_specularColor
(
);
readMaterial_specularColor
();
}
}
else
if
(
strcmp
(
text
,
"shininess"
)
==
0
)
else
if
(
strcmp
(
text
,
"shininess"
)
==
0
)
{
{
readMaterial_shininess
(
);
readMaterial_shininess
();
}
}
else
if
(
strcmp
(
text
,
"transparency"
)
==
0
)
else
if
(
strcmp
(
text
,
"transparency"
)
==
0
)
{
{
readMaterial_transparency
(
);
readMaterial_transparency
();
}
}
}
}
...
@@ -231,27 +233,27 @@ int VRML1_MODEL_PARSER::readMaterial()
...
@@ -231,27 +233,27 @@ int VRML1_MODEL_PARSER::readMaterial()
}
}
int
VRML1_MODEL_PARSER
::
readCoordinate3
(
)
int
VRML1_MODEL_PARSER
::
readCoordinate3
()
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( " readCoordinate3\n" ) );
//
DBG( printf( " readCoordinate3\n" ) );
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
return
0
;
return
0
;
}
}
if
(
strcmp
(
text
,
"point"
)
==
0
)
if
(
strcmp
(
text
,
"point"
)
==
0
)
{
{
readCoordinate3_point
(
);
readCoordinate3_point
();
}
}
}
}
...
@@ -259,60 +261,61 @@ int VRML1_MODEL_PARSER::readCoordinate3( )
...
@@ -259,60 +261,61 @@ int VRML1_MODEL_PARSER::readCoordinate3( )
}
}
int
VRML1_MODEL_PARSER
::
readIndexedFaceSet
(
)
int
VRML1_MODEL_PARSER
::
readIndexedFaceSet
()
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( " readIndexedFaceSet\n" ) );
//
DBG( printf( " readIndexedFaceSet\n" ) );
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
return
0
;
return
0
;
}
}
if
(
strcmp
(
text
,
"coordIndex"
)
==
0
)
if
(
strcmp
(
text
,
"coordIndex"
)
==
0
)
{
{
readIndexedFaceSet_coordIndex
(
);
readIndexedFaceSet_coordIndex
();
}
}
else
if
(
strcmp
(
text
,
"materialIndex"
)
==
0
)
else
if
(
strcmp
(
text
,
"materialIndex"
)
==
0
)
{
{
readIndexedFaceSet_materialIndex
(
);
readIndexedFaceSet_materialIndex
();
}
}
}
}
return
-
1
;
return
-
1
;
}
}
int
VRML1_MODEL_PARSER
::
readMaterial_ambientColor
(
)
int
VRML1_MODEL_PARSER
::
readMaterial_ambientColor
()
{
{
//DBG( printf( " readMaterial_ambientColor\n" ) );
//
DBG( printf( " readMaterial_ambientColor\n" ) );
return
parseVertexList
(
m_file
,
m_model
->
m_Materials
->
m_AmbientColor
);
return
parseVertexList
(
m_file
,
m_model
->
m_Materials
->
m_AmbientColor
);
}
}
int
VRML1_MODEL_PARSER
::
readMaterial_diffuseColor
(
)
int
VRML1_MODEL_PARSER
::
readMaterial_diffuseColor
()
{
{
//DBG( printf( " readMaterial_diffuseColor\n" ) );
//
DBG( printf( " readMaterial_diffuseColor\n" ) );
return
parseVertexList
(
m_file
,
m_model
->
m_Materials
->
m_DiffuseColor
);
return
parseVertexList
(
m_file
,
m_model
->
m_Materials
->
m_DiffuseColor
);
}
}
int
VRML1_MODEL_PARSER
::
readMaterial_emissiveColor
(
)
int
VRML1_MODEL_PARSER
::
readMaterial_emissiveColor
()
{
{
//DBG( printf( " readMaterial_emissiveColor\n" ) );
//
DBG( printf( " readMaterial_emissiveColor\n" ) );
int
ret
=
parseVertexList
(
m_file
,
m_model
->
m_Materials
->
m_EmissiveColor
);
int
ret
=
parseVertexList
(
m_file
,
m_model
->
m_Materials
->
m_EmissiveColor
);
if
(
GetMaster
()
->
m_use_modelfile_emissiveColor
==
false
)
if
(
GetMaster
()
->
m_use_modelfile_emissiveColor
==
false
)
{
{
m_model
->
m_Materials
->
m_EmissiveColor
.
clear
();
m_model
->
m_Materials
->
m_EmissiveColor
.
clear
();
}
}
...
@@ -323,11 +326,11 @@ int VRML1_MODEL_PARSER::readMaterial_emissiveColor( )
...
@@ -323,11 +326,11 @@ int VRML1_MODEL_PARSER::readMaterial_emissiveColor( )
int
VRML1_MODEL_PARSER
::
readMaterial_specularColor
()
int
VRML1_MODEL_PARSER
::
readMaterial_specularColor
()
{
{
//DBG( printf( " readMaterial_specularColor\n" ) );
//
DBG( printf( " readMaterial_specularColor\n" ) );
int
ret
=
parseVertexList
(
m_file
,
m_model
->
m_Materials
->
m_SpecularColor
);
int
ret
=
parseVertexList
(
m_file
,
m_model
->
m_Materials
->
m_SpecularColor
);
if
(
GetMaster
()
->
m_use_modelfile_specularColor
==
false
)
if
(
GetMaster
()
->
m_use_modelfile_specularColor
==
false
)
{
{
m_model
->
m_Materials
->
m_SpecularColor
.
clear
();
m_model
->
m_Materials
->
m_SpecularColor
.
clear
();
}
}
...
@@ -336,9 +339,9 @@ int VRML1_MODEL_PARSER::readMaterial_specularColor()
...
@@ -336,9 +339,9 @@ int VRML1_MODEL_PARSER::readMaterial_specularColor()
}
}
int
VRML1_MODEL_PARSER
::
readMaterial_shininess
(
)
int
VRML1_MODEL_PARSER
::
readMaterial_shininess
()
{
{
//DBG( printf( " readMaterial_shininess\n" ) );
//
DBG( printf( " readMaterial_shininess\n" ) );
m_model
->
m_Materials
->
m_Shininess
.
clear
();
m_model
->
m_Materials
->
m_Shininess
.
clear
();
...
@@ -356,7 +359,7 @@ int VRML1_MODEL_PARSER::readMaterial_shininess( )
...
@@ -356,7 +359,7 @@ int VRML1_MODEL_PARSER::readMaterial_shininess( )
m_model
->
m_Materials
->
m_Shininess
.
clear
();
m_model
->
m_Materials
->
m_Shininess
.
clear
();
}
}
//DBG( printf( " m_Shininess.size: %ld\n", m_model->m_Materials->m_Shininess.size() ) );
//
DBG( printf( " m_Shininess.size: %ld\n", m_model->m_Materials->m_Shininess.size() ) );
return
0
;
return
0
;
}
}
...
@@ -364,13 +367,13 @@ int VRML1_MODEL_PARSER::readMaterial_shininess( )
...
@@ -364,13 +367,13 @@ int VRML1_MODEL_PARSER::readMaterial_shininess( )
int
VRML1_MODEL_PARSER
::
readMaterial_transparency
()
int
VRML1_MODEL_PARSER
::
readMaterial_transparency
()
{
{
//DBG( printf( " readMaterial_transparency\n" ) );
//
DBG( printf( " readMaterial_transparency\n" ) );
m_model
->
m_Materials
->
m_Transparency
.
clear
();
m_model
->
m_Materials
->
m_Transparency
.
clear
();
float
tmp
;
float
tmp
;
while
(
fscanf
(
m_file
,
"%f,"
,
&
tmp
)
)
while
(
fscanf
(
m_file
,
"%f,"
,
&
tmp
)
)
{
{
m_model
->
m_Materials
->
m_Transparency
.
push_back
(
tmp
);
m_model
->
m_Materials
->
m_Transparency
.
push_back
(
tmp
);
}
}
...
@@ -380,7 +383,7 @@ int VRML1_MODEL_PARSER::readMaterial_transparency()
...
@@ -380,7 +383,7 @@ int VRML1_MODEL_PARSER::readMaterial_transparency()
m_model
->
m_Materials
->
m_Transparency
.
clear
();
m_model
->
m_Materials
->
m_Transparency
.
clear
();
}
}
//DBG( printf( " m_Transparency.size: %ld\n", m_model->m_Materials->m_Transparency.size() ) );
//
DBG( printf( " m_Transparency.size: %ld\n", m_model->m_Materials->m_Transparency.size() ) );
return
0
;
return
0
;
}
}
...
@@ -388,7 +391,7 @@ int VRML1_MODEL_PARSER::readMaterial_transparency()
...
@@ -388,7 +391,7 @@ int VRML1_MODEL_PARSER::readMaterial_transparency()
int
VRML1_MODEL_PARSER
::
readCoordinate3_point
()
int
VRML1_MODEL_PARSER
::
readCoordinate3_point
()
{
{
//DBG( printf( " readCoordinate3_point\n" ) );
//
DBG( printf( " readCoordinate3_point\n" ) );
if
(
parseVertexList
(
m_file
,
m_model
->
m_Point
)
==
0
)
if
(
parseVertexList
(
m_file
,
m_model
->
m_Point
)
==
0
)
{
{
...
@@ -401,13 +404,14 @@ int VRML1_MODEL_PARSER::readCoordinate3_point()
...
@@ -401,13 +404,14 @@ int VRML1_MODEL_PARSER::readCoordinate3_point()
int
VRML1_MODEL_PARSER
::
readIndexedFaceSet_coordIndex
()
int
VRML1_MODEL_PARSER
::
readIndexedFaceSet_coordIndex
()
{
{
//DBG( printf( " readIndexedFaceSet_coordIndex\n" ) );
//
DBG( printf( " readIndexedFaceSet_coordIndex\n" ) );
m_model
->
m_CoordIndex
.
clear
();
m_model
->
m_CoordIndex
.
clear
();
glm
::
ivec3
coord
;
glm
::
ivec3
coord
;
int
dummy
;
// should be -1
int
dummy
;
// should be -1
while
(
fscanf
(
m_file
,
"%d,%d,%d,%d,"
,
&
coord
[
0
],
&
coord
[
1
],
&
coord
[
2
],
&
dummy
)
)
while
(
fscanf
(
m_file
,
"%d,%d,%d,%d,"
,
&
coord
[
0
],
&
coord
[
1
],
&
coord
[
2
],
&
dummy
)
)
{
{
std
::
vector
<
int
>
coord_list
;
std
::
vector
<
int
>
coord_list
;
...
@@ -417,21 +421,22 @@ int VRML1_MODEL_PARSER::readIndexedFaceSet_coordIndex()
...
@@ -417,21 +421,22 @@ int VRML1_MODEL_PARSER::readIndexedFaceSet_coordIndex()
coord_list
[
1
]
=
coord
[
1
];
coord_list
[
1
]
=
coord
[
1
];
coord_list
[
2
]
=
coord
[
2
];
coord_list
[
2
]
=
coord
[
2
];
if
(
(
coord
[
0
]
==
coord
[
1
])
||
if
(
(
coord
[
0
]
==
coord
[
1
])
(
coord
[
0
]
==
coord
[
2
])
||
||
(
coord
[
0
]
==
coord
[
2
])
(
coord
[
2
]
==
coord
[
1
])
)
||
(
coord
[
2
]
==
coord
[
1
])
)
{
{
//DBG( printf( " invalid coordIndex at index %lu (%d, %d, %d, %d)\n", m_model->m_CoordIndex.size()+1,coord[0], coord[1], coord[2], dummy ) );
//
DBG( printf( " invalid coordIndex at index %lu (%d, %d, %d, %d)\n", m_model->m_CoordIndex.size()+1,coord[0], coord[1], coord[2], dummy ) );
}
}
if
(
dummy
!=
-
1
)
if
(
dummy
!=
-
1
)
{
{
//DBG( printf( " Error at index %lu, -1 Expected, got %d\n", m_model->m_CoordIndex.size()+1, dummy ) );
//
DBG( printf( " Error at index %lu, -1 Expected, got %d\n", m_model->m_CoordIndex.size()+1, dummy ) );
}
}
m_model
->
m_CoordIndex
.
push_back
(
coord_list
);
m_model
->
m_CoordIndex
.
push_back
(
coord_list
);
}
}
//DBG( printf( " m_CoordIndex.size: %ld\n", m_model->m_CoordIndex.size() ) );
//
DBG( printf( " m_CoordIndex.size: %ld\n", m_model->m_CoordIndex.size() ) );
return
0
;
return
0
;
}
}
...
@@ -439,17 +444,18 @@ int VRML1_MODEL_PARSER::readIndexedFaceSet_coordIndex()
...
@@ -439,17 +444,18 @@ int VRML1_MODEL_PARSER::readIndexedFaceSet_coordIndex()
int
VRML1_MODEL_PARSER
::
readIndexedFaceSet_materialIndex
()
int
VRML1_MODEL_PARSER
::
readIndexedFaceSet_materialIndex
()
{
{
//DBG( printf( " readIndexedFaceSet_materialIndex\n" ) );
//
DBG( printf( " readIndexedFaceSet_materialIndex\n" ) );
m_model
->
m_MaterialIndex
.
clear
();
m_model
->
m_MaterialIndex
.
clear
();
int
index
;
int
index
;
while
(
fscanf
(
m_file
,
"%d,"
,
&
index
)
)
while
(
fscanf
(
m_file
,
"%d,"
,
&
index
)
)
{
{
m_model
->
m_MaterialIndex
.
push_back
(
index
);
m_model
->
m_MaterialIndex
.
push_back
(
index
);
}
}
//DBG( printf( " m_MaterialIndex.size: %ld\n", m_model->m_MaterialIndex.size() ) );
//
DBG( printf( " m_MaterialIndex.size: %ld\n", m_model->m_MaterialIndex.size() ) );
return
0
;
return
0
;
}
}
3d-viewer/vrml_v2_modelparser.cpp
View file @
cb91e095
...
@@ -48,18 +48,18 @@ VRML2_MODEL_PARSER::VRML2_MODEL_PARSER( S3D_MASTER* aMaster ) :
...
@@ -48,18 +48,18 @@ VRML2_MODEL_PARSER::VRML2_MODEL_PARSER( S3D_MASTER* aMaster ) :
VRML2_MODEL_PARSER
::~
VRML2_MODEL_PARSER
()
VRML2_MODEL_PARSER
::~
VRML2_MODEL_PARSER
()
{
{
for
(
unsigned
int
idx
=
0
;
idx
<
childs
.
size
();
idx
++
)
for
(
unsigned
int
idx
=
0
;
idx
<
childs
.
size
();
idx
++
)
{
{
delete
childs
[
idx
];
delete
childs
[
idx
];
}
}
}
}
void
VRML2_MODEL_PARSER
::
Load
(
const
wxString
aFilename
)
void
VRML2_MODEL_PARSER
::
Load
(
const
wxString
aFilename
)
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( "Load %s\n", static_cast<const char*>(aFilename.mb_str()) ) );
//
DBG( printf( "Load %s\n", static_cast<const char*>(aFilename.mb_str()) ) );
m_file
=
wxFopen
(
aFilename
,
wxT
(
"rt"
)
);
m_file
=
wxFopen
(
aFilename
,
wxT
(
"rt"
)
);
if
(
m_file
==
NULL
)
if
(
m_file
==
NULL
)
...
@@ -67,27 +67,27 @@ void VRML2_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -67,27 +67,27 @@ void VRML2_MODEL_PARSER::Load( const wxString aFilename )
return
;
return
;
}
}
glShadeModel
(
GL_SMOOTH
);
glShadeModel
(
GL_SMOOTH
);
glEnable
(
GL_NORMALIZE
);
glEnable
(
GL_NORMALIZE
);
float
vrmlunits_to_3Dunits
=
g_Parm_3D_Visu
.
m_BiuTo3Dunits
*
UNITS3D_TO_UNITSPCB
;
float
vrmlunits_to_3Dunits
=
g_Parm_3D_Visu
.
m_BiuTo3Dunits
*
UNITS3D_TO_UNITSPCB
;
glScalef
(
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
);
glScalef
(
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
);
glm
::
vec3
matScale
(
GetMaster
()
->
m_MatScale
.
x
,
GetMaster
()
->
m_MatScale
.
y
,
glm
::
vec3
matScale
(
GetMaster
()
->
m_MatScale
.
x
,
GetMaster
()
->
m_MatScale
.
y
,
GetMaster
()
->
m_MatScale
.
z
);
GetMaster
()
->
m_MatScale
.
z
);
glm
::
vec3
matRot
(
GetMaster
()
->
m_MatRotation
.
x
,
GetMaster
()
->
m_MatRotation
.
y
,
glm
::
vec3
matRot
(
GetMaster
()
->
m_MatRotation
.
x
,
GetMaster
()
->
m_MatRotation
.
y
,
GetMaster
()
->
m_MatRotation
.
z
);
GetMaster
()
->
m_MatRotation
.
z
);
glm
::
vec3
matPos
(
GetMaster
()
->
m_MatPosition
.
x
,
GetMaster
()
->
m_MatPosition
.
y
,
glm
::
vec3
matPos
(
GetMaster
()
->
m_MatPosition
.
x
,
GetMaster
()
->
m_MatPosition
.
y
,
GetMaster
()
->
m_MatPosition
.
z
);
GetMaster
()
->
m_MatPosition
.
z
);
#define SCALE_3D_CONV (
(IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB
)
#define SCALE_3D_CONV (
(IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB
)
glTranslatef
(
matPos
.
x
*
SCALE_3D_CONV
,
matPos
.
y
*
SCALE_3D_CONV
,
matPos
.
z
*
SCALE_3D_CONV
);
glTranslatef
(
matPos
.
x
*
SCALE_3D_CONV
,
matPos
.
y
*
SCALE_3D_CONV
,
matPos
.
z
*
SCALE_3D_CONV
);
glRotatef
(
-
matRot
.
z
,
0.0
f
,
0.0
f
,
1.0
f
);
glRotatef
(
-
matRot
.
z
,
0.0
f
,
0.0
f
,
1.0
f
);
glRotatef
(
-
matRot
.
y
,
0.0
f
,
1.0
f
,
0.0
f
);
glRotatef
(
-
matRot
.
y
,
0.0
f
,
1.0
f
,
0.0
f
);
glRotatef
(
-
matRot
.
x
,
1.0
f
,
0.0
f
,
0.0
f
);
glRotatef
(
-
matRot
.
x
,
1.0
f
,
0.0
f
,
0.0
f
);
glScalef
(
matScale
.
x
,
matScale
.
y
,
matScale
.
z
);
glScalef
(
matScale
.
x
,
matScale
.
y
,
matScale
.
z
);
...
@@ -98,7 +98,6 @@ void VRML2_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -98,7 +98,6 @@ void VRML2_MODEL_PARSER::Load( const wxString aFilename )
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
'}'
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
'}'
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
...
@@ -110,7 +109,6 @@ void VRML2_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -110,7 +109,6 @@ void VRML2_MODEL_PARSER::Load( const wxString aFilename )
childs
.
push_back
(
m_model
);
childs
.
push_back
(
m_model
);
read_Transform
();
read_Transform
();
}
}
else
if
(
strcmp
(
text
,
"DEF"
)
==
0
)
else
if
(
strcmp
(
text
,
"DEF"
)
==
0
)
{
{
...
@@ -125,7 +123,7 @@ void VRML2_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -125,7 +123,7 @@ void VRML2_MODEL_PARSER::Load( const wxString aFilename )
SetLocaleTo_Default
();
// revert to the current locale
SetLocaleTo_Default
();
// revert to the current locale
//DBG( printf( "chils size:%lu\n", childs.size() ) );
//
DBG( printf( "chils size:%lu\n", childs.size() ) );
if
(
GetMaster
()
->
IsOpenGlAllowed
()
)
if
(
GetMaster
()
->
IsOpenGlAllowed
()
)
{
{
...
@@ -139,21 +137,23 @@ void VRML2_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -139,21 +137,23 @@ void VRML2_MODEL_PARSER::Load( const wxString aFilename )
int
VRML2_MODEL_PARSER
::
read_Transform
()
int
VRML2_MODEL_PARSER
::
read_Transform
()
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( "Transform\n" ) );
//
DBG( printf( "Transform\n" ) );
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
//DBG( printf( " } Exit Transform\n" ) );
//
DBG( printf( " } Exit Transform\n" ) );
break
;
break
;
}
}
if
(
strcmp
(
text
,
"translation"
)
==
0
)
if
(
strcmp
(
text
,
"translation"
)
==
0
)
{
{
parseVertex
(
m_file
,
m_model
->
m_translation
);
parseVertex
(
m_file
,
m_model
->
m_translation
);
...
@@ -161,19 +161,19 @@ int VRML2_MODEL_PARSER::read_Transform()
...
@@ -161,19 +161,19 @@ int VRML2_MODEL_PARSER::read_Transform()
else
if
(
strcmp
(
text
,
"rotation"
)
==
0
)
else
if
(
strcmp
(
text
,
"rotation"
)
==
0
)
{
{
if
(
fscanf
(
m_file
,
"%f %f %f %f"
,
&
m_model
->
m_rotation
[
0
],
if
(
fscanf
(
m_file
,
"%f %f %f %f"
,
&
m_model
->
m_rotation
[
0
],
&
m_model
->
m_rotation
[
1
],
&
m_model
->
m_rotation
[
1
],
&
m_model
->
m_rotation
[
2
],
&
m_model
->
m_rotation
[
2
],
&
m_model
->
m_rotation
[
3
]
)
!=
4
)
&
m_model
->
m_rotation
[
3
]
)
!=
4
)
{
{
// !TODO: log errors
// !TODO: log errors
m_model
->
m_rotation
[
0
]
=
0.0
f
;
m_model
->
m_rotation
[
0
]
=
0.0
f
;
m_model
->
m_rotation
[
1
]
=
0.0
f
;
m_model
->
m_rotation
[
1
]
=
0.0
f
;
m_model
->
m_rotation
[
2
]
=
0.0
f
;
m_model
->
m_rotation
[
2
]
=
0.0
f
;
m_model
->
m_rotation
[
3
]
=
0.0
f
;
m_model
->
m_rotation
[
3
]
=
0.0
f
;
}
}
else
else
{
{
m_model
->
m_rotation
[
3
]
=
m_model
->
m_rotation
[
3
]
*
180.0
f
/
3.14
f
;
// !TODO: use constants or functions
m_model
->
m_rotation
[
3
]
=
m_model
->
m_rotation
[
3
]
*
180.0
f
/
3.14
f
;
// !TODO: use constants or functions
}
}
}
}
else
if
(
strcmp
(
text
,
"scale"
)
==
0
)
else
if
(
strcmp
(
text
,
"scale"
)
==
0
)
...
@@ -184,15 +184,15 @@ int VRML2_MODEL_PARSER::read_Transform()
...
@@ -184,15 +184,15 @@ int VRML2_MODEL_PARSER::read_Transform()
{
{
// this m_scaleOrientation is not implemented, but it will be parsed
// this m_scaleOrientation is not implemented, but it will be parsed
if
(
fscanf
(
m_file
,
"%f %f %f %f"
,
&
m_model
->
m_scaleOrientation
[
0
],
if
(
fscanf
(
m_file
,
"%f %f %f %f"
,
&
m_model
->
m_scaleOrientation
[
0
],
&
m_model
->
m_scaleOrientation
[
1
],
&
m_model
->
m_scaleOrientation
[
1
],
&
m_model
->
m_scaleOrientation
[
2
],
&
m_model
->
m_scaleOrientation
[
2
],
&
m_model
->
m_scaleOrientation
[
3
]
)
!=
4
)
&
m_model
->
m_scaleOrientation
[
3
]
)
!=
4
)
{
{
// !TODO: log errors
// !TODO: log errors
m_model
->
m_scaleOrientation
[
0
]
=
0.0
f
;
m_model
->
m_scaleOrientation
[
0
]
=
0.0
f
;
m_model
->
m_scaleOrientation
[
1
]
=
0.0
f
;
m_model
->
m_scaleOrientation
[
1
]
=
0.0
f
;
m_model
->
m_scaleOrientation
[
2
]
=
0.0
f
;
m_model
->
m_scaleOrientation
[
2
]
=
0.0
f
;
m_model
->
m_scaleOrientation
[
3
]
=
0.0
f
;
m_model
->
m_scaleOrientation
[
3
]
=
0.0
f
;
}
}
}
}
else
if
(
strcmp
(
text
,
"center"
)
==
0
)
else
if
(
strcmp
(
text
,
"center"
)
==
0
)
...
@@ -210,6 +210,7 @@ int VRML2_MODEL_PARSER::read_Transform()
...
@@ -210,6 +210,7 @@ int VRML2_MODEL_PARSER::read_Transform()
else
if
(
strcmp
(
text
,
"whichChoice"
)
==
0
)
else
if
(
strcmp
(
text
,
"whichChoice"
)
==
0
)
{
{
int
dummy
;
int
dummy
;
if
(
fscanf
(
m_file
,
"%d"
,
&
dummy
)
!=
1
)
if
(
fscanf
(
m_file
,
"%d"
,
&
dummy
)
!=
1
)
{
{
// !TODO: log errors
// !TODO: log errors
...
@@ -225,9 +226,9 @@ int VRML2_MODEL_PARSER::read_Transform()
...
@@ -225,9 +226,9 @@ int VRML2_MODEL_PARSER::read_Transform()
}
}
else
if
(
strcmp
(
text
,
"Shape"
)
==
0
)
else
if
(
strcmp
(
text
,
"Shape"
)
==
0
)
{
{
S3D_MESH
*
parent
=
m_model
;
S3D_MESH
*
parent
=
m_model
;
S3D_MESH
*
new_mesh_model
=
new
S3D_MESH
();
S3D_MESH
*
new_mesh_model
=
new
S3D_MESH
();
m_model
->
childs
.
push_back
(
new_mesh_model
);
m_model
->
childs
.
push_back
(
new_mesh_model
);
...
@@ -236,7 +237,6 @@ int VRML2_MODEL_PARSER::read_Transform()
...
@@ -236,7 +237,6 @@ int VRML2_MODEL_PARSER::read_Transform()
read_Shape
();
read_Shape
();
m_model
=
parent
;
m_model
=
parent
;
}
}
else
if
(
strcmp
(
text
,
"DEF"
)
==
0
)
else
if
(
strcmp
(
text
,
"DEF"
)
==
0
)
{
{
...
@@ -244,39 +244,41 @@ int VRML2_MODEL_PARSER::read_Transform()
...
@@ -244,39 +244,41 @@ int VRML2_MODEL_PARSER::read_Transform()
}
}
else
else
{
{
DBG
(
printf
(
" %s NotImplemented
\n
"
,
text
)
);
//
DBG( printf( " %s NotImplemented\n", text ) );
read_NotImplemented
(
m_file
,
'}'
);
read_NotImplemented
(
m_file
,
'}'
);
}
}
}
}
return
0
;
return
0
;
}
}
int
VRML2_MODEL_PARSER
::
read_DEF
()
int
VRML2_MODEL_PARSER
::
read_DEF
()
{
{
char
text
[
128
];
char
text
[
128
];
GetNextTag
(
m_file
,
text
);
GetNextTag
(
m_file
,
text
);
//DBG( printf( "DEF %s ", text ) );
//
DBG( printf( "DEF %s ", text ) );
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
//DBG( printf( " skiping %c\n", *text) );
//
DBG( printf( " skiping %c\n", *text) );
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
//DBG( printf( " } Exit DEF\n") );
//
DBG( printf( " } Exit DEF\n") );
return
0
;
return
0
;
}
}
if
(
strcmp
(
text
,
"Transform"
)
==
0
)
if
(
strcmp
(
text
,
"Transform"
)
==
0
)
{
{
return
read_Transform
();
return
read_Transform
();
}
else
if
(
strcmp
(
text
,
"children"
)
==
0
)
}
else
if
(
strcmp
(
text
,
"children"
)
==
0
)
{
{
// skip
// skip
}
}
...
@@ -294,8 +296,8 @@ int VRML2_MODEL_PARSER::read_DEF()
...
@@ -294,8 +296,8 @@ int VRML2_MODEL_PARSER::read_DEF()
}
}
else
if
(
strcmp
(
text
,
"Shape"
)
==
0
)
else
if
(
strcmp
(
text
,
"Shape"
)
==
0
)
{
{
S3D_MESH
*
parent
=
m_model
;
S3D_MESH
*
parent
=
m_model
;
S3D_MESH
*
new_mesh_model
=
new
S3D_MESH
();
S3D_MESH
*
new_mesh_model
=
new
S3D_MESH
();
m_model
->
childs
.
push_back
(
new_mesh_model
);
m_model
->
childs
.
push_back
(
new_mesh_model
);
m_model
=
new_mesh_model
;
m_model
=
new_mesh_model
;
...
@@ -304,33 +306,33 @@ int VRML2_MODEL_PARSER::read_DEF()
...
@@ -304,33 +306,33 @@ int VRML2_MODEL_PARSER::read_DEF()
}
}
}
}
DBG
(
printf
(
" DEF failed
\n
"
)
);
//
DBG( printf( " DEF failed\n" ) );
return
-
1
;
return
-
1
;
}
}
int
VRML2_MODEL_PARSER
::
read_Shape
()
int
VRML2_MODEL_PARSER
::
read_Shape
()
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( " Shape\n") );
//
DBG( printf( " Shape\n") );
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
//DBG( printf( " } Exit Shape\n") );
//
DBG( printf( " } Exit Shape\n") );
return
0
;
return
0
;
}
}
if
(
strcmp
(
text
,
"appearance"
)
==
0
)
if
(
strcmp
(
text
,
"appearance"
)
==
0
)
{
{
//skip
//
skip
}
}
else
if
(
strcmp
(
text
,
"Appearance"
)
==
0
)
else
if
(
strcmp
(
text
,
"Appearance"
)
==
0
)
{
{
...
@@ -338,7 +340,7 @@ int VRML2_MODEL_PARSER::read_Shape()
...
@@ -338,7 +340,7 @@ int VRML2_MODEL_PARSER::read_Shape()
}
}
else
if
(
strcmp
(
text
,
"geometry"
)
==
0
)
else
if
(
strcmp
(
text
,
"geometry"
)
==
0
)
{
{
//skip
//
skip
}
}
else
if
(
strcmp
(
text
,
"IndexedFaceSet"
)
==
0
)
else
if
(
strcmp
(
text
,
"IndexedFaceSet"
)
==
0
)
{
{
...
@@ -346,30 +348,30 @@ int VRML2_MODEL_PARSER::read_Shape()
...
@@ -346,30 +348,30 @@ int VRML2_MODEL_PARSER::read_Shape()
}
}
else
else
{
{
DBG
(
printf
(
" %s NotImplemented
\n
"
,
text
)
);
//
DBG( printf( " %s NotImplemented\n", text ) );
read_NotImplemented
(
m_file
,
'}'
);
read_NotImplemented
(
m_file
,
'}'
);
}
}
}
}
DBG
(
printf
(
" Shape failed
\n
"
)
);
// DBG( printf( " Shape failed\n"
) );
return
-
1
;
return
-
1
;
}
}
int
VRML2_MODEL_PARSER
::
read_Appearance
()
int
VRML2_MODEL_PARSER
::
read_Appearance
()
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( " Appearance\n") );
//
DBG( printf( " Appearance\n") );
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
return
0
;
return
0
;
}
}
...
@@ -380,7 +382,7 @@ int VRML2_MODEL_PARSER::read_Appearance()
...
@@ -380,7 +382,7 @@ int VRML2_MODEL_PARSER::read_Appearance()
}
}
}
}
DBG
(
printf
(
" Appearance failed
\n
"
)
);
// DBG( printf( " Appearance failed\n"
) );
return
-
1
;
return
-
1
;
}
}
...
@@ -388,15 +390,15 @@ int VRML2_MODEL_PARSER::read_Appearance()
...
@@ -388,15 +390,15 @@ int VRML2_MODEL_PARSER::read_Appearance()
int
VRML2_MODEL_PARSER
::
read_material
()
int
VRML2_MODEL_PARSER
::
read_material
()
{
{
S3D_MATERIAL
*
material
=
NULL
;
S3D_MATERIAL
*
material
=
NULL
;
char
text
[
128
];
char
text
[
128
];
//DBG( printf( " material ") );
//
DBG( printf( " material ") );
if
(
GetNextTag
(
m_file
,
text
)
)
if
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
strcmp
(
text
,
"Material"
)
==
0
)
if
(
strcmp
(
text
,
"Material"
)
==
0
)
{
{
wxString
mat_name
;
wxString
mat_name
;
material
=
new
S3D_MATERIAL
(
GetMaster
(),
mat_name
);
material
=
new
S3D_MATERIAL
(
GetMaster
(),
mat_name
);
GetMaster
()
->
Insert
(
material
);
GetMaster
()
->
Insert
(
material
);
m_model
->
m_Materials
=
material
;
m_model
->
m_Materials
=
material
;
...
@@ -408,13 +410,13 @@ int VRML2_MODEL_PARSER::read_material()
...
@@ -408,13 +410,13 @@ int VRML2_MODEL_PARSER::read_material()
}
}
else
if
(
strcmp
(
text
,
"DEF"
)
==
0
)
else
if
(
strcmp
(
text
,
"DEF"
)
==
0
)
{
{
//DBG( printf( "DEF") );
//
DBG( printf( "DEF") );
if
(
GetNextTag
(
m_file
,
text
)
)
if
(
GetNextTag
(
m_file
,
text
)
)
{
{
//DBG( printf( "%s", text ) );
//
DBG( printf( "%s", text ) );
wxString
mat_name
;
wxString
mat_name
;
mat_name
=
FROM_UTF8
(
text
);
mat_name
=
FROM_UTF8
(
text
);
material
=
new
S3D_MATERIAL
(
GetMaster
(),
mat_name
);
material
=
new
S3D_MATERIAL
(
GetMaster
(),
mat_name
);
...
@@ -432,13 +434,13 @@ int VRML2_MODEL_PARSER::read_material()
...
@@ -432,13 +434,13 @@ int VRML2_MODEL_PARSER::read_material()
}
}
else
if
(
strcmp
(
text
,
"USE"
)
==
0
)
else
if
(
strcmp
(
text
,
"USE"
)
==
0
)
{
{
//DBG( printf( "USE") );
//
DBG( printf( "USE") );
if
(
GetNextTag
(
m_file
,
text
)
)
if
(
GetNextTag
(
m_file
,
text
)
)
{
{
//DBG( printf( "%s\n", text ) );
//
DBG( printf( "%s\n", text ) );
wxString
mat_name
;
wxString
mat_name
;
mat_name
=
FROM_UTF8
(
text
);
mat_name
=
FROM_UTF8
(
text
);
for
(
material
=
GetMaster
()
->
m_Materials
;
material
;
material
=
material
->
Next
()
)
for
(
material
=
GetMaster
()
->
m_Materials
;
material
;
material
=
material
->
Next
()
)
...
@@ -449,46 +451,49 @@ int VRML2_MODEL_PARSER::read_material()
...
@@ -449,46 +451,49 @@ int VRML2_MODEL_PARSER::read_material()
return
0
;
return
0
;
}
}
}
}
DBG
(
printf
(
" read_material error: material not found
\n
"
)
);
DBG
(
printf
(
" read_material error: material not found
\n
"
)
);
}
}
}
}
}
}
DBG
(
printf
(
" failed material
\n
"
)
);
// DBG( printf( " failed material\n"
) );
return
-
1
;
return
-
1
;
}
}
int
VRML2_MODEL_PARSER
::
read_Material
()
int
VRML2_MODEL_PARSER
::
read_Material
()
{
{
char
text
[
128
];
char
text
[
128
];
glm
::
vec3
vertex
;
glm
::
vec3
vertex
;
//DBG( printf( " Material\n") );
//
DBG( printf( " Material\n") );
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
return
0
;
return
0
;
}
}
if
(
strcmp
(
text
,
"diffuseColor"
)
==
0
)
if
(
strcmp
(
text
,
"diffuseColor"
)
==
0
)
{
{
//DBG( printf( " diffuseColor") );
//
DBG( printf( " diffuseColor") );
parseVertex
(
m_file
,
vertex
);
parseVertex
(
m_file
,
vertex
);
//DBG( printf( "\n") );
//
DBG( printf( "\n") );
m_model
->
m_Materials
->
m_DiffuseColor
.
push_back
(
vertex
);
m_model
->
m_Materials
->
m_DiffuseColor
.
push_back
(
vertex
);
}
else
if
(
strcmp
(
text
,
"emissiveColor"
)
==
0
)
}
else
if
(
strcmp
(
text
,
"emissiveColor"
)
==
0
)
{
{
//DBG( printf( " emissiveColor") );
// DBG( printf( " emissiveColor") );
parseVertex
(
m_file
,
vertex
);
parseVertex
(
m_file
,
vertex
);
//DBG( printf( "\n") );
// DBG( printf( "\n") );
if
(
GetMaster
()
->
m_use_modelfile_emissiveColor
==
true
)
if
(
GetMaster
()
->
m_use_modelfile_emissiveColor
==
true
)
{
{
m_model
->
m_Materials
->
m_EmissiveColor
.
push_back
(
vertex
);
m_model
->
m_Materials
->
m_EmissiveColor
.
push_back
(
vertex
);
...
@@ -496,9 +501,9 @@ int VRML2_MODEL_PARSER::read_Material()
...
@@ -496,9 +501,9 @@ int VRML2_MODEL_PARSER::read_Material()
}
}
else
if
(
strcmp
(
text
,
"specularColor"
)
==
0
)
else
if
(
strcmp
(
text
,
"specularColor"
)
==
0
)
{
{
//DBG( printf( " specularColor") );
//
DBG( printf( " specularColor") );
parseVertex
(
m_file
,
vertex
);
parseVertex
(
m_file
,
vertex
);
//DBG( printf( "\n") );
//
DBG( printf( "\n") );
if
(
GetMaster
()
->
m_use_modelfile_specularColor
==
true
)
if
(
GetMaster
()
->
m_use_modelfile_specularColor
==
true
)
{
{
...
@@ -509,18 +514,19 @@ int VRML2_MODEL_PARSER::read_Material()
...
@@ -509,18 +514,19 @@ int VRML2_MODEL_PARSER::read_Material()
{
{
float
ambientIntensity
;
float
ambientIntensity
;
parseFloat
(
m_file
,
&
ambientIntensity
);
parseFloat
(
m_file
,
&
ambientIntensity
);
//DBG( printf( " ambientIntensity %f\n", ambientIntensity) );
//
DBG( printf( " ambientIntensity %f\n", ambientIntensity) );
if
(
GetMaster
()
->
m_use_modelfile_ambientIntensity
==
true
)
if
(
GetMaster
()
->
m_use_modelfile_ambientIntensity
==
true
)
{
{
m_model
->
m_Materials
->
m_AmbientColor
.
push_back
(
glm
::
vec3
(
ambientIntensity
,
ambientIntensity
,
ambientIntensity
)
);
m_model
->
m_Materials
->
m_AmbientColor
.
push_back
(
glm
::
vec3
(
ambientIntensity
,
ambientIntensity
,
ambientIntensity
)
);
}
}
}
}
else
if
(
strcmp
(
text
,
"transparency"
)
==
0
)
else
if
(
strcmp
(
text
,
"transparency"
)
==
0
)
{
{
float
transparency
;
float
transparency
;
parseFloat
(
m_file
,
&
transparency
);
parseFloat
(
m_file
,
&
transparency
);
//DBG( printf( " transparency %f\n", transparency) );
//
DBG( printf( " transparency %f\n", transparency) );
if
(
GetMaster
()
->
m_use_modelfile_transparency
==
true
)
if
(
GetMaster
()
->
m_use_modelfile_transparency
==
true
)
{
{
...
@@ -532,7 +538,7 @@ int VRML2_MODEL_PARSER::read_Material()
...
@@ -532,7 +538,7 @@ int VRML2_MODEL_PARSER::read_Material()
float
shininess
;
float
shininess
;
parseFloat
(
m_file
,
&
shininess
);
parseFloat
(
m_file
,
&
shininess
);
//DBG( printf( " shininess %f\n", shininess) );
//
DBG( printf( " shininess %f\n", shininess) );
// VRML value is normalized and openGL expects a value 0 - 128
// VRML value is normalized and openGL expects a value 0 - 128
if
(
GetMaster
()
->
m_use_modelfile_shininess
==
true
)
if
(
GetMaster
()
->
m_use_modelfile_shininess
==
true
)
{
{
...
@@ -542,30 +548,30 @@ int VRML2_MODEL_PARSER::read_Material()
...
@@ -542,30 +548,30 @@ int VRML2_MODEL_PARSER::read_Material()
}
}
}
}
DBG
(
printf
(
" Material failed
\n
"
)
);
// DBG( printf( " Material failed\n"
) );
return
-
1
;
return
-
1
;
}
}
int
VRML2_MODEL_PARSER
::
read_IndexedFaceSet
()
int
VRML2_MODEL_PARSER
::
read_IndexedFaceSet
()
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( " IndexedFaceSet\n") );
//
DBG( printf( " IndexedFaceSet\n") );
m_normalPerVertex
=
false
;
m_normalPerVertex
=
false
;
colorPerVertex
=
false
;
colorPerVertex
=
false
;
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
//DBG( printf( " } Exit IndexedFaceSet\n") );
//
DBG( printf( " } Exit IndexedFaceSet\n") );
return
0
;
return
0
;
}
}
...
@@ -575,7 +581,7 @@ int VRML2_MODEL_PARSER::read_IndexedFaceSet()
...
@@ -575,7 +581,7 @@ int VRML2_MODEL_PARSER::read_IndexedFaceSet()
{
{
if
(
strcmp
(
text
,
"TRUE"
)
==
0
)
if
(
strcmp
(
text
,
"TRUE"
)
==
0
)
{
{
//DBG( printf( " m_normalPerVertex TRUE\n") );
//
DBG( printf( " m_normalPerVertex TRUE\n") );
m_normalPerVertex
=
true
;
m_normalPerVertex
=
true
;
}
}
}
}
...
@@ -583,18 +589,18 @@ int VRML2_MODEL_PARSER::read_IndexedFaceSet()
...
@@ -583,18 +589,18 @@ int VRML2_MODEL_PARSER::read_IndexedFaceSet()
else
if
(
strcmp
(
text
,
"colorPerVertex"
)
==
0
)
else
if
(
strcmp
(
text
,
"colorPerVertex"
)
==
0
)
{
{
GetNextTag
(
m_file
,
text
);
GetNextTag
(
m_file
,
text
);
if
(
strcmp
(
text
,
"TRUE"
)
)
if
(
strcmp
(
text
,
"TRUE"
)
)
{
{
//DBG( printf( " colorPerVertex = true\n") );
//
DBG( printf( " colorPerVertex = true\n") );
colorPerVertex
=
true
;
colorPerVertex
=
true
;
}
}
else
else
{
{
colorPerVertex
=
false
;
colorPerVertex
=
false
;
}
}
}
}
else
if
(
strcmp
(
text
,
"Coordinate"
)
==
0
)
else
if
(
strcmp
(
text
,
"Coordinate"
)
==
0
)
{
{
read_Coordinate
();
read_Coordinate
();
}
}
...
@@ -618,17 +624,16 @@ int VRML2_MODEL_PARSER::read_IndexedFaceSet()
...
@@ -618,17 +624,16 @@ int VRML2_MODEL_PARSER::read_IndexedFaceSet()
{
{
read_colorIndex
();
read_colorIndex
();
}
}
}
}
DBG
(
printf
(
" IndexedFaceSet failed %s
\n
"
,
text
)
);
// DBG( printf( " IndexedFaceSet failed %s\n", text
) );
return
-
1
;
return
-
1
;
}
}
int
VRML2_MODEL_PARSER
::
read_colorIndex
()
int
VRML2_MODEL_PARSER
::
read_colorIndex
()
{
{
//DBG( printf( " read_colorIndex\n" ) );
//
DBG( printf( " read_colorIndex\n" ) );
m_model
->
m_MaterialIndex
.
clear
();
m_model
->
m_MaterialIndex
.
clear
();
...
@@ -636,6 +641,7 @@ int VRML2_MODEL_PARSER::read_colorIndex()
...
@@ -636,6 +641,7 @@ int VRML2_MODEL_PARSER::read_colorIndex()
{
{
int
index
;
int
index
;
int
first_index
;
int
first_index
;
while
(
fscanf
(
m_file
,
"%d, "
,
&
index
)
)
while
(
fscanf
(
m_file
,
"%d, "
,
&
index
)
)
{
{
if
(
index
==
-
1
)
if
(
index
==
-
1
)
...
@@ -659,7 +665,7 @@ int VRML2_MODEL_PARSER::read_colorIndex()
...
@@ -659,7 +665,7 @@ int VRML2_MODEL_PARSER::read_colorIndex()
}
}
}
}
//DBG( printf( " m_MaterialIndex.size: %ld\n", m_model->m_MaterialIndex.size() ) );
//
DBG( printf( " m_MaterialIndex.size: %ld\n", m_model->m_MaterialIndex.size() ) );
return
0
;
return
0
;
}
}
...
@@ -667,32 +673,33 @@ int VRML2_MODEL_PARSER::read_colorIndex()
...
@@ -667,32 +673,33 @@ int VRML2_MODEL_PARSER::read_colorIndex()
int
VRML2_MODEL_PARSER
::
read_NormalIndex
()
int
VRML2_MODEL_PARSER
::
read_NormalIndex
()
{
{
//DBG( printf( " read_NormalIndex\n" ) );
//
DBG( printf( " read_NormalIndex\n" ) );
m_model
->
m_NormalIndex
.
clear
();
m_model
->
m_NormalIndex
.
clear
();
glm
::
ivec3
coord
;
glm
::
ivec3
coord
;
int
dummy
;
// should be -1
int
dummy
;
// should be -1
std
::
vector
<
int
>
coord_list
;
std
::
vector
<
int
>
coord_list
;
coord_list
.
clear
();
coord_list
.
clear
();
while
(
fscanf
(
m_file
,
"%d, "
,
&
dummy
)
==
1
)
while
(
fscanf
(
m_file
,
"%d, "
,
&
dummy
)
==
1
)
{
{
if
(
dummy
==
-
1
)
if
(
dummy
==
-
1
)
{
{
m_model
->
m_NormalIndex
.
push_back
(
coord_list
);
m_model
->
m_NormalIndex
.
push_back
(
coord_list
);
//DBG( printf( " size: %lu ", coord_list.size()) );
//
DBG( printf( " size: %lu ", coord_list.size()) );
coord_list
.
clear
();
coord_list
.
clear
();
}
}
else
else
{
{
coord_list
.
push_back
(
dummy
);
coord_list
.
push_back
(
dummy
);
//DBG( printf( "%d ", dummy) );
//
DBG( printf( "%d ", dummy) );
}
}
}
}
//DBG( printf( " m_NormalIndex.size: %ld\n", m_model->m_NormalIndex.size() ) );
//
DBG( printf( " m_NormalIndex.size: %ld\n", m_model->m_NormalIndex.size() ) );
return
0
;
return
0
;
}
}
...
@@ -700,32 +707,33 @@ int VRML2_MODEL_PARSER::read_NormalIndex()
...
@@ -700,32 +707,33 @@ int VRML2_MODEL_PARSER::read_NormalIndex()
int
VRML2_MODEL_PARSER
::
read_coordIndex
()
int
VRML2_MODEL_PARSER
::
read_coordIndex
()
{
{
//DBG( printf( " read_coordIndex\n" ) );
//
DBG( printf( " read_coordIndex\n" ) );
m_model
->
m_CoordIndex
.
clear
();
m_model
->
m_CoordIndex
.
clear
();
glm
::
ivec3
coord
;
glm
::
ivec3
coord
;
int
dummy
;
// should be -1
int
dummy
;
// should be -1
std
::
vector
<
int
>
coord_list
;
std
::
vector
<
int
>
coord_list
;
coord_list
.
clear
();
coord_list
.
clear
();
while
(
fscanf
(
m_file
,
"%d, "
,
&
dummy
)
==
1
)
while
(
fscanf
(
m_file
,
"%d, "
,
&
dummy
)
==
1
)
{
{
if
(
dummy
==
-
1
)
if
(
dummy
==
-
1
)
{
{
m_model
->
m_CoordIndex
.
push_back
(
coord_list
);
m_model
->
m_CoordIndex
.
push_back
(
coord_list
);
//DBG( printf( " size: %lu ", coord_list.size()) );
//
DBG( printf( " size: %lu ", coord_list.size()) );
coord_list
.
clear
();
coord_list
.
clear
();
}
}
else
else
{
{
coord_list
.
push_back
(
dummy
);
coord_list
.
push_back
(
dummy
);
//DBG( printf( "%d ", dummy) );
//
DBG( printf( "%d ", dummy) );
}
}
}
}
//DBG( printf( " m_CoordIndex.size: %ld\n", m_model->m_CoordIndex.size() ) );
//
DBG( printf( " m_CoordIndex.size: %ld\n", m_model->m_CoordIndex.size() ) );
return
0
;
return
0
;
}
}
...
@@ -733,20 +741,20 @@ int VRML2_MODEL_PARSER::read_coordIndex()
...
@@ -733,20 +741,20 @@ int VRML2_MODEL_PARSER::read_coordIndex()
int
VRML2_MODEL_PARSER
::
read_Color
()
int
VRML2_MODEL_PARSER
::
read_Color
()
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( " read_Color\n") );
//
DBG( printf( " read_Color\n") );
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
//DBG( printf( " m_DiffuseColor.size: %ld\n", m_model->m_Materials->m_DiffuseColor.size() ) );
//
DBG( printf( " m_DiffuseColor.size: %ld\n", m_model->m_Materials->m_DiffuseColor.size() ) );
return
0
;
return
0
;
}
}
...
@@ -756,35 +764,33 @@ int VRML2_MODEL_PARSER::read_Color()
...
@@ -756,35 +764,33 @@ int VRML2_MODEL_PARSER::read_Color()
}
}
}
}
//DBG( printf( " read_Color failed\n") );
//
DBG( printf( " read_Color failed\n") );
return
-
1
;
return
-
1
;
}
}
int
VRML2_MODEL_PARSER
::
read_Normal
()
int
VRML2_MODEL_PARSER
::
read_Normal
()
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( " Normal\n") );
//
DBG( printf( " Normal\n") );
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
//DBG( printf( " m_PerFaceNormalsNormalized.size: %lu\n", m_model->m_PerFaceNormalsNormalized.size() ) );
//
DBG( printf( " m_PerFaceNormalsNormalized.size: %lu\n", m_model->m_PerFaceNormalsNormalized.size() ) );
return
0
;
return
0
;
}
}
if
(
strcmp
(
text
,
"vector"
)
==
0
)
if
(
strcmp
(
text
,
"vector"
)
==
0
)
{
{
if
(
m_normalPerVertex
==
false
)
if
(
m_normalPerVertex
==
false
)
{
{
parseVertexList
(
m_file
,
m_model
->
m_PerFaceNormalsNormalized
);
parseVertexList
(
m_file
,
m_model
->
m_PerFaceNormalsNormalized
);
}
}
...
@@ -792,7 +798,7 @@ int VRML2_MODEL_PARSER::read_Normal()
...
@@ -792,7 +798,7 @@ int VRML2_MODEL_PARSER::read_Normal()
{
{
parseVertexList
(
m_file
,
m_model
->
m_PerVertexNormalsNormalized
);
parseVertexList
(
m_file
,
m_model
->
m_PerVertexNormalsNormalized
);
//DBG( printf( " m_PerVertexNormalsNormalized.size: %lu\n", m_model->m_PerVertexNormalsNormalized.size() ) );
//
DBG( printf( " m_PerVertexNormalsNormalized.size: %lu\n", m_model->m_PerVertexNormalsNormalized.size() ) );
}
}
}
}
}
}
...
@@ -803,29 +809,28 @@ int VRML2_MODEL_PARSER::read_Normal()
...
@@ -803,29 +809,28 @@ int VRML2_MODEL_PARSER::read_Normal()
int
VRML2_MODEL_PARSER
::
read_Coordinate
()
int
VRML2_MODEL_PARSER
::
read_Coordinate
()
{
{
char
text
[
128
];
char
text
[
128
];
//DBG( printf( " Coordinate\n") );
//
DBG( printf( " Coordinate\n") );
while
(
GetNextTag
(
m_file
,
text
)
)
while
(
GetNextTag
(
m_file
,
text
)
)
{
{
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
if
(
(
text
==
NULL
)
||
(
*
text
==
']'
)
)
{
{
continue
;
continue
;
}
}
if
(
(
*
text
==
'}'
)
)
if
(
(
*
text
==
'}'
)
)
{
{
//DBG( printf( " m_Point.size: %lu\n", m_model->m_Point.size() ) );
//
DBG( printf( " m_Point.size: %lu\n", m_model->m_Point.size() ) );
return
0
;
return
0
;
}
}
if
(
strcmp
(
text
,
"point"
)
==
0
)
if
(
strcmp
(
text
,
"point"
)
==
0
)
{
{
parseVertexList
(
m_file
,
m_model
->
m_Point
);
parseVertexList
(
m_file
,
m_model
->
m_Point
);
}
}
}
}
return
-
1
;
return
-
1
;
}
}
3d-viewer/vrmlmodelparser.cpp
View file @
cb91e095
...
@@ -76,20 +76,21 @@ void VRML_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -76,20 +76,21 @@ void VRML_MODEL_PARSER::Load( const wxString aFilename )
if
(
fgets
(
line
,
11
,
file
)
==
NULL
)
if
(
fgets
(
line
,
11
,
file
)
==
NULL
)
{
{
fclose
(
file
);
fclose
(
file
);
return
;
return
;
}
}
fclose
(
file
);
fclose
(
file
);
if
(
stricmp
(
line
,
"#VRML V2.0"
)
==
0
)
if
(
stricmp
(
line
,
"#VRML V2.0"
)
==
0
)
{
{
//DBG( printf( "About to parser a #VRML V2.0 file\n" ) );
//DBG( printf( "About to parser a #VRML V2.0 file\n" ) );
vrml2_parser
->
Load
(
aFilename
);
vrml2_parser
->
Load
(
aFilename
);
return
;
return
;
}
}
else
if
(
stricmp
(
line
,
"#VRML V1.0"
)
==
0
)
else
if
(
stricmp
(
line
,
"#VRML V1.0"
)
==
0
)
{
{
//DBG( printf( "About to parser a #VRML V1.0 file\n" ) );
//DBG( printf( "About to parser a #VRML V1.0 file\n" ) );
vrml1_parser
->
Load
(
aFilename
);
vrml1_parser
->
Load
(
aFilename
);
...
@@ -97,5 +98,5 @@ void VRML_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -97,5 +98,5 @@ void VRML_MODEL_PARSER::Load( const wxString aFilename )
return
;
return
;
}
}
DBG
(
printf
(
"Unknown VRML file format: %s
\n
"
,
line
)
);
//
DBG( printf( "Unknown VRML file format: %s\n", line ) );
}
}
3d-viewer/x3dmodelparser.cpp
View file @
cb91e095
...
@@ -43,11 +43,13 @@
...
@@ -43,11 +43,13 @@
X3D_MODEL_PARSER
::
X3D_MODEL_PARSER
(
S3D_MASTER
*
aMaster
)
:
X3D_MODEL_PARSER
::
X3D_MODEL_PARSER
(
S3D_MASTER
*
aMaster
)
:
S3D_MODEL_PARSER
(
aMaster
)
S3D_MODEL_PARSER
(
aMaster
)
{}
{
}
X3D_MODEL_PARSER
::~
X3D_MODEL_PARSER
()
X3D_MODEL_PARSER
::~
X3D_MODEL_PARSER
()
{}
{
}
void
X3D_MODEL_PARSER
::
Load
(
const
wxString
aFilename
)
void
X3D_MODEL_PARSER
::
Load
(
const
wxString
aFilename
)
...
@@ -66,28 +68,28 @@ void X3D_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -66,28 +68,28 @@ void X3D_MODEL_PARSER::Load( const wxString aFilename )
return
;
return
;
}
}
glShadeModel
(
GL_SMOOTH
);
glShadeModel
(
GL_SMOOTH
);
glEnable
(
GL_NORMALIZE
);
glEnable
(
GL_NORMALIZE
);
float
vrmlunits_to_3Dunits
=
g_Parm_3D_Visu
.
m_BiuTo3Dunits
*
UNITS3D_TO_UNITSPCB
;
float
vrmlunits_to_3Dunits
=
g_Parm_3D_Visu
.
m_BiuTo3Dunits
*
UNITS3D_TO_UNITSPCB
;
glScalef
(
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
);
glScalef
(
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
,
vrmlunits_to_3Dunits
);
glm
::
vec3
matScale
(
GetMaster
()
->
m_MatScale
.
x
,
GetMaster
()
->
m_MatScale
.
y
,
glm
::
vec3
matScale
(
GetMaster
()
->
m_MatScale
.
x
,
GetMaster
()
->
m_MatScale
.
y
,
GetMaster
()
->
m_MatScale
.
z
);
GetMaster
()
->
m_MatScale
.
z
);
glm
::
vec3
matRot
(
GetMaster
()
->
m_MatRotation
.
x
,
GetMaster
()
->
m_MatRotation
.
y
,
glm
::
vec3
matRot
(
GetMaster
()
->
m_MatRotation
.
x
,
GetMaster
()
->
m_MatRotation
.
y
,
GetMaster
()
->
m_MatRotation
.
z
);
GetMaster
()
->
m_MatRotation
.
z
);
glm
::
vec3
matPos
(
GetMaster
()
->
m_MatPosition
.
x
,
GetMaster
()
->
m_MatPosition
.
y
,
glm
::
vec3
matPos
(
GetMaster
()
->
m_MatPosition
.
x
,
GetMaster
()
->
m_MatPosition
.
y
,
GetMaster
()
->
m_MatPosition
.
z
);
GetMaster
()
->
m_MatPosition
.
z
);
#define SCALE_3D_CONV (
(IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB
)
#define SCALE_3D_CONV (
(IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB
)
glTranslatef
(
matPos
.
x
*
SCALE_3D_CONV
,
matPos
.
y
*
SCALE_3D_CONV
,
matPos
.
z
*
SCALE_3D_CONV
);
glTranslatef
(
matPos
.
x
*
SCALE_3D_CONV
,
matPos
.
y
*
SCALE_3D_CONV
,
matPos
.
z
*
SCALE_3D_CONV
);
glRotatef
(
-
matRot
.
z
,
0.0
f
,
0.0
f
,
1.0
f
);
glRotatef
(
-
matRot
.
z
,
0.0
f
,
0.0
f
,
1.0
f
);
glRotatef
(
-
matRot
.
y
,
0.0
f
,
1.0
f
,
0.0
f
);
glRotatef
(
-
matRot
.
y
,
0.0
f
,
1.0
f
,
0.0
f
);
glRotatef
(
-
matRot
.
x
,
1.0
f
,
0.0
f
,
0.0
f
);
glRotatef
(
-
matRot
.
x
,
1.0
f
,
0.0
f
,
0.0
f
);
glScalef
(
matScale
.
x
,
matScale
.
y
,
matScale
.
z
);
glScalef
(
matScale
.
x
,
matScale
.
y
,
matScale
.
z
);
...
@@ -103,8 +105,8 @@ void X3D_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -103,8 +105,8 @@ void X3D_MODEL_PARSER::Load( const wxString aFilename )
GetChildsByName
(
doc
.
GetRoot
(),
wxT
(
"Transform"
),
transforms
);
GetChildsByName
(
doc
.
GetRoot
(),
wxT
(
"Transform"
),
transforms
);
for
(
NODE_LIST
::
iterator
node_it
=
transforms
.
begin
();
for
(
NODE_LIST
::
iterator
node_it
=
transforms
.
begin
();
node_it
!=
transforms
.
end
();
node_it
!=
transforms
.
end
();
node_it
++
)
node_it
++
)
{
{
m_model
=
new
S3D_MESH
();
m_model
=
new
S3D_MESH
();
childs
.
push_back
(
m_model
);
childs
.
push_back
(
m_model
);
...
@@ -112,7 +114,7 @@ void X3D_MODEL_PARSER::Load( const wxString aFilename )
...
@@ -112,7 +114,7 @@ void X3D_MODEL_PARSER::Load( const wxString aFilename )
readTransform
(
*
node_it
);
readTransform
(
*
node_it
);
}
}
//DBG( printf( "chils size:%lu\n", childs.size() ) );
//
DBG( printf( "chils size:%lu\n", childs.size() ) );
if
(
GetMaster
()
->
IsOpenGlAllowed
()
)
if
(
GetMaster
()
->
IsOpenGlAllowed
()
)
{
{
...
@@ -140,7 +142,7 @@ wxString X3D_MODEL_PARSER::VRML2_representation()
...
@@ -140,7 +142,7 @@ wxString X3D_MODEL_PARSER::VRML2_representation()
" geometry IndexedFaceSet {
\n
"
" geometry IndexedFaceSet {
\n
"
" solid TRUE
\n
"
" solid TRUE
\n
"
" coord Coordinate {
\n
"
" coord Coordinate {
\n
"
" point [
\n
"
)
+
" point [
\n
"
)
+
vrml_points
[
i
]
+
vrml_points
[
i
]
+
wxT
(
" ]
\n
"
wxT
(
" ]
\n
"
" }
\n
"
" }
\n
"
...
@@ -156,19 +158,19 @@ wxString X3D_MODEL_PARSER::VRML2_representation()
...
@@ -156,19 +158,19 @@ wxString X3D_MODEL_PARSER::VRML2_representation()
void
X3D_MODEL_PARSER
::
GetChildsByName
(
wxXmlNode
*
aParent
,
void
X3D_MODEL_PARSER
::
GetChildsByName
(
wxXmlNode
*
aParent
,
const
wxString
aName
,
const
wxString
aName
,
std
::
vector
<
wxXmlNode
*
>&
aResult
)
std
::
vector
<
wxXmlNode
*
>&
aResult
)
{
{
// Breadth-first search (BFS)
// Breadth-first search (BFS)
std
::
queue
<
wxXmlNode
*
>
found
;
std
::
queue
<
wxXmlNode
*
>
found
;
found
.
push
(
aParent
);
found
.
push
(
aParent
);
while
(
!
found
.
empty
()
)
while
(
!
found
.
empty
()
)
{
{
wxXmlNode
*
elem
=
found
.
front
();
wxXmlNode
*
elem
=
found
.
front
();
for
(
wxXmlNode
*
child
=
elem
->
GetChildren
();
for
(
wxXmlNode
*
child
=
elem
->
GetChildren
();
child
!=
NULL
;
child
!=
NULL
;
child
=
child
->
GetNext
()
)
child
=
child
->
GetNext
()
)
{
{
...
@@ -197,11 +199,13 @@ void X3D_MODEL_PARSER::GetNodeProperties( wxXmlNode* aNode, PROPERTY_MAP& aProps
...
@@ -197,11 +199,13 @@ void X3D_MODEL_PARSER::GetNodeProperties( wxXmlNode* aNode, PROPERTY_MAP& aProps
}
}
}
}
/* Private ----- */
/* Private ----- */
void
X3D_MODEL_PARSER
::
readTransform
(
wxXmlNode
*
aTransformNode
)
void
X3D_MODEL_PARSER
::
readTransform
(
wxXmlNode
*
aTransformNode
)
{
{
NODE_LIST
childnodes
;
NODE_LIST
childnodes
;
GetChildsByName
(
aTransformNode
,
wxT
(
"Material"
),
childnodes
);
GetChildsByName
(
aTransformNode
,
wxT
(
"Material"
),
childnodes
);
for
(
NODE_LIST
::
iterator
node
=
childnodes
.
begin
();
for
(
NODE_LIST
::
iterator
node
=
childnodes
.
begin
();
...
@@ -216,7 +220,7 @@ void X3D_MODEL_PARSER::readTransform( wxXmlNode* aTransformNode )
...
@@ -216,7 +220,7 @@ void X3D_MODEL_PARSER::readTransform( wxXmlNode* aTransformNode )
PROPERTY_MAP
properties
;
PROPERTY_MAP
properties
;
GetNodeProperties
(
aTransformNode
,
properties
);
GetNodeProperties
(
aTransformNode
,
properties
);
GetChildsByName
(
aTransformNode
,
wxT
(
"IndexedFaceSet"
),
childnodes
);
GetChildsByName
(
aTransformNode
,
wxT
(
"IndexedFaceSet"
),
childnodes
);
for
(
NODE_LIST
::
iterator
node
=
childnodes
.
begin
();
for
(
NODE_LIST
::
iterator
node
=
childnodes
.
begin
();
node
!=
childnodes
.
end
();
node
!=
childnodes
.
end
();
...
@@ -234,6 +238,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
...
@@ -234,6 +238,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
glm
::
vec3
color
;
glm
::
vec3
color
;
PROPERTY_MAP
properties
;
PROPERTY_MAP
properties
;
GetNodeProperties
(
aMatNode
,
properties
);
GetNodeProperties
(
aMatNode
,
properties
);
// DEFine new Material named as value of DEF
// DEFine new Material named as value of DEF
...
@@ -246,10 +251,9 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
...
@@ -246,10 +251,9 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
m_model
->
m_Materials
=
material
;
m_model
->
m_Materials
=
material
;
if
(
!
parseDoubleTriplet
(
properties
[
wxT
(
"diffuseColor"
)
],
if
(
!
parseDoubleTriplet
(
properties
[
wxT
(
"diffuseColor"
)
],
color
)
)
color
)
)
{
{
DBG
(
printf
(
"diffuseColor parsing error"
)
);
// DBG( printf( "diffuseColor parsing error"
) );
}
}
else
else
{
{
...
@@ -258,7 +262,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
...
@@ -258,7 +262,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
if
(
!
parseDoubleTriplet
(
properties
[
wxT
(
"specularColor"
)
],
color
)
)
if
(
!
parseDoubleTriplet
(
properties
[
wxT
(
"specularColor"
)
],
color
)
)
{
{
DBG
(
printf
(
"specularColor parsing error"
)
);
// DBG( printf( "specularColor parsing error"
) );
}
}
else
else
{
{
...
@@ -267,7 +271,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
...
@@ -267,7 +271,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
if
(
!
parseDoubleTriplet
(
properties
[
wxT
(
"emissiveColor"
)
],
color
)
)
if
(
!
parseDoubleTriplet
(
properties
[
wxT
(
"emissiveColor"
)
],
color
)
)
{
{
DBG
(
printf
(
"emissiveColor parsing error"
)
);
// DBG( printf( "emissiveColor parsing error"
) );
}
}
else
else
{
{
...
@@ -283,7 +287,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
...
@@ -283,7 +287,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
}
}
else
else
{
{
DBG
(
printf
(
"ambienterror"
)
);
//
DBG( printf( "ambienterror" ) );
}
}
values
.
SetString
(
properties
[
wxT
(
"shininess"
)
]
);
values
.
SetString
(
properties
[
wxT
(
"shininess"
)
]
);
...
@@ -296,7 +300,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
...
@@ -296,7 +300,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
}
}
else
else
{
{
DBG
(
printf
(
"shininess error"
)
);
//
DBG( printf( "shininess error" ) );
}
}
values
.
SetString
(
properties
[
wxT
(
"transparency"
)
]
);
values
.
SetString
(
properties
[
wxT
(
"transparency"
)
]
);
...
@@ -307,12 +311,12 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
...
@@ -307,12 +311,12 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
}
}
else
else
{
{
DBG
(
printf
(
"trans error"
)
);
// DBG( printf( "trans error"
) );
}
}
// VRML
// VRML
wxString
vrml_material
;
wxString
vrml_material
;
PROPERTY_MAP
::
const_iterator
p
=
++
properties
.
begin
();
// skip DEF
PROPERTY_MAP
::
const_iterator
p
=
++
properties
.
begin
();
// skip DEF
for
(
;
p
!=
properties
.
end
();
p
++
)
for
(
;
p
!=
properties
.
end
();
p
++
)
{
{
...
@@ -321,7 +325,6 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
...
@@ -321,7 +325,6 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
vrml_materials
.
push_back
(
vrml_material
);
vrml_materials
.
push_back
(
vrml_material
);
}
}
// USE existing material named by value of USE
// USE existing material named by value of USE
else
if
(
properties
.
find
(
wxT
(
"USE"
)
)
!=
properties
.
end
()
)
else
if
(
properties
.
find
(
wxT
(
"USE"
)
)
!=
properties
.
end
()
)
{
{
...
@@ -335,28 +338,28 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
...
@@ -335,28 +338,28 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
wxString
vrml_material
;
wxString
vrml_material
;
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"specularColor %f %f %f
\n
"
),
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"specularColor %f %f %f
\n
"
),
material
->
m_SpecularColor
[
0
].
x
,
material
->
m_SpecularColor
[
0
].
x
,
material
->
m_SpecularColor
[
0
].
y
,
material
->
m_SpecularColor
[
0
].
y
,
material
->
m_SpecularColor
[
0
].
z
)
);
material
->
m_SpecularColor
[
0
].
z
)
);
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"diffuseColor %f %f %f
\n
"
),
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"diffuseColor %f %f %f
\n
"
),
material
->
m_DiffuseColor
[
0
].
x
,
material
->
m_DiffuseColor
[
0
].
x
,
material
->
m_DiffuseColor
[
0
].
y
,
material
->
m_DiffuseColor
[
0
].
y
,
material
->
m_DiffuseColor
[
0
].
z
)
);
material
->
m_DiffuseColor
[
0
].
z
)
);
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"emissiveColor %f %f %f
\n
"
),
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"emissiveColor %f %f %f
\n
"
),
material
->
m_EmissiveColor
[
0
].
x
,
material
->
m_EmissiveColor
[
0
].
x
,
material
->
m_EmissiveColor
[
0
].
y
,
material
->
m_EmissiveColor
[
0
].
y
,
material
->
m_EmissiveColor
[
0
].
z
)
);
material
->
m_EmissiveColor
[
0
].
z
)
);
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"ambientIntensity %f
\n
"
),
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"ambientIntensity %f
\n
"
),
material
->
m_AmbientColor
[
0
].
x
)
);
material
->
m_AmbientColor
[
0
].
x
)
);
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"shininess %f
\n
"
),
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"shininess %f
\n
"
),
material
->
m_Shininess
[
0
]
)
);
material
->
m_Shininess
[
0
]
)
);
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"transparency %f
\n
"
),
vrml_material
.
Append
(
wxString
::
Format
(
wxT
(
"transparency %f
\n
"
),
material
->
m_Transparency
[
0
]
)
);
material
->
m_Transparency
[
0
]
)
);
vrml_materials
.
push_back
(
vrml_material
);
vrml_materials
.
push_back
(
vrml_material
);
...
@@ -366,38 +369,38 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
...
@@ -366,38 +369,38 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
}
}
}
}
DBG
(
printf
(
"ReadMaterial error: material not found
\n
"
)
);
//
DBG( printf( "ReadMaterial error: material not found\n" ) );
}
}
}
}
bool
X3D_MODEL_PARSER
::
parseDoubleTriplet
(
const
wxString
&
aData
,
bool
X3D_MODEL_PARSER
::
parseDoubleTriplet
(
const
wxString
&
aData
,
S3D_VERTEX
&
aResult
)
S3D_VERTEX
&
aResult
)
{
{
wxStringTokenizer
tokens
(
aData
);
wxStringTokenizer
tokens
(
aData
);
double
x
,
y
,
z
;
double
x
,
y
,
z
;
bool
ret
=
tokens
.
GetNextToken
().
ToDouble
(
&
x
)
&&
bool
ret
=
tokens
.
GetNextToken
().
ToDouble
(
&
x
)
tokens
.
GetNextToken
().
ToDouble
(
&
y
)
&&
&&
tokens
.
GetNextToken
().
ToDouble
(
&
y
)
tokens
.
GetNextToken
().
ToDouble
(
&
z
);
&&
tokens
.
GetNextToken
().
ToDouble
(
&
z
);
aResult
.
x
=
x
;
aResult
.
x
=
x
;
aResult
.
y
=
y
;
aResult
.
y
=
y
;
aResult
.
z
=
z
;
aResult
.
z
=
z
;
return
ret
;
return
ret
;
}
}
void
X3D_MODEL_PARSER
::
rotate
(
S3D_VERTEX
&
aV
,
void
X3D_MODEL_PARSER
::
rotate
(
S3D_VERTEX
&
aV
,
S3D_VERTEX
&
aU
,
S3D_VERTEX
&
aU
,
double
angle
)
double
angle
)
{
{
S3D_VERTEX
rotated
;
S3D_VERTEX
rotated
;
double
C
=
cos
(
angle
);
double
C
=
cos
(
angle
);
double
S
=
sin
(
angle
);
double
S
=
sin
(
angle
);
double
t
=
1.0
-
C
;
double
t
=
1.0
-
C
;
rotated
.
x
=
(
t
*
aU
.
x
*
aU
.
x
+
C
)
*
aV
.
x
+
rotated
.
x
=
(
t
*
aU
.
x
*
aU
.
x
+
C
)
*
aV
.
x
+
(
t
*
aU
.
x
*
aU
.
y
-
S
*
aU
.
z
)
*
aV
.
y
+
(
t
*
aU
.
x
*
aU
.
y
-
S
*
aU
.
z
)
*
aV
.
y
+
...
@@ -411,9 +414,9 @@ void X3D_MODEL_PARSER::rotate( S3D_VERTEX& aV,
...
@@ -411,9 +414,9 @@ void X3D_MODEL_PARSER::rotate( S3D_VERTEX& aV,
(
t
*
aU
.
y
*
aU
.
z
+
S
*
aU
.
x
)
*
aV
.
y
+
(
t
*
aU
.
y
*
aU
.
z
+
S
*
aU
.
x
)
*
aV
.
y
+
(
t
*
aU
.
z
*
aU
.
z
+
C
)
*
aV
.
z
;
(
t
*
aU
.
z
*
aU
.
z
+
C
)
*
aV
.
z
;
aV
.
x
=
rotated
.
x
;
aV
.
x
=
rotated
.
x
;
aV
.
y
=
rotated
.
y
;
aV
.
y
=
rotated
.
y
;
aV
.
z
=
rotated
.
z
;
aV
.
z
=
rotated
.
z
;
}
}
...
@@ -424,12 +427,13 @@ void X3D_MODEL_PARSER::rotate( S3D_VERTEX& aV,
...
@@ -424,12 +427,13 @@ void X3D_MODEL_PARSER::rotate( S3D_VERTEX& aV,
* 4. Apply geometry to Master object
* 4. Apply geometry to Master object
*/
*/
void
X3D_MODEL_PARSER
::
readIndexedFaceSet
(
wxXmlNode
*
aFaceNode
,
void
X3D_MODEL_PARSER
::
readIndexedFaceSet
(
wxXmlNode
*
aFaceNode
,
PROPERTY_MAP
&
aTransformProps
)
PROPERTY_MAP
&
aTransformProps
)
{
{
/* Step 1: Read transform data
/* Step 1: Read transform data
* --------------------------- */
* --------------------------- */
S3D_VERTEX
translation
;
S3D_VERTEX
translation
;
parseDoubleTriplet
(
aTransformProps
[
wxT
(
"translation"
)
],
translation
);
parseDoubleTriplet
(
aTransformProps
[
wxT
(
"translation"
)
],
translation
);
S3D_VERTEX
scale
;
S3D_VERTEX
scale
;
...
@@ -437,35 +441,36 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
...
@@ -437,35 +441,36 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
S3D_VERTEX
rotation
;
S3D_VERTEX
rotation
;
double
angle
=
0.0
;
double
angle
=
0.0
;
wxStringTokenizer
tokens
(
aTransformProps
[
wxT
(
"rotation"
)
]
);
wxStringTokenizer
tokens
(
aTransformProps
[
wxT
(
"rotation"
)
]
);
double
x
,
y
,
z
;
double
x
,
y
,
z
;
if
(
!
(
tokens
.
GetNextToken
().
ToDouble
(
&
x
)
&&
tokens
.
GetNextToken
().
ToDouble
(
&
y
)
&&
if
(
!
(
tokens
.
GetNextToken
().
ToDouble
(
&
x
)
tokens
.
GetNextToken
().
ToDouble
(
&
z
)
&&
&&
tokens
.
GetNextToken
().
ToDouble
(
&
y
)
tokens
.
GetNextToken
().
ToDouble
(
&
angle
)
)
)
&&
tokens
.
GetNextToken
().
ToDouble
(
&
z
)
&&
tokens
.
GetNextToken
().
ToDouble
(
&
angle
)
)
)
{
{
DBG
(
printf
(
"rotation read error"
)
);
// DBG( printf( "rotation read error"
) );
}
}
else
else
{
{
rotation
.
x
=
x
;
rotation
.
x
=
x
;
rotation
.
y
=
y
;
rotation
.
y
=
y
;
rotation
.
z
=
z
;
rotation
.
z
=
z
;
}
}
/* Step 2: Read all coordinate points
/* Step 2: Read all coordinate points
* ---------------------------- */
* ---------------------------- */
std
::
vector
<
double
>
points
;
std
::
vector
<
double
>
points
;
NODE_LIST
coordinates
;
NODE_LIST
coordinates
;
GetChildsByName
(
aFaceNode
,
wxT
(
"Coordinate"
),
coordinates
);
GetChildsByName
(
aFaceNode
,
wxT
(
"Coordinate"
),
coordinates
);
PROPERTY_MAP
coordinate_properties
;
PROPERTY_MAP
coordinate_properties
;
// IndexedFaceSet has one Coordinate child node
// IndexedFaceSet has one Coordinate child node
GetNodeProperties
(
coordinates
[
0
],
coordinate_properties
);
GetNodeProperties
(
coordinates
[
0
],
coordinate_properties
);
// Save points to vector as doubles
// Save points to vector as doubles
wxStringTokenizer
point_tokens
(
coordinate_properties
[
wxT
(
"point"
)
]
);
wxStringTokenizer
point_tokens
(
coordinate_properties
[
wxT
(
"point"
)
]
);
double
point
=
0.0
;
double
point
=
0.0
;
while
(
point_tokens
.
HasMoreTokens
()
)
while
(
point_tokens
.
HasMoreTokens
()
)
...
@@ -482,7 +487,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
...
@@ -482,7 +487,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
if
(
points
.
size
()
%
3
!=
0
)
if
(
points
.
size
()
%
3
!=
0
)
{
{
DBG
(
printf
(
"Number of points is incorrect"
)
);
//
DBG( printf( "Number of points is incorrect" ) );
return
;
return
;
}
}
...
@@ -490,14 +495,14 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
...
@@ -490,14 +495,14 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
* apply transforms in order of SCALE, ROTATION, TRANSLATION
* apply transforms in order of SCALE, ROTATION, TRANSLATION
*/
*/
wxString
vrml_pointlist
;
wxString
vrml_pointlist
;
std
::
vector
<
S3D_VERTEX
>
triplets
;
std
::
vector
<
S3D_VERTEX
>
triplets
;
for
(
unsigned
id
=
0
;
id
<
points
.
size
()
/
3
;
id
++
)
for
(
unsigned
id
=
0
;
id
<
points
.
size
()
/
3
;
id
++
)
{
{
int
triplet_indx
=
id
*
3
;
int
triplet_indx
=
id
*
3
;
S3D_VERTEX
point
(
points
[
triplet_indx
],
S3D_VERTEX
point
(
points
[
triplet_indx
],
points
[
triplet_indx
+
1
],
points
[
triplet_indx
+
1
],
points
[
triplet_indx
+
2
]
);
points
[
triplet_indx
+
2
]
);
point
.
x
*=
scale
.
x
;
point
.
x
*=
scale
.
x
;
point
.
y
*=
scale
.
y
;
point
.
y
*=
scale
.
y
;
...
@@ -520,9 +525,9 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
...
@@ -520,9 +525,9 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
/* Step 3: Read all color points
/* Step 3: Read all color points
* ---------------------------- */
* ---------------------------- */
std
::
vector
<
double
>
color_points
;
std
::
vector
<
double
>
color_points
;
NODE_LIST
color
;
NODE_LIST
color
;
GetChildsByName
(
aFaceNode
,
wxT
(
"Color"
),
color
);
GetChildsByName
(
aFaceNode
,
wxT
(
"Color"
),
color
);
// Some models lack color information, need to handle this safely
// Some models lack color information, need to handle this safely
if
(
!
color
.
empty
()
)
if
(
!
color
.
empty
()
)
...
@@ -532,7 +537,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
...
@@ -532,7 +537,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
GetNodeProperties
(
color
[
0
],
color_properties
);
GetNodeProperties
(
color
[
0
],
color_properties
);
// Save points to vector as doubles
// Save points to vector as doubles
wxStringTokenizer
colorpoint_tokens
(
color_properties
[
wxT
(
"color"
)
]
);
wxStringTokenizer
colorpoint_tokens
(
color_properties
[
wxT
(
"color"
)
]
);
double
color_point
=
0.0
;
double
color_point
=
0.0
;
while
(
colorpoint_tokens
.
HasMoreTokens
()
)
while
(
colorpoint_tokens
.
HasMoreTokens
()
)
...
@@ -549,21 +554,22 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
...
@@ -549,21 +554,22 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
if
(
color_points
.
size
()
%
3
!=
0
)
if
(
color_points
.
size
()
%
3
!=
0
)
{
{
DBG
(
printf
(
"Number of points is incorrect"
)
);
//
DBG( printf( "Number of points is incorrect" ) );
return
;
return
;
}
}
/* Create 3D face color from 3 color points
/* Create 3D face color from 3 color points
*/
*/
m_model
->
m_Materials
->
m_DiffuseColor
.
clear
();
m_model
->
m_Materials
->
m_DiffuseColor
.
clear
();
for
(
unsigned
id
=
0
;
id
<
color_points
.
size
()
/
3
;
id
++
)
for
(
unsigned
id
=
0
;
id
<
color_points
.
size
()
/
3
;
id
++
)
{
{
m_model
->
m_MaterialIndex
.
push_back
(
id
);
m_model
->
m_MaterialIndex
.
push_back
(
id
);
int
color_triplet_indx
=
id
*
3
;
int
color_triplet_indx
=
id
*
3
;
glm
::
vec3
colorface
(
color_points
[
color_triplet_indx
+
0
],
glm
::
vec3
colorface
(
color_points
[
color_triplet_indx
+
0
],
color_points
[
color_triplet_indx
+
1
],
color_points
[
color_triplet_indx
+
1
],
color_points
[
color_triplet_indx
+
2
]
);
color_points
[
color_triplet_indx
+
2
]
);
m_model
->
m_Materials
->
m_DiffuseColor
.
push_back
(
colorface
);
m_model
->
m_Materials
->
m_DiffuseColor
.
push_back
(
colorface
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment