Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Aland, Sebastian
amdis
Commits
d43c997f
Commit
d43c997f
authored
Oct 22, 2015
by
Siqi Ling
Browse files
vtu writer write only raw, vtu reader read raw and base64
parent
41f5850e
Changes
7
Hide whitespace changes
Inline
Side-by-side
AMDiS/src/io/Arh3Reader.cc
View file @
d43c997f
...
...
@@ -207,7 +207,7 @@ namespace AMDiS { namespace io {
string
typeId
(
4
,
' '
);
uint8_t
major
=
0
,
minor
=
0
;
file
.
read
(
const_cast
<
char
*>
(
typeId
.
data
())
,
4
);
file
.
read
(
&
typeId
[
0
]
,
4
);
file
.
read
(
reinterpret_cast
<
char
*>
(
&
major
),
1
);
file
.
read
(
reinterpret_cast
<
char
*>
(
&
minor
),
1
);
...
...
AMDiS/src/io/VtkReader.hh
View file @
d43c997f
...
...
@@ -58,7 +58,8 @@ namespace AMDiS
TEST_EXIT
(
boost
::
filesystem
::
exists
(
filename
))((
filename
+
" does not exist!
\n
"
).
c_str
());
xml_document
vtu
;
TEST_EXIT
(
vtu
.
load_file
(
filename
.
c_str
()))(
"Could not load vtu file! Error in xml structure.
\n
"
);
// TEST_EXIT(vtu.load_file(filename.c_str()))("Could not load vtu file! Error in xml structure.\n");
vtu
.
load_file
(
filename
.
c_str
());
xml_node
VTKFile
=
vtu
.
child
(
"VTKFile"
);
string
zlib
=
VTKFile
.
attribute
(
"compressor"
).
value
();
...
...
@@ -98,14 +99,7 @@ namespace AMDiS
}
}
}
else
{
string
encoding
=
AppendedData
.
attribute
(
"encoding"
).
value
();
TEST_EXIT
(
encoding
==
"base64"
)
(
"Currently the encoding of AppendedData only supports base64. But it's easy to extend to raw.
\n
"
);
string
appendedData
=
AppendedData
.
last_child
().
value
();
int
start
=
appendedData
.
find
(
"_"
);
appendedData
=
appendedData
.
substr
(
start
+
1
,
appendedData
.
length
()
-
1
);
// Get offset of all data array
vector
<
int
>
offsetVec
;
int
pointsIndex
=
0
,
index
=
0
;
vector
<
pair
<
xml_node
,
int
>
>
pointDataIndex
;
...
...
@@ -121,6 +115,45 @@ namespace AMDiS
}
}
// Get appended data
string
encoding
=
AppendedData
.
attribute
(
"encoding"
).
value
();
string
appendedData
=
""
;
if
(
encoding
==
"base64"
)
{
appendedData
=
AppendedData
.
last_child
().
value
();
int
start
=
appendedData
.
find
(
"_"
);
appendedData
=
appendedData
.
substr
(
start
+
1
);
}
else
if
(
encoding
==
"raw"
)
{
// Binary AppendedData block cannot be regonized by pugixml. So we have to
// extract the data manually.
ifstream
file
(
filename
.
c_str
());
TEST_EXIT
(
file
.
is_open
())(
"Cannot open file: %s
\n
"
,
filename
.
c_str
());
long
startPos
=
0
,
endPos
=
0
;
string
line
=
""
;
while
(
getline
(
file
,
line
))
if
(
line
.
find
(
"<AppendedData"
)
!=
std
::
string
::
npos
)
break
;
TEST_EXIT_DBG
(
!
file
.
eof
())
(
"Should not happen.
\n
"
);
startPos
=
file
.
tellg
();
file
.
seekg
(
offsetVec
[
offsetVec
.
size
()
-
1
],
ios_base
::
cur
);
while
(
getline
(
file
,
line
))
if
(
line
.
find
(
"</AppendedData"
)
!=
std
::
string
::
npos
)
break
;
TEST_EXIT_DBG
(
!
file
.
eof
())
(
"Should not happen.
\n
"
);
file
.
seekg
(
-
line
.
length
(),
ios_base
::
cur
);
endPos
=
file
.
tellg
();
appendedData
.
resize
(
endPos
-
startPos
);
file
.
seekg
(
startPos
);
file
.
read
(
&
appendedData
[
0
],
endPos
-
startPos
);
int
start
=
appendedData
.
find
(
"_"
);
appendedData
=
appendedData
.
substr
(
start
+
1
);
}
else
ERROR_EXIT
(
"Currently the encoding of AppendedData only supports base64 or raw.
\n
"
);
// Read appended data
string
format
=
PointsDataArray
.
attribute
(
"format"
).
value
();
string
type
=
PointsDataArray
.
attribute
(
"type"
).
value
();
TEST_EXIT
(
format
==
"appended"
)(
"The format of DataArray is not appended in appended mode. Should not happen.
\n
"
);
...
...
@@ -131,7 +164,11 @@ namespace AMDiS
offsetVec
[
pointsIndex
+
1
]
-
offsetVec
[
pointsIndex
];
string
points
=
appendedData
.
substr
(
offsetVec
[
pointsIndex
],
len
);
detail
::
binary2pointList
(
points
,
type
,
(
zlib
!=
""
),
pointList
);
detail
::
binary2pointList
(
points
,
type
,
(
zlib
!=
""
),
encoding
==
"base64"
,
pointList
);
T
test
;
...
...
@@ -155,7 +192,12 @@ namespace AMDiS
nComponents
=
pointDataIndex
[
i
].
first
.
attribute
(
"NumberOfComponents"
).
as_int
();
TEST_EXIT
(
nComponents
==
-
1
||
static_cast
<
int
>
(
size
(
test
))
<=
nComponents
)
(
"Can not read values in DOFVector with given value type. Too many components!
\n
"
);
detail
::
binary2valueList
(
values
,
type
,
(
zlib
!=
""
),
valueList
[
j
],
size
(
test
),
nComponents
);
detail
::
binary2valueList
(
values
,
type
,
(
zlib
!=
""
),
encoding
==
"base64"
,
valueList
[
j
],
size
(
test
),
nComponents
);
break
;
}
}
...
...
AMDiS/src/io/detail/Arh3Reader.cc
View file @
d43c997f
...
...
@@ -47,7 +47,7 @@ namespace AMDiS { namespace io {
uint8_t
minor_
=
0
;
string
typeId
(
4
,
' '
);
file
.
read
(
const_cast
<
char
*>
(
typeId
.
data
())
,
4
);
file
.
read
(
&
typeId
[
0
]
,
4
);
file
.
read
(
reinterpret_cast
<
char
*>
(
&
major_
),
1
);
file
.
read
(
reinterpret_cast
<
char
*>
(
&
minor_
),
1
);
...
...
@@ -298,7 +298,7 @@ namespace AMDiS { namespace io {
{
uint32_t
tmpInt
=
0
;
file
.
read
(
reinterpret_cast
<
char
*>
(
&
tmpInt
),
4
);
file
.
read
(
const_cast
<
char
*>
(
AFEDfileName
[
i
]
.
data
())
,
tmpInt
);
file
.
read
(
&
AFEDfileName
[
i
]
[
0
]
,
tmpInt
);
for
(
int
j
=
0
;
j
<
4
;
j
++
)
{
file
.
read
(
reinterpret_cast
<
char
*>
(
&
perDOFs
[
j
]),
4
);
...
...
@@ -313,13 +313,13 @@ namespace AMDiS { namespace io {
file
.
read
(
reinterpret_cast
<
char
*>
(
&
tmpInt
),
4
);
vecsNameLen
.
push_back
(
tmpInt
);
tmpString
.
resize
(
tmpInt
,
' '
);
file
.
read
(
const_cast
<
char
*>
(
tmpString
.
data
())
,
tmpInt
);
//
file
.
read
(
&
tmpString
[
0
]
,
tmpInt
);
//
vecsName
.
push_back
(
tmpString
);
file
.
read
(
reinterpret_cast
<
char
*>
(
&
tmpInt
),
4
);
sortedFeSpaces
[
tmpInt
].
push_back
(
i
);
vecsFeSpaceNum
.
push_back
(
tmpInt
);
tmpString
.
resize
(
4
,
' '
);
file
.
read
(
const_cast
<
char
*>
(
tmpString
.
data
())
,
4
);
file
.
read
(
&
tmpString
[
0
]
,
4
);
dataformat
.
push_back
(
tmpString
);
}
...
...
@@ -329,7 +329,7 @@ namespace AMDiS { namespace io {
if
(
macroFile_nl
>
0
)
{
string
tmpString
(
""
);
tmpString
.
resize
(
macroFile_nl
,
' '
);
file
.
read
(
const_cast
<
char
*>
(
tmpString
.
data
())
,
macroFile_nl
);
file
.
read
(
&
tmpString
[
0
]
,
macroFile_nl
);
}
//================header is over==================//
...
...
@@ -715,11 +715,11 @@ namespace AMDiS { namespace io {
uint32_t
tmpInt
=
0
;
file
.
read
(
reinterpret_cast
<
char
*>
(
&
tmpInt
),
4
);
tmpString
.
resize
(
tmpInt
,
' '
);
file
.
read
(
const_cast
<
char
*>
(
tmpString
.
data
())
,
tmpInt
);
//
file
.
read
(
&
tmpString
[
0
]
,
tmpInt
);
//
file
.
read
(
reinterpret_cast
<
char
*>
(
&
tmpInt
),
4
);
sortedFeSpaces
[
tmpInt
].
push_back
(
i
);
tmpString
.
resize
(
4
,
' '
);
file
.
read
(
const_cast
<
char
*>
(
tmpString
.
data
())
,
4
);
file
.
read
(
&
tmpString
[
0
]
,
4
);
dataformat
.
push_back
(
tmpString
);
}
...
...
@@ -727,7 +727,7 @@ namespace AMDiS { namespace io {
uint32_t
macroFile_nl
=
0
;
file
.
read
(
reinterpret_cast
<
char
*>
(
&
macroFile_nl
),
4
);
string
tmpString
(
""
);
file
.
read
(
const_cast
<
char
*>
(
tmpString
.
data
())
,
macroFile_nl
);
file
.
read
(
&
tmpString
[
0
]
,
macroFile_nl
);
//================header is over==================//
...
...
@@ -843,7 +843,7 @@ namespace AMDiS { namespace io {
(
"Cannot open file %s
\n
"
,
filename
.
c_str
());
string
fd
(
16
,
' '
);
file
.
read
(
const_cast
<
char
*>
(
fd
.
data
())
,
16
);
file
.
read
(
&
fd
[
0
]
,
16
);
string
Id
=
fd
.
substr
(
0
,
4
);
int
major
=
boost
::
lexical_cast
<
int
>
(
fd
.
substr
(
5
,
1
));
int
minor
=
boost
::
lexical_cast
<
int
>
(
fd
.
substr
(
7
,
1
));
...
...
@@ -854,12 +854,12 @@ namespace AMDiS { namespace io {
file
.
read
(
reinterpret_cast
<
char
*>
(
&
baseDirLen
),
4
);
baseDir
.
resize
(
baseDirLen
,
' '
);
file
.
read
(
const_cast
<
char
*>
(
baseDir
.
data
())
,
baseDirLen
);
file
.
read
(
&
baseDir
[
0
]
,
baseDirLen
);
file
.
read
(
reinterpret_cast
<
char
*>
(
&
nFiles
),
4
);
file
.
read
(
reinterpret_cast
<
char
*>
(
&
macroFile_nl
),
4
);
if
(
macroFile_nl
>
0
)
{
//TODO
macroFilename
.
resize
(
macroFile_nl
,
' '
);
file
.
read
(
const_cast
<
char
*>
(
macroFilename
.
data
())
,
macroFile_nl
);
file
.
read
(
&
macroFilename
[
0
]
,
macroFile_nl
);
}
file
.
read
(
reinterpret_cast
<
char
*>
(
&
nMacros
),
4
);
...
...
AMDiS/src/io/detail/VtkReader.h
View file @
d43c997f
...
...
@@ -108,7 +108,7 @@ namespace AMDiS
}
#endif
inline
std
::
string
getInnerDataArray
(
std
::
string
&
input
,
bool
zlib
)
inline
std
::
string
getInnerDataArray
(
std
::
string
&
input
,
bool
zlib
,
bool
base64
)
{
FUNCNAME
(
"VtkReader::detail::getInnerDataArray()"
);
...
...
@@ -122,16 +122,20 @@ namespace AMDiS
if
(
zlib
)
{
#ifdef HAVE_COMPRESSION
string
s
=
input
.
substr
(
0
,
8
);
s
=
detail
::
base64ToStr
(
s
);
tmp
=
const_cast
<
char
*>
(
s
.
c_str
());
if
(
base64
)
s
=
detail
::
base64ToStr
(
s
);
tmp
=
const_cast
<
char
*>
(
input
.
c_str
());
ptr
=
reinterpret_cast
<
int
*>
(
tmp
);
int
nBlocks
=
*
ptr
;
int
headerSize
=
(((
4
*
nBlocks
+
12
)
%
3
)
>
0
)
?
4
*
((
4
*
nBlocks
+
12
)
/
3
+
1
)
:
4
*
((
4
*
nBlocks
+
12
)
/
3
);
int
headerSize
=
(
base64
)
?
(((
4
*
nBlocks
+
12
)
%
3
)
>
0
)
?
4
*
((
4
*
nBlocks
+
12
)
/
3
+
1
)
:
4
*
((
4
*
nBlocks
+
12
)
/
3
)
:
4
*
nBlocks
+
12
;
header
=
input
.
substr
(
0
,
headerSize
);
body
=
input
.
substr
(
headerSize
);
header
=
detail
::
base64ToStr
(
header
);
body
=
detail
::
base64ToStr
(
body
);
if
(
base64
)
{
header
=
detail
::
base64ToStr
(
header
);
body
=
detail
::
base64ToStr
(
body
);
}
int
blockSize
,
finalSize
,
offset
=
0
;
tmp
=
const_cast
<
char
*>
(
header
.
c_str
());
...
...
@@ -150,7 +154,7 @@ namespace AMDiS
ERROR_EXIT
(
"HAVE_COMPRESSION OFF. VtkReader cannot read APPENDED_COMPRESSED vtu files.
\n
"
);
#endif
}
else
{
header
=
detail
::
base64ToStr
(
input
);
header
=
(
base64
)
?
detail
::
base64ToStr
(
input
)
:
input
;
tmp
=
const_cast
<
char
*>
(
header
.
c_str
());
ptr
=
reinterpret_cast
<
int
*>
(
tmp
);
nBytes
=
*
ptr
;
...
...
@@ -163,12 +167,13 @@ namespace AMDiS
inline
void
binary2pointList
(
std
::
string
&
input
,
std
::
string
type
,
bool
zlib
,
bool
base64
,
std
::
vector
<
WorldVector
<
double
>
>&
pointList
)
{
int
dow
=
Global
::
getGeo
(
WORLD
);
int
dowExplicit
=
3
;
std
::
string
inner
=
getInnerDataArray
(
input
,
zlib
);
std
::
string
inner
=
getInnerDataArray
(
input
,
zlib
,
base64
);
int
nBytes
=
inner
.
length
();
char
*
tmp
=
const_cast
<
char
*>
(
inner
.
c_str
());
...
...
@@ -232,6 +237,7 @@ namespace AMDiS
void
binary2valueList
(
std
::
string
&
input
,
std
::
string
type
,
bool
zlib
,
bool
base64
,
std
::
vector
<
T
>&
valueList
,
int
numComponent
=
1
,
int
numComponentMax
=
-
1
)
...
...
@@ -239,7 +245,7 @@ namespace AMDiS
if
(
numComponentMax
<
0
)
numComponentMax
=
numComponent
;
std
::
string
inner
=
getInnerDataArray
(
input
,
zlib
);
std
::
string
inner
=
getInnerDataArray
(
input
,
zlib
,
base64
);
int
nBytes
=
inner
.
length
();
char
*
tmp
=
const_cast
<
char
*>
(
inner
.
c_str
());
...
...
AMDiS/src/io/detail/VtkWriter.cc
View file @
d43c997f
...
...
@@ -75,14 +75,14 @@ namespace AMDiS { namespace io {
using
namespace
std
;
string
result
(
""
),
header
(
""
),
body
(
""
);
switch
(
format
)
{
case
APPENDED
:
{
BinaryStream
hstream
;
hstream
<<
bstream
.
getSize
();
body
=
bstream
.
str
();
header
=
hstream
.
str
();
result
=
detail
::
base64Encode
(
header
+
body
);
// result = detail::base64Encode(header + body);
result
=
header
+
body
;
break
;
}
case
APPENDED_COMPRESSED
:
{
...
...
@@ -109,7 +109,8 @@ namespace AMDiS { namespace io {
body
+=
subData
;
}
header
=
hstream
.
str
();
result
=
detail
::
base64Encode
(
header
)
+
detail
::
base64Encode
(
body
);
// result = detail::base64Encode(header) + detail::base64Encode(body);
result
=
header
+
body
;
#endif
break
;
}
...
...
@@ -124,13 +125,13 @@ namespace AMDiS { namespace io {
namespace
detail
{
std
::
string
base64Encode
(
std
::
string
text
)
{
unsigned
int
writePaddChars
=
(
3
-
text
.
length
()
%
3
)
%
3
;
std
::
string
base64
(
binary_base64
(
text
.
begin
()),
binary_base64
(
text
.
end
()));
base64
.
append
(
writePaddChars
,
'='
);
return
base64
;
}
//
std::string base64Encode(std::string text)
//
{
//
unsigned int writePaddChars = (3-text.length()%3)%3;
//
std::string base64(binary_base64(text.begin()),binary_base64(text.end()));
//
base64.append(writePaddChars,'=');
//
return base64;
//
}
std
::
string
extract_relative_path
(
std
::
string
valueFilename
,
std
::
string
animationFilename
)
{
...
...
AMDiS/src/io/detail/VtkWriter.h
View file @
d43c997f
...
...
@@ -28,8 +28,8 @@
#include
<string>
#include
<vector>
#include
<sstream>
#include
<boost/archive/iterators/base64_from_binary.hpp>
#include
<boost/archive/iterators/transform_width.hpp>
//
#include <boost/archive/iterators/base64_from_binary.hpp>
//
#include <boost/archive/iterators/transform_width.hpp>
#include
"AdaptInfo.h"
#include
"io/DataCollector.h"
...
...
@@ -272,14 +272,14 @@ namespace AMDiS { namespace io {
namespace
detail
{
typedef
boost
::
archive
::
iterators
::
base64_from_binary
<
// convert binary values to base64 characters
boost
::
archive
::
iterators
::
transform_width
<
// retrieve 6 bit integers from a sequence of 8 bit bytes
std
::
string
::
const_iterator
,
6
,
8
>
>
binary_base64
;
std
::
string
base64Encode
(
std
::
string
text
);
//
typedef
//
boost::archive::iterators::base64_from_binary< // convert binary values to base64 characters
//
boost::archive::iterators::transform_width< // retrieve 6 bit integers from a sequence of 8 bit bytes
//
std::string::const_iterator, 6, 8
//
>
//
> binary_base64;
//
//
std::string base64Encode(std::string text);
std
::
string
extract_relative_path
(
std
::
string
valueFilename
,
std
::
string
animationFilename
);
...
...
AMDiS/src/io/detail/VtkWriter.hh
View file @
d43c997f
...
...
@@ -232,7 +232,8 @@ namespace AMDiS { namespace io {
file
<<
" </Cells>
\n
"
;
file
<<
" </Piece>
\n
"
;
file
<<
" </UnstructuredGrid>
\n
"
;
file
<<
" <AppendedData encoding=
\"
base64
\"
>
\n
"
;
// file << " <AppendedData encoding=\"base64\">\n";
file
<<
" <AppendedData encoding=
\"
raw
\"
>
\n
"
;
file
<<
" _"
<<
finalData
<<
"
\n
"
;
file
<<
" </AppendedData>
\n
"
;
file
<<
"</VTKFile>
\n
"
;
...
...
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