Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
C-Fu
OpenGL
Commits
4f1ff65f
Commit
4f1ff65f
authored
Oct 09, 2016
by
Anakin
Browse files
first try to get all MODL and their sub chunks,
parent
443675ae
Changes
2
Hide whitespace changes
Inline
Side-by-side
MshViewer/Header/Object.h
View file @
4f1ff65f
...
...
@@ -17,12 +17,13 @@ public:
private:
std
::
list
<
chunkHeader
*>
lChunk
;
std
::
list
<
chunkHeader
*>
lChunkMsh2
;
std
::
list
<
chunkHeader
*>
lChunkModl
;
std
::
fstream
fsMesh
;
private:
void
re
adChunks
();
void
lo
adChunks
(
std
::
list
<
chunkHeader
*>
&
destination
,
std
::
streampos
start
,
const
char
end
[
5
]
);
public:
...
...
MshViewer/Source/Object.cpp
View file @
4f1ff65f
...
...
@@ -14,8 +14,24 @@ Object::Object(const char* path)
if
(
!
fsMesh
.
is_open
())
throw
std
::
invalid_argument
(
std
::
string
(
"file not found: "
)
+=
path
);
// get Chunks
readChunks
();
fsMesh
.
seekg
(
8
);
char
tempChunkName
[
5
]
=
{
0
};
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
tempChunkName
[
0
]),
sizeof
(
tempChunkName
)
-
1
);
if
(
strcmp
(
tempChunkName
,
"MSH2"
))
throw
std
::
invalid_argument
(
std
::
string
(
"corrupted file MSH2 expected instead of "
)
+=
tempChunkName
);
fsMesh
.
seekg
(
4
,
std
::
ios_base
::
cur
);
loadChunks
(
lChunkMsh2
,
fsMesh
.
tellg
(),
"CL1L"
);
for
(
std
::
list
<
chunkHeader
*>::
iterator
it
=
lChunkMsh2
.
begin
();
it
!=
lChunkMsh2
.
end
();
it
++
)
{
if
(
!
strcmp
(
"MODL"
,
(
*
it
)
->
name
))
{
loadChunks
(
lChunkModl
,
(
*
it
)
->
position
,
"CL1L"
);
}
}
// close file
fsMesh
.
close
();
...
...
@@ -27,13 +43,14 @@ Object::~Object()
}
/////////////////////////////////////////////////////////////////////////
// private functions
void
Object
::
re
adChunks
()
void
Object
::
lo
adChunks
(
std
::
list
<
chunkHeader
*>&
destination
,
std
::
streampos
start
,
const
char
end
[
5
]
)
{
// Jump into Mesh2
fsMesh
.
seekg
(
16
,
std
::
ios_base
::
cur
);
fsMesh
.
seekg
(
start
);
do
{
...
...
@@ -43,15 +60,16 @@ void Object::readChunks()
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
tempHeader
->
size
),
sizeof
(
tempHeader
->
size
));
tempHeader
->
position
=
fsMesh
.
tellg
();
lChunk
.
push_back
(
tempHeader
);
destination
.
push_back
(
tempHeader
);
fsMesh
.
seekg
(
tempHeader
->
size
,
std
::
ios_base
::
cur
);
if
(
!
std
::
strcmp
(
tempHeader
->
name
,
"CL1L"
))
if
(
!
std
::
strcmp
(
tempHeader
->
name
,
end
))
break
;
}
while
(
!
fsMesh
.
eof
());
}
while
(
fsMesh
.
good
());
std
::
cout
<<
"got all chunks, totaly found: "
<<
destination
.
size
()
<<
std
::
endl
;
std
::
cout
<<
"got all chunks, totaly found: "
<<
lChunk
.
size
()
<<
std
::
endl
;
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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