diff options
Diffstat (limited to 'Build/source/utils/asymptote/prc/writePRC.h')
-rw-r--r-- | Build/source/utils/asymptote/prc/writePRC.h | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/prc/writePRC.h b/Build/source/utils/asymptote/prc/writePRC.h new file mode 100644 index 00000000000..6a4da7a70ba --- /dev/null +++ b/Build/source/utils/asymptote/prc/writePRC.h @@ -0,0 +1,172 @@ +/************ +* +* This file is part of a tool for producing 3D content in the PRC format. +* Copyright (C) 2008 Orest Shardt <shardtor (at) gmail dot com> +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +*************/ + +#ifndef __WRITE_PRC_H +#define __WRITE_PRC_H +#include <string> +#include "PRCbitStream.h" +#include "PRC.h" + +struct Point3d +{ + double x,y,z; + Point3d(double a, double b, double c) : x(a),y(b),z(c) {} + void write(PRCbitStream &out) + { + out << x << y << z; + } +}; + +struct Extent3d +{ + Point3d min,max; + Extent3d(const Point3d &m1, const Point3d& m2) : min(m1),max(m2) {} + void write(PRCbitStream &out) + { + // flip the order? Following the documentation, in a real file, min>max. + // Considering the file to be right, min and max can be flipped in both places (here and in description) + // resulting in no practical difference. + // But in other places (Extent3D and Extent1D), min is really before max, so for consistency + // this is left alone. + min.write(out); + max.write(out); + } +}; + +class UUID +{ + public: + UUID(uint32_t u0, uint32_t u1, uint32_t u2, uint32_t u3) : + id0(u0),id1(u1),id2(u2),id3(u3) {} + void write(PRCbitStream &out) + { + out << id0 << id1 << id2 << id3; + } + private: + uint32_t id0,id1,id2,id3; +}; + +uint32_t makeCADID(); +uint32_t makePRCID(); +void writeUnit(PRCbitStream &,bool,double); + +void writeEmptyMarkups(PRCbitStream&); + +class UserData +{ + public: + UserData(uint32_t s = 0, uint8_t* d = 0) : size(s),data(d) {} + void write(PRCbitStream&); + private: + uint32_t size; + uint8_t* data; +}; + +union SingleAttributeData +{ + int32_t integer; + double real; + uint32_t time; + const char *text; +}; + +union AttributeTitle +{ + const char *text; + uint32_t integer; +}; + +class SingleAttribute +{ + public: + SingleAttribute() {} + SingleAttribute(bool b,AttributeTitle t,uint32_t y,SingleAttributeData d) : + titleIsInteger(b), title(t), type(y), data(d) {} + void write(PRCbitStream&); + private: + bool titleIsInteger; + AttributeTitle title; + uint32_t type; + SingleAttributeData data; +}; + +class Attribute +{ + public: + Attribute(bool t,AttributeTitle v, uint32_t s, SingleAttribute* sa) : + titleIsInteger(t),title(v), sizeOfAttributeKeys(s), singleAttributes(sa) + {} + void write(PRCbitStream &); + private: + bool titleIsInteger; + AttributeTitle title; + uint32_t sizeOfAttributeKeys; + SingleAttribute *singleAttributes; +}; + +class Attributes +{ + public: + Attributes(uint32_t n, Attribute* a) : numberOfAttributes(n), attributes(a) + {} + void write(PRCbitStream&); + private: + uint32_t numberOfAttributes; + Attribute *attributes; +}; + +class ContentPRCBase +{ + public: + ContentPRCBase(Attributes *a, std::string n="",bool efr = false, + uint32_t ci = 0, uint32_t cpi = 0, uint32_t pi = 0) : + attributes(a),name(n),eligibleForReference(efr),CADID(ci), + CADPersistentID(cpi),PRCID(pi) {} + void write(PRCbitStream&); + private: + Attributes *attributes; + std::string name; + bool eligibleForReference; + uint32_t CADID, CADPersistentID, PRCID; +}; + +extern AttributeTitle EMPTY_ATTRIBUTE_TITLE; +extern Attribute EMPTY_ATTRIBUTE; +extern Attributes EMPTY_ATTRIBUTES; +extern ContentPRCBase EMPTY_CONTENTPRCBASE; +extern ContentPRCBase EMPTY_CONTENTPRCBASE_WITH_REFERENCE; + +extern std::string currentName; +void writeName(PRCbitStream&,const std::string&); +void resetName(); + +extern uint32_t layer_index; +extern uint32_t index_of_line_style; +extern uint32_t behaviour_bit_field; +static const uint32_t m1=(uint32_t)-1; + +void writeGraphics(PRCbitStream&,uint32_t=m1,uint32_t=m1,uint32_t=1,bool=false); +void resetGraphics(); + +void resetGraphicsAndName(); + + + +#endif //__WRITE_PRC_H |