summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/prc/writePRC.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/prc/writePRC.cc')
-rw-r--r--Build/source/utils/asymptote/prc/writePRC.cc81
1 files changed, 64 insertions, 17 deletions
diff --git a/Build/source/utils/asymptote/prc/writePRC.cc b/Build/source/utils/asymptote/prc/writePRC.cc
index 7e1e1358bd9..ecc6179b36c 100644
--- a/Build/source/utils/asymptote/prc/writePRC.cc
+++ b/Build/source/utils/asymptote/prc/writePRC.cc
@@ -29,6 +29,10 @@
#include <fstream>
#include <sstream>
+#ifndef __GNUC__
+#include <vector>
+#endif
+
using namespace std;
#ifndef __GNUC_PREREQ
@@ -112,7 +116,23 @@ uint32_t Log2(uint32_t x)
#define SerializeContentSingleAttribute( value ) (value).serializeSingleAttribute(pbs);
#define SerializeAttribute( value ) (value).serializeAttribute(pbs);
#define SerializeAttributeData serializeAttributes(pbs);
+#define WriteUncompressedUnsignedInteger( value ) writeUncompressedUnsignedInteger(out, (uint32_t)(value));
+#define SerializeFileStructureUncompressedUniqueId( value ) (value).serializeFileStructureUncompressedUniqueId(out);
+void writeUncompressedUnsignedInteger(ostream &out, uint32_t data)
+{
+#ifdef WORDS_BIGENDIAN
+ out.write(((char*)&data)+3,1);
+ out.write(((char*)&data)+2,1);
+ out.write(((char*)&data)+1,1);
+ out.write(((char*)&data)+0,1);
+#else
+ out.write(((char*)&data)+0,1);
+ out.write(((char*)&data)+1,1);
+ out.write(((char*)&data)+2,1);
+ out.write(((char*)&data)+3,1);
+#endif
+}
double PRCVector3d::Length()
{
@@ -139,7 +159,7 @@ void UserData::write(PRCbitStream &pbs)
for(uint32_t i = 0; i < quot; ++i)
pbs << data[i];
for(uint32_t j = 0; j < rem; ++j) // 0-based, big endian bit counting
- pbs << (bool)(data[quot] & (0x80 >> j));
+ pbs << (bool)((data[quot] & (0x80 >> j))!=0);
}
}
@@ -412,7 +432,7 @@ uint32_t current_layer_index = m1;
uint32_t current_index_of_line_style = m1;
uint16_t current_behaviour_bit_field = 1;
-void writeGraphics(PRCbitStream &pbs,uint32_t l,uint32_t i,uint32_t b,bool force)
+void writeGraphics(PRCbitStream &pbs,uint32_t l,uint32_t i,uint16_t b,bool force)
{
if(force || current_layer_index != l || current_index_of_line_style != i || current_behaviour_bit_field != b)
{
@@ -974,9 +994,7 @@ uint32_t makePRCID()
void writeUnit(PRCbitStream &out,bool fromCAD,double unit)
{
- static const double inches=72;
- static const double cm=inches/2.54;
- out << fromCAD << 10.0/cm; // Use bp.
+ out << fromCAD << unit;
}
void writeEmptyMarkups(PRCbitStream &out)
@@ -1273,13 +1291,23 @@ void PRCCompressedFace::serializeCompressedNurbs(PRCbitStream &pbs, double brep
const uint32_t number_of_control_point_in_u = degree_in_u + 1;
const uint32_t number_of_control_point_in_v = degree_in_v + 1;
+
+#ifdef __GNUC__
PRCVector3d P[number_of_control_point_in_u][number_of_control_point_in_v];
+#else
+ vector<vector<PRCVector3d> > P(number_of_control_point_in_u, vector<PRCVector3d>(number_of_control_point_in_v));
+#endif
for(uint32_t i=0;i<number_of_control_point_in_u;i++)
for(uint32_t j=0;j<number_of_control_point_in_v;j++)
P[i][j] = control_point[i*number_of_control_point_in_v+j];
+#ifdef __GNUC__
itriple compressed_control_point[number_of_control_point_in_u][number_of_control_point_in_v];
uint32_t control_point_type[number_of_control_point_in_u][number_of_control_point_in_v];
-
+#else
+ vector<vector<itriple> > compressed_control_point(number_of_control_point_in_u, vector<itriple>(number_of_control_point_in_v));
+ vector<vector<uint32_t> > control_point_type(number_of_control_point_in_u, vector<uint32_t>(number_of_control_point_in_v));
+#endif
+
uint32_t number_of_bits_for_isomin = 1;
uint32_t number_of_bits_for_rest = 1;
@@ -1491,6 +1519,17 @@ void PRCSphere::serializeSphere(PRCbitStream &pbs)
WriteDouble ( radius )
}
+void PRCCone::serializeCone(PRCbitStream &pbs)
+{
+ WriteUnsignedInteger (PRC_TYPE_SURF_Cone)
+
+ SerializeContentSurface
+ SerializeTransformation
+ SerializeUVParameterization
+ WriteDouble ( bottom_radius )
+ WriteDouble ( semi_angle )
+}
+
void PRCCylinder::serializeCylinder(PRCbitStream &pbs)
{
WriteUnsignedInteger (PRC_TYPE_SURF_Cylinder)
@@ -1815,24 +1854,32 @@ uint32_t PRCTopoContext::addCompressedBrepData(PRCCompressedBrepData*& pCompress
void PRCSingleWireBody::serializeSingleWireBody(PRCbitStream &pbs)
{
- WriteUnsignedInteger ( PRC_TYPE_TOPO_SingleWireBody)
+ WriteUnsignedInteger ( PRC_TYPE_TOPO_SingleWireBody)
- SerializeContentBody
- SerializePtrTopology ( wire_edge )
+ SerializeContentBody
+ SerializePtrTopology ( wire_edge )
+}
+
+void PRCUniqueId::serializeCompressedUniqueId(PRCbitStream &pbs) const
+{
+ WriteUnsignedInteger (id0)
+ WriteUnsignedInteger (id1)
+ WriteUnsignedInteger (id2)
+ WriteUnsignedInteger (id3)
}
-void PRCUniqueId::serializeCompressedUniqueId(PRCbitStream &pbs)
+void PRCUniqueId::serializeFileStructureUncompressedUniqueId(std::ostream& out) const
{
- WriteUnsignedInteger (unique_id0)
- WriteUnsignedInteger (unique_id1)
- WriteUnsignedInteger (unique_id2)
- WriteUnsignedInteger (unique_id3)
+ WriteUncompressedUnsignedInteger (id0)
+ WriteUncompressedUnsignedInteger (id1)
+ WriteUncompressedUnsignedInteger (id2)
+ WriteUncompressedUnsignedInteger (id3)
}
void PRCUnit::serializeUnit(PRCbitStream &pbs)
{
- WriteBoolean (unit_from_CAD_file)
- WriteDouble (unit)
+ WriteBoolean (unit_from_CAD_file)
+ WriteDouble (unit)
}
void PRCProductOccurrence::serializeProductOccurrence(PRCbitStream &pbs)
@@ -1872,7 +1919,7 @@ void PRCProductOccurrence::serializeProductOccurrence(PRCbitStream &pbs)
const bool has_location = location != NULL;
WriteBit (has_location)
if (has_location)
- location->serializeTransformation3d (pbs);
+ location->serializeTransformation3d (pbs);
WriteUnsignedInteger (0) // number_of_references