assimp-3.0/0000755002537200234200000000000011770677212013130 5ustar zmoelnigiemusersassimp-3.0/contrib/0000755002537200234200000000000011770676627014601 5ustar zmoelnigiemusersassimp-3.0/contrib/cppunit_note.txt0000644002537200234200000000047511154051355020034 0ustar zmoelnigiemusersThis is a "slim" version of CPPunit. It contains everything we need, but nothing more. - Tools have been removed - x64-Build configs have been added - VC6 build & headers have been removed (Assimp can't be compiled with vc6) - vc9 solution has been added, vc8 solution uses Assimp 'FastSTL' settings --- Alexassimp-3.0/contrib/clipper/0000755002537200234200000000000011770676627016237 5ustar zmoelnigiemusersassimp-3.0/contrib/clipper/clipper.cpp0000644002537200234200000030661511705146230020370 0ustar zmoelnigiemusers/******************************************************************************* * * * Author : Angus Johnson * * Version : 4.6.3 * * Date : 11 November 2011 * * Website : http://www.angusj.com * * Copyright : Angus Johnson 2010-2011 * * * * License: * * Use, modification & distribution is subject to Boost Software License Ver 1. * * http://www.boost.org/LICENSE_1_0.txt * * * * Attributions: * * The code in this library is an extension of Bala Vatti's clipping algorithm: * * "A generic solution to polygon clipping" * * Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. * * http://portal.acm.org/citation.cfm?id=129906 * * * * Computer graphics and geometric modeling: implementation and algorithms * * By Max K. Agoston * * Springer; 1 edition (January 4, 2005) * * http://books.google.com/books?q=vatti+clipping+agoston * * * * See also: * * "Polygon Offsetting by Computing Winding Numbers" * * Paper no. DETC2005-85513 pp. 565-575 * * ASME 2005 International Design Engineering Technical Conferences * * and Computers and Information in Engineering Conference (IDETC/CIE2005) * * September 24–28, 2005 , Long Beach, California, USA * * http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf * * * *******************************************************************************/ /******************************************************************************* * * * This is a translation of the Delphi Clipper library and the naming style * * used has retained a Delphi flavour. * * * *******************************************************************************/ #include "clipper.hpp" #include #include #include #include #include #include #include namespace ClipperLib { static long64 const loRange = 1518500249; //sqrt(2^63 -1)/2 static long64 const hiRange = 6521908912666391106LL; //sqrt(2^127 -1)/2 static double const pi = 3.141592653589793238; enum Direction { dRightToLeft, dLeftToRight }; enum RangeTest { rtLo, rtHi, rtError }; #define HORIZONTAL (-1.0E+40) #define TOLERANCE (1.0e-20) #define NEAR_ZERO(val) (((val) > -TOLERANCE) && ((val) < TOLERANCE)) #define NEAR_EQUAL(a, b) NEAR_ZERO((a) - (b)) inline long64 Abs(long64 val) { if (val < 0) return -val; else return val; } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ // Int128 class (enables safe math on signed 64bit integers) // eg Int128 val1((long64)9223372036854775807); //ie 2^63 -1 // Int128 val2((long64)9223372036854775807); // Int128 val3 = val1 * val2; // val3.AsString => "85070591730234615847396907784232501249" (8.5e+37) //------------------------------------------------------------------------------ class Int128 { public: Int128(long64 _lo = 0) { hi = 0; if (_lo < 0) { lo = -_lo; Negate(*this); } else lo = _lo; } Int128(const Int128 &val): hi(val.hi), lo(val.lo){} long64 operator = (const long64 &val) { hi = 0; lo = Abs(val); if (val < 0) Negate(*this); return val; } bool operator == (const Int128 &val) const {return (hi == val.hi && lo == val.lo);} bool operator != (const Int128 &val) const { return !(*this == val);} bool operator > (const Int128 &val) const { if (hi > val.hi) return true; else if (hi < val.hi) return false; else return ulong64(lo) > ulong64(val.lo); } bool operator < (const Int128 &val) const { if (hi < val.hi) return true; else if (hi > val.hi) return false; else return ulong64(lo) < ulong64(val.lo); } Int128& operator += (const Int128 &rhs) { hi += rhs.hi; lo += rhs.lo; if (ulong64(lo) < ulong64(rhs.lo)) hi++; return *this; } Int128 operator + (const Int128 &rhs) const { Int128 result(*this); result+= rhs; return result; } Int128& operator -= (const Int128 &rhs) { Int128 tmp(rhs); Negate(tmp); *this += tmp; return *this; } Int128 operator - (const Int128 &rhs) const { Int128 result(*this); result-= rhs; return result; } Int128 operator * (const Int128 &rhs) const { if ( !(hi == 0 || hi == -1) || !(rhs.hi == 0 || rhs.hi == -1)) throw "Int128 operator*: overflow error"; bool negate = (hi < 0) != (rhs.hi < 0); Int128 tmp(*this); if (tmp.hi < 0) Negate(tmp); ulong64 int1Hi = ulong64(tmp.lo) >> 32; ulong64 int1Lo = ulong64(tmp.lo & 0xFFFFFFFF); tmp = rhs; if (tmp.hi < 0) Negate(tmp); ulong64 int2Hi = ulong64(tmp.lo) >> 32; ulong64 int2Lo = ulong64(tmp.lo & 0xFFFFFFFF); //nb: see comments in clipper.pas ulong64 a = int1Hi * int2Hi; ulong64 b = int1Lo * int2Lo; ulong64 c = int1Hi * int2Lo + int1Lo * int2Hi; tmp.hi = long64(a + (c >> 32)); tmp.lo = long64(c << 32); tmp.lo += long64(b); if (ulong64(tmp.lo) < b) tmp.hi++; if (negate) Negate(tmp); return tmp; } Int128 operator/ (const Int128 &rhs) const { if (rhs.lo == 0 && rhs.hi == 0) throw "Int128 operator/: divide by zero"; bool negate = (rhs.hi < 0) != (hi < 0); Int128 result(*this), denom(rhs); if (result.hi < 0) Negate(result); if (denom.hi < 0) Negate(denom); if (denom > result) return Int128(0); //result is only a fraction of 1 Negate(denom); Int128 p(0); for (int i = 0; i < 128; ++i) { p.hi = p.hi << 1; if (p.lo < 0) p.hi++; p.lo = long64(p.lo) << 1; if (result.hi < 0) p.lo++; result.hi = result.hi << 1; if (result.lo < 0) result.hi++; result.lo = long64(result.lo) << 1; Int128 p2(p); p += denom; if (p.hi < 0) p = p2; else result.lo++; } if (negate) Negate(result); return result; } double AsDouble() const { const double shift64 = 18446744073709551616.0; //2^64 const double bit64 = 9223372036854775808.0; if (hi < 0) { Int128 tmp(*this); Negate(tmp); if (tmp.lo < 0) return (double)tmp.lo - bit64 - tmp.hi * shift64; else return -(double)tmp.lo - tmp.hi * shift64; } else if (lo < 0) return -(double)lo + bit64 + hi * shift64; else return (double)lo + (double)hi * shift64; } //for bug testing ... std::string AsString() const { std::string result; unsigned char r = 0; Int128 tmp(0), val(*this); if (hi < 0) Negate(val); result.resize(50); std::string::size_type i = result.size() -1; while (val.hi != 0 || val.lo != 0) { Div10(val, tmp, r); result[i--] = char('0' + r); val = tmp; } if (hi < 0) result[i--] = '-'; result.erase(0,i+1); if (result.size() == 0) result = "0"; return result; } private: long64 hi; long64 lo; static void Negate(Int128 &val) { if (val.lo == 0) { if( val.hi == 0) return; val.lo = ~val.lo; val.hi = ~val.hi +1; } else { val.lo = ~val.lo +1; val.hi = ~val.hi; } } //debugging only ... void Div10(const Int128 val, Int128& result, unsigned char & remainder) const { remainder = 0; result = 0; for (int i = 63; i >= 0; --i) { if ((val.hi & ((long64)1 << i)) != 0) remainder = char((remainder * 2) + 1); else remainder *= char(2); if (remainder >= 10) { result.hi += ((long64)1 << i); remainder -= char(10); } } for (int i = 63; i >= 0; --i) { if ((val.lo & ((long64)1 << i)) != 0) remainder = char((remainder * 2) + 1); else remainder *= char(2); if (remainder >= 10) { result.lo += ((long64)1 << i); remainder -= char(10); } } } }; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ RangeTest TestRange(const Polygon &pts) { RangeTest result = rtLo; for (Polygon::size_type i = 0; i < pts.size(); ++i) { if (Abs(pts[i].X) > hiRange || Abs(pts[i].Y) > hiRange) return rtError; else if (Abs(pts[i].X) > loRange || Abs(pts[i].Y) > loRange) result = rtHi; } return result; } //------------------------------------------------------------------------------ bool Orientation(const Polygon &poly) { int highI = (int)poly.size() -1; if (highI < 2) return false; bool UseFullInt64Range = false; int j = 0, jplus, jminus; for (int i = 0; i <= highI; ++i) { if (Abs(poly[i].X) > hiRange || Abs(poly[i].Y) > hiRange) throw "Coordinate exceeds range bounds."; if (Abs(poly[i].X) > loRange || Abs(poly[i].Y) > loRange) UseFullInt64Range = true; if (poly[i].Y < poly[j].Y) continue; if ((poly[i].Y > poly[j].Y || poly[i].X < poly[j].X)) j = i; }; if (j == highI) jplus = 0; else jplus = j +1; if (j == 0) jminus = highI; else jminus = j -1; IntPoint vec1, vec2; //get cross product of vectors of the edges adjacent to highest point ... vec1.X = poly[j].X - poly[jminus].X; vec1.Y = poly[j].Y - poly[jminus].Y; vec2.X = poly[jplus].X - poly[j].X; vec2.Y = poly[jplus].Y - poly[j].Y; if (UseFullInt64Range) { Int128 cross = Int128(vec1.X) * Int128(vec2.Y) - Int128(vec2.X) * Int128(vec1.Y); return cross > 0; } else { return (vec1.X * vec2.Y - vec2.X * vec1.Y) > 0; } } //------------------------------------------------------------------------------ bool Orientation(OutRec *outRec, bool UseFullInt64Range) { OutPt *opBottom = outRec->pts, *op = outRec->pts->next; while (op != outRec->pts) { if (op->pt.Y >= opBottom->pt.Y) { if (op->pt.Y > opBottom->pt.Y || op->pt.X < opBottom->pt.X) opBottom = op; } op = op->next; } IntPoint vec1, vec2; vec1.X = op->pt.X - op->prev->pt.X; vec1.Y = op->pt.Y - op->prev->pt.Y; vec2.X = op->next->pt.X - op->pt.X; vec2.Y = op->next->pt.Y - op->pt.Y; if (UseFullInt64Range) { Int128 cross = Int128(vec1.X) * Int128(vec2.Y) - Int128(vec2.X) * Int128(vec1.Y); return cross > 0; } else { return (vec1.X * vec2.Y - vec2.X * vec1.Y) > 0; } } //------------------------------------------------------------------------------ inline bool PointsEqual( const IntPoint &pt1, const IntPoint &pt2) { return ( pt1.X == pt2.X && pt1.Y == pt2.Y ); } //------------------------------------------------------------------------------ double Area(const Polygon &poly) { int highI = (int)poly.size() -1; if (highI < 2) return 0; bool UseFullInt64Range; RangeTest rt = TestRange(poly); switch (rt) { case rtLo: UseFullInt64Range = false; break; case rtHi: UseFullInt64Range = true; break; default: throw "Coordinate exceeds range bounds."; } if (UseFullInt64Range) { Int128 a(0); a = (Int128(poly[highI].X) * Int128(poly[0].Y)) - Int128(poly[0].X) * Int128(poly[highI].Y); for (int i = 0; i < highI; ++i) a += Int128(poly[i].X) * Int128(poly[i+1].Y) - Int128(poly[i+1].X) * Int128(poly[i].Y); return a.AsDouble() / 2; } else { double a; a = (double)poly[highI].X * poly[0].Y - (double)poly[0].X * poly[highI].Y; for (int i = 0; i < highI; ++i) a += (double)poly[i].X * poly[i+1].Y - (double)poly[i+1].X * poly[i].Y; return a/2; } } //------------------------------------------------------------------------------ bool PointIsVertex(const IntPoint &pt, OutPt *pp) { OutPt *pp2 = pp; do { if (PointsEqual(pp2->pt, pt)) return true; pp2 = pp2->next; } while (pp2 != pp); return false; } //------------------------------------------------------------------------------ bool PointInPolygon(const IntPoint &pt, OutPt *pp, bool UseFullInt64Range) { OutPt *pp2 = pp; bool result = false; if (UseFullInt64Range) { do { if ((((pp2->pt.Y <= pt.Y) && (pt.Y < pp2->prev->pt.Y)) || ((pp2->prev->pt.Y <= pt.Y) && (pt.Y < pp2->pt.Y))) && Int128(pt.X - pp2->pt.X) < (Int128(pp2->prev->pt.X - pp2->pt.X) * Int128(pt.Y - pp2->pt.Y)) / Int128(pp2->prev->pt.Y - pp2->pt.Y)) result = !result; pp2 = pp2->next; } while (pp2 != pp); } else { do { if ((((pp2->pt.Y <= pt.Y) && (pt.Y < pp2->prev->pt.Y)) || ((pp2->prev->pt.Y <= pt.Y) && (pt.Y < pp2->pt.Y))) && (pt.X < (pp2->prev->pt.X - pp2->pt.X) * (pt.Y - pp2->pt.Y) / (pp2->prev->pt.Y - pp2->pt.Y) + pp2->pt.X )) result = !result; pp2 = pp2->next; } while (pp2 != pp); } return result; } //------------------------------------------------------------------------------ bool SlopesEqual(TEdge &e1, TEdge &e2, bool UseFullInt64Range) { if (e1.ybot == e1.ytop) return (e2.ybot == e2.ytop); else if (e1.xbot == e1.xtop) return (e2.xbot == e2.xtop); else if (UseFullInt64Range) return Int128(e1.ytop - e1.ybot) * Int128(e2.xtop - e2.xbot) == Int128(e1.xtop - e1.xbot) * Int128(e2.ytop - e2.ybot); else return (e1.ytop - e1.ybot)*(e2.xtop - e2.xbot) == (e1.xtop - e1.xbot)*(e2.ytop - e2.ybot); } //------------------------------------------------------------------------------ bool SlopesEqual(const IntPoint pt1, const IntPoint pt2, const IntPoint pt3, bool UseFullInt64Range) { if (pt1.Y == pt2.Y) return (pt2.Y == pt3.Y); else if (pt1.X == pt2.X) return (pt2.X == pt3.X); else if (UseFullInt64Range) return Int128(pt1.Y-pt2.Y) * Int128(pt2.X-pt3.X) == Int128(pt1.X-pt2.X) * Int128(pt2.Y-pt3.Y); else return (pt1.Y-pt2.Y)*(pt2.X-pt3.X) == (pt1.X-pt2.X)*(pt2.Y-pt3.Y); } //------------------------------------------------------------------------------ bool SlopesEqual(const IntPoint pt1, const IntPoint pt2, const IntPoint pt3, const IntPoint pt4, bool UseFullInt64Range) { if (pt1.Y == pt2.Y) return (pt3.Y == pt4.Y); else if (pt1.X == pt2.X) return (pt3.X == pt4.X); else if (UseFullInt64Range) return Int128(pt1.Y-pt2.Y) * Int128(pt3.X-pt4.X) == Int128(pt1.X-pt2.X) * Int128(pt3.Y-pt4.Y); else return (pt1.Y-pt2.Y)*(pt3.X-pt4.X) == (pt1.X-pt2.X)*(pt3.Y-pt4.Y); } //------------------------------------------------------------------------------ double GetDx(const IntPoint pt1, const IntPoint pt2) { if (pt1.Y == pt2.Y) return HORIZONTAL; else return (double)(pt2.X - pt1.X) / (double)(pt2.Y - pt1.Y); } //--------------------------------------------------------------------------- void SetDx(TEdge &e) { if (e.ybot == e.ytop) e.dx = HORIZONTAL; else e.dx = (double)(e.xtop - e.xbot) / (double)(e.ytop - e.ybot); } //--------------------------------------------------------------------------- void SwapSides(TEdge &edge1, TEdge &edge2) { EdgeSide side = edge1.side; edge1.side = edge2.side; edge2.side = side; } //------------------------------------------------------------------------------ void SwapPolyIndexes(TEdge &edge1, TEdge &edge2) { int outIdx = edge1.outIdx; edge1.outIdx = edge2.outIdx; edge2.outIdx = outIdx; } //------------------------------------------------------------------------------ inline long64 Round(double val) { if ((val < 0)) return static_cast(val - 0.5); else return static_cast(val + 0.5); } //------------------------------------------------------------------------------ long64 TopX(TEdge &edge, const long64 currentY) { if( currentY == edge.ytop ) return edge.xtop; return edge.xbot + Round(edge.dx *(currentY - edge.ybot)); } //------------------------------------------------------------------------------ long64 TopX(const IntPoint pt1, const IntPoint pt2, const long64 currentY) { //preconditions: pt1.Y <> pt2.Y and pt1.Y > pt2.Y if (currentY >= pt1.Y) return pt1.X; else if (currentY == pt2.Y) return pt2.X; else if (pt1.X == pt2.X) return pt1.X; else { double q = (double)(pt1.X-pt2.X)/(double)(pt1.Y-pt2.Y); return Round(pt1.X + (currentY - pt1.Y) *q); } } //------------------------------------------------------------------------------ bool IntersectPoint(TEdge &edge1, TEdge &edge2, IntPoint &ip, bool UseFullInt64Range) { double b1, b2; if (SlopesEqual(edge1, edge2, UseFullInt64Range)) return false; else if (NEAR_ZERO(edge1.dx)) { ip.X = edge1.xbot; if (NEAR_EQUAL(edge2.dx, HORIZONTAL)) { ip.Y = edge2.ybot; } else { b2 = edge2.ybot - (edge2.xbot/edge2.dx); ip.Y = Round(ip.X/edge2.dx + b2); } } else if (NEAR_ZERO(edge2.dx)) { ip.X = edge2.xbot; if (NEAR_EQUAL(edge1.dx, HORIZONTAL)) { ip.Y = edge1.ybot; } else { b1 = edge1.ybot - (edge1.xbot/edge1.dx); ip.Y = Round(ip.X/edge1.dx + b1); } } else { b1 = edge1.xbot - edge1.ybot * edge1.dx; b2 = edge2.xbot - edge2.ybot * edge2.dx; b2 = (b2-b1)/(edge1.dx - edge2.dx); ip.Y = Round(b2); ip.X = Round(edge1.dx * b2 + b1); } return //can be *so close* to the top of one edge that the rounded Y equals one ytop ... (ip.Y == edge1.ytop && ip.Y >= edge2.ytop && edge1.tmpX > edge2.tmpX) || (ip.Y == edge2.ytop && ip.Y >= edge1.ytop && edge1.tmpX > edge2.tmpX) || (ip.Y > edge1.ytop && ip.Y > edge2.ytop); } //------------------------------------------------------------------------------ void ReversePolyPtLinks(OutPt &pp) { OutPt *pp1, *pp2; pp1 = &pp; do { pp2 = pp1->next; pp1->next = pp1->prev; pp1->prev = pp2; pp1 = pp2; } while( pp1 != &pp ); } //------------------------------------------------------------------------------ void DisposeOutPts(OutPt*& pp) { if (pp == 0) return; pp->prev->next = 0; while( pp ) { OutPt *tmpPp = pp; pp = pp->next; delete tmpPp ; } } //------------------------------------------------------------------------------ void InitEdge(TEdge *e, TEdge *eNext, TEdge *ePrev, const IntPoint &pt, PolyType polyType) { std::memset( e, 0, sizeof( TEdge )); e->next = eNext; e->prev = ePrev; e->xcurr = pt.X; e->ycurr = pt.Y; if (e->ycurr >= e->next->ycurr) { e->xbot = e->xcurr; e->ybot = e->ycurr; e->xtop = e->next->xcurr; e->ytop = e->next->ycurr; e->windDelta = 1; } else { e->xtop = e->xcurr; e->ytop = e->ycurr; e->xbot = e->next->xcurr; e->ybot = e->next->ycurr; e->windDelta = -1; } SetDx(*e); e->polyType = polyType; e->outIdx = -1; } //------------------------------------------------------------------------------ inline void SwapX(TEdge &e) { //swap horizontal edges' top and bottom x's so they follow the natural //progression of the bounds - ie so their xbots will align with the //adjoining lower edge. [Helpful in the ProcessHorizontal() method.] e.xcurr = e.xtop; e.xtop = e.xbot; e.xbot = e.xcurr; } //------------------------------------------------------------------------------ void SwapPoints(IntPoint &pt1, IntPoint &pt2) { IntPoint tmp = pt1; pt1 = pt2; pt2 = tmp; } //------------------------------------------------------------------------------ bool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a, IntPoint pt2b, IntPoint &pt1, IntPoint &pt2) { //precondition: segments are colinear. if ( pt1a.Y == pt1b.Y || Abs((pt1a.X - pt1b.X)/(pt1a.Y - pt1b.Y)) > 1 ) { if (pt1a.X > pt1b.X) SwapPoints(pt1a, pt1b); if (pt2a.X > pt2b.X) SwapPoints(pt2a, pt2b); if (pt1a.X > pt2a.X) pt1 = pt1a; else pt1 = pt2a; if (pt1b.X < pt2b.X) pt2 = pt1b; else pt2 = pt2b; return pt1.X < pt2.X; } else { if (pt1a.Y < pt1b.Y) SwapPoints(pt1a, pt1b); if (pt2a.Y < pt2b.Y) SwapPoints(pt2a, pt2b); if (pt1a.Y < pt2a.Y) pt1 = pt1a; else pt1 = pt2a; if (pt1b.Y > pt2b.Y) pt2 = pt1b; else pt2 = pt2b; return pt1.Y > pt2.Y; } } //------------------------------------------------------------------------------ OutPt* PolygonBottom(OutPt* pp) { OutPt* p = pp->next; OutPt* result = pp; while (p != pp) { if (p->pt.Y > result->pt.Y) result = p; else if (p->pt.Y == result->pt.Y && p->pt.X < result->pt.X) result = p; p = p->next; } return result; } //------------------------------------------------------------------------------ bool FindSegment(OutPt* &pp, IntPoint &pt1, IntPoint &pt2) { //outPt1 & outPt2 => the overlap segment (if the function returns true) if (!pp) return false; OutPt* pp2 = pp; IntPoint pt1a = pt1, pt2a = pt2; do { if (SlopesEqual(pt1a, pt2a, pp->pt, pp->prev->pt, true) && SlopesEqual(pt1a, pt2a, pp->pt, true) && GetOverlapSegment(pt1a, pt2a, pp->pt, pp->prev->pt, pt1, pt2)) return true; pp = pp->next; } while (pp != pp2); return false; } //------------------------------------------------------------------------------ bool Pt3IsBetweenPt1AndPt2(const IntPoint pt1, const IntPoint pt2, const IntPoint pt3) { if (PointsEqual(pt1, pt3) || PointsEqual(pt2, pt3)) return true; else if (pt1.X != pt2.X) return (pt1.X < pt3.X) == (pt3.X < pt2.X); else return (pt1.Y < pt3.Y) == (pt3.Y < pt2.Y); } //------------------------------------------------------------------------------ OutPt* InsertPolyPtBetween(OutPt* p1, OutPt* p2, const IntPoint pt) { if (p1 == p2) throw "JoinError"; OutPt* result = new OutPt; result->pt = pt; if (p2 == p1->next) { p1->next = result; p2->prev = result; result->next = p2; result->prev = p1; } else { p2->next = result; p1->prev = result; result->next = p1; result->prev = p2; } return result; } //------------------------------------------------------------------------------ // ClipperBase class methods ... //------------------------------------------------------------------------------ ClipperBase::ClipperBase() //constructor { m_MinimaList = 0; m_CurrentLM = 0; m_UseFullRange = true; } //------------------------------------------------------------------------------ ClipperBase::~ClipperBase() //destructor { Clear(); } //------------------------------------------------------------------------------ bool ClipperBase::AddPolygon( const Polygon &pg, PolyType polyType) { int len = (int)pg.size(); if (len < 3) return false; Polygon p(len); p[0] = pg[0]; int j = 0; long64 maxVal; if (m_UseFullRange) maxVal = hiRange; else maxVal = loRange; for (int i = 0; i < len; ++i) { if (Abs(pg[i].X) > maxVal || Abs(pg[i].Y) > maxVal) { if (m_UseFullRange) throw "Coordinate exceeds range bounds"; maxVal = hiRange; if (Abs(pg[i].X) > maxVal || Abs(pg[i].Y) > maxVal) throw "Coordinate exceeds range bounds"; m_UseFullRange = true; } if (i == 0 || PointsEqual(p[j], pg[i])) continue; else if (j > 0 && SlopesEqual(p[j-1], p[j], pg[i], m_UseFullRange)) { if (PointsEqual(p[j-1], pg[i])) j--; } else j++; p[j] = pg[i]; } if (j < 2) return false; len = j+1; for (;;) { //nb: test for point equality before testing slopes ... if (PointsEqual(p[j], p[0])) j--; else if (PointsEqual(p[0], p[1]) || SlopesEqual(p[j], p[0], p[1], m_UseFullRange)) p[0] = p[j--]; else if (SlopesEqual(p[j-1], p[j], p[0], m_UseFullRange)) j--; else if (SlopesEqual(p[0], p[1], p[2], m_UseFullRange)) { for (int i = 2; i <= j; ++i) p[i-1] = p[i]; j--; } //exit loop if nothing is changed or there are too few vertices ... if (j == len-1 || j < 2) break; len = j +1; } if (len < 3) return false; //create a new edge array ... TEdge *edges = new TEdge [len]; m_edges.push_back(edges); //convert vertices to a double-linked-list of edges and initialize ... edges[0].xcurr = p[0].X; edges[0].ycurr = p[0].Y; InitEdge(&edges[len-1], &edges[0], &edges[len-2], p[len-1], polyType); for (int i = len-2; i > 0; --i) InitEdge(&edges[i], &edges[i+1], &edges[i-1], p[i], polyType); InitEdge(&edges[0], &edges[1], &edges[len-1], p[0], polyType); //reset xcurr & ycurr and find 'eHighest' (given the Y axis coordinates //increase downward so the 'highest' edge will have the smallest ytop) ... TEdge *e = &edges[0]; TEdge *eHighest = e; do { e->xcurr = e->xbot; e->ycurr = e->ybot; if (e->ytop < eHighest->ytop) eHighest = e; e = e->next; } while ( e != &edges[0]); //make sure eHighest is positioned so the following loop works safely ... if (eHighest->windDelta > 0) eHighest = eHighest->next; if (NEAR_EQUAL(eHighest->dx, HORIZONTAL)) eHighest = eHighest->next; //finally insert each local minima ... e = eHighest; do { e = AddBoundsToLML(e); } while( e != eHighest ); return true; } //------------------------------------------------------------------------------ void ClipperBase::InsertLocalMinima(LocalMinima *newLm) { if( ! m_MinimaList ) { m_MinimaList = newLm; } else if( newLm->Y >= m_MinimaList->Y ) { newLm->next = m_MinimaList; m_MinimaList = newLm; } else { LocalMinima* tmpLm = m_MinimaList; while( tmpLm->next && ( newLm->Y < tmpLm->next->Y ) ) tmpLm = tmpLm->next; newLm->next = tmpLm->next; tmpLm->next = newLm; } } //------------------------------------------------------------------------------ TEdge* ClipperBase::AddBoundsToLML(TEdge *e) { //Starting at the top of one bound we progress to the bottom where there's //a local minima. We then go to the top of the next bound. These two bounds //form the left and right (or right and left) bounds of the local minima. e->nextInLML = 0; e = e->next; for (;;) { if (NEAR_EQUAL(e->dx, HORIZONTAL)) { //nb: proceed through horizontals when approaching from their right, // but break on horizontal minima if approaching from their left. // This ensures 'local minima' are always on the left of horizontals. if (e->next->ytop < e->ytop && e->next->xbot > e->prev->xbot) break; if (e->xtop != e->prev->xbot) SwapX(*e); e->nextInLML = e->prev; } else if (e->ycurr == e->prev->ycurr) break; else e->nextInLML = e->prev; e = e->next; } //e and e.prev are now at a local minima ... LocalMinima* newLm = new LocalMinima; newLm->next = 0; newLm->Y = e->prev->ybot; if ( NEAR_EQUAL(e->dx, HORIZONTAL) ) //horizontal edges never start a left bound { if (e->xbot != e->prev->xbot) SwapX(*e); newLm->leftBound = e->prev; newLm->rightBound = e; } else if (e->dx < e->prev->dx) { newLm->leftBound = e->prev; newLm->rightBound = e; } else { newLm->leftBound = e; newLm->rightBound = e->prev; } newLm->leftBound->side = esLeft; newLm->rightBound->side = esRight; InsertLocalMinima( newLm ); for (;;) { if ( e->next->ytop == e->ytop && !NEAR_EQUAL(e->next->dx, HORIZONTAL) ) break; e->nextInLML = e->next; e = e->next; if ( NEAR_EQUAL(e->dx, HORIZONTAL) && e->xbot != e->prev->xtop) SwapX(*e); } return e->next; } //------------------------------------------------------------------------------ bool ClipperBase::AddPolygons(const Polygons &ppg, PolyType polyType) { bool result = true; for (Polygons::size_type i = 0; i < ppg.size(); ++i) if (AddPolygon(ppg[i], polyType)) result = false; return result; } //------------------------------------------------------------------------------ void ClipperBase::Clear() { DisposeLocalMinimaList(); for (EdgeList::size_type i = 0; i < m_edges.size(); ++i) delete [] m_edges[i]; m_edges.clear(); m_UseFullRange = false; } //------------------------------------------------------------------------------ void ClipperBase::Reset() { m_CurrentLM = m_MinimaList; if( !m_CurrentLM ) return; //ie nothing to process //reset all edges ... LocalMinima* lm = m_MinimaList; while( lm ) { TEdge* e = lm->leftBound; while( e ) { e->xcurr = e->xbot; e->ycurr = e->ybot; e->side = esLeft; e->outIdx = -1; e = e->nextInLML; } e = lm->rightBound; while( e ) { e->xcurr = e->xbot; e->ycurr = e->ybot; e->side = esRight; e->outIdx = -1; e = e->nextInLML; } lm = lm->next; } } //------------------------------------------------------------------------------ void ClipperBase::DisposeLocalMinimaList() { while( m_MinimaList ) { LocalMinima* tmpLm = m_MinimaList->next; delete m_MinimaList; m_MinimaList = tmpLm; } m_CurrentLM = 0; } //------------------------------------------------------------------------------ void ClipperBase::PopLocalMinima() { if( ! m_CurrentLM ) return; m_CurrentLM = m_CurrentLM->next; } //------------------------------------------------------------------------------ IntRect ClipperBase::GetBounds() { IntRect result; LocalMinima* lm = m_MinimaList; if (!lm) { result.left = result.top = result.right = result.bottom = 0; return result; } result.left = lm->leftBound->xbot; result.top = lm->leftBound->ybot; result.right = lm->leftBound->xbot; result.bottom = lm->leftBound->ybot; while (lm) { if (lm->leftBound->ybot > result.bottom) result.bottom = lm->leftBound->ybot; TEdge* e = lm->leftBound; for (;;) { TEdge* bottomE = e; while (e->nextInLML) { if (e->xbot < result.left) result.left = e->xbot; if (e->xbot > result.right) result.right = e->xbot; e = e->nextInLML; } if (e->xbot < result.left) result.left = e->xbot; if (e->xbot > result.right) result.right = e->xbot; if (e->xtop < result.left) result.left = e->xtop; if (e->xtop > result.right) result.right = e->xtop; if (e->ytop < result.top) result.top = e->ytop; if (bottomE == lm->leftBound) e = lm->rightBound; else break; } lm = lm->next; } return result; } //------------------------------------------------------------------------------ // TClipper methods ... //------------------------------------------------------------------------------ Clipper::Clipper() : ClipperBase() //constructor { m_Scanbeam = 0; m_ActiveEdges = 0; m_SortedEdges = 0; m_IntersectNodes = 0; m_ExecuteLocked = false; m_UseFullRange = false; m_ReverseOutput = false; } //------------------------------------------------------------------------------ Clipper::~Clipper() //destructor { Clear(); DisposeScanbeamList(); } //------------------------------------------------------------------------------ void Clipper::Clear() { if (m_edges.size() == 0) return; //avoids problems with ClipperBase destructor DisposeAllPolyPts(); ClipperBase::Clear(); } //------------------------------------------------------------------------------ void Clipper::DisposeScanbeamList() { while ( m_Scanbeam ) { Scanbeam* sb2 = m_Scanbeam->next; delete m_Scanbeam; m_Scanbeam = sb2; } } //------------------------------------------------------------------------------ void Clipper::Reset() { ClipperBase::Reset(); m_Scanbeam = 0; m_ActiveEdges = 0; m_SortedEdges = 0; LocalMinima* lm = m_MinimaList; while (lm) { InsertScanbeam(lm->Y); InsertScanbeam(lm->leftBound->ytop); lm = lm->next; } } //------------------------------------------------------------------------------ bool Clipper::Execute(ClipType clipType, Polygons &solution, PolyFillType subjFillType, PolyFillType clipFillType) { if( m_ExecuteLocked ) return false; m_ExecuteLocked = true; solution.resize(0); m_SubjFillType = subjFillType; m_ClipFillType = clipFillType; m_ClipType = clipType; bool succeeded = ExecuteInternal(false); if (succeeded) BuildResult(solution); m_ExecuteLocked = false; return succeeded; } //------------------------------------------------------------------------------ bool Clipper::Execute(ClipType clipType, ExPolygons &solution, PolyFillType subjFillType, PolyFillType clipFillType) { if( m_ExecuteLocked ) return false; m_ExecuteLocked = true; solution.resize(0); m_SubjFillType = subjFillType; m_ClipFillType = clipFillType; m_ClipType = clipType; bool succeeded = ExecuteInternal(true); if (succeeded) BuildResultEx(solution); m_ExecuteLocked = false; return succeeded; } //------------------------------------------------------------------------------ bool PolySort(OutRec *or1, OutRec *or2) { if (or1 == or2) return false; if (!or1->pts || !or2->pts) { if (or1->pts != or2->pts) { if (or1->pts) return true; else return false; } else return false; } int i1, i2; if (or1->isHole) i1 = or1->FirstLeft->idx; else i1 = or1->idx; if (or2->isHole) i2 = or2->FirstLeft->idx; else i2 = or2->idx; int result = i1 - i2; if (result == 0 && (or1->isHole != or2->isHole)) { if (or1->isHole) return false; else return true; } else return result < 0; } //------------------------------------------------------------------------------ OutRec* FindAppendLinkEnd(OutRec *outRec) { while (outRec->AppendLink) outRec = outRec->AppendLink; return outRec; } //------------------------------------------------------------------------------ void Clipper::FixHoleLinkage(OutRec *outRec) { OutRec *tmp; if (outRec->bottomPt) tmp = m_PolyOuts[outRec->bottomPt->idx]->FirstLeft; else tmp = outRec->FirstLeft; if (outRec == tmp) throw clipperException("HoleLinkage error"); if (tmp) { if (tmp->AppendLink) tmp = FindAppendLinkEnd(tmp); if (tmp == outRec) tmp = 0; else if (tmp->isHole) { FixHoleLinkage(tmp); tmp = tmp->FirstLeft; } } outRec->FirstLeft = tmp; if (!tmp) outRec->isHole = false; outRec->AppendLink = 0; } //------------------------------------------------------------------------------ bool Clipper::ExecuteInternal(bool fixHoleLinkages) { bool succeeded; try { Reset(); if (!m_CurrentLM ) return true; long64 botY = PopScanbeam(); do { InsertLocalMinimaIntoAEL(botY); ClearHorzJoins(); ProcessHorizontals(); long64 topY = PopScanbeam(); succeeded = ProcessIntersections(botY, topY); if (!succeeded) break; ProcessEdgesAtTopOfScanbeam(topY); botY = topY; } while( m_Scanbeam ); } catch(...) { succeeded = false; } if (succeeded) { //tidy up output polygons and fix orientations where necessary ... for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) { OutRec *outRec = m_PolyOuts[i]; if (!outRec->pts) continue; FixupOutPolygon(*outRec); if (!outRec->pts) continue; if (outRec->isHole && fixHoleLinkages) FixHoleLinkage(outRec); if (outRec->isHole == (m_ReverseOutput ^ Orientation(outRec, m_UseFullRange))) ReversePolyPtLinks(*outRec->pts); } JoinCommonEdges(fixHoleLinkages); if (fixHoleLinkages) std::sort(m_PolyOuts.begin(), m_PolyOuts.end(), PolySort); } ClearJoins(); ClearHorzJoins(); return succeeded; } //------------------------------------------------------------------------------ void Clipper::InsertScanbeam(const long64 Y) { if( !m_Scanbeam ) { m_Scanbeam = new Scanbeam; m_Scanbeam->next = 0; m_Scanbeam->Y = Y; } else if( Y > m_Scanbeam->Y ) { Scanbeam* newSb = new Scanbeam; newSb->Y = Y; newSb->next = m_Scanbeam; m_Scanbeam = newSb; } else { Scanbeam* sb2 = m_Scanbeam; while( sb2->next && ( Y <= sb2->next->Y ) ) sb2 = sb2->next; if( Y == sb2->Y ) return; //ie ignores duplicates Scanbeam* newSb = new Scanbeam; newSb->Y = Y; newSb->next = sb2->next; sb2->next = newSb; } } //------------------------------------------------------------------------------ long64 Clipper::PopScanbeam() { long64 Y = m_Scanbeam->Y; Scanbeam* sb2 = m_Scanbeam; m_Scanbeam = m_Scanbeam->next; delete sb2; return Y; } //------------------------------------------------------------------------------ void Clipper::DisposeAllPolyPts(){ for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) DisposeOutRec(i); m_PolyOuts.clear(); } //------------------------------------------------------------------------------ void Clipper::DisposeOutRec(PolyOutList::size_type index, bool ignorePts) { OutRec *outRec = m_PolyOuts[index]; if (!ignorePts && outRec->pts) DisposeOutPts(outRec->pts); delete outRec; m_PolyOuts[index] = 0; } //------------------------------------------------------------------------------ void Clipper::SetWindingCount(TEdge &edge) { TEdge *e = edge.prevInAEL; //find the edge of the same polytype that immediately preceeds 'edge' in AEL while ( e && e->polyType != edge.polyType ) e = e->prevInAEL; if ( !e ) { edge.windCnt = edge.windDelta; edge.windCnt2 = 0; e = m_ActiveEdges; //ie get ready to calc windCnt2 } else if ( IsEvenOddFillType(edge) ) { //EvenOdd filling ... edge.windCnt = 1; edge.windCnt2 = e->windCnt2; e = e->nextInAEL; //ie get ready to calc windCnt2 } else { //nonZero, Positive or Negative filling ... if ( e->windCnt * e->windDelta < 0 ) { if (Abs(e->windCnt) > 1) { if (e->windDelta * edge.windDelta < 0) edge.windCnt = e->windCnt; else edge.windCnt = e->windCnt + edge.windDelta; } else edge.windCnt = e->windCnt + e->windDelta + edge.windDelta; } else { if ( Abs(e->windCnt) > 1 && e->windDelta * edge.windDelta < 0) edge.windCnt = e->windCnt; else if ( e->windCnt + edge.windDelta == 0 ) edge.windCnt = e->windCnt; else edge.windCnt = e->windCnt + edge.windDelta; } edge.windCnt2 = e->windCnt2; e = e->nextInAEL; //ie get ready to calc windCnt2 } //update windCnt2 ... if ( IsEvenOddAltFillType(edge) ) { //EvenOdd filling ... while ( e != &edge ) { edge.windCnt2 = (edge.windCnt2 == 0) ? 1 : 0; e = e->nextInAEL; } } else { //nonZero, Positive or Negative filling ... while ( e != &edge ) { edge.windCnt2 += e->windDelta; e = e->nextInAEL; } } } //------------------------------------------------------------------------------ bool Clipper::IsEvenOddFillType(const TEdge& edge) const { if (edge.polyType == ptSubject) return m_SubjFillType == pftEvenOdd; else return m_ClipFillType == pftEvenOdd; } //------------------------------------------------------------------------------ bool Clipper::IsEvenOddAltFillType(const TEdge& edge) const { if (edge.polyType == ptSubject) return m_ClipFillType == pftEvenOdd; else return m_SubjFillType == pftEvenOdd; } //------------------------------------------------------------------------------ bool Clipper::IsContributing(const TEdge& edge) const { PolyFillType pft, pft2; if (edge.polyType == ptSubject) { pft = m_SubjFillType; pft2 = m_ClipFillType; } else { pft = m_ClipFillType; pft2 = m_SubjFillType; } switch(pft) { case pftEvenOdd: case pftNonZero: if (Abs(edge.windCnt) != 1) return false; break; case pftPositive: if (edge.windCnt != 1) return false; break; default: //pftNegative if (edge.windCnt != -1) return false; } switch(m_ClipType) { case ctIntersection: switch(pft2) { case pftEvenOdd: case pftNonZero: return (edge.windCnt2 != 0); case pftPositive: return (edge.windCnt2 > 0); default: return (edge.windCnt2 < 0); } case ctUnion: switch(pft2) { case pftEvenOdd: case pftNonZero: return (edge.windCnt2 == 0); case pftPositive: return (edge.windCnt2 <= 0); default: return (edge.windCnt2 >= 0); } case ctDifference: if (edge.polyType == ptSubject) switch(pft2) { case pftEvenOdd: case pftNonZero: return (edge.windCnt2 == 0); case pftPositive: return (edge.windCnt2 <= 0); default: return (edge.windCnt2 >= 0); } else switch(pft2) { case pftEvenOdd: case pftNonZero: return (edge.windCnt2 != 0); case pftPositive: return (edge.windCnt2 > 0); default: return (edge.windCnt2 < 0); } default: return true; } } //------------------------------------------------------------------------------ void Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt) { if( NEAR_EQUAL(e2->dx, HORIZONTAL) || ( e1->dx > e2->dx ) ) { AddOutPt( e1, e2, pt ); e2->outIdx = e1->outIdx; e1->side = esLeft; e2->side = esRight; } else { AddOutPt( e2, e1, pt ); e1->outIdx = e2->outIdx; e1->side = esRight; e2->side = esLeft; } } //------------------------------------------------------------------------------ void Clipper::AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt) { AddOutPt( e1, 0, pt ); if( e1->outIdx == e2->outIdx ) { e1->outIdx = -1; e2->outIdx = -1; } else AppendPolygon( e1, e2 ); } //------------------------------------------------------------------------------ void Clipper::AddEdgeToSEL(TEdge *edge) { //SEL pointers in PEdge are reused to build a list of horizontal edges. //However, we don't need to worry about order with horizontal edge processing. if( !m_SortedEdges ) { m_SortedEdges = edge; edge->prevInSEL = 0; edge->nextInSEL = 0; } else { edge->nextInSEL = m_SortedEdges; edge->prevInSEL = 0; m_SortedEdges->prevInSEL = edge; m_SortedEdges = edge; } } //------------------------------------------------------------------------------ void Clipper::CopyAELToSEL() { TEdge* e = m_ActiveEdges; m_SortedEdges = e; if (!m_ActiveEdges) return; m_SortedEdges->prevInSEL = 0; e = e->nextInAEL; while ( e ) { e->prevInSEL = e->prevInAEL; e->prevInSEL->nextInSEL = e; e->nextInSEL = 0; e = e->nextInAEL; } } //------------------------------------------------------------------------------ void Clipper::AddJoin(TEdge *e1, TEdge *e2, int e1OutIdx, int e2OutIdx) { JoinRec* jr = new JoinRec; if (e1OutIdx >= 0) jr->poly1Idx = e1OutIdx; else jr->poly1Idx = e1->outIdx; jr->pt1a = IntPoint(e1->xcurr, e1->ycurr); jr->pt1b = IntPoint(e1->xtop, e1->ytop); if (e2OutIdx >= 0) jr->poly2Idx = e2OutIdx; else jr->poly2Idx = e2->outIdx; jr->pt2a = IntPoint(e2->xcurr, e2->ycurr); jr->pt2b = IntPoint(e2->xtop, e2->ytop); m_Joins.push_back(jr); } //------------------------------------------------------------------------------ void Clipper::ClearJoins() { for (JoinList::size_type i = 0; i < m_Joins.size(); i++) delete m_Joins[i]; m_Joins.resize(0); } //------------------------------------------------------------------------------ void Clipper::AddHorzJoin(TEdge *e, int idx) { HorzJoinRec* hj = new HorzJoinRec; hj->edge = e; hj->savedIdx = idx; m_HorizJoins.push_back(hj); } //------------------------------------------------------------------------------ void Clipper::ClearHorzJoins() { for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); i++) delete m_HorizJoins[i]; m_HorizJoins.resize(0); } //------------------------------------------------------------------------------ void Clipper::InsertLocalMinimaIntoAEL( const long64 botY) { while( m_CurrentLM && ( m_CurrentLM->Y == botY ) ) { TEdge* lb = m_CurrentLM->leftBound; TEdge* rb = m_CurrentLM->rightBound; InsertEdgeIntoAEL( lb ); InsertScanbeam( lb->ytop ); InsertEdgeIntoAEL( rb ); if (IsEvenOddFillType(*lb)) { lb->windDelta = 1; rb->windDelta = 1; } else { rb->windDelta = -lb->windDelta; } SetWindingCount( *lb ); rb->windCnt = lb->windCnt; rb->windCnt2 = lb->windCnt2; if( NEAR_EQUAL(rb->dx, HORIZONTAL) ) { //nb: only rightbounds can have a horizontal bottom edge AddEdgeToSEL( rb ); InsertScanbeam( rb->nextInLML->ytop ); } else InsertScanbeam( rb->ytop ); if( IsContributing(*lb) ) AddLocalMinPoly( lb, rb, IntPoint(lb->xcurr, m_CurrentLM->Y) ); //if output polygons share an edge, they'll need joining later ... if (lb->outIdx >= 0 && lb->prevInAEL && lb->prevInAEL->outIdx >= 0 && lb->prevInAEL->xcurr == lb->xbot && SlopesEqual(*lb, *lb->prevInAEL, m_UseFullRange)) AddJoin(lb, lb->prevInAEL); //if any output polygons share an edge, they'll need joining later ... if (rb->outIdx >= 0) { if (NEAR_EQUAL(rb->dx, HORIZONTAL)) { for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i) { IntPoint pt, pt2; //returned by GetOverlapSegment() but unused here. HorzJoinRec* hj = m_HorizJoins[i]; //if horizontals rb and hj.edge overlap, flag for joining later ... if (GetOverlapSegment(IntPoint(hj->edge->xbot, hj->edge->ybot), IntPoint(hj->edge->xtop, hj->edge->ytop), IntPoint(rb->xbot, rb->ybot), IntPoint(rb->xtop, rb->ytop), pt, pt2)) AddJoin(hj->edge, rb, hj->savedIdx); } } } if( lb->nextInAEL != rb ) { if (rb->outIdx >= 0 && rb->prevInAEL->outIdx >= 0 && SlopesEqual(*rb->prevInAEL, *rb, m_UseFullRange)) AddJoin(rb, rb->prevInAEL); TEdge* e = lb->nextInAEL; IntPoint pt = IntPoint(lb->xcurr, lb->ycurr); while( e != rb ) { if(!e) throw clipperException("InsertLocalMinimaIntoAEL: missing rightbound!"); //nb: For calculating winding counts etc, IntersectEdges() assumes //that param1 will be to the right of param2 ABOVE the intersection ... IntersectEdges( rb , e , pt , ipNone); //order important here e = e->nextInAEL; } } PopLocalMinima(); } } //------------------------------------------------------------------------------ void Clipper::DeleteFromAEL(TEdge *e) { TEdge* AelPrev = e->prevInAEL; TEdge* AelNext = e->nextInAEL; if( !AelPrev && !AelNext && (e != m_ActiveEdges) ) return; //already deleted if( AelPrev ) AelPrev->nextInAEL = AelNext; else m_ActiveEdges = AelNext; if( AelNext ) AelNext->prevInAEL = AelPrev; e->nextInAEL = 0; e->prevInAEL = 0; } //------------------------------------------------------------------------------ void Clipper::DeleteFromSEL(TEdge *e) { TEdge* SelPrev = e->prevInSEL; TEdge* SelNext = e->nextInSEL; if( !SelPrev && !SelNext && (e != m_SortedEdges) ) return; //already deleted if( SelPrev ) SelPrev->nextInSEL = SelNext; else m_SortedEdges = SelNext; if( SelNext ) SelNext->prevInSEL = SelPrev; e->nextInSEL = 0; e->prevInSEL = 0; } //------------------------------------------------------------------------------ void Clipper::IntersectEdges(TEdge *e1, TEdge *e2, const IntPoint &pt, IntersectProtects protects) { //e1 will be to the left of e2 BELOW the intersection. Therefore e1 is before //e2 in AEL except when e1 is being inserted at the intersection point ... bool e1stops = !(ipLeft & protects) && !e1->nextInLML && e1->xtop == pt.X && e1->ytop == pt.Y; bool e2stops = !(ipRight & protects) && !e2->nextInLML && e2->xtop == pt.X && e2->ytop == pt.Y; bool e1Contributing = ( e1->outIdx >= 0 ); bool e2contributing = ( e2->outIdx >= 0 ); //update winding counts... //assumes that e1 will be to the right of e2 ABOVE the intersection if ( e1->polyType == e2->polyType ) { if ( IsEvenOddFillType( *e1) ) { int oldE1WindCnt = e1->windCnt; e1->windCnt = e2->windCnt; e2->windCnt = oldE1WindCnt; } else { if (e1->windCnt + e2->windDelta == 0 ) e1->windCnt = -e1->windCnt; else e1->windCnt += e2->windDelta; if ( e2->windCnt - e1->windDelta == 0 ) e2->windCnt = -e2->windCnt; else e2->windCnt -= e1->windDelta; } } else { if (!IsEvenOddFillType(*e2)) e1->windCnt2 += e2->windDelta; else e1->windCnt2 = ( e1->windCnt2 == 0 ) ? 1 : 0; if (!IsEvenOddFillType(*e1)) e2->windCnt2 -= e1->windDelta; else e2->windCnt2 = ( e2->windCnt2 == 0 ) ? 1 : 0; } PolyFillType e1FillType, e2FillType, e1FillType2, e2FillType2; if (e1->polyType == ptSubject) { e1FillType = m_SubjFillType; e1FillType2 = m_ClipFillType; } else { e1FillType = m_ClipFillType; e1FillType2 = m_SubjFillType; } if (e2->polyType == ptSubject) { e2FillType = m_SubjFillType; e2FillType2 = m_ClipFillType; } else { e2FillType = m_ClipFillType; e2FillType2 = m_SubjFillType; } long64 e1Wc, e2Wc; switch (e1FillType) { case pftPositive: e1Wc = e1->windCnt; break; case pftNegative: e1Wc = -e1->windCnt; break; default: e1Wc = Abs(e1->windCnt); } switch(e2FillType) { case pftPositive: e2Wc = e2->windCnt; break; case pftNegative: e2Wc = -e2->windCnt; break; default: e2Wc = Abs(e2->windCnt); } if ( e1Contributing && e2contributing ) { if ( e1stops || e2stops || (e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) || (e1->polyType != e2->polyType && m_ClipType != ctXor) ) AddLocalMaxPoly(e1, e2, pt); else DoBothEdges( e1, e2, pt ); } else if ( e1Contributing ) { if ((e2Wc == 0 || e2Wc == 1) && (m_ClipType != ctIntersection || e2->polyType == ptSubject || (e2->windCnt2 != 0))) DoEdge1(e1, e2, pt); } else if ( e2contributing ) { if ((e1Wc == 0 || e1Wc == 1) && (m_ClipType != ctIntersection || e1->polyType == ptSubject || (e1->windCnt2 != 0))) DoEdge2(e1, e2, pt); } else if ( (e1Wc == 0 || e1Wc == 1) && (e2Wc == 0 || e2Wc == 1) && !e1stops && !e2stops ) { //neither edge is currently contributing ... long64 e1Wc2, e2Wc2; switch (e1FillType2) { case pftPositive: e1Wc2 = e1->windCnt2; break; case pftNegative : e1Wc2 = -e1->windCnt2; break; default: e1Wc2 = Abs(e1->windCnt2); } switch (e2FillType2) { case pftPositive: e2Wc2 = e2->windCnt2; break; case pftNegative: e2Wc2 = -e2->windCnt2; break; default: e2Wc2 = Abs(e2->windCnt2); } if (e1->polyType != e2->polyType) AddLocalMinPoly(e1, e2, pt); else if (e1Wc == 1 && e2Wc == 1) switch( m_ClipType ) { case ctIntersection: if (e1Wc2 > 0 && e2Wc2 > 0) AddLocalMinPoly(e1, e2, pt); break; case ctUnion: if ( e1Wc2 <= 0 && e2Wc2 <= 0 ) AddLocalMinPoly(e1, e2, pt); break; case ctDifference: if ((e1->polyType == ptClip && e2->polyType == ptClip && e1Wc2 > 0 && e2Wc2 > 0) || (e1->polyType == ptSubject && e2->polyType == ptSubject && e1Wc2 <= 0 && e2Wc2 <= 0)) AddLocalMinPoly(e1, e2, pt); break; case ctXor: AddLocalMinPoly(e1, e2, pt); } else SwapSides( *e1, *e2 ); } if( (e1stops != e2stops) && ( (e1stops && (e1->outIdx >= 0)) || (e2stops && (e2->outIdx >= 0)) ) ) { SwapSides( *e1, *e2 ); SwapPolyIndexes( *e1, *e2 ); } //finally, delete any non-contributing maxima edges ... if( e1stops ) DeleteFromAEL( e1 ); if( e2stops ) DeleteFromAEL( e2 ); } //------------------------------------------------------------------------------ void Clipper::SetHoleState(TEdge *e, OutRec *outRec) { bool isHole = false; TEdge *e2 = e->prevInAEL; while (e2) { if (e2->outIdx >= 0) { isHole = !isHole; if (! outRec->FirstLeft) outRec->FirstLeft = m_PolyOuts[e2->outIdx]; } e2 = e2->prevInAEL; } if (isHole) outRec->isHole = true; } //------------------------------------------------------------------------------ bool GetNextNonDupOutPt(OutPt* pp, OutPt*& next) { next = pp->next; while (next != pp && PointsEqual(pp->pt, next->pt)) next = next->next; return next != pp; } //------------------------------------------------------------------------------ bool GetPrevNonDupOutPt(OutPt* pp, OutPt*& prev) { prev = pp->prev; while (prev != pp && PointsEqual(pp->pt, prev->pt)) prev = prev->prev; return prev != pp; } //------------------------------------------------------------------------------ OutRec* GetLowermostRec(OutRec *outRec1, OutRec *outRec2) { //work out which polygon fragment has the correct hole state ... OutPt *outPt1 = outRec1->bottomPt; OutPt *outPt2 = outRec2->bottomPt; if (outPt1->pt.Y > outPt2->pt.Y) return outRec1; else if (outPt1->pt.Y < outPt2->pt.Y) return outRec2; else if (outPt1->pt.X < outPt2->pt.X) return outRec1; else if (outPt1->pt.X > outPt2->pt.X) return outRec2; else if (outRec1->bottomE2 == 0) return outRec2; else if (outRec2->bottomE2 == 0) return outRec1; else { long64 y1 = std::max(outRec1->bottomE1->ybot, outRec1->bottomE2->ybot); long64 y2 = std::max(outRec2->bottomE1->ybot, outRec2->bottomE2->ybot); if (y2 == y1 || (y1 > outPt1->pt.Y && y2 > outPt1->pt.Y)) { double dx1 = std::max(outRec1->bottomE1->dx, outRec1->bottomE2->dx); double dx2 = std::max(outRec2->bottomE1->dx, outRec2->bottomE2->dx); if (dx2 > dx1) return outRec2; else return outRec1; } else if (y2 > y1) return outRec2; else return outRec1; } } //------------------------------------------------------------------------------ void Clipper::AppendPolygon(TEdge *e1, TEdge *e2) { //get the start and ends of both output polygons ... OutRec *outRec1 = m_PolyOuts[e1->outIdx]; OutRec *outRec2 = m_PolyOuts[e2->outIdx]; OutRec *holeStateRec = GetLowermostRec(outRec1, outRec2); //fixup hole status ... if (holeStateRec == outRec2) outRec1->isHole = outRec2->isHole; else outRec2->isHole = outRec1->isHole; OutPt* p1_lft = outRec1->pts; OutPt* p1_rt = p1_lft->prev; OutPt* p2_lft = outRec2->pts; OutPt* p2_rt = p2_lft->prev; EdgeSide side; //join e2 poly onto e1 poly and delete pointers to e2 ... if( e1->side == esLeft ) { if( e2->side == esLeft ) { //z y x a b c ReversePolyPtLinks(*p2_lft); p2_lft->next = p1_lft; p1_lft->prev = p2_lft; p1_rt->next = p2_rt; p2_rt->prev = p1_rt; outRec1->pts = p2_rt; } else { //x y z a b c p2_rt->next = p1_lft; p1_lft->prev = p2_rt; p2_lft->prev = p1_rt; p1_rt->next = p2_lft; outRec1->pts = p2_lft; } side = esLeft; } else { if( e2->side == esRight ) { //a b c z y x ReversePolyPtLinks( *p2_lft ); p1_rt->next = p2_rt; p2_rt->prev = p1_rt; p2_lft->next = p1_lft; p1_lft->prev = p2_lft; } else { //a b c x y z p1_rt->next = p2_lft; p2_lft->prev = p1_rt; p1_lft->prev = p2_rt; p2_rt->next = p1_lft; } side = esRight; } if (holeStateRec == outRec2) { outRec1->bottomPt = outRec2->bottomPt; outRec1->bottomPt->idx = outRec1->idx; outRec1->bottomE1 = outRec2->bottomE1; outRec1->bottomE2 = outRec2->bottomE2; if (outRec2->FirstLeft != outRec1) outRec1->FirstLeft = outRec2->FirstLeft; } outRec2->pts = 0; outRec2->bottomPt = 0; outRec2->AppendLink = outRec1; int OKIdx = e1->outIdx; int ObsoleteIdx = e2->outIdx; e1->outIdx = -1; //nb: safe because we only get here via AddLocalMaxPoly e2->outIdx = -1; TEdge* e = m_ActiveEdges; while( e ) { if( e->outIdx == ObsoleteIdx ) { e->outIdx = OKIdx; e->side = side; break; } e = e->nextInAEL; } for (JoinList::size_type i = 0; i < m_Joins.size(); ++i) { if (m_Joins[i]->poly1Idx == ObsoleteIdx) m_Joins[i]->poly1Idx = OKIdx; if (m_Joins[i]->poly2Idx == ObsoleteIdx) m_Joins[i]->poly2Idx = OKIdx; } for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i) { if (m_HorizJoins[i]->savedIdx == ObsoleteIdx) m_HorizJoins[i]->savedIdx = OKIdx; } } //------------------------------------------------------------------------------ OutRec* Clipper::CreateOutRec() { OutRec* result = new OutRec; result->isHole = false; result->FirstLeft = 0; result->AppendLink = 0; result->pts = 0; result->bottomPt = 0; return result; } //------------------------------------------------------------------------------ void Clipper::AddOutPt(TEdge *e, TEdge *altE, const IntPoint &pt) { bool ToFront = (e->side == esLeft); if( e->outIdx < 0 ) { OutRec *outRec = CreateOutRec(); m_PolyOuts.push_back(outRec); outRec->idx = (int)m_PolyOuts.size()-1; e->outIdx = outRec->idx; OutPt* op = new OutPt; outRec->pts = op; outRec->bottomE1 = e; outRec->bottomE2 = altE; outRec->bottomPt = op; op->pt = pt; op->idx = outRec->idx; op->next = op; op->prev = op; SetHoleState(e, outRec); } else { OutRec *outRec = m_PolyOuts[e->outIdx]; OutPt* op = outRec->pts; if ((ToFront && PointsEqual(pt, op->pt)) || (!ToFront && PointsEqual(pt, op->prev->pt))) return; OutPt* op2 = new OutPt; op2->pt = pt; op2->idx = outRec->idx; if (op2->pt.Y == outRec->bottomPt->pt.Y && op2->pt.X < outRec->bottomPt->pt.X) { outRec->bottomPt = op2; outRec->bottomE1 = e; outRec->bottomE2 = altE; } op2->next = op; op2->prev = op->prev; op2->prev->next = op2; op->prev = op2; if (ToFront) outRec->pts = op2; } } //------------------------------------------------------------------------------ void Clipper::ProcessHorizontals() { TEdge* horzEdge = m_SortedEdges; while( horzEdge ) { DeleteFromSEL( horzEdge ); ProcessHorizontal( horzEdge ); horzEdge = m_SortedEdges; } } //------------------------------------------------------------------------------ bool Clipper::IsTopHorz(const long64 XPos) { TEdge* e = m_SortedEdges; while( e ) { if( ( XPos >= std::min(e->xcurr, e->xtop) ) && ( XPos <= std::max(e->xcurr, e->xtop) ) ) return false; e = e->nextInSEL; } return true; } //------------------------------------------------------------------------------ bool IsMinima(TEdge *e) { return e && (e->prev->nextInLML != e) && (e->next->nextInLML != e); } //------------------------------------------------------------------------------ bool IsMaxima(TEdge *e, const long64 Y) { return e && e->ytop == Y && !e->nextInLML; } //------------------------------------------------------------------------------ bool IsIntermediate(TEdge *e, const long64 Y) { return e->ytop == Y && e->nextInLML; } //------------------------------------------------------------------------------ TEdge *GetMaximaPair(TEdge *e) { if( !IsMaxima(e->next, e->ytop) || e->next->xtop != e->xtop ) return e->prev; else return e->next; } //------------------------------------------------------------------------------ void Clipper::SwapPositionsInAEL(TEdge *edge1, TEdge *edge2) { if( !edge1->nextInAEL && !edge1->prevInAEL ) return; if( !edge2->nextInAEL && !edge2->prevInAEL ) return; if( edge1->nextInAEL == edge2 ) { TEdge* next = edge2->nextInAEL; if( next ) next->prevInAEL = edge1; TEdge* prev = edge1->prevInAEL; if( prev ) prev->nextInAEL = edge2; edge2->prevInAEL = prev; edge2->nextInAEL = edge1; edge1->prevInAEL = edge2; edge1->nextInAEL = next; } else if( edge2->nextInAEL == edge1 ) { TEdge* next = edge1->nextInAEL; if( next ) next->prevInAEL = edge2; TEdge* prev = edge2->prevInAEL; if( prev ) prev->nextInAEL = edge1; edge1->prevInAEL = prev; edge1->nextInAEL = edge2; edge2->prevInAEL = edge1; edge2->nextInAEL = next; } else { TEdge* next = edge1->nextInAEL; TEdge* prev = edge1->prevInAEL; edge1->nextInAEL = edge2->nextInAEL; if( edge1->nextInAEL ) edge1->nextInAEL->prevInAEL = edge1; edge1->prevInAEL = edge2->prevInAEL; if( edge1->prevInAEL ) edge1->prevInAEL->nextInAEL = edge1; edge2->nextInAEL = next; if( edge2->nextInAEL ) edge2->nextInAEL->prevInAEL = edge2; edge2->prevInAEL = prev; if( edge2->prevInAEL ) edge2->prevInAEL->nextInAEL = edge2; } if( !edge1->prevInAEL ) m_ActiveEdges = edge1; else if( !edge2->prevInAEL ) m_ActiveEdges = edge2; } //------------------------------------------------------------------------------ void Clipper::SwapPositionsInSEL(TEdge *edge1, TEdge *edge2) { if( !( edge1->nextInSEL ) && !( edge1->prevInSEL ) ) return; if( !( edge2->nextInSEL ) && !( edge2->prevInSEL ) ) return; if( edge1->nextInSEL == edge2 ) { TEdge* next = edge2->nextInSEL; if( next ) next->prevInSEL = edge1; TEdge* prev = edge1->prevInSEL; if( prev ) prev->nextInSEL = edge2; edge2->prevInSEL = prev; edge2->nextInSEL = edge1; edge1->prevInSEL = edge2; edge1->nextInSEL = next; } else if( edge2->nextInSEL == edge1 ) { TEdge* next = edge1->nextInSEL; if( next ) next->prevInSEL = edge2; TEdge* prev = edge2->prevInSEL; if( prev ) prev->nextInSEL = edge1; edge1->prevInSEL = prev; edge1->nextInSEL = edge2; edge2->prevInSEL = edge1; edge2->nextInSEL = next; } else { TEdge* next = edge1->nextInSEL; TEdge* prev = edge1->prevInSEL; edge1->nextInSEL = edge2->nextInSEL; if( edge1->nextInSEL ) edge1->nextInSEL->prevInSEL = edge1; edge1->prevInSEL = edge2->prevInSEL; if( edge1->prevInSEL ) edge1->prevInSEL->nextInSEL = edge1; edge2->nextInSEL = next; if( edge2->nextInSEL ) edge2->nextInSEL->prevInSEL = edge2; edge2->prevInSEL = prev; if( edge2->prevInSEL ) edge2->prevInSEL->nextInSEL = edge2; } if( !edge1->prevInSEL ) m_SortedEdges = edge1; else if( !edge2->prevInSEL ) m_SortedEdges = edge2; } //------------------------------------------------------------------------------ TEdge* GetNextInAEL(TEdge *e, Direction dir) { if( dir == dLeftToRight ) return e->nextInAEL; else return e->prevInAEL; } //------------------------------------------------------------------------------ void Clipper::ProcessHorizontal(TEdge *horzEdge) { Direction dir; long64 horzLeft, horzRight; if( horzEdge->xcurr < horzEdge->xtop ) { horzLeft = horzEdge->xcurr; horzRight = horzEdge->xtop; dir = dLeftToRight; } else { horzLeft = horzEdge->xtop; horzRight = horzEdge->xcurr; dir = dRightToLeft; } TEdge* eMaxPair; if( horzEdge->nextInLML ) eMaxPair = 0; else eMaxPair = GetMaximaPair(horzEdge); TEdge* e = GetNextInAEL( horzEdge , dir ); while( e ) { TEdge* eNext = GetNextInAEL( e, dir ); if (eMaxPair || ((dir == dLeftToRight) && (e->xcurr <= horzRight)) || ((dir == dRightToLeft) && (e->xcurr >= horzLeft))) { //ok, so far it looks like we're still in range of the horizontal edge if ( e->xcurr == horzEdge->xtop && !eMaxPair ) { if (SlopesEqual(*e, *horzEdge->nextInLML, m_UseFullRange)) { //if output polygons share an edge, they'll need joining later ... if (horzEdge->outIdx >= 0 && e->outIdx >= 0) AddJoin(horzEdge->nextInLML, e, horzEdge->outIdx); break; //we've reached the end of the horizontal line } else if (e->dx < horzEdge->nextInLML->dx) //we really have got to the end of the intermediate horz edge so quit. //nb: More -ve slopes follow more +ve slopes ABOVE the horizontal. break; } if( e == eMaxPair ) { //horzEdge is evidently a maxima horizontal and we've arrived at its end. if (dir == dLeftToRight) IntersectEdges(horzEdge, e, IntPoint(e->xcurr, horzEdge->ycurr), ipNone); else IntersectEdges(e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr), ipNone); if (eMaxPair->outIdx >= 0) throw clipperException("ProcessHorizontal error"); return; } else if( NEAR_EQUAL(e->dx, HORIZONTAL) && !IsMinima(e) && !(e->xcurr > e->xtop) ) { //An overlapping horizontal edge. Overlapping horizontal edges are //processed as if layered with the current horizontal edge (horizEdge) //being infinitesimally lower that the next (e). Therfore, we //intersect with e only if e.xcurr is within the bounds of horzEdge ... if( dir == dLeftToRight ) IntersectEdges( horzEdge , e, IntPoint(e->xcurr, horzEdge->ycurr), (IsTopHorz( e->xcurr ))? ipLeft : ipBoth ); else IntersectEdges( e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr), (IsTopHorz( e->xcurr ))? ipRight : ipBoth ); } else if( dir == dLeftToRight ) { IntersectEdges( horzEdge, e, IntPoint(e->xcurr, horzEdge->ycurr), (IsTopHorz( e->xcurr ))? ipLeft : ipBoth ); } else { IntersectEdges( e, horzEdge, IntPoint(e->xcurr, horzEdge->ycurr), (IsTopHorz( e->xcurr ))? ipRight : ipBoth ); } SwapPositionsInAEL( horzEdge, e ); } else if( (dir == dLeftToRight && e->xcurr > horzRight && m_SortedEdges) || (dir == dRightToLeft && e->xcurr < horzLeft && m_SortedEdges) ) break; e = eNext; } //end while if( horzEdge->nextInLML ) { if( horzEdge->outIdx >= 0 ) AddOutPt( horzEdge, 0, IntPoint(horzEdge->xtop, horzEdge->ytop)); UpdateEdgeIntoAEL( horzEdge ); } else { if ( horzEdge->outIdx >= 0 ) IntersectEdges( horzEdge, eMaxPair, IntPoint(horzEdge->xtop, horzEdge->ycurr), ipBoth); if (eMaxPair->outIdx >= 0) throw clipperException("ProcessHorizontal error"); DeleteFromAEL(eMaxPair); DeleteFromAEL(horzEdge); } } //------------------------------------------------------------------------------ void Clipper::UpdateEdgeIntoAEL(TEdge *&e) { if( !e->nextInLML ) throw clipperException("UpdateEdgeIntoAEL: invalid call"); TEdge* AelPrev = e->prevInAEL; TEdge* AelNext = e->nextInAEL; e->nextInLML->outIdx = e->outIdx; if( AelPrev ) AelPrev->nextInAEL = e->nextInLML; else m_ActiveEdges = e->nextInLML; if( AelNext ) AelNext->prevInAEL = e->nextInLML; e->nextInLML->side = e->side; e->nextInLML->windDelta = e->windDelta; e->nextInLML->windCnt = e->windCnt; e->nextInLML->windCnt2 = e->windCnt2; e = e->nextInLML; e->prevInAEL = AelPrev; e->nextInAEL = AelNext; if( !NEAR_EQUAL(e->dx, HORIZONTAL) ) InsertScanbeam( e->ytop ); } //------------------------------------------------------------------------------ bool Clipper::ProcessIntersections(const long64 botY, const long64 topY) { if( !m_ActiveEdges ) return true; try { BuildIntersectList(botY, topY); if ( !m_IntersectNodes) return true; if ( FixupIntersections() ) ProcessIntersectList(); else return false; } catch(...) { m_SortedEdges = 0; DisposeIntersectNodes(); throw clipperException("ProcessIntersections error"); } return true; } //------------------------------------------------------------------------------ void Clipper::DisposeIntersectNodes() { while ( m_IntersectNodes ) { IntersectNode* iNode = m_IntersectNodes->next; delete m_IntersectNodes; m_IntersectNodes = iNode; } } //------------------------------------------------------------------------------ void Clipper::BuildIntersectList(const long64 botY, const long64 topY) { if ( !m_ActiveEdges ) return; //prepare for sorting ... TEdge* e = m_ActiveEdges; e->tmpX = TopX( *e, topY ); m_SortedEdges = e; m_SortedEdges->prevInSEL = 0; e = e->nextInAEL; while( e ) { e->prevInSEL = e->prevInAEL; e->prevInSEL->nextInSEL = e; e->nextInSEL = 0; e->tmpX = TopX( *e, topY ); e = e->nextInAEL; } //bubblesort ... bool isModified = true; while( isModified && m_SortedEdges ) { isModified = false; e = m_SortedEdges; while( e->nextInSEL ) { TEdge *eNext = e->nextInSEL; IntPoint pt; if(e->tmpX > eNext->tmpX && IntersectPoint(*e, *eNext, pt, m_UseFullRange)) { if (pt.Y > botY) { pt.Y = botY; pt.X = TopX(*e, pt.Y); } AddIntersectNode( e, eNext, pt ); SwapPositionsInSEL(e, eNext); isModified = true; } else e = eNext; } if( e->prevInSEL ) e->prevInSEL->nextInSEL = 0; else break; } m_SortedEdges = 0; } //------------------------------------------------------------------------------ bool Process1Before2(IntersectNode &node1, IntersectNode &node2) { bool result; if (node1.pt.Y == node2.pt.Y) { if (node1.edge1 == node2.edge1 || node1.edge2 == node2.edge1) { result = node2.pt.X > node1.pt.X; if (node2.edge1->dx > 0) return !result; else return result; } else if (node1.edge1 == node2.edge2 || node1.edge2 == node2.edge2) { result = node2.pt.X > node1.pt.X; if (node2.edge2->dx > 0) return !result; else return result; } else return node2.pt.X > node1.pt.X; } else return node1.pt.Y > node2.pt.Y; } //------------------------------------------------------------------------------ void Clipper::AddIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt) { IntersectNode* newNode = new IntersectNode; newNode->edge1 = e1; newNode->edge2 = e2; newNode->pt = pt; newNode->next = 0; if( !m_IntersectNodes ) m_IntersectNodes = newNode; else if( Process1Before2(*newNode, *m_IntersectNodes) ) { newNode->next = m_IntersectNodes; m_IntersectNodes = newNode; } else { IntersectNode* iNode = m_IntersectNodes; while( iNode->next && Process1Before2(*iNode->next, *newNode) ) iNode = iNode->next; newNode->next = iNode->next; iNode->next = newNode; } } //------------------------------------------------------------------------------ void Clipper::ProcessIntersectList() { while( m_IntersectNodes ) { IntersectNode* iNode = m_IntersectNodes->next; { IntersectEdges( m_IntersectNodes->edge1 , m_IntersectNodes->edge2 , m_IntersectNodes->pt, ipBoth ); SwapPositionsInAEL( m_IntersectNodes->edge1 , m_IntersectNodes->edge2 ); } delete m_IntersectNodes; m_IntersectNodes = iNode; } } //------------------------------------------------------------------------------ void Clipper::DoMaxima(TEdge *e, long64 topY) { TEdge* eMaxPair = GetMaximaPair(e); long64 X = e->xtop; TEdge* eNext = e->nextInAEL; while( eNext != eMaxPair ) { if (!eNext) throw clipperException("DoMaxima error"); IntersectEdges( e, eNext, IntPoint(X, topY), ipBoth ); eNext = eNext->nextInAEL; } if( e->outIdx < 0 && eMaxPair->outIdx < 0 ) { DeleteFromAEL( e ); DeleteFromAEL( eMaxPair ); } else if( e->outIdx >= 0 && eMaxPair->outIdx >= 0 ) { IntersectEdges( e, eMaxPair, IntPoint(X, topY), ipNone ); } else throw clipperException("DoMaxima error"); } //------------------------------------------------------------------------------ void Clipper::ProcessEdgesAtTopOfScanbeam(const long64 topY) { TEdge* e = m_ActiveEdges; while( e ) { //1. process maxima, treating them as if they're 'bent' horizontal edges, // but exclude maxima with horizontal edges. nb: e can't be a horizontal. if( IsMaxima(e, topY) && !NEAR_EQUAL(GetMaximaPair(e)->dx, HORIZONTAL) ) { //'e' might be removed from AEL, as may any following edges so ... TEdge* ePrior = e->prevInAEL; DoMaxima(e, topY); if( !ePrior ) e = m_ActiveEdges; else e = ePrior->nextInAEL; } else { //2. promote horizontal edges, otherwise update xcurr and ycurr ... if( IsIntermediate(e, topY) && NEAR_EQUAL(e->nextInLML->dx, HORIZONTAL) ) { if (e->outIdx >= 0) { AddOutPt(e, 0, IntPoint(e->xtop, e->ytop)); for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i) { IntPoint pt, pt2; HorzJoinRec* hj = m_HorizJoins[i]; if (GetOverlapSegment(IntPoint(hj->edge->xbot, hj->edge->ybot), IntPoint(hj->edge->xtop, hj->edge->ytop), IntPoint(e->nextInLML->xbot, e->nextInLML->ybot), IntPoint(e->nextInLML->xtop, e->nextInLML->ytop), pt, pt2)) AddJoin(hj->edge, e->nextInLML, hj->savedIdx, e->outIdx); } AddHorzJoin(e->nextInLML, e->outIdx); } UpdateEdgeIntoAEL(e); AddEdgeToSEL(e); } else { //this just simplifies horizontal processing ... e->xcurr = TopX( *e, topY ); e->ycurr = topY; } e = e->nextInAEL; } } //3. Process horizontals at the top of the scanbeam ... ProcessHorizontals(); //4. Promote intermediate vertices ... e = m_ActiveEdges; while( e ) { if( IsIntermediate( e, topY ) ) { if( e->outIdx >= 0 ) AddOutPt(e, 0, IntPoint(e->xtop,e->ytop)); UpdateEdgeIntoAEL(e); //if output polygons share an edge, they'll need joining later ... if (e->outIdx >= 0 && e->prevInAEL && e->prevInAEL->outIdx >= 0 && e->prevInAEL->xcurr == e->xbot && e->prevInAEL->ycurr == e->ybot && SlopesEqual(IntPoint(e->xbot,e->ybot), IntPoint(e->xtop, e->ytop), IntPoint(e->xbot,e->ybot), IntPoint(e->prevInAEL->xtop, e->prevInAEL->ytop), m_UseFullRange)) { AddOutPt(e->prevInAEL, 0, IntPoint(e->xbot, e->ybot)); AddJoin(e, e->prevInAEL); } else if (e->outIdx >= 0 && e->nextInAEL && e->nextInAEL->outIdx >= 0 && e->nextInAEL->ycurr > e->nextInAEL->ytop && e->nextInAEL->ycurr < e->nextInAEL->ybot && e->nextInAEL->xcurr == e->xbot && e->nextInAEL->ycurr == e->ybot && SlopesEqual(IntPoint(e->xbot,e->ybot), IntPoint(e->xtop, e->ytop), IntPoint(e->xbot,e->ybot), IntPoint(e->nextInAEL->xtop, e->nextInAEL->ytop), m_UseFullRange)) { AddOutPt(e->nextInAEL, 0, IntPoint(e->xbot, e->ybot)); AddJoin(e, e->nextInAEL); } } e = e->nextInAEL; } } //------------------------------------------------------------------------------ void Clipper::FixupOutPolygon(OutRec &outRec) { //FixupOutPolygon() - removes duplicate points and simplifies consecutive //parallel edges by removing the middle vertex. OutPt *lastOK = 0; outRec.pts = outRec.bottomPt; OutPt *pp = outRec.bottomPt; for (;;) { if (pp->prev == pp || pp->prev == pp->next ) { DisposeOutPts(pp); outRec.pts = 0; outRec.bottomPt = 0; return; } //test for duplicate points and for same slope (cross-product) ... if ( PointsEqual(pp->pt, pp->next->pt) || SlopesEqual(pp->prev->pt, pp->pt, pp->next->pt, m_UseFullRange) ) { lastOK = 0; OutPt *tmp = pp; if (pp == outRec.bottomPt) { if (tmp->prev->pt.Y > tmp->next->pt.Y) outRec.bottomPt = tmp->prev; else outRec.bottomPt = tmp->next; outRec.pts = outRec.bottomPt; outRec.bottomPt->idx = outRec.idx; } pp->prev->next = pp->next; pp->next->prev = pp->prev; pp = pp->prev; delete tmp; } else if (pp == lastOK) break; else { if (!lastOK) lastOK = pp; pp = pp->next; } } } //------------------------------------------------------------------------------ void Clipper::BuildResult(Polygons &polys) { int k = 0; polys.resize(m_PolyOuts.size()); for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) { if (m_PolyOuts[i]->pts) { Polygon* pg = &polys[k]; pg->clear(); OutPt* p = m_PolyOuts[i]->pts; do { pg->push_back(p->pt); p = p->next; } while (p != m_PolyOuts[i]->pts); //make sure each polygon has at least 3 vertices ... if (pg->size() < 3) pg->clear(); else k++; } } polys.resize(k); } //------------------------------------------------------------------------------ void Clipper::BuildResultEx(ExPolygons &polys) { PolyOutList::size_type i = 0; int k = 0; polys.resize(0); polys.reserve(m_PolyOuts.size()); while (i < m_PolyOuts.size() && m_PolyOuts[i]->pts) { ExPolygon epg; OutPt* p = m_PolyOuts[i]->pts; do { epg.outer.push_back(p->pt); p = p->next; } while (p != m_PolyOuts[i]->pts); i++; //make sure polygons have at least 3 vertices ... if (epg.outer.size() < 3) continue; while (i < m_PolyOuts.size() && m_PolyOuts[i]->pts && m_PolyOuts[i]->isHole) { Polygon pg; p = m_PolyOuts[i]->pts; do { pg.push_back(p->pt); p = p->next; } while (p != m_PolyOuts[i]->pts); epg.holes.push_back(pg); i++; } polys.push_back(epg); k++; } polys.resize(k); } //------------------------------------------------------------------------------ void SwapIntersectNodes(IntersectNode &int1, IntersectNode &int2) { TEdge *e1 = int1.edge1; TEdge *e2 = int1.edge2; IntPoint p = int1.pt; int1.edge1 = int2.edge1; int1.edge2 = int2.edge2; int1.pt = int2.pt; int2.edge1 = e1; int2.edge2 = e2; int2.pt = p; } //------------------------------------------------------------------------------ bool Clipper::FixupIntersections() { if ( !m_IntersectNodes->next ) return true; CopyAELToSEL(); IntersectNode *int1 = m_IntersectNodes; IntersectNode *int2 = m_IntersectNodes->next; while (int2) { TEdge *e1 = int1->edge1; TEdge *e2; if (e1->prevInSEL == int1->edge2) e2 = e1->prevInSEL; else if (e1->nextInSEL == int1->edge2) e2 = e1->nextInSEL; else { //The current intersection is out of order, so try and swap it with //a subsequent intersection ... while (int2) { if (int2->edge1->nextInSEL == int2->edge2 || int2->edge1->prevInSEL == int2->edge2) break; else int2 = int2->next; } if ( !int2 ) return false; //oops!!! //found an intersect node that can be swapped ... SwapIntersectNodes(*int1, *int2); e1 = int1->edge1; e2 = int1->edge2; } SwapPositionsInSEL(e1, e2); int1 = int1->next; int2 = int1->next; } m_SortedEdges = 0; //finally, check the last intersection too ... return (int1->edge1->prevInSEL == int1->edge2 || int1->edge1->nextInSEL == int1->edge2); } //------------------------------------------------------------------------------ bool E2InsertsBeforeE1(TEdge &e1, TEdge &e2) { if (e2.xcurr == e1.xcurr) return e2.dx > e1.dx; else return e2.xcurr < e1.xcurr; } //------------------------------------------------------------------------------ void Clipper::InsertEdgeIntoAEL(TEdge *edge) { edge->prevInAEL = 0; edge->nextInAEL = 0; if( !m_ActiveEdges ) { m_ActiveEdges = edge; } else if( E2InsertsBeforeE1(*m_ActiveEdges, *edge) ) { edge->nextInAEL = m_ActiveEdges; m_ActiveEdges->prevInAEL = edge; m_ActiveEdges = edge; } else { TEdge* e = m_ActiveEdges; while( e->nextInAEL && !E2InsertsBeforeE1(*e->nextInAEL , *edge) ) e = e->nextInAEL; edge->nextInAEL = e->nextInAEL; if( e->nextInAEL ) e->nextInAEL->prevInAEL = edge; edge->prevInAEL = e; e->nextInAEL = edge; } } //---------------------------------------------------------------------- void Clipper::DoEdge1(TEdge *edge1, TEdge *edge2, const IntPoint &pt) { AddOutPt(edge1, edge2, pt); SwapSides(*edge1, *edge2); SwapPolyIndexes(*edge1, *edge2); } //---------------------------------------------------------------------- void Clipper::DoEdge2(TEdge *edge1, TEdge *edge2, const IntPoint &pt) { AddOutPt(edge2, edge1, pt); SwapSides(*edge1, *edge2); SwapPolyIndexes(*edge1, *edge2); } //---------------------------------------------------------------------- void Clipper::DoBothEdges(TEdge *edge1, TEdge *edge2, const IntPoint &pt) { AddOutPt(edge1, edge2, pt); AddOutPt(edge2, edge1, pt); SwapSides( *edge1 , *edge2 ); SwapPolyIndexes( *edge1 , *edge2 ); } //---------------------------------------------------------------------- void Clipper::CheckHoleLinkages1(OutRec *outRec1, OutRec *outRec2) { //when a polygon is split into 2 polygons, make sure any holes the original //polygon contained link to the correct polygon ... for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) { OutRec *orec = m_PolyOuts[i]; if (orec->isHole && orec->bottomPt && orec->FirstLeft == outRec1 && !PointInPolygon(orec->bottomPt->pt, outRec1->pts, m_UseFullRange)) orec->FirstLeft = outRec2; } } //---------------------------------------------------------------------- void Clipper::CheckHoleLinkages2(OutRec *outRec1, OutRec *outRec2) { //if a hole is owned by outRec2 then make it owned by outRec1 ... for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i) if (m_PolyOuts[i]->isHole && m_PolyOuts[i]->bottomPt && m_PolyOuts[i]->FirstLeft == outRec2) m_PolyOuts[i]->FirstLeft = outRec1; } //---------------------------------------------------------------------- void Clipper::JoinCommonEdges(bool fixHoleLinkages) { for (JoinList::size_type i = 0; i < m_Joins.size(); i++) { JoinRec* j = m_Joins[i]; OutRec *outRec1 = m_PolyOuts[j->poly1Idx]; OutPt *pp1a = outRec1->pts; OutRec *outRec2 = m_PolyOuts[j->poly2Idx]; OutPt *pp2a = outRec2->pts; IntPoint pt1 = j->pt2a, pt2 = j->pt2b; IntPoint pt3 = j->pt1a, pt4 = j->pt1b; if (!FindSegment(pp1a, pt1, pt2)) continue; if (j->poly1Idx == j->poly2Idx) { //we're searching the same polygon for overlapping segments so //segment 2 mustn't be the same as segment 1 ... pp2a = pp1a->next; if (!FindSegment(pp2a, pt3, pt4) || (pp2a == pp1a)) continue; } else if (!FindSegment(pp2a, pt3, pt4)) continue; if (!GetOverlapSegment(pt1, pt2, pt3, pt4, pt1, pt2)) continue; OutPt *p1, *p2, *p3, *p4; OutPt *prev = pp1a->prev; //get p1 & p2 polypts - the overlap start & endpoints on poly1 if (PointsEqual(pp1a->pt, pt1)) p1 = pp1a; else if (PointsEqual(prev->pt, pt1)) p1 = prev; else p1 = InsertPolyPtBetween(pp1a, prev, pt1); if (PointsEqual(pp1a->pt, pt2)) p2 = pp1a; else if (PointsEqual(prev->pt, pt2)) p2 = prev; else if ((p1 == pp1a) || (p1 == prev)) p2 = InsertPolyPtBetween(pp1a, prev, pt2); else if (Pt3IsBetweenPt1AndPt2(pp1a->pt, p1->pt, pt2)) p2 = InsertPolyPtBetween(pp1a, p1, pt2); else p2 = InsertPolyPtBetween(p1, prev, pt2); //get p3 & p4 polypts - the overlap start & endpoints on poly2 prev = pp2a->prev; if (PointsEqual(pp2a->pt, pt1)) p3 = pp2a; else if (PointsEqual(prev->pt, pt1)) p3 = prev; else p3 = InsertPolyPtBetween(pp2a, prev, pt1); if (PointsEqual(pp2a->pt, pt2)) p4 = pp2a; else if (PointsEqual(prev->pt, pt2)) p4 = prev; else if ((p3 == pp2a) || (p3 == prev)) p4 = InsertPolyPtBetween(pp2a, prev, pt2); else if (Pt3IsBetweenPt1AndPt2(pp2a->pt, p3->pt, pt2)) p4 = InsertPolyPtBetween(pp2a, p3, pt2); else p4 = InsertPolyPtBetween(p3, prev, pt2); //p1.pt == p3.pt and p2.pt == p4.pt so join p1 to p3 and p2 to p4 ... if (p1->next == p2 && p3->prev == p4) { p1->next = p3; p3->prev = p1; p2->prev = p4; p4->next = p2; } else if (p1->prev == p2 && p3->next == p4) { p1->prev = p3; p3->next = p1; p2->next = p4; p4->prev = p2; } else continue; //an orientation is probably wrong if (j->poly2Idx == j->poly1Idx) { //instead of joining two polygons, we've just created a new one by //splitting one polygon into two. outRec1->pts = PolygonBottom(p1); outRec1->bottomPt = outRec1->pts; outRec1->bottomPt->idx = outRec1->idx; outRec2 = CreateOutRec(); m_PolyOuts.push_back(outRec2); outRec2->idx = (int)m_PolyOuts.size()-1; j->poly2Idx = outRec2->idx; outRec2->pts = PolygonBottom(p2); outRec2->bottomPt = outRec2->pts; outRec2->bottomPt->idx = outRec2->idx; if (PointInPolygon(outRec2->pts->pt, outRec1->pts, m_UseFullRange)) { outRec2->isHole = !outRec1->isHole; outRec2->FirstLeft = outRec1; if (outRec2->isHole == Orientation(outRec2, m_UseFullRange)) ReversePolyPtLinks(*outRec2->pts); } else if (PointInPolygon(outRec1->pts->pt, outRec2->pts, m_UseFullRange)) { outRec2->isHole = outRec1->isHole; outRec1->isHole = !outRec2->isHole; outRec2->FirstLeft = outRec1->FirstLeft; outRec1->FirstLeft = outRec2; if (outRec1->isHole == Orientation(outRec1, m_UseFullRange)) ReversePolyPtLinks(*outRec1->pts); } else { outRec2->isHole = outRec1->isHole; outRec2->FirstLeft = outRec1->FirstLeft; //make sure any contained holes now link to the correct polygon ... if (fixHoleLinkages) CheckHoleLinkages1(outRec1, outRec2); } //now fixup any subsequent joins that match this polygon for (JoinList::size_type k = i+1; k < m_Joins.size(); k++) { JoinRec* j2 = m_Joins[k]; if (j2->poly1Idx == j->poly1Idx && PointIsVertex(j2->pt1a, p2)) j2->poly1Idx = j->poly2Idx; if (j2->poly2Idx == j->poly1Idx && PointIsVertex(j2->pt2a, p2)) j2->poly2Idx = j->poly2Idx; } //now cleanup redundant edges too ... FixupOutPolygon(*outRec1); FixupOutPolygon(*outRec2); } else { //joined 2 polygons together ... //make sure any holes contained by outRec2 now link to outRec1 ... if (fixHoleLinkages) CheckHoleLinkages2(outRec1, outRec2); //delete the obsolete pointer ... int OKIdx = outRec1->idx; int ObsoleteIdx = outRec2->idx; outRec2->pts = 0; outRec2->bottomPt = 0; outRec2->AppendLink = outRec1; //holes are practically always joined to outers, not vice versa ... if (outRec1->isHole && !outRec2->isHole) outRec1->isHole = false; //now fixup any subsequent Joins that match this polygon for (JoinList::size_type k = i+1; k < m_Joins.size(); k++) { JoinRec* j2 = m_Joins[k]; if (j2->poly1Idx == ObsoleteIdx) j2->poly1Idx = OKIdx; if (j2->poly2Idx == ObsoleteIdx) j2->poly2Idx = OKIdx; } //now cleanup redundant edges too ... if (outRec1->pts) FixupOutPolygon(*outRec1); else FixupOutPolygon(*outRec2); } } } //------------------------------------------------------------------------------ void ReversePoints(Polygon& p) { std::reverse(p.begin(), p.end()); } //------------------------------------------------------------------------------ void ReversePoints(Polygons& p) { for (Polygons::size_type i = 0; i < p.size(); ++i) ReversePoints(p[i]); } //------------------------------------------------------------------------------ // OffsetPolygon functions ... //------------------------------------------------------------------------------ struct DoublePoint { double X; double Y; DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {} }; //------------------------------------------------------------------------------ Polygon BuildArc(const IntPoint &pt, const double a1, const double a2, const double r) { int steps = std::max(6, int(std::sqrt(std::fabs(r)) * std::fabs(a2 - a1))); Polygon result(steps); int n = steps - 1; double da = (a2 - a1) / n; double a = a1; for (int i = 0; i <= n; ++i) { result[i].X = pt.X + Round(std::cos(a)*r); result[i].Y = pt.Y + Round(std::sin(a)*r); a += da; } return result; } //------------------------------------------------------------------------------ DoublePoint GetUnitNormal( const IntPoint &pt1, const IntPoint &pt2) { if(pt2.X == pt1.X && pt2.Y == pt1.Y) return DoublePoint(0, 0); double dx = (double)(pt2.X - pt1.X); double dy = (double)(pt2.Y - pt1.Y); double f = 1 *1.0/ std::sqrt( dx*dx + dy*dy ); dx *= f; dy *= f; return DoublePoint(dy, -dx); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ class PolyOffsetBuilder { private: Polygons m_p; Polygon* m_curr_poly; std::vector normals; double m_delta, m_RMin, m_R; size_t m_i, m_j, m_k; static const int buffLength = 128; JoinType m_jointype; public: PolyOffsetBuilder(const Polygons& in_polys, Polygons& out_polys, double delta, JoinType jointype, double MiterLimit) { //nb precondition - out_polys != ptsin_polys if (NEAR_ZERO(delta)) { out_polys = in_polys; return; } this->m_p = in_polys; this->m_delta = delta; this->m_jointype = jointype; if (MiterLimit <= 1) MiterLimit = 1; m_RMin = 2/(MiterLimit*MiterLimit); double deltaSq = delta*delta; out_polys.clear(); out_polys.resize(in_polys.size()); for (m_i = 0; m_i < in_polys.size(); m_i++) { m_curr_poly = &out_polys[m_i]; size_t len = in_polys[m_i].size(); if (len > 1 && m_p[m_i][0].X == m_p[m_i][len - 1].X && m_p[m_i][0].Y == m_p[m_i][len-1].Y) len--; //when 'shrinking' polygons - to minimize artefacts //strip those polygons that have an area < pi * delta^2 ... double a1 = Area(in_polys[m_i]); if (delta < 0) { if (a1 > 0 && a1 < deltaSq *pi) len = 0; } else if (a1 < 0 && -a1 < deltaSq *pi) len = 0; //holes have neg. area if (len == 0 || (len < 3 && delta <= 0)) continue; else if (len == 1) { Polygon arc; arc = BuildArc(in_polys[m_i][len-1], 0, 2 * pi, delta); out_polys[m_i] = arc; continue; } //build normals ... normals.clear(); normals.resize(len); normals[len-1] = GetUnitNormal(in_polys[m_i][len-1], in_polys[m_i][0]); for (m_j = 0; m_j < len -1; ++m_j) normals[m_j] = GetUnitNormal(in_polys[m_i][m_j], in_polys[m_i][m_j+1]); m_k = len -1; for (m_j = 0; m_j < len; ++m_j) { switch (jointype) { case jtMiter: { m_R = 1 + (normals[m_j].X*normals[m_k].X + normals[m_j].Y*normals[m_k].Y); if (m_R >= m_RMin) DoMiter(); else DoSquare(MiterLimit); break; } case jtSquare: DoSquare(); break; case jtRound: DoRound(); break; } m_k = m_j; } } //finally, clean up untidy corners using Clipper ... Clipper clpr; clpr.AddPolygons(out_polys, ptSubject); if (delta > 0) { if (!clpr.Execute(ctUnion, out_polys, pftPositive, pftPositive)) out_polys.clear(); } else { IntRect r = clpr.GetBounds(); Polygon outer(4); outer[0] = IntPoint(r.left - 10, r.bottom + 10); outer[1] = IntPoint(r.right + 10, r.bottom + 10); outer[2] = IntPoint(r.right + 10, r.top - 10); outer[3] = IntPoint(r.left - 10, r.top - 10); clpr.AddPolygon(outer, ptSubject); if (clpr.Execute(ctUnion, out_polys, pftNegative, pftNegative)) { out_polys.erase(out_polys.begin()); ReversePoints(out_polys); } else out_polys.clear(); } } //------------------------------------------------------------------------------ private: void AddPoint(const IntPoint& pt) { Polygon::size_type len = m_curr_poly->size(); if (len == m_curr_poly->capacity()) m_curr_poly->reserve(len + buffLength); m_curr_poly->push_back(pt); } //------------------------------------------------------------------------------ void DoSquare(double mul = 1.0) { IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X * m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta)); IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta)); if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * m_delta >= 0) { double a1 = std::atan2(normals[m_k].Y, normals[m_k].X); double a2 = std::atan2(-normals[m_j].Y, -normals[m_j].X); a1 = std::fabs(a2 - a1); if (a1 > pi) a1 = pi * 2 - a1; double dx = std::tan((pi - a1)/4) * std::fabs(m_delta * mul); pt1 = IntPoint((long64)(pt1.X -normals[m_k].Y * dx), (long64)(pt1.Y + normals[m_k].X * dx)); AddPoint(pt1); pt2 = IntPoint((long64)(pt2.X + normals[m_j].Y * dx), (long64)(pt2.Y -normals[m_j].X * dx)); AddPoint(pt2); } else { AddPoint(pt1); AddPoint(m_p[m_i][m_j]); AddPoint(pt2); } } //------------------------------------------------------------------------------ void DoMiter() { if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * m_delta >= 0) { double q = m_delta / m_R; AddPoint(IntPoint((long64)Round(m_p[m_i][m_j].X + (normals[m_k].X + normals[m_j].X) * q), (long64)Round(m_p[m_i][m_j].Y + (normals[m_k].Y + normals[m_j].Y) * q))); } else { IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X * m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta)); IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta)); AddPoint(pt1); AddPoint(m_p[m_i][m_j]); AddPoint(pt2); } } //------------------------------------------------------------------------------ void DoRound() { IntPoint pt1 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_k].X * m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_k].Y * m_delta)); IntPoint pt2 = IntPoint((long64)Round(m_p[m_i][m_j].X + normals[m_j].X * m_delta), (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta)); AddPoint(pt1); //round off reflex angles (ie > 180 deg) unless almost flat (ie < ~10deg). if ((normals[m_k].X*normals[m_j].Y - normals[m_j].X*normals[m_k].Y) * m_delta >= 0) { if (normals[m_j].X * normals[m_k].X + normals[m_j].Y * normals[m_k].Y < 0.985) { double a1 = std::atan2(normals[m_k].Y, normals[m_k].X); double a2 = std::atan2(normals[m_j].Y, normals[m_j].X); if (m_delta > 0 && a2 < a1) a2 += pi *2; else if (m_delta < 0 && a2 > a1) a2 -= pi *2; Polygon arc = BuildArc(m_p[m_i][m_j], a1, a2, m_delta); for (Polygon::size_type m = 0; m < arc.size(); m++) AddPoint(arc[m]); } } else AddPoint(m_p[m_i][m_j]); AddPoint(pt2); } //-------------------------------------------------------------------------- }; //end PolyOffsetBuilder //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys, double delta, JoinType jointype, double MiterLimit) { if (&out_polys == &in_polys) { Polygons poly2(in_polys); PolyOffsetBuilder(poly2, out_polys, delta, jointype, MiterLimit); } else PolyOffsetBuilder(in_polys, out_polys, delta, jointype, MiterLimit); } //------------------------------------------------------------------------------ std::ostream& operator <<(std::ostream &s, IntPoint& p) { s << p.X << ' ' << p.Y << "\n"; return s; } //------------------------------------------------------------------------------ std::ostream& operator <<(std::ostream &s, Polygon &p) { for (Polygon::size_type i = 0; i < p.size(); i++) s << p[i]; s << "\n"; return s; } //------------------------------------------------------------------------------ std::ostream& operator <<(std::ostream &s, Polygons &p) { for (Polygons::size_type i = 0; i < p.size(); i++) s << p[i]; s << "\n"; return s; } //------------------------------------------------------------------------------ } //ClipperLib namespace assimp-3.0/contrib/clipper/clipper.hpp0000644002537200234200000002472711705146230020376 0ustar zmoelnigiemusers/******************************************************************************* * * * Author : Angus Johnson * * Version : 4.6.3 * * Date : 11 November 2011 * * Website : http://www.angusj.com * * Copyright : Angus Johnson 2010-2011 * * * * License: * * Use, modification & distribution is subject to Boost Software License Ver 1. * * http://www.boost.org/LICENSE_1_0.txt * * * * Attributions: * * The code in this library is an extension of Bala Vatti's clipping algorithm: * * "A generic solution to polygon clipping" * * Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. * * http://portal.acm.org/citation.cfm?id=129906 * * * * Computer graphics and geometric modeling: implementation and algorithms * * By Max K. Agoston * * Springer; 1 edition (January 4, 2005) * * http://books.google.com/books?q=vatti+clipping+agoston * * * * See also: * * "Polygon Offsetting by Computing Winding Numbers" * * Paper no. DETC2005-85513 pp. 565-575 * * ASME 2005 International Design Engineering Technical Conferences * * and Computers and Information in Engineering Conference (IDETC/CIE2005) * * September 24–28, 2005 , Long Beach, California, USA * * http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf * * * *******************************************************************************/ #ifndef clipper_hpp #define clipper_hpp #include #include #include #include #include namespace ClipperLib { enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor }; enum PolyType { ptSubject, ptClip }; //By far the most widely used winding rules for polygon filling are //EvenOdd & NonZero (GDI, GDI+, XLib, OpenGL, Cairo, AGG, Quartz, SVG, Gr32) //Others rules include Positive, Negative and ABS_GTR_EQ_TWO (only in OpenGL) //see http://glprogramming.com/red/chapter11.html enum PolyFillType { pftEvenOdd, pftNonZero, pftPositive, pftNegative }; typedef signed long long long64; typedef unsigned long long ulong64; struct IntPoint { public: long64 X; long64 Y; IntPoint(long64 x = 0, long64 y = 0): X(x), Y(y) {}; friend std::ostream& operator <<(std::ostream &s, IntPoint &p); }; typedef std::vector< IntPoint > Polygon; typedef std::vector< Polygon > Polygons; std::ostream& operator <<(std::ostream &s, Polygon &p); std::ostream& operator <<(std::ostream &s, Polygons &p); struct ExPolygon { Polygon outer; Polygons holes; }; typedef std::vector< ExPolygon > ExPolygons; enum JoinType { jtSquare, jtMiter, jtRound }; bool Orientation(const Polygon &poly); double Area(const Polygon &poly); void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys, double delta, JoinType jointype = jtSquare, double MiterLimit = 2); void ReversePoints(Polygon& p); void ReversePoints(Polygons& p); //used internally ... enum EdgeSide { esLeft, esRight }; enum IntersectProtects { ipNone = 0, ipLeft = 1, ipRight = 2, ipBoth = 3 }; struct TEdge { long64 xbot; long64 ybot; long64 xcurr; long64 ycurr; long64 xtop; long64 ytop; double dx; long64 tmpX; PolyType polyType; EdgeSide side; int windDelta; //1 or -1 depending on winding direction int windCnt; int windCnt2; //winding count of the opposite polytype int outIdx; TEdge *next; TEdge *prev; TEdge *nextInLML; TEdge *nextInAEL; TEdge *prevInAEL; TEdge *nextInSEL; TEdge *prevInSEL; }; struct IntersectNode { TEdge *edge1; TEdge *edge2; IntPoint pt; IntersectNode *next; }; struct LocalMinima { long64 Y; TEdge *leftBound; TEdge *rightBound; LocalMinima *next; }; struct Scanbeam { long64 Y; Scanbeam *next; }; struct OutPt; //forward declaration struct OutRec { int idx; bool isHole; OutRec *FirstLeft; OutRec *AppendLink; OutPt *pts; OutPt *bottomPt; TEdge *bottomE1; TEdge *bottomE2; }; struct OutPt { int idx; IntPoint pt; OutPt *next; OutPt *prev; }; struct JoinRec { IntPoint pt1a; IntPoint pt1b; int poly1Idx; IntPoint pt2a; IntPoint pt2b; int poly2Idx; }; struct HorzJoinRec { TEdge *edge; int savedIdx; }; struct IntRect { long64 left; long64 top; long64 right; long64 bottom; }; typedef std::vector < OutRec* > PolyOutList; typedef std::vector < TEdge* > EdgeList; typedef std::vector < JoinRec* > JoinList; typedef std::vector < HorzJoinRec* > HorzJoinList; //ClipperBase is the ancestor to the Clipper class. It should not be //instantiated directly. This class simply abstracts the conversion of sets of //polygon coordinates into edge objects that are stored in a LocalMinima list. class ClipperBase { public: ClipperBase(); virtual ~ClipperBase(); bool AddPolygon(const Polygon &pg, PolyType polyType); bool AddPolygons( const Polygons &ppg, PolyType polyType); virtual void Clear(); IntRect GetBounds(); protected: void DisposeLocalMinimaList(); TEdge* AddBoundsToLML(TEdge *e); void PopLocalMinima(); virtual void Reset(); void InsertLocalMinima(LocalMinima *newLm); LocalMinima *m_CurrentLM; LocalMinima *m_MinimaList; bool m_UseFullRange; EdgeList m_edges; }; class Clipper : public virtual ClipperBase { public: Clipper(); ~Clipper(); bool Execute(ClipType clipType, Polygons &solution, PolyFillType subjFillType = pftEvenOdd, PolyFillType clipFillType = pftEvenOdd); bool Execute(ClipType clipType, ExPolygons &solution, PolyFillType subjFillType = pftEvenOdd, PolyFillType clipFillType = pftEvenOdd); void Clear(); bool ReverseSolution() {return m_ReverseOutput;}; void ReverseSolution(bool value) {m_ReverseOutput = value;}; protected: void Reset(); virtual bool ExecuteInternal(bool fixHoleLinkages); private: PolyOutList m_PolyOuts; JoinList m_Joins; HorzJoinList m_HorizJoins; ClipType m_ClipType; Scanbeam *m_Scanbeam; TEdge *m_ActiveEdges; TEdge *m_SortedEdges; IntersectNode *m_IntersectNodes; bool m_ExecuteLocked; PolyFillType m_ClipFillType; PolyFillType m_SubjFillType; bool m_ReverseOutput; void DisposeScanbeamList(); void SetWindingCount(TEdge& edge); bool IsEvenOddFillType(const TEdge& edge) const; bool IsEvenOddAltFillType(const TEdge& edge) const; void InsertScanbeam(const long64 Y); long64 PopScanbeam(); void InsertLocalMinimaIntoAEL(const long64 botY); void InsertEdgeIntoAEL(TEdge *edge); void AddEdgeToSEL(TEdge *edge); void CopyAELToSEL(); void DeleteFromSEL(TEdge *e); void DeleteFromAEL(TEdge *e); void UpdateEdgeIntoAEL(TEdge *&e); void SwapPositionsInSEL(TEdge *edge1, TEdge *edge2); bool IsContributing(const TEdge& edge) const; bool IsTopHorz(const long64 XPos); void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2); void DoMaxima(TEdge *e, long64 topY); void ProcessHorizontals(); void ProcessHorizontal(TEdge *horzEdge); void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); void AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); void AppendPolygon(TEdge *e1, TEdge *e2); void DoEdge1(TEdge *edge1, TEdge *edge2, const IntPoint &pt); void DoEdge2(TEdge *edge1, TEdge *edge2, const IntPoint &pt); void DoBothEdges(TEdge *edge1, TEdge *edge2, const IntPoint &pt); void IntersectEdges(TEdge *e1, TEdge *e2, const IntPoint &pt, IntersectProtects protects); OutRec* CreateOutRec(); void AddOutPt(TEdge *e, TEdge *altE, const IntPoint &pt); void DisposeAllPolyPts(); void DisposeOutRec(PolyOutList::size_type index, bool ignorePts = false); bool ProcessIntersections(const long64 botY, const long64 topY); void AddIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt); void BuildIntersectList(const long64 botY, const long64 topY); void ProcessIntersectList(); void ProcessEdgesAtTopOfScanbeam(const long64 topY); void BuildResult(Polygons& polys); void BuildResultEx(ExPolygons& polys); void SetHoleState(TEdge *e, OutRec *OutRec); void DisposeIntersectNodes(); bool FixupIntersections(); void FixupOutPolygon(OutRec &outRec); bool IsHole(TEdge *e); void FixHoleLinkage(OutRec *outRec); void CheckHoleLinkages1(OutRec *outRec1, OutRec *outRec2); void CheckHoleLinkages2(OutRec *outRec1, OutRec *outRec2); void AddJoin(TEdge *e1, TEdge *e2, int e1OutIdx = -1, int e2OutIdx = -1); void ClearJoins(); void AddHorzJoin(TEdge *e, int idx); void ClearHorzJoins(); void JoinCommonEdges(bool fixHoleLinkages); }; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ class clipperException : public std::exception { public: clipperException(const char* description): m_descr(description) {} virtual ~clipperException() throw() {} virtual const char* what() const throw() {return m_descr.c_str();} private: std::string m_descr; }; //------------------------------------------------------------------------------ } //ClipperLib namespace #endif //clipper_hpp assimp-3.0/contrib/clipper/License.txt0000644002537200234200000000310411705146230020334 0ustar zmoelnigiemusersThe Clipper code library, the "Software" (that includes Delphi, C++ & C# source code, accompanying samples and documentation), has been released under the following license, terms and conditions: Boost Software License - Version 1.0 - August 17th, 2003 http://www.boost.org/LICENSE_1_0.txt Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. assimp-3.0/contrib/poly2tri_patch.txt0000644002537200234200000000473511705150352020272 0ustar zmoelnigiemusersdiff -r 5de9623d6a50 poly2tri/common/shapes.h --- a/poly2tri/common/shapes.h Mon Aug 08 22:26:41 2011 -0400 +++ b/poly2tri/common/shapes.h Tue Jan 17 02:36:52 2012 +0100 @@ -35,6 +35,7 @@ #include #include +#include #include #include @@ -136,7 +137,9 @@ p = &p2; } else if (p1.x == p2.x) { // Repeat points - assert(false); + // ASSIMP_CHANGE (aramis_acg) + throw std::runtime_error("repeat points"); + //assert(false); } } diff -r 5de9623d6a50 poly2tri/sweep/sweep.cc --- a/poly2tri/sweep/sweep.cc Mon Aug 08 22:26:41 2011 -0400 +++ b/poly2tri/sweep/sweep.cc Tue Jan 17 02:36:52 2012 +0100 @@ -113,6 +113,8 @@ Point* p1 = triangle->PointCCW(point); Orientation o1 = Orient2d(eq, *p1, ep); if (o1 == COLLINEAR) { + // ASSIMP_CHANGE (aramis_acg) + throw std::runtime_error("EdgeEvent - collinear points not supported"); if( triangle->Contains(&eq, p1)) { triangle->MarkConstrainedEdge(&eq, p1 ); // We are modifying the constraint maybe it would be better to @@ -121,8 +123,8 @@ triangle = &triangle->NeighborAcross(point); EdgeEvent( tcx, ep, *p1, triangle, *p1 ); } else { + // ASSIMP_CHANGE (aramis_acg) std::runtime_error("EdgeEvent - collinear points not supported"); - assert(0); } return; } @@ -130,6 +132,9 @@ Point* p2 = triangle->PointCW(point); Orientation o2 = Orient2d(eq, *p2, ep); if (o2 == COLLINEAR) { + // ASSIMP_CHANGE (aramis_acg) + throw std::runtime_error("EdgeEvent - collinear points not supported"); + if( triangle->Contains(&eq, p2)) { triangle->MarkConstrainedEdge(&eq, p2 ); // We are modifying the constraint maybe it would be better to @@ -138,8 +143,8 @@ triangle = &triangle->NeighborAcross(point); EdgeEvent( tcx, ep, *p2, triangle, *p2 ); } else { - std::runtime_error("EdgeEvent - collinear points not supported"); - assert(0); + // ASSIMP_CHANGE (aramis_acg) + throw std::runtime_error("EdgeEvent - collinear points not supported"); } return; } @@ -712,7 +717,8 @@ return *ot.PointCW(op); } else{ //throw new RuntimeException("[Unsupported] Opposing point on constrained edge"); - assert(0); + // ASSIMP_CHANGE (aramis_acg) + throw std::runtime_error("[Unsupported] Opposing point on constrained edge"); } } assimp-3.0/contrib/poly2tri/0000755002537200234200000000000011770676627016365 5ustar zmoelnigiemusersassimp-3.0/contrib/poly2tri/AUTHORS0000644002537200234200000000022111705146076017414 0ustar zmoelnigiemusersPrimary Contributors: Mason Green (C++, Python) Thomas Åhlén (Java) Other Contributors: assimp-3.0/contrib/poly2tri/poly2tri/0000755002537200234200000000000011770676627020151 5ustar zmoelnigiemusersassimp-3.0/contrib/poly2tri/poly2tri/common/0000755002537200234200000000000011770676627021441 5ustar zmoelnigiemusersassimp-3.0/contrib/poly2tri/poly2tri/common/shapes.h0000644002537200234200000001661011712376605023066 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Include guard #ifndef SHAPES_H #define SHAPES_H #include #include #include #include #include namespace p2t { struct Edge; struct Point { double x, y; /// Default constructor does nothing (for performance). Point() { x = 0.0; y = 0.0; } /// The edges this point constitutes an upper ending point std::vector edge_list; /// Construct using coordinates. Point(double x, double y) : x(x), y(y) {} /// Set this point to all zeros. void set_zero() { x = 0.0; y = 0.0; } /// Set this point to some specified coordinates. void set(double x_, double y_) { x = x_; y = y_; } /// Negate this point. Point operator -() const { Point v; v.set(-x, -y); return v; } /// Add a point to this point. void operator +=(const Point& v) { x += v.x; y += v.y; } /// Subtract a point from this point. void operator -=(const Point& v) { x -= v.x; y -= v.y; } /// Multiply this point by a scalar. void operator *=(double a) { x *= a; y *= a; } /// Get the length of this point (the norm). double Length() const { return sqrt(x * x + y * y); } /// Convert this point into a unit point. Returns the Length. double Normalize() { double len = Length(); x /= len; y /= len; return len; } }; // Represents a simple polygon's edge struct Edge { Point* p, *q; /// Constructor Edge(Point& p1, Point& p2) : p(&p1), q(&p2) { if (p1.y > p2.y) { q = &p1; p = &p2; } else if (p1.y == p2.y) { if (p1.x > p2.x) { q = &p1; p = &p2; } else if (p1.x == p2.x) { // Repeat points // ASSIMP_CHANGE (aramis_acg) throw std::runtime_error("repeat points"); //assert(false); } } q->edge_list.push_back(this); } }; // Triangle-based data structures are know to have better performance than quad-edge structures // See: J. Shewchuk, "Triangle: Engineering a 2D Quality Mesh Generator and Delaunay Triangulator" // "Triangulations in CGAL" class Triangle { public: /// Constructor Triangle(Point& a, Point& b, Point& c); /// Flags to determine if an edge is a Constrained edge bool constrained_edge[3]; /// Flags to determine if an edge is a Delauney edge bool delaunay_edge[3]; Point* GetPoint(const int& index); Point* PointCW(Point& point); Point* PointCCW(Point& point); Point* OppositePoint(Triangle& t, Point& p); Triangle* GetNeighbor(const int& index); void MarkNeighbor(Point* p1, Point* p2, Triangle* t); void MarkNeighbor(Triangle& t); void MarkConstrainedEdge(const int index); void MarkConstrainedEdge(Edge& edge); void MarkConstrainedEdge(Point* p, Point* q); int Index(const Point* p); int EdgeIndex(const Point* p1, const Point* p2); Triangle* NeighborCW(Point& point); Triangle* NeighborCCW(Point& point); bool GetConstrainedEdgeCCW(Point& p); bool GetConstrainedEdgeCW(Point& p); void SetConstrainedEdgeCCW(Point& p, bool ce); void SetConstrainedEdgeCW(Point& p, bool ce); bool GetDelunayEdgeCCW(Point& p); bool GetDelunayEdgeCW(Point& p); void SetDelunayEdgeCCW(Point& p, bool e); void SetDelunayEdgeCW(Point& p, bool e); bool Contains(Point* p); bool Contains(const Edge& e); bool Contains(Point* p, Point* q); void Legalize(Point& point); void Legalize(Point& opoint, Point& npoint); /** * Clears all references to all other triangles and points */ void Clear(); void ClearNeighbor(Triangle *triangle ); void ClearNeighbors(); void ClearDelunayEdges(); inline bool IsInterior(); inline void IsInterior(bool b); Triangle& NeighborAcross(Point& opoint); void DebugPrint(); private: /// Triangle points Point* points_[3]; /// Neighbor list Triangle* neighbors_[3]; /// Has this triangle been marked as an interior triangle? bool interior_; }; inline bool cmp(const Point* a, const Point* b) { if (a->y < b->y) { return true; } else if (a->y == b->y) { // Make sure q is point with greater x value if (a->x < b->x) { return true; } } return false; } /// Add two points_ component-wise. inline Point operator +(const Point& a, const Point& b) { return Point(a.x + b.x, a.y + b.y); } /// Subtract two points_ component-wise. inline Point operator -(const Point& a, const Point& b) { return Point(a.x - b.x, a.y - b.y); } /// Multiply point by scalar inline Point operator *(double s, const Point& a) { return Point(s * a.x, s * a.y); } inline bool operator ==(const Point& a, const Point& b) { return a.x == b.x && a.y == b.y; } inline bool operator !=(const Point& a, const Point& b) { return a.x != b.x || a.y != b.y; } /// Peform the dot product on two vectors. inline double Dot(const Point& a, const Point& b) { return a.x * b.x + a.y * b.y; } /// Perform the cross product on two vectors. In 2D this produces a scalar. inline double Cross(const Point& a, const Point& b) { return a.x * b.y - a.y * b.x; } /// Perform the cross product on a point and a scalar. In 2D this produces /// a point. inline Point Cross(const Point& a, double s) { return Point(s * a.y, -s * a.x); } /// Perform the cross product on a scalar and a point. In 2D this produces /// a point. inline Point Cross(const double s, const Point& a) { return Point(-s * a.y, s * a.x); } inline Point* Triangle::GetPoint(const int& index) { return points_[index]; } inline Triangle* Triangle::GetNeighbor(const int& index) { return neighbors_[index]; } inline bool Triangle::Contains(Point* p) { return p == points_[0] || p == points_[1] || p == points_[2]; } inline bool Triangle::Contains(const Edge& e) { return Contains(e.p) && Contains(e.q); } inline bool Triangle::Contains(Point* p, Point* q) { return Contains(p) && Contains(q); } inline bool Triangle::IsInterior() { return interior_; } inline void Triangle::IsInterior(bool b) { interior_ = b; } } #endif assimp-3.0/contrib/poly2tri/poly2tri/common/shapes.cc0000644002537200234200000002164611705146076023230 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "shapes.h" #include namespace p2t { Triangle::Triangle(Point& a, Point& b, Point& c) { points_[0] = &a; points_[1] = &b; points_[2] = &c; neighbors_[0] = NULL; neighbors_[1] = NULL; neighbors_[2] = NULL; constrained_edge[0] = constrained_edge[1] = constrained_edge[2] = false; delaunay_edge[0] = delaunay_edge[1] = delaunay_edge[2] = false; interior_ = false; } // Update neighbor pointers void Triangle::MarkNeighbor(Point* p1, Point* p2, Triangle* t) { if ((p1 == points_[2] && p2 == points_[1]) || (p1 == points_[1] && p2 == points_[2])) neighbors_[0] = t; else if ((p1 == points_[0] && p2 == points_[2]) || (p1 == points_[2] && p2 == points_[0])) neighbors_[1] = t; else if ((p1 == points_[0] && p2 == points_[1]) || (p1 == points_[1] && p2 == points_[0])) neighbors_[2] = t; else assert(0); } // Exhaustive search to update neighbor pointers void Triangle::MarkNeighbor(Triangle& t) { if (t.Contains(points_[1], points_[2])) { neighbors_[0] = &t; t.MarkNeighbor(points_[1], points_[2], this); } else if (t.Contains(points_[0], points_[2])) { neighbors_[1] = &t; t.MarkNeighbor(points_[0], points_[2], this); } else if (t.Contains(points_[0], points_[1])) { neighbors_[2] = &t; t.MarkNeighbor(points_[0], points_[1], this); } } /** * Clears all references to all other triangles and points */ void Triangle::Clear() { Triangle *t; for( int i=0; i<3; i++ ) { t = neighbors_[i]; if( t != NULL ) { t->ClearNeighbor( this ); } } ClearNeighbors(); points_[0]=points_[1]=points_[2] = NULL; } void Triangle::ClearNeighbor(Triangle *triangle ) { if( neighbors_[0] == triangle ) { neighbors_[0] = NULL; } else if( neighbors_[1] == triangle ) { neighbors_[1] = NULL; } else { neighbors_[2] = NULL; } } void Triangle::ClearNeighbors() { neighbors_[0] = NULL; neighbors_[1] = NULL; neighbors_[2] = NULL; } void Triangle::ClearDelunayEdges() { delaunay_edge[0] = delaunay_edge[1] = delaunay_edge[2] = false; } Point* Triangle::OppositePoint(Triangle& t, Point& p) { Point *cw = t.PointCW(p); double x = cw->x; double y = cw->y; x = p.x; y = p.y; return PointCW(*cw); } // Legalized triangle by rotating clockwise around point(0) void Triangle::Legalize(Point& point) { points_[1] = points_[0]; points_[0] = points_[2]; points_[2] = &point; } // Legalize triagnle by rotating clockwise around oPoint void Triangle::Legalize(Point& opoint, Point& npoint) { if (&opoint == points_[0]) { points_[1] = points_[0]; points_[0] = points_[2]; points_[2] = &npoint; } else if (&opoint == points_[1]) { points_[2] = points_[1]; points_[1] = points_[0]; points_[0] = &npoint; } else if (&opoint == points_[2]) { points_[0] = points_[2]; points_[2] = points_[1]; points_[1] = &npoint; } else { assert(0); } } int Triangle::Index(const Point* p) { if (p == points_[0]) { return 0; } else if (p == points_[1]) { return 1; } else if (p == points_[2]) { return 2; } assert(0); } int Triangle::EdgeIndex(const Point* p1, const Point* p2) { if (points_[0] == p1) { if (points_[1] == p2) { return 2; } else if (points_[2] == p2) { return 1; } } else if (points_[1] == p1) { if (points_[2] == p2) { return 0; } else if (points_[0] == p2) { return 2; } } else if (points_[2] == p1) { if (points_[0] == p2) { return 1; } else if (points_[1] == p2) { return 0; } } return -1; } void Triangle::MarkConstrainedEdge(const int index) { constrained_edge[index] = true; } void Triangle::MarkConstrainedEdge(Edge& edge) { MarkConstrainedEdge(edge.p, edge.q); } // Mark edge as constrained void Triangle::MarkConstrainedEdge(Point* p, Point* q) { if ((q == points_[0] && p == points_[1]) || (q == points_[1] && p == points_[0])) { constrained_edge[2] = true; } else if ((q == points_[0] && p == points_[2]) || (q == points_[2] && p == points_[0])) { constrained_edge[1] = true; } else if ((q == points_[1] && p == points_[2]) || (q == points_[2] && p == points_[1])) { constrained_edge[0] = true; } } // The point counter-clockwise to given point Point* Triangle::PointCW(Point& point) { if (&point == points_[0]) { return points_[2]; } else if (&point == points_[1]) { return points_[0]; } else if (&point == points_[2]) { return points_[1]; } assert(0); } // The point counter-clockwise to given point Point* Triangle::PointCCW(Point& point) { if (&point == points_[0]) { return points_[1]; } else if (&point == points_[1]) { return points_[2]; } else if (&point == points_[2]) { return points_[0]; } assert(0); } // The neighbor clockwise to given point Triangle* Triangle::NeighborCW(Point& point) { if (&point == points_[0]) { return neighbors_[1]; } else if (&point == points_[1]) { return neighbors_[2]; } return neighbors_[0]; } // The neighbor counter-clockwise to given point Triangle* Triangle::NeighborCCW(Point& point) { if (&point == points_[0]) { return neighbors_[2]; } else if (&point == points_[1]) { return neighbors_[0]; } return neighbors_[1]; } bool Triangle::GetConstrainedEdgeCCW(Point& p) { if (&p == points_[0]) { return constrained_edge[2]; } else if (&p == points_[1]) { return constrained_edge[0]; } return constrained_edge[1]; } bool Triangle::GetConstrainedEdgeCW(Point& p) { if (&p == points_[0]) { return constrained_edge[1]; } else if (&p == points_[1]) { return constrained_edge[2]; } return constrained_edge[0]; } void Triangle::SetConstrainedEdgeCCW(Point& p, bool ce) { if (&p == points_[0]) { constrained_edge[2] = ce; } else if (&p == points_[1]) { constrained_edge[0] = ce; } else { constrained_edge[1] = ce; } } void Triangle::SetConstrainedEdgeCW(Point& p, bool ce) { if (&p == points_[0]) { constrained_edge[1] = ce; } else if (&p == points_[1]) { constrained_edge[2] = ce; } else { constrained_edge[0] = ce; } } bool Triangle::GetDelunayEdgeCCW(Point& p) { if (&p == points_[0]) { return delaunay_edge[2]; } else if (&p == points_[1]) { return delaunay_edge[0]; } return delaunay_edge[1]; } bool Triangle::GetDelunayEdgeCW(Point& p) { if (&p == points_[0]) { return delaunay_edge[1]; } else if (&p == points_[1]) { return delaunay_edge[2]; } return delaunay_edge[0]; } void Triangle::SetDelunayEdgeCCW(Point& p, bool e) { if (&p == points_[0]) { delaunay_edge[2] = e; } else if (&p == points_[1]) { delaunay_edge[0] = e; } else { delaunay_edge[1] = e; } } void Triangle::SetDelunayEdgeCW(Point& p, bool e) { if (&p == points_[0]) { delaunay_edge[1] = e; } else if (&p == points_[1]) { delaunay_edge[2] = e; } else { delaunay_edge[0] = e; } } // The neighbor across to given point Triangle& Triangle::NeighborAcross(Point& opoint) { if (&opoint == points_[0]) { return *neighbors_[0]; } else if (&opoint == points_[1]) { return *neighbors_[1]; } return *neighbors_[2]; } void Triangle::DebugPrint() { using namespace std; cout << points_[0]->x << "," << points_[0]->y << " "; cout << points_[1]->x << "," << points_[1]->y << " "; cout << points_[2]->x << "," << points_[2]->y << endl; } } assimp-3.0/contrib/poly2tri/poly2tri/common/utils.h0000644002537200234200000000614611712643111022733 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef UTILS_H #define UTILS_H // Otherwise #defines like M_PI are undeclared under Visual Studio #define _USE_MATH_DEFINES #include #include namespace p2t { const double PI_3div4 = 3 * M_PI / 4; const double EPSILON = 1e-15; enum Orientation { CW, CCW, COLLINEAR }; /** * Forumla to calculate signed area
* Positive if CCW
* Negative if CW
* 0 if collinear
*
 * A[P1,P2,P3]  =  (x1*y2 - y1*x2) + (x2*y3 - y2*x3) + (x3*y1 - y3*x1)
 *              =  (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3)
 * 
*/ Orientation Orient2d(Point& pa, Point& pb, Point& pc) { double detleft = (pa.x - pc.x) * (pb.y - pc.y); double detright = (pa.y - pc.y) * (pb.x - pc.x); double val = detleft - detright; if (val > -EPSILON && val < EPSILON) { return COLLINEAR; } else if (val > 0) { return CCW; } return CW; } bool InScanArea(Point& pa, Point& pb, Point& pc, Point& pd) { double pdx = pd.x; double pdy = pd.y; double adx = pa.x - pdx; double ady = pa.y - pdy; double bdx = pb.x - pdx; double bdy = pb.y - pdy; double adxbdy = adx * bdy; double bdxady = bdx * ady; double oabd = adxbdy - bdxady; if (oabd <= EPSILON) { return false; } double cdx = pc.x - pdx; double cdy = pc.y - pdy; double cdxady = cdx * ady; double adxcdy = adx * cdy; double ocad = cdxady - adxcdy; if (ocad <= EPSILON) { return false; } return true; } } #endif assimp-3.0/contrib/poly2tri/poly2tri/poly2tri.h0000644002537200234200000000327111705146076022075 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef POLY2TRI_H #define POLY2TRI_H #include "common/shapes.h" #include "sweep/cdt.h" #endif assimp-3.0/contrib/poly2tri/poly2tri/sweep/0000755002537200234200000000000011770676627021274 5ustar zmoelnigiemusersassimp-3.0/contrib/poly2tri/poly2tri/sweep/sweep.h0000644002537200234200000002015511705146076022557 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Sweep-line, Constrained Delauney Triangulation (CDT) See: Domiter, V. and * Zalik, B.(2008)'Sweep-line algorithm for constrained Delaunay triangulation', * International Journal of Geographical Information Science * * "FlipScan" Constrained Edge Algorithm invented by Thomas Åhlén, thahlen@gmail.com */ #ifndef SWEEP_H #define SWEEP_H #include namespace p2t { class SweepContext; struct Node; struct Point; struct Edge; class Triangle; class Sweep { public: /** * Triangulate * * @param tcx */ void Triangulate(SweepContext& tcx); /** * Destructor - clean up memory */ ~Sweep(); private: /** * Start sweeping the Y-sorted point set from bottom to top * * @param tcx */ void SweepPoints(SweepContext& tcx); /** * Find closes node to the left of the new point and * create a new triangle. If needed new holes and basins * will be filled to. * * @param tcx * @param point * @return */ Node& PointEvent(SweepContext& tcx, Point& point); /** * * * @param tcx * @param edge * @param node */ void EdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void EdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* triangle, Point& point); /** * Creates a new front triangle and legalize it * * @param tcx * @param point * @param node * @return */ Node& NewFrontTriangle(SweepContext& tcx, Point& point, Node& node); /** * Adds a triangle to the advancing front to fill a hole. * @param tcx * @param node - middle node, that is the bottom of the hole */ void Fill(SweepContext& tcx, Node& node); /** * Returns true if triangle was legalized */ bool Legalize(SweepContext& tcx, Triangle& t); /** * Requirement:
* 1. a,b and c form a triangle.
* 2. a and d is know to be on opposite side of bc
*
   *                a
   *                +
   *               / \
   *              /   \
   *            b/     \c
   *            +-------+
   *           /    d    \
   *          /           \
   * 
* Fact: d has to be in area B to have a chance to be inside the circle formed by * a,b and c
* d is outside B if orient2d(a,b,d) or orient2d(c,a,d) is CW
* This preknowledge gives us a way to optimize the incircle test * @param a - triangle point, opposite d * @param b - triangle point * @param c - triangle point * @param d - point opposite a * @return true if d is inside circle, false if on circle edge */ bool Incircle(Point& pa, Point& pb, Point& pc, Point& pd); /** * Rotates a triangle pair one vertex CW *
   *       n2                    n2
   *  P +-----+             P +-----+
   *    | t  /|               |\  t |
   *    |   / |               | \   |
   *  n1|  /  |n3           n1|  \  |n3
   *    | /   |    after CW   |   \ |
   *    |/ oT |               | oT \|
   *    +-----+ oP            +-----+
   *       n4                    n4
   * 
*/ void RotateTrianglePair(Triangle& t, Point& p, Triangle& ot, Point& op); /** * Fills holes in the Advancing Front * * * @param tcx * @param n */ void FillAdvancingFront(SweepContext& tcx, Node& n); /** * * @param node - middle node * @return the angle between 3 front nodes */ double HoleAngle(Node& node); /** * The basin angle is decided against the horizontal line [1,0] */ double BasinAngle(Node& node); /** * Fills a basin that has formed on the Advancing Front to the right * of given node.
* First we decide a left,bottom and right node that forms the * boundaries of the basin. Then we do a reqursive fill. * * @param tcx * @param node - starting node, this or next node will be left node */ void FillBasin(SweepContext& tcx, Node& node); /** * Recursive algorithm to fill a Basin with triangles * * @param tcx * @param node - bottom_node * @param cnt - counter used to alternate on even and odd numbers */ void FillBasinReq(SweepContext& tcx, Node* node); bool IsShallow(SweepContext& tcx, Node& node); bool IsEdgeSideOfTriangle(Triangle& triangle, Point& ep, Point& eq); void FillEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void FillRightAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void FillRightBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillRightConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillRightConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillLeftAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void FillLeftBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillLeftConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillLeftConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FlipEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* t, Point& p); /** * After a flip we have two triangles and know that only one will still be * intersecting the edge. So decide which to contiune with and legalize the other * * @param tcx * @param o - should be the result of an orient2d( eq, op, ep ) * @param t - triangle 1 * @param ot - triangle 2 * @param p - a point shared by both triangles * @param op - another point shared by both triangles * @return returns the triangle still intersecting the edge */ Triangle& NextFlipTriangle(SweepContext& tcx, int o, Triangle& t, Triangle& ot, Point& p, Point& op); /** * When we need to traverse from one triangle to the next we need * the point in current triangle that is the opposite point to the next * triangle. * * @param ep * @param eq * @param ot * @param op * @return */ Point& NextFlipPoint(Point& ep, Point& eq, Triangle& ot, Point& op); /** * Scan part of the FlipScan algorithm
* When a triangle pair isn't flippable we will scan for the next * point that is inside the flip triangle scan area. When found * we generate a new flipEdgeEvent * * @param tcx * @param ep - last point on the edge we are traversing * @param eq - first point on the edge we are traversing * @param flipTriangle - the current triangle sharing the point eq with edge * @param t * @param p */ void FlipScanEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle& flip_triangle, Triangle& t, Point& p); void FinalizationPolygon(SweepContext& tcx); std::vector nodes_; }; } #endif assimp-3.0/contrib/poly2tri/poly2tri/sweep/cdt.h0000644002537200234200000000522511705146076022207 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef CDT_H #define CDT_H #include "advancing_front.h" #include "sweep_context.h" #include "sweep.h" /** * * @author Mason Green * */ namespace p2t { class CDT { public: /** * Constructor - add polyline with non repeating points * * @param polyline */ CDT(std::vector polyline); /** * Destructor - clean up memory */ ~CDT(); /** * Add a hole * * @param polyline */ void AddHole(std::vector polyline); /** * Add a steiner point * * @param point */ void AddPoint(Point* point); /** * Triangulate - do this AFTER you've added the polyline, holes, and Steiner points */ void Triangulate(); /** * Get CDT triangles */ std::vector GetTriangles(); /** * Get triangle map */ std::list GetMap(); private: /** * Internals */ SweepContext* sweep_context_; Sweep* sweep_; }; } #endif assimp-3.0/contrib/poly2tri/poly2tri/sweep/advancing_front.cc0000644002537200234200000000615611705146076024741 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "advancing_front.h" namespace p2t { AdvancingFront::AdvancingFront(Node& head, Node& tail) { head_ = &head; tail_ = &tail; search_node_ = &head; } Node* AdvancingFront::LocateNode(const double& x) { Node* node = search_node_; if (x < node->value) { while ((node = node->prev) != NULL) { if (x >= node->value) { search_node_ = node; return node; } } } else { while ((node = node->next) != NULL) { if (x < node->value) { search_node_ = node->prev; return node->prev; } } } return NULL; } Node* AdvancingFront::FindSearchNode(const double& x) { (void)x; // suppress compiler warnings "unused parameter 'x'" // TODO: implement BST index return search_node_; } Node* AdvancingFront::LocatePoint(const Point* point) { const double px = point->x; Node* node = FindSearchNode(px); const double nx = node->point->x; if (px == nx) { if (point != node->point) { // We might have two nodes with same x value for a short time if (point == node->prev->point) { node = node->prev; } else if (point == node->next->point) { node = node->next; } else { assert(0); } } } else if (px < nx) { while ((node = node->prev) != NULL) { if (point == node->point) { break; } } } else { while ((node = node->next) != NULL) { if (point == node->point) break; } } if(node) search_node_ = node; return node; } AdvancingFront::~AdvancingFront() { } } assimp-3.0/contrib/poly2tri/poly2tri/sweep/sweep_context.cc0000644002537200234200000001217111705146076024460 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "sweep_context.h" #include #include "advancing_front.h" namespace p2t { SweepContext::SweepContext(std::vector polyline) { basin = Basin(); edge_event = EdgeEvent(); points_ = polyline; InitEdges(points_); } void SweepContext::AddHole(std::vector polyline) { InitEdges(polyline); for(unsigned int i = 0; i < polyline.size(); i++) { points_.push_back(polyline[i]); } } void SweepContext::AddPoint(Point* point) { points_.push_back(point); } std::vector SweepContext::GetTriangles() { return triangles_; } std::list SweepContext::GetMap() { return map_; } void SweepContext::InitTriangulation() { double xmax(points_[0]->x), xmin(points_[0]->x); double ymax(points_[0]->y), ymin(points_[0]->y); // Calculate bounds. for (unsigned int i = 0; i < points_.size(); i++) { Point& p = *points_[i]; if (p.x > xmax) xmax = p.x; if (p.x < xmin) xmin = p.x; if (p.y > ymax) ymax = p.y; if (p.y < ymin) ymin = p.y; } double dx = kAlpha * (xmax - xmin); double dy = kAlpha * (ymax - ymin); head_ = new Point(xmax + dx, ymin - dy); tail_ = new Point(xmin - dx, ymin - dy); // Sort points along y-axis std::sort(points_.begin(), points_.end(), cmp); } void SweepContext::InitEdges(std::vector polyline) { int num_points = polyline.size(); for (int i = 0; i < num_points; i++) { int j = i < num_points - 1 ? i + 1 : 0; edge_list.push_back(new Edge(*polyline[i], *polyline[j])); } } Point* SweepContext::GetPoint(const int& index) { return points_[index]; } void SweepContext::AddToMap(Triangle* triangle) { map_.push_back(triangle); } Node& SweepContext::LocateNode(Point& point) { // TODO implement search tree return *front_->LocateNode(point.x); } void SweepContext::CreateAdvancingFront(std::vector nodes) { (void) nodes; // Initial triangle Triangle* triangle = new Triangle(*points_[0], *tail_, *head_); map_.push_back(triangle); af_head_ = new Node(*triangle->GetPoint(1), *triangle); af_middle_ = new Node(*triangle->GetPoint(0), *triangle); af_tail_ = new Node(*triangle->GetPoint(2)); front_ = new AdvancingFront(*af_head_, *af_tail_); // TODO: More intuitive if head is middles next and not previous? // so swap head and tail af_head_->next = af_middle_; af_middle_->next = af_tail_; af_middle_->prev = af_head_; af_tail_->prev = af_middle_; } void SweepContext::RemoveNode(Node* node) { delete node; } void SweepContext::MapTriangleToNodes(Triangle& t) { for (int i = 0; i < 3; i++) { if (!t.GetNeighbor(i)) { Node* n = front_->LocatePoint(t.PointCW(*t.GetPoint(i))); if (n) n->triangle = &t; } } } void SweepContext::RemoveFromMap(Triangle* triangle) { map_.remove(triangle); } void SweepContext::MeshClean(Triangle& triangle) { if (&triangle != NULL && !triangle.IsInterior()) { triangle.IsInterior(true); triangles_.push_back(&triangle); for (int i = 0; i < 3; i++) { if (!triangle.constrained_edge[i]) MeshClean(*triangle.GetNeighbor(i)); } } } SweepContext::~SweepContext() { // Clean up memory delete head_; delete tail_; delete front_; delete af_head_; delete af_middle_; delete af_tail_; typedef std::list type_list; for(type_list::iterator iter = map_.begin(); iter != map_.end(); ++iter) { Triangle* ptr = *iter; delete ptr; } for(unsigned int i = 0; i < edge_list.size(); i++) { delete edge_list[i]; } } } assimp-3.0/contrib/poly2tri/poly2tri/sweep/sweep.cc0000644002537200234200000005526211720136154022715 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include "sweep.h" #include "sweep_context.h" #include "advancing_front.h" #include "../common/utils.h" namespace p2t { // Triangulate simple polygon with holes void Sweep::Triangulate(SweepContext& tcx) { tcx.InitTriangulation(); tcx.CreateAdvancingFront(nodes_); // Sweep points; build mesh SweepPoints(tcx); // Clean up FinalizationPolygon(tcx); } void Sweep::SweepPoints(SweepContext& tcx) { for (int i = 1; i < tcx.point_count(); i++) { Point& point = *tcx.GetPoint(i); Node* node = &PointEvent(tcx, point); for (unsigned int i = 0; i < point.edge_list.size(); i++) { EdgeEvent(tcx, point.edge_list[i], node); } } } void Sweep::FinalizationPolygon(SweepContext& tcx) { // Get an Internal triangle to start with Triangle* t = tcx.front()->head()->next->triangle; Point* p = tcx.front()->head()->next->point; while (!t->GetConstrainedEdgeCW(*p)) { t = t->NeighborCCW(*p); } // Collect interior triangles constrained by edges tcx.MeshClean(*t); } Node& Sweep::PointEvent(SweepContext& tcx, Point& point) { Node& node = tcx.LocateNode(point); Node& new_node = NewFrontTriangle(tcx, point, node); // Only need to check +epsilon since point never have smaller // x value than node due to how we fetch nodes from the front if (point.x <= node.point->x + EPSILON) { Fill(tcx, node); } //tcx.AddNode(new_node); FillAdvancingFront(tcx, new_node); return new_node; } void Sweep::EdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { tcx.edge_event.constrained_edge = edge; tcx.edge_event.right = (edge->p->x > edge->q->x); if (IsEdgeSideOfTriangle(*node->triangle, *edge->p, *edge->q)) { return; } // For now we will do all needed filling // TODO: integrate with flip process might give some better performance // but for now this avoid the issue with cases that needs both flips and fills FillEdgeEvent(tcx, edge, node); EdgeEvent(tcx, *edge->p, *edge->q, node->triangle, *edge->q); } void Sweep::EdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* triangle, Point& point) { if (IsEdgeSideOfTriangle(*triangle, ep, eq)) { return; } Point* p1 = triangle->PointCCW(point); Orientation o1 = Orient2d(eq, *p1, ep); if (o1 == COLLINEAR) { // ASSIMP_CHANGE (aramis_acg) throw std::runtime_error("EdgeEvent - collinear points not supported"); if( triangle->Contains(&eq, p1)) { triangle->MarkConstrainedEdge(&eq, p1 ); // We are modifying the constraint maybe it would be better to // not change the given constraint and just keep a variable for the new constraint tcx.edge_event.constrained_edge->q = p1; triangle = &triangle->NeighborAcross(point); EdgeEvent( tcx, ep, *p1, triangle, *p1 ); } else { // ASSIMP_CHANGE (aramis_acg) std::runtime_error("EdgeEvent - collinear points not supported"); } return; } Point* p2 = triangle->PointCW(point); Orientation o2 = Orient2d(eq, *p2, ep); if (o2 == COLLINEAR) { // ASSIMP_CHANGE (aramis_acg) throw std::runtime_error("EdgeEvent - collinear points not supported"); if( triangle->Contains(&eq, p2)) { triangle->MarkConstrainedEdge(&eq, p2 ); // We are modifying the constraint maybe it would be better to // not change the given constraint and just keep a variable for the new constraint tcx.edge_event.constrained_edge->q = p2; triangle = &triangle->NeighborAcross(point); EdgeEvent( tcx, ep, *p2, triangle, *p2 ); } else { // ASSIMP_CHANGE (aramis_acg) throw std::runtime_error("EdgeEvent - collinear points not supported"); } return; } if (o1 == o2) { // Need to decide if we are rotating CW or CCW to get to a triangle // that will cross edge if (o1 == CW) { triangle = triangle->NeighborCCW(point); } else{ triangle = triangle->NeighborCW(point); } EdgeEvent(tcx, ep, eq, triangle, point); } else { // This triangle crosses constraint so lets flippin start! FlipEdgeEvent(tcx, ep, eq, triangle, point); } } bool Sweep::IsEdgeSideOfTriangle(Triangle& triangle, Point& ep, Point& eq) { int index = triangle.EdgeIndex(&ep, &eq); if (index != -1) { triangle.MarkConstrainedEdge(index); Triangle* t = triangle.GetNeighbor(index); if (t) { t->MarkConstrainedEdge(&ep, &eq); } return true; } return false; } Node& Sweep::NewFrontTriangle(SweepContext& tcx, Point& point, Node& node) { Triangle* triangle = new Triangle(point, *node.point, *node.next->point); triangle->MarkNeighbor(*node.triangle); tcx.AddToMap(triangle); Node* new_node = new Node(point); nodes_.push_back(new_node); new_node->next = node.next; new_node->prev = &node; node.next->prev = new_node; node.next = new_node; if (!Legalize(tcx, *triangle)) { tcx.MapTriangleToNodes(*triangle); } return *new_node; } void Sweep::Fill(SweepContext& tcx, Node& node) { Triangle* triangle = new Triangle(*node.prev->point, *node.point, *node.next->point); // TODO: should copy the constrained_edge value from neighbor triangles // for now constrained_edge values are copied during the legalize triangle->MarkNeighbor(*node.prev->triangle); triangle->MarkNeighbor(*node.triangle); tcx.AddToMap(triangle); // Update the advancing front node.prev->next = node.next; node.next->prev = node.prev; // If it was legalized the triangle has already been mapped if (!Legalize(tcx, *triangle)) { tcx.MapTriangleToNodes(*triangle); } } void Sweep::FillAdvancingFront(SweepContext& tcx, Node& n) { // Fill right holes Node* node = n.next; while (node->next) { double angle = HoleAngle(*node); if (angle > M_PI_2 || angle < -M_PI_2) break; Fill(tcx, *node); node = node->next; } // Fill left holes node = n.prev; while (node->prev) { double angle = HoleAngle(*node); if (angle > M_PI_2 || angle < -M_PI_2) break; Fill(tcx, *node); node = node->prev; } // Fill right basins if (n.next && n.next->next) { double angle = BasinAngle(n); if (angle < PI_3div4) { FillBasin(tcx, n); } } } double Sweep::BasinAngle(Node& node) { double ax = node.point->x - node.next->next->point->x; double ay = node.point->y - node.next->next->point->y; return atan2(ay, ax); } double Sweep::HoleAngle(Node& node) { /* Complex plane * ab = cosA +i*sinA * ab = (ax + ay*i)(bx + by*i) = (ax*bx + ay*by) + i(ax*by-ay*bx) * atan2(y,x) computes the principal value of the argument function * applied to the complex number x+iy * Where x = ax*bx + ay*by * y = ax*by - ay*bx */ double ax = node.next->point->x - node.point->x; double ay = node.next->point->y - node.point->y; double bx = node.prev->point->x - node.point->x; double by = node.prev->point->y - node.point->y; return atan2(ax * by - ay * bx, ax * bx + ay * by); } bool Sweep::Legalize(SweepContext& tcx, Triangle& t) { // To legalize a triangle we start by finding if any of the three edges // violate the Delaunay condition for (int i = 0; i < 3; i++) { if (t.delaunay_edge[i]) continue; Triangle* ot = t.GetNeighbor(i); if (ot) { Point* p = t.GetPoint(i); Point* op = ot->OppositePoint(t, *p); int oi = ot->Index(op); // If this is a Constrained Edge or a Delaunay Edge(only during recursive legalization) // then we should not try to legalize if (ot->constrained_edge[oi] || ot->delaunay_edge[oi]) { t.constrained_edge[i] = ot->constrained_edge[oi]; continue; } bool inside = Incircle(*p, *t.PointCCW(*p), *t.PointCW(*p), *op); if (inside) { // Lets mark this shared edge as Delaunay t.delaunay_edge[i] = true; ot->delaunay_edge[oi] = true; // Lets rotate shared edge one vertex CW to legalize it RotateTrianglePair(t, *p, *ot, *op); // We now got one valid Delaunay Edge shared by two triangles // This gives us 4 new edges to check for Delaunay // Make sure that triangle to node mapping is done only one time for a specific triangle bool not_legalized = !Legalize(tcx, t); if (not_legalized) { tcx.MapTriangleToNodes(t); } not_legalized = !Legalize(tcx, *ot); if (not_legalized) tcx.MapTriangleToNodes(*ot); // Reset the Delaunay edges, since they only are valid Delaunay edges // until we add a new triangle or point. // XXX: need to think about this. Can these edges be tried after we // return to previous recursive level? t.delaunay_edge[i] = false; ot->delaunay_edge[oi] = false; // If triangle have been legalized no need to check the other edges since // the recursive legalization will handles those so we can end here. return true; } } } return false; } bool Sweep::Incircle(Point& pa, Point& pb, Point& pc, Point& pd) { double adx = pa.x - pd.x; double ady = pa.y - pd.y; double bdx = pb.x - pd.x; double bdy = pb.y - pd.y; double adxbdy = adx * bdy; double bdxady = bdx * ady; double oabd = adxbdy - bdxady; if (oabd <= 0) return false; double cdx = pc.x - pd.x; double cdy = pc.y - pd.y; double cdxady = cdx * ady; double adxcdy = adx * cdy; double ocad = cdxady - adxcdy; if (ocad <= 0) return false; double bdxcdy = bdx * cdy; double cdxbdy = cdx * bdy; double alift = adx * adx + ady * ady; double blift = bdx * bdx + bdy * bdy; double clift = cdx * cdx + cdy * cdy; double det = alift * (bdxcdy - cdxbdy) + blift * ocad + clift * oabd; return det > 0; } void Sweep::RotateTrianglePair(Triangle& t, Point& p, Triangle& ot, Point& op) { Triangle* n1, *n2, *n3, *n4; n1 = t.NeighborCCW(p); n2 = t.NeighborCW(p); n3 = ot.NeighborCCW(op); n4 = ot.NeighborCW(op); bool ce1, ce2, ce3, ce4; ce1 = t.GetConstrainedEdgeCCW(p); ce2 = t.GetConstrainedEdgeCW(p); ce3 = ot.GetConstrainedEdgeCCW(op); ce4 = ot.GetConstrainedEdgeCW(op); bool de1, de2, de3, de4; de1 = t.GetDelunayEdgeCCW(p); de2 = t.GetDelunayEdgeCW(p); de3 = ot.GetDelunayEdgeCCW(op); de4 = ot.GetDelunayEdgeCW(op); t.Legalize(p, op); ot.Legalize(op, p); // Remap delaunay_edge ot.SetDelunayEdgeCCW(p, de1); t.SetDelunayEdgeCW(p, de2); t.SetDelunayEdgeCCW(op, de3); ot.SetDelunayEdgeCW(op, de4); // Remap constrained_edge ot.SetConstrainedEdgeCCW(p, ce1); t.SetConstrainedEdgeCW(p, ce2); t.SetConstrainedEdgeCCW(op, ce3); ot.SetConstrainedEdgeCW(op, ce4); // Remap neighbors // XXX: might optimize the markNeighbor by keeping track of // what side should be assigned to what neighbor after the // rotation. Now mark neighbor does lots of testing to find // the right side. t.ClearNeighbors(); ot.ClearNeighbors(); if (n1) ot.MarkNeighbor(*n1); if (n2) t.MarkNeighbor(*n2); if (n3) t.MarkNeighbor(*n3); if (n4) ot.MarkNeighbor(*n4); t.MarkNeighbor(ot); } void Sweep::FillBasin(SweepContext& tcx, Node& node) { if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) { tcx.basin.left_node = node.next->next; } else { tcx.basin.left_node = node.next; } // Find the bottom and right node tcx.basin.bottom_node = tcx.basin.left_node; while (tcx.basin.bottom_node->next && tcx.basin.bottom_node->point->y >= tcx.basin.bottom_node->next->point->y) { tcx.basin.bottom_node = tcx.basin.bottom_node->next; } if (tcx.basin.bottom_node == tcx.basin.left_node) { // No valid basin return; } tcx.basin.right_node = tcx.basin.bottom_node; while (tcx.basin.right_node->next && tcx.basin.right_node->point->y < tcx.basin.right_node->next->point->y) { tcx.basin.right_node = tcx.basin.right_node->next; } if (tcx.basin.right_node == tcx.basin.bottom_node) { // No valid basins return; } tcx.basin.width = tcx.basin.right_node->point->x - tcx.basin.left_node->point->x; tcx.basin.left_highest = tcx.basin.left_node->point->y > tcx.basin.right_node->point->y; FillBasinReq(tcx, tcx.basin.bottom_node); } void Sweep::FillBasinReq(SweepContext& tcx, Node* node) { // if shallow stop filling if (IsShallow(tcx, *node)) { return; } Fill(tcx, *node); if (node->prev == tcx.basin.left_node && node->next == tcx.basin.right_node) { return; } else if (node->prev == tcx.basin.left_node) { Orientation o = Orient2d(*node->point, *node->next->point, *node->next->next->point); if (o == CW) { return; } node = node->next; } else if (node->next == tcx.basin.right_node) { Orientation o = Orient2d(*node->point, *node->prev->point, *node->prev->prev->point); if (o == CCW) { return; } node = node->prev; } else { // Continue with the neighbor node with lowest Y value if (node->prev->point->y < node->next->point->y) { node = node->prev; } else { node = node->next; } } FillBasinReq(tcx, node); } bool Sweep::IsShallow(SweepContext& tcx, Node& node) { double height; if (tcx.basin.left_highest) { height = tcx.basin.left_node->point->y - node.point->y; } else { height = tcx.basin.right_node->point->y - node.point->y; } // if shallow stop filling if (tcx.basin.width > height) { return true; } return false; } void Sweep::FillEdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { if (tcx.edge_event.right) { FillRightAboveEdgeEvent(tcx, edge, node); } else { FillLeftAboveEdgeEvent(tcx, edge, node); } } void Sweep::FillRightAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { while (node->next->point->x < edge->p->x) { // Check if next node is below the edge if (Orient2d(*edge->q, *node->next->point, *edge->p) == CCW) { FillRightBelowEdgeEvent(tcx, edge, *node); } else { node = node->next; } } } void Sweep::FillRightBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { if (node.point->x < edge->p->x) { if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) { // Concave FillRightConcaveEdgeEvent(tcx, edge, node); } else{ // Convex FillRightConvexEdgeEvent(tcx, edge, node); // Retry this one FillRightBelowEdgeEvent(tcx, edge, node); } } } void Sweep::FillRightConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { Fill(tcx, *node.next); if (node.next->point != edge->p) { // Next above or below edge? if (Orient2d(*edge->q, *node.next->point, *edge->p) == CCW) { // Below if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) { // Next is concave FillRightConcaveEdgeEvent(tcx, edge, node); } else { // Next is convex } } } } void Sweep::FillRightConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { // Next concave or convex? if (Orient2d(*node.next->point, *node.next->next->point, *node.next->next->next->point) == CCW) { // Concave FillRightConcaveEdgeEvent(tcx, edge, *node.next); } else{ // Convex // Next above or below edge? if (Orient2d(*edge->q, *node.next->next->point, *edge->p) == CCW) { // Below FillRightConvexEdgeEvent(tcx, edge, *node.next); } else{ // Above } } } void Sweep::FillLeftAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { while (node->prev->point->x > edge->p->x) { // Check if next node is below the edge if (Orient2d(*edge->q, *node->prev->point, *edge->p) == CW) { FillLeftBelowEdgeEvent(tcx, edge, *node); } else { node = node->prev; } } } void Sweep::FillLeftBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { if (node.point->x > edge->p->x) { if (Orient2d(*node.point, *node.prev->point, *node.prev->prev->point) == CW) { // Concave FillLeftConcaveEdgeEvent(tcx, edge, node); } else { // Convex FillLeftConvexEdgeEvent(tcx, edge, node); // Retry this one FillLeftBelowEdgeEvent(tcx, edge, node); } } } void Sweep::FillLeftConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { // Next concave or convex? if (Orient2d(*node.prev->point, *node.prev->prev->point, *node.prev->prev->prev->point) == CW) { // Concave FillLeftConcaveEdgeEvent(tcx, edge, *node.prev); } else{ // Convex // Next above or below edge? if (Orient2d(*edge->q, *node.prev->prev->point, *edge->p) == CW) { // Below FillLeftConvexEdgeEvent(tcx, edge, *node.prev); } else{ // Above } } } void Sweep::FillLeftConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { Fill(tcx, *node.prev); if (node.prev->point != edge->p) { // Next above or below edge? if (Orient2d(*edge->q, *node.prev->point, *edge->p) == CW) { // Below if (Orient2d(*node.point, *node.prev->point, *node.prev->prev->point) == CW) { // Next is concave FillLeftConcaveEdgeEvent(tcx, edge, node); } else{ // Next is convex } } } } void Sweep::FlipEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* t, Point& p) { Triangle& ot = t->NeighborAcross(p); Point& op = *ot.OppositePoint(*t, p); if (&ot == NULL) { // If we want to integrate the fillEdgeEvent do it here // With current implementation we should never get here //throw new RuntimeException( "[BUG:FIXME] FLIP failed due to missing triangle"); assert(0); } if (InScanArea(p, *t->PointCCW(p), *t->PointCW(p), op)) { // Lets rotate shared edge one vertex CW RotateTrianglePair(*t, p, ot, op); tcx.MapTriangleToNodes(*t); tcx.MapTriangleToNodes(ot); if (p == eq && op == ep) { if (eq == *tcx.edge_event.constrained_edge->q && ep == *tcx.edge_event.constrained_edge->p) { t->MarkConstrainedEdge(&ep, &eq); ot.MarkConstrainedEdge(&ep, &eq); Legalize(tcx, *t); Legalize(tcx, ot); } else { // XXX: I think one of the triangles should be legalized here? } } else { Orientation o = Orient2d(eq, op, ep); t = &NextFlipTriangle(tcx, (int)o, *t, ot, p, op); FlipEdgeEvent(tcx, ep, eq, t, p); } } else { Point& newP = NextFlipPoint(ep, eq, ot, op); FlipScanEdgeEvent(tcx, ep, eq, *t, ot, newP); EdgeEvent(tcx, ep, eq, t, p); } } Triangle& Sweep::NextFlipTriangle(SweepContext& tcx, int o, Triangle& t, Triangle& ot, Point& p, Point& op) { if (o == CCW) { // ot is not crossing edge after flip int edge_index = ot.EdgeIndex(&p, &op); ot.delaunay_edge[edge_index] = true; Legalize(tcx, ot); ot.ClearDelunayEdges(); return t; } // t is not crossing edge after flip int edge_index = t.EdgeIndex(&p, &op); t.delaunay_edge[edge_index] = true; Legalize(tcx, t); t.ClearDelunayEdges(); return ot; } Point& Sweep::NextFlipPoint(Point& ep, Point& eq, Triangle& ot, Point& op) { Orientation o2d = Orient2d(eq, op, ep); if (o2d == CW) { // Right return *ot.PointCCW(op); } else if (o2d == CCW) { // Left return *ot.PointCW(op); } else{ //throw new RuntimeException("[Unsupported] Opposing point on constrained edge"); // ASSIMP_CHANGE (aramis_acg) throw std::runtime_error("[Unsupported] Opposing point on constrained edge"); } } void Sweep::FlipScanEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle& flip_triangle, Triangle& t, Point& p) { Triangle& ot = t.NeighborAcross(p); Point& op = *ot.OppositePoint(t, p); if (&t.NeighborAcross(p) == NULL) { // If we want to integrate the fillEdgeEvent do it here // With current implementation we should never get here //throw new RuntimeException( "[BUG:FIXME] FLIP failed due to missing triangle"); assert(0); } if (InScanArea(eq, *flip_triangle.PointCCW(eq), *flip_triangle.PointCW(eq), op)) { // flip with new edge op->eq FlipEdgeEvent(tcx, eq, op, &ot, op); // TODO: Actually I just figured out that it should be possible to // improve this by getting the next ot and op before the the above // flip and continue the flipScanEdgeEvent here // set new ot and op here and loop back to inScanArea test // also need to set a new flip_triangle first // Turns out at first glance that this is somewhat complicated // so it will have to wait. } else{ Point& newP = NextFlipPoint(ep, eq, ot, op); FlipScanEdgeEvent(tcx, ep, eq, flip_triangle, ot, newP); } } Sweep::~Sweep() { // Clean up memory for(int i = 0; i < nodes_.size(); i++) { delete nodes_[i]; } } } assimp-3.0/contrib/poly2tri/poly2tri/sweep/sweep_context.h0000644002537200234200000001026311705146076024322 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SWEEP_CONTEXT_H #define SWEEP_CONTEXT_H #include #include #include namespace p2t { // Inital triangle factor, seed triangle will extend 30% of // PointSet width to both left and right. const double kAlpha = 0.3; struct Point; class Triangle; struct Node; struct Edge; class AdvancingFront; class SweepContext { public: /// Constructor SweepContext(std::vector polyline); /// Destructor ~SweepContext(); void set_head(Point* p1); Point* head(); void set_tail(Point* p1); Point* tail(); int point_count(); Node& LocateNode(Point& point); void RemoveNode(Node* node); void CreateAdvancingFront(std::vector nodes); /// Try to map a node to all sides of this triangle that don't have a neighbor void MapTriangleToNodes(Triangle& t); void AddToMap(Triangle* triangle); Point* GetPoint(const int& index); Point* GetPoints(); void RemoveFromMap(Triangle* triangle); void AddHole(std::vector polyline); void AddPoint(Point* point); AdvancingFront* front(); void MeshClean(Triangle& triangle); std::vector GetTriangles(); std::list GetMap(); std::vector edge_list; struct Basin { Node* left_node; Node* bottom_node; Node* right_node; double width; bool left_highest; Basin() : left_node(NULL), bottom_node(NULL), right_node(NULL), width(0.0), left_highest(false) { } void Clear() { left_node = NULL; bottom_node = NULL; right_node = NULL; width = 0.0; left_highest = false; } }; struct EdgeEvent { Edge* constrained_edge; bool right; EdgeEvent() : constrained_edge(NULL), right(false) { } }; Basin basin; EdgeEvent edge_event; private: friend class Sweep; std::vector triangles_; std::list map_; std::vector points_; // Advancing front AdvancingFront* front_; // head point used with advancing front Point* head_; // tail point used with advancing front Point* tail_; Node *af_head_, *af_middle_, *af_tail_; void InitTriangulation(); void InitEdges(std::vector polyline); }; inline AdvancingFront* SweepContext::front() { return front_; } inline int SweepContext::point_count() { return points_.size(); } inline void SweepContext::set_head(Point* p1) { head_ = p1; } inline Point* SweepContext::head() { return head_; } inline void SweepContext::set_tail(Point* p1) { tail_ = p1; } inline Point* SweepContext::tail() { return tail_; } } #endif assimp-3.0/contrib/poly2tri/poly2tri/sweep/cdt.cc0000644002537200234200000000440611705146076022345 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "cdt.h" namespace p2t { CDT::CDT(std::vector polyline) { sweep_context_ = new SweepContext(polyline); sweep_ = new Sweep; } void CDT::AddHole(std::vector polyline) { sweep_context_->AddHole(polyline); } void CDT::AddPoint(Point* point) { sweep_context_->AddPoint(point); } void CDT::Triangulate() { sweep_->Triangulate(*sweep_context_); } std::vector CDT::GetTriangles() { return sweep_context_->GetTriangles(); } std::list CDT::GetMap() { return sweep_context_->GetMap(); } CDT::~CDT() { delete sweep_context_; delete sweep_; } } assimp-3.0/contrib/poly2tri/poly2tri/sweep/advancing_front.h0000644002537200234200000000556011705146076024601 0ustar zmoelnigiemusers/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef ADVANCED_FRONT_H #define ADVANCED_FRONT_H #include "../common/shapes.h" namespace p2t { struct Node; // Advancing front node struct Node { Point* point; Triangle* triangle; Node* next; Node* prev; double value; Node(Point& p) : point(&p), triangle(NULL), next(NULL), prev(NULL), value(p.x) { } Node(Point& p, Triangle& t) : point(&p), triangle(&t), next(NULL), prev(NULL), value(p.x) { } }; // Advancing front class AdvancingFront { public: AdvancingFront(Node& head, Node& tail); // Destructor ~AdvancingFront(); Node* head(); void set_head(Node* node); Node* tail(); void set_tail(Node* node); Node* search(); void set_search(Node* node); /// Locate insertion point along advancing front Node* LocateNode(const double& x); Node* LocatePoint(const Point* point); private: Node* head_, *tail_, *search_node_; Node* FindSearchNode(const double& x); }; inline Node* AdvancingFront::head() { return head_; } inline void AdvancingFront::set_head(Node* node) { head_ = node; } inline Node* AdvancingFront::tail() { return tail_; } inline void AdvancingFront::set_tail(Node* node) { tail_ = node; } inline Node* AdvancingFront::search() { return search_node_; } inline void AdvancingFront::set_search(Node* node) { search_node_ = node; } } #endif assimp-3.0/contrib/poly2tri/LICENSE0000644002537200234200000000277511705146076017371 0ustar zmoelnigiemusersPoly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors http://code.google.com/p/poly2tri/ All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Poly2Tri nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. assimp-3.0/contrib/poly2tri/README0000644002537200234200000000177111705146076017237 0ustar zmoelnigiemusers================== INSTALLATION GUIDE ================== ------------ Dependencies ------------ Core poly2tri lib: - Standard Template Library (STL) Testbed: - gcc - OpenGL - GLFW (http://glfw.sf.net) - Python Waf (http://code.google.com/p/waf/) is used to compile the testbed. A waf script (86kb) is included in the repositoty. ---------------------------------------------- Building the Testbed ---------------------------------------------- Posix/MSYS environment: ./waf configure ./waf build Windows command line: python waf configure python waf build ---------------------------------------------- Running the Examples ---------------------------------------------- Load data points from a file: p2t Random distribution of points inside a consrained box: p2t random Examples: ./p2t dude.dat 300 500 2 ./p2t nazca_monkey.dat 0 0 9 ./p2t random 10 100 5.0 ./p2t random 1000 20000 0.025assimp-3.0/contrib/zlib_note.txt0000644002537200234200000000062411154051355017306 0ustar zmoelnigiemusersThis is a heavily modified and shrinked version of zlib 1.2.3 - Removed comments from zlib.h - Removed gzip/zip archive I/O - Removed infback.c - Added Assimp #idefs to exclude it if not needed - Disabled debug macros in zutil.h Assimp itself does not use the compression part yet, so it needn't be compiled (trees.c, deflate.c, compress.c). Currently these units are just used by assimp_cmd.assimp-3.0/contrib/ConvertUTF/0000755002537200234200000000000011770676626016577 5ustar zmoelnigiemusersassimp-3.0/contrib/ConvertUTF/ConvertUTF.h0000644002537200234200000001356611350460361020737 0ustar zmoelnigiemusers/* * Copyright 2001-2004 Unicode, Inc. * * Disclaimer * * This source code is provided as is by Unicode, Inc. No claims are * made as to fitness for any particular purpose. No warranties of any * kind are expressed or implied. The recipient agrees to determine * applicability of information provided. If this file has been * purchased on magnetic or optical media from Unicode, Inc., the * sole remedy for any claim will be exchange of defective media * within 90 days of receipt. * * Limitations on Rights to Redistribute This Code * * Unicode, Inc. hereby grants the right to freely use the information * supplied in this file in the creation of products supporting the * Unicode Standard, and to make copies of this file in any form * for internal or external distribution as long as this notice * remains attached. */ #ifndef CONVERTUTF_H #define CONVERTUTF_H /* --------------------------------------------------------------------- Conversions between UTF32, UTF-16, and UTF-8. Header file. Several funtions are included here, forming a complete set of conversions between the three formats. UTF-7 is not included here, but is handled in a separate source file. Each of these routines takes pointers to input buffers and output buffers. The input buffers are const. Each routine converts the text between *sourceStart and sourceEnd, putting the result into the buffer between *targetStart and targetEnd. Note: the end pointers are *after* the last item: e.g. *(sourceEnd - 1) is the last item. The return result indicates whether the conversion was successful, and if not, whether the problem was in the source or target buffers. (Only the first encountered problem is indicated.) After the conversion, *sourceStart and *targetStart are both updated to point to the end of last text successfully converted in the respective buffers. Input parameters: sourceStart - pointer to a pointer to the source buffer. The contents of this are modified on return so that it points at the next thing to be converted. targetStart - similarly, pointer to pointer to the target buffer. sourceEnd, targetEnd - respectively pointers to the ends of the two buffers, for overflow checking only. These conversion functions take a ConversionFlags argument. When this flag is set to strict, both irregular sequences and isolated surrogates will cause an error. When the flag is set to lenient, both irregular sequences and isolated surrogates are converted. Whether the flag is strict or lenient, all illegal sequences will cause an error return. This includes sequences such as: , , or in UTF-8, and values above 0x10FFFF in UTF-32. Conformant code must check for illegal sequences. When the flag is set to lenient, characters over 0x10FFFF are converted to the replacement character; otherwise (when the flag is set to strict) they constitute an error. Output parameters: The value "sourceIllegal" is returned from some routines if the input sequence is malformed. When "sourceIllegal" is returned, the source value will point to the illegal value that caused the problem. E.g., in UTF-8 when a sequence is malformed, it points to the start of the malformed sequence. Author: Mark E. Davis, 1994. Rev History: Rick McGowan, fixes & updates May 2001. Fixes & updates, Sept 2001. ------------------------------------------------------------------------ */ /* --------------------------------------------------------------------- The following 4 definitions are compiler-specific. The C standard does not guarantee that wchar_t has at least 16 bits, so wchar_t is no less portable than unsigned short! All should be unsigned values to avoid sign extension during bit mask & shift operations. ------------------------------------------------------------------------ */ typedef unsigned long UTF32; /* at least 32 bits */ typedef unsigned short UTF16; /* at least 16 bits */ typedef unsigned char UTF8; /* typically 8 bits */ typedef unsigned char Boolean; /* 0 or 1 */ /* Some fundamental constants */ #define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD #define UNI_MAX_BMP (UTF32)0x0000FFFF #define UNI_MAX_UTF16 (UTF32)0x0010FFFF #define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF #define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF typedef enum { conversionOK, /* conversion successful */ sourceExhausted, /* partial character in source, but hit end */ targetExhausted, /* insuff. room in target for conversion */ sourceIllegal /* source sequence is illegal/malformed */ } ConversionResult; typedef enum { strictConversion = 0, lenientConversion } ConversionFlags; /* This is for C++ and does no harm in C */ #ifdef __cplusplus extern "C" { #endif ConversionResult ConvertUTF8toUTF16 ( const UTF8** sourceStart, const UTF8* sourceEnd, UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags); ConversionResult ConvertUTF16toUTF8 ( const UTF16** sourceStart, const UTF16* sourceEnd, UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags); ConversionResult ConvertUTF8toUTF32 ( const UTF8** sourceStart, const UTF8* sourceEnd, UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags); ConversionResult ConvertUTF32toUTF8 ( const UTF32** sourceStart, const UTF32* sourceEnd, UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags); ConversionResult ConvertUTF16toUTF32 ( const UTF16** sourceStart, const UTF16* sourceEnd, UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags); ConversionResult ConvertUTF32toUTF16 ( const UTF32** sourceStart, const UTF32* sourceEnd, UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags); Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd); #ifdef __cplusplus } #endif /* --------------------------------------------------------------------- */ #endif // CONVERTUTF_H assimp-3.0/contrib/ConvertUTF/readme.txt0000644002537200234200000000272411243622226020560 0ustar zmoelnigiemusers The accompanying C source code file "ConvertUTF.c" and the associated header file "ConvertUTF.h" provide for conversion between various transformation formats of Unicode characters. The following conversions are supported: UTF-32 to UTF-16 UTF-32 to UTF-8 UTF-16 to UTF-32 UTF-16 to UTF-8 UTF-8 to UTF-16 UTF-8 to UTF-32 In addition, there is a test harness which runs various tests. The files "CVTUTF7.C" and "CVTUTF7.H" are for archival and historical purposes only. They have not been updated to Unicode 3.0 or later and should be considered obsolescent. "CVTUTF7.C" contains two functions that can convert between UCS2 (i.e., the BMP characters only) and UTF-7. Surrogates are not supported, the code has not been tested, and should be considered unsuitable for general purpose use. Please submit any bug reports about these programs here: http://www.unicode.org/unicode/reporting.html Version 1.0: initial version. Version 1.1: corrected some minor problems; added stricter checks. Version 1.2: corrected switch statements associated with "extraBytesToRead" in 4 & 5 byte cases, in functions for conversion from UTF8. Note: formally, the 4 & 5 byte cases are illegal in the latest UTF8, but the table and this code has always catered for those, cases since at one time they were legal. Version 1.3: Updated UTF-8 legality check; updated to use UNI_MAX_LEGAL_UTF32 in UTF-32 conversions Updated UTF-8 legality tests in harness.c Last update: October 19, 2004 assimp-3.0/contrib/ConvertUTF/ConvertUTF.c0000644002537200234200000004517311243622226020732 0ustar zmoelnigiemusers/* * Copyright 2001-2004 Unicode, Inc. * * Disclaimer * * This source code is provided as is by Unicode, Inc. No claims are * made as to fitness for any particular purpose. No warranties of any * kind are expressed or implied. The recipient agrees to determine * applicability of information provided. If this file has been * purchased on magnetic or optical media from Unicode, Inc., the * sole remedy for any claim will be exchange of defective media * within 90 days of receipt. * * Limitations on Rights to Redistribute This Code * * Unicode, Inc. hereby grants the right to freely use the information * supplied in this file in the creation of products supporting the * Unicode Standard, and to make copies of this file in any form * for internal or external distribution as long as this notice * remains attached. */ /* --------------------------------------------------------------------- Conversions between UTF32, UTF-16, and UTF-8. Source code file. Author: Mark E. Davis, 1994. Rev History: Rick McGowan, fixes & updates May 2001. Sept 2001: fixed const & error conditions per mods suggested by S. Parent & A. Lillich. June 2002: Tim Dodd added detection and handling of incomplete source sequences, enhanced error detection, added casts to eliminate compiler warnings. July 2003: slight mods to back out aggressive FFFE detection. Jan 2004: updated switches in from-UTF8 conversions. Oct 2004: updated to use UNI_MAX_LEGAL_UTF32 in UTF-32 conversions. See the header file "ConvertUTF.h" for complete documentation. ------------------------------------------------------------------------ */ #include "ConvertUTF.h" #ifdef CVTUTF_DEBUG #include #endif static const int halfShift = 10; /* used for shifting by 10 bits */ static const UTF32 halfBase = 0x0010000UL; static const UTF32 halfMask = 0x3FFUL; #define UNI_SUR_HIGH_START (UTF32)0xD800 #define UNI_SUR_HIGH_END (UTF32)0xDBFF #define UNI_SUR_LOW_START (UTF32)0xDC00 #define UNI_SUR_LOW_END (UTF32)0xDFFF #define false 0 #define true 1 /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF32toUTF16 ( const UTF32** sourceStart, const UTF32* sourceEnd, UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF32* source = *sourceStart; UTF16* target = *targetStart; while (source < sourceEnd) { UTF32 ch; if (target >= targetEnd) { result = targetExhausted; break; } ch = *source++; if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ /* UTF-16 surrogate values are illegal in UTF-32; 0xffff or 0xfffe are both reserved values */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { if (flags == strictConversion) { --source; /* return to the illegal value itself */ result = sourceIllegal; break; } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { *target++ = (UTF16)ch; /* normal case */ } } else if (ch > UNI_MAX_LEGAL_UTF32) { if (flags == strictConversion) { result = sourceIllegal; } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { /* target is a character in range 0xFFFF - 0x10FFFF. */ if (target + 1 >= targetEnd) { --source; /* Back up source pointer! */ result = targetExhausted; break; } ch -= halfBase; *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START); *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START); } } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF16toUTF32 ( const UTF16** sourceStart, const UTF16* sourceEnd, UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF16* source = *sourceStart; UTF32* target = *targetStart; UTF32 ch, ch2; while (source < sourceEnd) { const UTF16* oldSource = source; /* In case we have to back up because of target overflow. */ ch = *source++; /* If we have a surrogate pair, convert to UTF32 first. */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) { /* If the 16 bits following the high surrogate are in the source buffer... */ if (source < sourceEnd) { ch2 = *source; /* If it's a low surrogate, convert to UTF32. */ if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) { ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + (ch2 - UNI_SUR_LOW_START) + halfBase; ++source; } else if (flags == strictConversion) { /* it's an unpaired high surrogate */ --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } else { /* We don't have the 16 bits following the high surrogate. */ --source; /* return to the high surrogate */ result = sourceExhausted; break; } } else if (flags == strictConversion) { /* UTF-16 surrogate values are illegal in UTF-32 */ if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) { --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } if (target >= targetEnd) { source = oldSource; /* Back up source pointer! */ result = targetExhausted; break; } *target++ = ch; } *sourceStart = source; *targetStart = target; #ifdef CVTUTF_DEBUG if (result == sourceIllegal) { fprintf(stderr, "ConvertUTF16toUTF32 illegal seq 0x%04x,%04x\n", ch, ch2); fflush(stderr); } #endif return result; } /* --------------------------------------------------------------------- */ /* * Index into the table below with the first byte of a UTF-8 sequence to * get the number of trailing bytes that are supposed to follow it. * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is * left as-is for anyone who may want to do such conversion, which was * allowed in earlier algorithms. */ static const char trailingBytesForUTF8[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 }; /* * Magic values subtracted from a buffer value during UTF8 conversion. * This table contains as many values as there might be trailing bytes * in a UTF-8 sequence. */ static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 0x03C82080UL, 0xFA082080UL, 0x82082080UL }; /* * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed * into the first byte, depending on how many bytes follow. There are * as many entries in this table as there are UTF-8 sequence types. * (I.e., one byte sequence, two byte... etc.). Remember that sequencs * for *legal* UTF-8 will be 4 or fewer bytes total. */ static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; /* --------------------------------------------------------------------- */ /* The interface converts a whole buffer to avoid function-call overhead. * Constants have been gathered. Loops & conditionals have been removed as * much as possible for efficiency, in favor of drop-through switches. * (See "Note A" at the bottom of the file for equivalent code.) * If your compiler supports it, the "isLegalUTF8" call can be turned * into an inline function. */ /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF16toUTF8 ( const UTF16** sourceStart, const UTF16* sourceEnd, UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF16* source = *sourceStart; UTF8* target = *targetStart; while (source < sourceEnd) { UTF32 ch; unsigned short bytesToWrite = 0; const UTF32 byteMask = 0xBF; const UTF32 byteMark = 0x80; const UTF16* oldSource = source; /* In case we have to back up because of target overflow. */ ch = *source++; /* If we have a surrogate pair, convert to UTF32 first. */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) { /* If the 16 bits following the high surrogate are in the source buffer... */ if (source < sourceEnd) { UTF32 ch2 = *source; /* If it's a low surrogate, convert to UTF32. */ if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) { ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + (ch2 - UNI_SUR_LOW_START) + halfBase; ++source; } else if (flags == strictConversion) { /* it's an unpaired high surrogate */ --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } else { /* We don't have the 16 bits following the high surrogate. */ --source; /* return to the high surrogate */ result = sourceExhausted; break; } } else if (flags == strictConversion) { /* UTF-16 surrogate values are illegal in UTF-32 */ if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) { --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } /* Figure out how many bytes the result will require */ if (ch < (UTF32)0x80) { bytesToWrite = 1; } else if (ch < (UTF32)0x800) { bytesToWrite = 2; } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; } else if (ch < (UTF32)0x110000) { bytesToWrite = 4; } else { bytesToWrite = 3; ch = UNI_REPLACEMENT_CHAR; } target += bytesToWrite; if (target > targetEnd) { source = oldSource; /* Back up source pointer! */ target -= bytesToWrite; result = targetExhausted; break; } switch (bytesToWrite) { /* note: everything falls through. */ case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 1: *--target = (UTF8)(ch | firstByteMark[bytesToWrite]); } target += bytesToWrite; } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ /* * Utility routine to tell whether a sequence of bytes is legal UTF-8. * This must be called with the length pre-determined by the first byte. * If not calling this from ConvertUTF8to*, then the length can be set by: * length = trailingBytesForUTF8[*source]+1; * and the sequence is illegal right away if there aren't that many bytes * available. * If presented with a length > 4, this returns false. The Unicode * definition of UTF-8 goes up to 4-byte sequences. */ static Boolean isLegalUTF8(const UTF8 *source, int length) { UTF8 a; const UTF8 *srcptr = source+length; switch (length) { default: return false; /* Everything else falls through when "true"... */ case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false; case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false; case 2: if ((a = (*--srcptr)) > 0xBF) return false; switch (*source) { /* no fall-through in this inner switch */ case 0xE0: if (a < 0xA0) return false; break; case 0xED: if (a > 0x9F) return false; break; case 0xF0: if (a < 0x90) return false; break; case 0xF4: if (a > 0x8F) return false; break; default: if (a < 0x80) return false; } case 1: if (*source >= 0x80 && *source < 0xC2) return false; } if (*source > 0xF4) return false; return true; } /* --------------------------------------------------------------------- */ /* * Exported function to return whether a UTF-8 sequence is legal or not. * This is not used here; it's just exported. */ Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) { int length = trailingBytesForUTF8[*source]+1; if (source+length > sourceEnd) { return false; } return isLegalUTF8(source, length); } /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF8toUTF16 ( const UTF8** sourceStart, const UTF8* sourceEnd, UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF8* source = *sourceStart; UTF16* target = *targetStart; while (source < sourceEnd) { UTF32 ch = 0; unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; if (source + extraBytesToRead >= sourceEnd) { result = sourceExhausted; break; } /* Do this check whether lenient or strict */ if (! isLegalUTF8(source, extraBytesToRead+1)) { result = sourceIllegal; break; } /* * The cases all fall through. See "Note A" below. */ switch (extraBytesToRead) { case 5: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */ case 4: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */ case 3: ch += *source++; ch <<= 6; case 2: ch += *source++; ch <<= 6; case 1: ch += *source++; ch <<= 6; case 0: ch += *source++; } ch -= offsetsFromUTF8[extraBytesToRead]; if (target >= targetEnd) { source -= (extraBytesToRead+1); /* Back up source pointer! */ result = targetExhausted; break; } if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ /* UTF-16 surrogate values are illegal in UTF-32 */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { if (flags == strictConversion) { source -= (extraBytesToRead+1); /* return to the illegal value itself */ result = sourceIllegal; break; } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { *target++ = (UTF16)ch; /* normal case */ } } else if (ch > UNI_MAX_UTF16) { if (flags == strictConversion) { result = sourceIllegal; source -= (extraBytesToRead+1); /* return to the start */ break; /* Bail out; shouldn't continue */ } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { /* target is a character in range 0xFFFF - 0x10FFFF. */ if (target + 1 >= targetEnd) { source -= (extraBytesToRead+1); /* Back up source pointer! */ result = targetExhausted; break; } ch -= halfBase; *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START); *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START); } } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF32toUTF8 ( const UTF32** sourceStart, const UTF32* sourceEnd, UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF32* source = *sourceStart; UTF8* target = *targetStart; while (source < sourceEnd) { UTF32 ch; unsigned short bytesToWrite = 0; const UTF32 byteMask = 0xBF; const UTF32 byteMark = 0x80; ch = *source++; if (flags == strictConversion ) { /* UTF-16 surrogate values are illegal in UTF-32 */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } /* * Figure out how many bytes the result will require. Turn any * illegally large UTF32 things (> Plane 17) into replacement chars. */ if (ch < (UTF32)0x80) { bytesToWrite = 1; } else if (ch < (UTF32)0x800) { bytesToWrite = 2; } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; } else if (ch <= UNI_MAX_LEGAL_UTF32) { bytesToWrite = 4; } else { bytesToWrite = 3; ch = UNI_REPLACEMENT_CHAR; result = sourceIllegal; } target += bytesToWrite; if (target > targetEnd) { --source; /* Back up source pointer! */ target -= bytesToWrite; result = targetExhausted; break; } switch (bytesToWrite) { /* note: everything falls through. */ case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; case 1: *--target = (UTF8) (ch | firstByteMark[bytesToWrite]); } target += bytesToWrite; } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF8toUTF32 ( const UTF8** sourceStart, const UTF8* sourceEnd, UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF8* source = *sourceStart; UTF32* target = *targetStart; while (source < sourceEnd) { UTF32 ch = 0; unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; if (source + extraBytesToRead >= sourceEnd) { result = sourceExhausted; break; } /* Do this check whether lenient or strict */ if (! isLegalUTF8(source, extraBytesToRead+1)) { result = sourceIllegal; break; } /* * The cases all fall through. See "Note A" below. */ switch (extraBytesToRead) { case 5: ch += *source++; ch <<= 6; case 4: ch += *source++; ch <<= 6; case 3: ch += *source++; ch <<= 6; case 2: ch += *source++; ch <<= 6; case 1: ch += *source++; ch <<= 6; case 0: ch += *source++; } ch -= offsetsFromUTF8[extraBytesToRead]; if (target >= targetEnd) { source -= (extraBytesToRead+1); /* Back up the source pointer! */ result = targetExhausted; break; } if (ch <= UNI_MAX_LEGAL_UTF32) { /* * UTF-16 surrogate values are illegal in UTF-32, and anything * over Plane 17 (> 0x10FFFF) is illegal. */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { if (flags == strictConversion) { source -= (extraBytesToRead+1); /* return to the illegal value itself */ result = sourceIllegal; break; } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { *target++ = ch; } } else { /* i.e., ch > UNI_MAX_LEGAL_UTF32 */ result = sourceIllegal; *target++ = UNI_REPLACEMENT_CHAR; } } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- Note A. The fall-through switches in UTF-8 reading code save a temp variable, some decrements & conditionals. The switches are equivalent to the following loop: { int tmpBytesToRead = extraBytesToRead+1; do { ch += *source++; --tmpBytesToRead; if (tmpBytesToRead) ch <<= 6; } while (tmpBytesToRead > 0); } In UTF-8 writing code, the switches on "bytesToWrite" are similarly unrolled loops. --------------------------------------------------------------------- */ assimp-3.0/contrib/irrXML_note.txt0000644002537200234200000000022711134737711017527 0ustar zmoelnigiemusers IrrXML Downloaded September 2008 - fixed a minor compiler warning (vs 2005, shift too large) - fixed an issue regarding wchar_t/unsigned short assimp-3.0/contrib/irrXML/0000755002537200234200000000000011770676627015756 5ustar zmoelnigiemusersassimp-3.0/contrib/irrXML/irrArray.h0000644002537200234200000002324411333400311017671 0ustar zmoelnigiemusers// Copyright (C) 2002-2005 Nikolaus Gebhardt // This file is part of the "Irrlicht Engine" and the "irrXML" project. // For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h #ifndef __IRR_ARRAY_H_INCLUDED__ #define __IRR_ARRAY_H_INCLUDED__ #include "irrTypes.h" #include "heapsort.h" namespace irr { namespace core { //! Self reallocating template array (like stl vector) with additional features. /** Some features are: Heap sorting, binary search methods, easier debugging. */ template class array { public: array() : data(0), allocated(0), used(0), free_when_destroyed(true), is_sorted(true) { } //! Constructs a array and allocates an initial chunk of memory. //! \param start_count: Amount of elements to allocate. array(u32 start_count) : data(0), allocated(0), used(0), free_when_destroyed(true), is_sorted(true) { reallocate(start_count); } //! Copy constructor array(const array& other) : data(0) { *this = other; } //! Destructor. Frees allocated memory, if set_free_when_destroyed //! was not set to false by the user before. ~array() { if (free_when_destroyed) delete [] data; } //! Reallocates the array, make it bigger or smaller. //! \param new_size: New size of array. void reallocate(u32 new_size) { T* old_data = data; data = new T[new_size]; allocated = new_size; s32 end = used < new_size ? used : new_size; for (s32 i=0; i allocated) { // reallocate(used * 2 +1); // this doesn't work if the element is in the same array. So // we'll copy the element first to be sure we'll get no data // corruption T e; e = element; // copy element reallocate(used * 2 +1); // increase data block data[used++] = e; // push_back is_sorted = false; return; } data[used++] = element; is_sorted = false; } //! Adds an element at the front of the array. If the array is to small to //! add this new element, the array is made bigger. Please note that this //! is slow, because the whole array needs to be copied for this. //! \param element: Element to add at the back of the array. void push_front(const T& element) { if (used + 1 > allocated) reallocate(used * 2 +1); for (int i=(int)used; i>0; --i) data[i] = data[i-1]; data[0] = element; is_sorted = false; ++used; } //! Insert item into array at specified position. Please use this //! only if you know what you are doing (possible performance loss). //! The preferred method of adding elements should be push_back(). //! \param element: Element to be inserted //! \param index: Where position to insert the new element. void insert(const T& element, u32 index=0) { _IRR_DEBUG_BREAK_IF(index>used) // access violation if (used + 1 > allocated) reallocate(used * 2 +1); for (u32 i=used++; i>index; i--) data[i] = data[i-1]; data[index] = element; is_sorted = false; } //! Clears the array and deletes all allocated memory. void clear() { delete [] data; data = 0; used = 0; allocated = 0; is_sorted = true; } //! Sets pointer to new array, using this as new workspace. //! \param newPointer: Pointer to new array of elements. //! \param size: Size of the new array. void set_pointer(T* newPointer, u32 size) { delete [] data; data = newPointer; allocated = size; used = size; is_sorted = false; } //! Sets if the array should delete the memory it used. //! \param f: If true, the array frees the allocated memory in its //! destructor, otherwise not. The default is true. void set_free_when_destroyed(bool f) { free_when_destroyed = f; } //! Sets the size of the array. //! \param usedNow: Amount of elements now used. void set_used(u32 usedNow) { if (allocated < usedNow) reallocate(usedNow); used = usedNow; } //! Assignement operator void operator=(const array& other) { if (data) delete [] data; //if (allocated < other.allocated) if (other.allocated == 0) data = 0; else data = new T[other.allocated]; used = other.used; free_when_destroyed = other.free_when_destroyed; is_sorted = other.is_sorted; allocated = other.allocated; for (u32 i=0; i=used) // access violation return data[index]; } //! Direct access operator const T& operator [](u32 index) const { _IRR_DEBUG_BREAK_IF(index>=used) // access violation return data[index]; } //! Gets last frame const T& getLast() const { _IRR_DEBUG_BREAK_IF(!used) // access violation return data[used-1]; } //! Gets last frame T& getLast() { _IRR_DEBUG_BREAK_IF(!used) // access violation return data[used-1]; } //! Returns a pointer to the array. //! \return Pointer to the array. T* pointer() { return data; } //! Returns a const pointer to the array. //! \return Pointer to the array. const T* const_pointer() const { return data; } //! Returns size of used array. //! \return Size of elements in the array. u32 size() const { return used; } //! Returns amount memory allocated. //! \return Returns amount of memory allocated. The amount of bytes //! allocated would be allocated_size() * sizeof(ElementsUsed); u32 allocated_size() const { return allocated; } //! Returns true if array is empty //! \return True if the array is empty, false if not. bool empty() const { return used == 0; } //! Sorts the array using heapsort. There is no additional memory waste and //! the algorithm performs (O) n log n in worst case. void sort() { if (is_sorted || used<2) return; heapsort(data, used); is_sorted = true; } //! Performs a binary search for an element, returns -1 if not found. //! The array will be sorted before the binary search if it is not //! already sorted. //! \param element: Element to search for. //! \return Returns position of the searched element if it was found, //! otherwise -1 is returned. s32 binary_search(const T& element) { return binary_search(element, 0, used-1); } //! Performs a binary search for an element, returns -1 if not found. //! The array will be sorted before the binary search if it is not //! already sorted. //! \param element: Element to search for. //! \param left: First left index //! \param right: Last right index. //! \return Returns position of the searched element if it was found, //! otherwise -1 is returned. s32 binary_search(const T& element, s32 left, s32 right) { if (!used) return -1; sort(); s32 m; do { m = (left+right)>>1; if (element < data[m]) right = m - 1; else left = m + 1; } while((element < data[m] || data[m] < element) && left<=right); // this last line equals to: // " while((element != array[m]) && left<=right);" // but we only want to use the '<' operator. // the same in next line, it is "(element == array[m])" if (!(element < data[m]) && !(data[m] < element)) return m; return -1; } //! Finds an element in linear time, which is very slow. Use //! binary_search for faster finding. Only works if =operator is implemented. //! \param element: Element to search for. //! \return Returns position of the searched element if it was found, //! otherwise -1 is returned. s32 linear_search(T& element) { for (u32 i=0; i=0; --i) if (data[i] == element) return (s32)i; return -1; } //! Erases an element from the array. May be slow, because all elements //! following after the erased element have to be copied. //! \param index: Index of element to be erased. void erase(u32 index) { _IRR_DEBUG_BREAK_IF(index>=used || index<0) // access violation for (u32 i=index+1; i=used || index<0 || count<1 || index+count>used) // access violation for (u32 i=index+count; i /** \mainpage irrXML 1.2 API documentation
\section intro Introduction Welcome to the irrXML API documentation. Here you'll find any information you'll need to develop applications with irrXML. If you look for a tutorial on how to start, take a look at the \ref irrxmlexample, at the homepage of irrXML at xml.irrlicht3d.org or into the SDK in the directory \example. irrXML is intended to be a high speed and easy-to-use XML Parser for C++, and this documentation is an important part of it. If you have any questions or suggestions, just send a email to the author of the engine, Nikolaus Gebhardt (niko (at) irrlicht3d.org). For more informations about this parser, see \ref history. \section features Features irrXML provides forward-only, read-only access to a stream of non validated XML data. It was fully implemented by Nikolaus Gebhardt. Its current features are: - It it fast as lighting and has very low memory usage. It was developed with the intention of being used in 3D games, as it already has been. - irrXML is very small: It only consists of 60 KB of code and can be added easily to your existing project. - Of course, it is platform independent and works with lots of compilers. - It is able to parse ASCII, UTF-8, UTF-16 and UTF-32 text files, both in little and big endian format. - Independent of the input file format, the parser can return all strings in ASCII, UTF-8, UTF-16 and UTF-32 format. - With its optional file access abstraction it has the advantage that it can read not only from files but from any type of data (memory, network, ...). For example when used with the Irrlicht Engine, it directly reads from compressed .zip files. - Just like the Irrlicht Engine for which it was originally created, it is extremely easy to use. - It has no external dependencies, it does not even need the STL. Although irrXML has some strenghts, it currently also has the following limitations: - The input xml file is not validated and assumed to be correct. \section irrxmlexample Example The following code demonstrates the basic usage of irrXML. A simple xml file like this is parsed: \code Welcome to the Mesh Viewer of the "Irrlicht Engine". \endcode The code for parsing this file would look like this: \code #include using namespace irr; // irrXML is located in the namespace irr::io using namespace io; #include // we use STL strings to store data in this example void main() { // create the reader using one of the factory functions IrrXMLReader* xml = createIrrXMLReader("config.xml"); // strings for storing the data we want to get out of the file std::string modelFile; std::string messageText; std::string caption; // parse the file until end reached while(xml && xml->read()) { switch(xml->getNodeType()) { case EXN_TEXT: // in this xml file, the only text which occurs is the messageText messageText = xml->getNodeData(); break; case EXN_ELEMENT: { if (!strcmp("model", xml->getNodeName())) modelFile = xml->getAttributeValue("file"); else if (!strcmp("messageText", xml->getNodeName())) caption = xml->getAttributeValue("caption"); } break; } } // delete the xml parser after usage delete xml; } \endcode \section howto How to use Simply add the source files in the /src directory of irrXML to your project. Done. \section license License The irrXML license is based on the zlib license. Basicly, this means you can do with irrXML whatever you want: Copyright (C) 2002-2005 Nikolaus Gebhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. \section history History As lots of references in this documentation and the source show, this xml parser has originally been a part of the Irrlicht Engine. But because the parser has become very useful with the latest release, people asked for a separate version of it, to be able to use it in non Irrlicht projects. With irrXML 1.0, this has now been done. */ namespace irr { namespace io { //! Enumeration of all supported source text file formats enum ETEXT_FORMAT { //! ASCII, file without byte order mark, or not a text file ETF_ASCII, //! UTF-8 format ETF_UTF8, //! UTF-16 format, big endian ETF_UTF16_BE, //! UTF-16 format, little endian ETF_UTF16_LE, //! UTF-32 format, big endian ETF_UTF32_BE, //! UTF-32 format, little endian ETF_UTF32_LE }; //! Enumeration for all xml nodes which are parsed by IrrXMLReader enum EXML_NODE { //! No xml node. This is usually the node if you did not read anything yet. EXN_NONE, //! A xml element, like EXN_ELEMENT, //! End of an xml element, like EXN_ELEMENT_END, //! Text within a xml element: this is the text. EXN_TEXT, //! An xml comment like <!-- I am a comment --> or a DTD definition. EXN_COMMENT, //! An xml cdata section like <![CDATA[ this is some CDATA ]]> EXN_CDATA, //! Unknown element. EXN_UNKNOWN }; //! Callback class for file read abstraction. /** With this, it is possible to make the xml parser read in other things than just files. The Irrlicht engine is using this for example to read xml from compressed .zip files. To make the parser read in any other data, derive a class from this interface, implement the two methods to read your data and give a pointer to an instance of your implementation when calling createIrrXMLReader(), createIrrXMLReaderUTF16() or createIrrXMLReaderUTF32() */ class IFileReadCallBack { public: //! virtual destructor virtual ~IFileReadCallBack() {}; //! Reads an amount of bytes from the file. /** \param buffer: Pointer to buffer where to read bytes will be written to. \param sizeToRead: Amount of bytes to read from the file. \return Returns how much bytes were read. */ virtual int read(void* buffer, int sizeToRead) = 0; //! Returns size of file in bytes virtual int getSize() = 0; }; //! Empty class to be used as parent class for IrrXMLReader. /** If you need another class as base class for the xml reader, you can do this by creating the reader using for example new CXMLReaderImpl(yourcallback); The Irrlicht Engine for example needs IUnknown as base class for every object to let it automaticly reference countend, hence it replaces IXMLBase with IUnknown. See irrXML.cpp on how this can be done in detail. */ class IXMLBase { }; //! Interface providing easy read access to a XML file. /** You can create an instance of this reader using one of the factory functions createIrrXMLReader(), createIrrXMLReaderUTF16() and createIrrXMLReaderUTF32(). If using the parser from the Irrlicht Engine, please use IFileSystem::createXMLReader() instead. For a detailed intro how to use the parser, see \ref irrxmlexample and \ref features. The typical usage of this parser looks like this: \code #include using namespace irr; // irrXML is located in the namespace irr::io using namespace io; void main() { // create the reader using one of the factory functions IrrXMLReader* xml = createIrrXMLReader("config.xml"); if (xml == 0) return; // file could not be opened // parse the file until end reached while(xml->read()) { // based on xml->getNodeType(), do something. } // delete the xml parser after usage delete xml; } \endcode See \ref irrxmlexample for a more detailed example. */ template class IIrrXMLReader : public super_class { public: //! Destructor virtual ~IIrrXMLReader() {}; //! Reads forward to the next xml node. /** \return Returns false, if there was no further node. */ virtual bool read() = 0; //! Returns the type of the current XML node. virtual EXML_NODE getNodeType() const = 0; //! Returns attribute count of the current XML node. /** This is usually non null if the current node is EXN_ELEMENT, and the element has attributes. \return Returns amount of attributes of this xml node. */ virtual int getAttributeCount() const = 0; //! Returns name of an attribute. /** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1. \return Name of the attribute, 0 if an attribute with this index does not exist. */ virtual const char_type* getAttributeName(int idx) const = 0; //! Returns the value of an attribute. /** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1. \return Value of the attribute, 0 if an attribute with this index does not exist. */ virtual const char_type* getAttributeValue(int idx) const = 0; //! Returns the value of an attribute. /** \param name: Name of the attribute. \return Value of the attribute, 0 if an attribute with this name does not exist. */ virtual const char_type* getAttributeValue(const char_type* name) const = 0; //! Returns the value of an attribute in a safe way. /** Like getAttributeValue(), but does not return 0 if the attribute does not exist. An empty string ("") is returned then. \param name: Name of the attribute. \return Value of the attribute, and "" if an attribute with this name does not exist */ virtual const char_type* getAttributeValueSafe(const char_type* name) const = 0; //! Returns the value of an attribute as integer. /** \param name Name of the attribute. \return Value of the attribute as integer, and 0 if an attribute with this name does not exist or the value could not be interpreted as integer. */ virtual int getAttributeValueAsInt(const char_type* name) const = 0; //! Returns the value of an attribute as integer. /** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1. \return Value of the attribute as integer, and 0 if an attribute with this index does not exist or the value could not be interpreted as integer. */ virtual int getAttributeValueAsInt(int idx) const = 0; //! Returns the value of an attribute as float. /** \param name: Name of the attribute. \return Value of the attribute as float, and 0 if an attribute with this name does not exist or the value could not be interpreted as float. */ virtual float getAttributeValueAsFloat(const char_type* name) const = 0; //! Returns the value of an attribute as float. /** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1. \return Value of the attribute as float, and 0 if an attribute with this index does not exist or the value could not be interpreted as float. */ virtual float getAttributeValueAsFloat(int idx) const = 0; //! Returns the name of the current node. /** Only non null, if the node type is EXN_ELEMENT. \return Name of the current node or 0 if the node has no name. */ virtual const char_type* getNodeName() const = 0; //! Returns data of the current node. /** Only non null if the node has some data and it is of type EXN_TEXT or EXN_UNKNOWN. */ virtual const char_type* getNodeData() const = 0; //! Returns if an element is an empty element, like virtual bool isEmptyElement() const = 0; //! Returns format of the source xml file. /** It is not necessary to use this method because the parser will convert the input file format to the format wanted by the user when creating the parser. This method is useful to get/display additional informations. */ virtual ETEXT_FORMAT getSourceFormat() const = 0; //! Returns format of the strings returned by the parser. /** This will be UTF8 for example when you created a parser with IrrXMLReaderUTF8() and UTF32 when it has been created using IrrXMLReaderUTF32. It should not be necessary to call this method and only exists for informational purposes. */ virtual ETEXT_FORMAT getParserFormat() const = 0; }; //! defines the utf-16 type. /** Not using wchar_t for this because wchar_t has 16 bit on windows and 32 bit on other operating systems. */ typedef unsigned short char16; //! defines the utf-32 type. /** Not using wchar_t for this because wchar_t has 16 bit on windows and 32 bit on other operating systems. */ typedef unsigned long char32; //! A UTF-8 or ASCII character xml parser. /** This means that all character data will be returned in 8 bit ASCII or UTF-8 by this parser. The file to read can be in any format, it will be converted to UTF-8 if it is not in this format. Create an instance of this with createIrrXMLReader(); See IIrrXMLReader for description on how to use it. */ typedef IIrrXMLReader IrrXMLReader; //! A UTF-16 xml parser. /** This means that all character data will be returned in UTF-16 by this parser. The file to read can be in any format, it will be converted to UTF-16 if it is not in this format. Create an instance of this with createIrrXMLReaderUTF16(); See IIrrXMLReader for description on how to use it. */ typedef IIrrXMLReader IrrXMLReaderUTF16; //! A UTF-32 xml parser. /** This means that all character data will be returned in UTF-32 by this parser. The file to read can be in any format, it will be converted to UTF-32 if it is not in this format. Create an instance of this with createIrrXMLReaderUTF32(); See IIrrXMLReader for description on how to use it. */ typedef IIrrXMLReader IrrXMLReaderUTF32; //! Creates an instance of an UFT-8 or ASCII character xml parser. /** This means that all character data will be returned in 8 bit ASCII or UTF-8. The file to read can be in any format, it will be converted to UTF-8 if it is not in this format. If you are using the Irrlicht Engine, it is better not to use this function but IFileSystem::createXMLReaderUTF8() instead. \param filename: Name of file to be opened. \return Returns a pointer to the created xml parser. This pointer should be deleted using 'delete' after no longer needed. Returns 0 if an error occured and the file could not be opened. */ IrrXMLReader* createIrrXMLReader(const char* filename); //! Creates an instance of an UFT-8 or ASCII character xml parser. /** This means that all character data will be returned in 8 bit ASCII or UTF-8. The file to read can be in any format, it will be converted to UTF-8 if it is not in this format. If you are using the Irrlicht Engine, it is better not to use this function but IFileSystem::createXMLReaderUTF8() instead. \param file: Pointer to opened file, must have been opened in binary mode, e.g. using fopen("foo.bar", "wb"); The file will not be closed after it has been read. \return Returns a pointer to the created xml parser. This pointer should be deleted using 'delete' after no longer needed. Returns 0 if an error occured and the file could not be opened. */ IrrXMLReader* createIrrXMLReader(FILE* file); //! Creates an instance of an UFT-8 or ASCII character xml parser. /** This means that all character data will be returned in 8 bit ASCII or UTF-8. The file to read can be in any format, it will be converted to UTF-8 if it is not in this format. If you are using the Irrlicht Engine, it is better not to use this function but IFileSystem::createXMLReaderUTF8() instead. \param callback: Callback for file read abstraction. Implement your own callback to make the xml parser read in other things than just files. See IFileReadCallBack for more information about this. \return Returns a pointer to the created xml parser. This pointer should be deleted using 'delete' after no longer needed. Returns 0 if an error occured and the file could not be opened. */ IrrXMLReader* createIrrXMLReader(IFileReadCallBack* callback); //! Creates an instance of an UFT-16 xml parser. /** This means that all character data will be returned in UTF-16. The file to read can be in any format, it will be converted to UTF-16 if it is not in this format. If you are using the Irrlicht Engine, it is better not to use this function but IFileSystem::createXMLReader() instead. \param filename: Name of file to be opened. \return Returns a pointer to the created xml parser. This pointer should be deleted using 'delete' after no longer needed. Returns 0 if an error occured and the file could not be opened. */ IrrXMLReaderUTF16* createIrrXMLReaderUTF16(const char* filename); //! Creates an instance of an UFT-16 xml parser. /** This means that all character data will be returned in UTF-16. The file to read can be in any format, it will be converted to UTF-16 if it is not in this format. If you are using the Irrlicht Engine, it is better not to use this function but IFileSystem::createXMLReader() instead. \param file: Pointer to opened file, must have been opened in binary mode, e.g. using fopen("foo.bar", "wb"); The file will not be closed after it has been read. \return Returns a pointer to the created xml parser. This pointer should be deleted using 'delete' after no longer needed. Returns 0 if an error occured and the file could not be opened. */ IrrXMLReaderUTF16* createIrrXMLReaderUTF16(FILE* file); //! Creates an instance of an UFT-16 xml parser. /** This means that all character data will be returned in UTF-16. The file to read can be in any format, it will be converted to UTF-16 if it is not in this format. If you are using the Irrlicht Engine, it is better not to use this function but IFileSystem::createXMLReader() instead. \param callback: Callback for file read abstraction. Implement your own callback to make the xml parser read in other things than just files. See IFileReadCallBack for more information about this. \return Returns a pointer to the created xml parser. This pointer should be deleted using 'delete' after no longer needed. Returns 0 if an error occured and the file could not be opened. */ IrrXMLReaderUTF16* createIrrXMLReaderUTF16(IFileReadCallBack* callback); //! Creates an instance of an UFT-32 xml parser. /** This means that all character data will be returned in UTF-32. The file to read can be in any format, it will be converted to UTF-32 if it is not in this format. If you are using the Irrlicht Engine, it is better not to use this function but IFileSystem::createXMLReader() instead. \param filename: Name of file to be opened. \return Returns a pointer to the created xml parser. This pointer should be deleted using 'delete' after no longer needed. Returns 0 if an error occured and the file could not be opened. */ IrrXMLReaderUTF32* createIrrXMLReaderUTF32(const char* filename); //! Creates an instance of an UFT-32 xml parser. /** This means that all character data will be returned in UTF-32. The file to read can be in any format, it will be converted to UTF-32 if it is not in this format. if you are using the Irrlicht Engine, it is better not to use this function but IFileSystem::createXMLReader() instead. \param file: Pointer to opened file, must have been opened in binary mode, e.g. using fopen("foo.bar", "wb"); The file will not be closed after it has been read. \return Returns a pointer to the created xml parser. This pointer should be deleted using 'delete' after no longer needed. Returns 0 if an error occured and the file could not be opened. */ IrrXMLReaderUTF32* createIrrXMLReaderUTF32(FILE* file); //! Creates an instance of an UFT-32 xml parser. /** This means that all character data will be returned in UTF-32. The file to read can be in any format, it will be converted to UTF-32 if it is not in this format. If you are using the Irrlicht Engine, it is better not to use this function but IFileSystem::createXMLReader() instead. \param callback: Callback for file read abstraction. Implement your own callback to make the xml parser read in other things than just files. See IFileReadCallBack for more information about this. \return Returns a pointer to the created xml parser. This pointer should be deleted using 'delete' after no longer needed. Returns 0 if an error occured and the file could not be opened. */ IrrXMLReaderUTF32* createIrrXMLReaderUTF32(IFileReadCallBack* callback); /*! \file irrxml.h \brief Header file of the irrXML, the Irrlicht XML parser. This file includes everything needed for using irrXML, the XML parser of the Irrlicht Engine. To use irrXML, you only need to include this file in your project: \code #include \endcode It is also common to use the two namespaces in which irrXML is included, directly after #including irrXML.h: \code #include using namespace irr; using namespace io; \endcode */ } // end namespace io } // end namespace irr #endif // __IRR_XML_H_INCLUDED__ assimp-3.0/contrib/irrXML/irrTypes.h0000644002537200234200000000657111712653266017747 0ustar zmoelnigiemusers// Copyright (C) 2002-2005 Nikolaus Gebhardt // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h #ifndef __IRR_TYPES_H_INCLUDED__ #define __IRR_TYPES_H_INCLUDED__ namespace irr { //! 8 bit unsigned variable. /** This is a typedef for unsigned char, it ensures portability of the engine. */ typedef unsigned char u8; //! 8 bit signed variable. /** This is a typedef for signed char, it ensures portability of the engine. */ typedef signed char s8; //! 8 bit character variable. /** This is a typedef for char, it ensures portability of the engine. */ typedef char c8; //! 16 bit unsigned variable. /** This is a typedef for unsigned short, it ensures portability of the engine. */ typedef unsigned short u16; //! 16 bit signed variable. /** This is a typedef for signed short, it ensures portability of the engine. */ typedef signed short s16; //! 32 bit unsigned variable. /** This is a typedef for unsigned int, it ensures portability of the engine. */ typedef unsigned int u32; //! 32 bit signed variable. /** This is a typedef for signed int, it ensures portability of the engine. */ typedef signed int s32; // 64 bit signed variable. // This is a typedef for __int64, it ensures portability of the engine. // This type is currently not used by the engine and not supported by compilers // other than Microsoft Compilers, so it is outcommented. //typedef __int64 s64; //! 32 bit floating point variable. /** This is a typedef for float, it ensures portability of the engine. */ typedef float f32; //! 64 bit floating point variable. /** This is a typedef for double, it ensures portability of the engine. */ typedef double f64; } // end namespace // define the wchar_t type if not already built in. #ifdef _MSC_VER #ifndef _WCHAR_T_DEFINED //! A 16 bit wide character type. /** Defines the wchar_t-type. In VS6, its not possible to tell the standard compiler to treat wchar_t as a built-in type, and sometimes we just don't want to include the huge stdlib.h or wchar.h, so we'll use this. */ typedef unsigned short wchar_t; #define _WCHAR_T_DEFINED #endif // wchar is not defined #endif // microsoft compiler //! define a break macro for debugging only in Win32 mode. // WORKAROUND (assimp): remove __asm #if defined(WIN32) && defined(_MSC_VER) && defined(_DEBUG) #if defined(_M_IX86) #define _IRR_DEBUG_BREAK_IF( _CONDITION_ ) /*if (_CONDITION_) {_asm int 3}*/ #else #define _IRR_DEBUG_BREAK_IF( _CONDITION_ ) #endif #else #define _IRR_DEBUG_BREAK_IF( _CONDITION_ ) #endif //! Defines a small statement to work around a microsoft compiler bug. /** The microsft compiler 7.0 - 7.1 has a bug: When you call unmanaged code that returns a bool type value of false from managed code, the return value may appear as true. See http://support.microsoft.com/default.aspx?kbid=823071 for details. Compiler version defines: VC6.0 : 1200, VC7.0 : 1300, VC7.1 : 1310, VC8.0 : 1400*/ // WORKAROUND (assimp): remove __asm #if defined(WIN32) && defined(_MSC_VER) && (_MSC_VER > 1299) && (_MSC_VER < 1400) #define _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX /*__asm mov eax,100*/ #else #define _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX #endif // _IRR_MANAGED_MARSHALLING_BUGFIX #endif // __IRR_TYPES_H_INCLUDED__ assimp-3.0/contrib/irrXML/irrString.h0000644002537200234200000003206211333400311020057 0ustar zmoelnigiemusers// Copyright (C) 2002-2005 Nikolaus Gebhardt // This file is part of the "Irrlicht Engine" and the "irrXML" project. // For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h #ifndef __IRR_STRING_H_INCLUDED__ #define __IRR_STRING_H_INCLUDED__ #include "irrTypes.h" namespace irr { namespace core { //! Very simple string class with some useful features. /** string and string work both with unicode AND ascii, so you can assign unicode to string and ascii to string (and the other way round) if your ever would want to. Note that the conversation between both is not done using an encoding. Known bugs: Special characters like 'Ä', 'Ü' and 'Ö' are ignored in the methods make_upper, make_lower and equals_ignore_case. */ template class string { public: //! Default constructor string() : array(0), allocated(1), used(1) { array = new T[1]; array[0] = 0x0; } //! Constructor string(const string& other) : array(0), allocated(0), used(0) { *this = other; } //! Constructs a string from an int string(int number) : array(0), allocated(0), used(0) { // store if negative and make positive bool negative = false; if (number < 0) { number *= -1; negative = true; } // temporary buffer for 16 numbers c8 tmpbuf[16]; tmpbuf[15] = 0; s32 idx = 15; // special case '0' if (!number) { tmpbuf[14] = '0'; *this = &tmpbuf[14]; return; } // add numbers while(number && idx) { idx--; tmpbuf[idx] = (c8)('0' + (number % 10)); number = number / 10; } // add sign if (negative) { idx--; tmpbuf[idx] = '-'; } *this = &tmpbuf[idx]; } //! Constructor for copying a string from a pointer with a given lenght template string(const B* c, s32 lenght) : array(0), allocated(0), used(0) { if (!c) return; allocated = used = lenght+1; array = new T[used]; for (s32 l = 0; l string(const B* c) : array(0),allocated(0), used(0) { *this = c; } //! destructor ~string() { delete [] array; } //! Assignment operator string& operator=(const string& other) { if (this == &other) return *this; delete [] array; allocated = used = other.size()+1; array = new T[used]; const T* p = other.c_str(); for (s32 i=0; i string& operator=(const B* c) { if (!c) { if (!array) { array = new T[1]; allocated = 1; used = 1; } array[0] = 0x0; return *this; } if ((void*)c == (void*)array) return *this; s32 len = 0; const B* p = c; while(*p) { ++len; ++p; } // we'll take the old string for a while, because the new string could be // a part of the current string. T* oldArray = array; allocated = used = len+1; array = new T[used]; for (s32 l = 0; l operator+(const string& other) { string str(*this); str.append(other); return str; } //! Add operator for strings, ascii and unicode template string operator+(const B* c) { string str(*this); str.append(c); return str; } //! Direct access operator T& operator [](const s32 index) const { _IRR_DEBUG_BREAK_IF(index>=used) // bad index return array[index]; } //! Comparison operator bool operator ==(const T* str) const { int i; for(i=0; array[i] && str[i]; ++i) if (array[i] != str[i]) return false; return !array[i] && !str[i]; } //! Comparison operator bool operator ==(const string& other) const { for(s32 i=0; array[i] && other.array[i]; ++i) if (array[i] != other.array[i]) return false; return used == other.used; } //! Is smaller operator bool operator <(const string& other) const { for(s32 i=0; array[i] && other.array[i]; ++i) if (array[i] != other.array[i]) return (array[i] < other.array[i]); return used < other.used; } //! Equals not operator bool operator !=(const string& other) const { return !(*this == other); } //! Returns length of string /** \return Returns length of the string in characters. */ s32 size() const { return used-1; } //! Returns character string /** \return Returns pointer to C-style zero terminated string. */ const T* c_str() const { return array; } //! Makes the string lower case. void make_lower() { const T A = (T)'A'; const T Z = (T)'Z'; const T diff = (T)'a' - A; for (s32 i=0; i=A && array[i]<=Z) array[i] += diff; } } //! Makes the string upper case. void make_upper() { const T a = (T)'a'; const T z = (T)'z'; const T diff = (T)'A' - a; for (s32 i=0; i=a && array[i]<=z) array[i] += diff; } } //! Compares the string ignoring case. /** \param other: Other string to compare. \return Returns true if the string are equal ignoring case. */ bool equals_ignore_case(const string& other) const { for(s32 i=0; array[i] && other[i]; ++i) if (toLower(array[i]) != toLower(other[i])) return false; return used == other.used; } //! compares the first n characters of the strings bool equalsn(const string& other, int len) { int i; for(i=0; array[i] && other[i] && i < len; ++i) if (array[i] != other[i]) return false; // if one (or both) of the strings was smaller then they // are only equal if they have the same lenght return (i == len) || (used == other.used); } //! compares the first n characters of the strings bool equalsn(const T* str, int len) { int i; for(i=0; array[i] && str[i] && i < len; ++i) if (array[i] != str[i]) return false; // if one (or both) of the strings was smaller then they // are only equal if they have the same lenght return (i == len) || (array[i] == 0 && str[i] == 0); } //! Appends a character to this string /** \param character: Character to append. */ void append(T character) { if (used + 1 > allocated) reallocate((s32)used + 1); used += 1; array[used-2] = character; array[used-1] = 0; } //! Appends a string to this string /** \param other: String to append. */ void append(const string& other) { --used; s32 len = other.size(); if (used + len + 1 > allocated) reallocate((s32)used + (s32)len + 1); for (s32 l=0; l& other, s32 length) { s32 len = other.size(); if (len < length) { append(other); return; } len = length; --used; if (used + len > allocated) reallocate((s32)used + (s32)len); for (s32 l=0; l s32 findFirstCharNotInList(B* c, int count) const { for (int i=0; i s32 findLastCharNotInList(B* c, int count) const { for (int i=used-2; i>=0; --i) { int j; for (j=0; j=0; --i) if (array[i] == c) return i; return -1; } //! Returns a substring //! \param begin: Start of substring. //! \param length: Length of substring. string subString(s32 begin, s32 length) { if (length <= 0) return string(""); string o; o.reserve(length+1); for (s32 i=0; i& other) { append(other); } void operator += (int i) { append(string(i)); } //! replaces all characters of a special type with another one void replace(T toReplace, T replaceWith) { for (s32 i=0; i=used || index<0) // access violation for (int i=index+1; i=(T)'A' && t<=(T)'Z') return t + ((T)'a' - (T)'A'); else return t; } //! Reallocate the array, make it bigger or smaler void reallocate(s32 new_size) { T* old_array = array; array = new T[new_size]; allocated = new_size; s32 amount = used < new_size ? used : new_size; for (s32 i=0; i stringc; //! Typedef for wide character strings typedef string stringw; } // end namespace core } // end namespace irr #endif assimp-3.0/contrib/irrXML/CXMLReaderImpl.h0000644002537200234200000004377011333400311020614 0ustar zmoelnigiemusers// Copyright (C) 2002-2005 Nikolaus Gebhardt // This file is part of the "Irrlicht Engine" and the "irrXML" project. // For conditions of distribution and use, see copyright notice in irrlicht.h and/or irrXML.h #ifndef __ICXML_READER_IMPL_H_INCLUDED__ #define __ICXML_READER_IMPL_H_INCLUDED__ #include "irrXML.h" #include "irrString.h" #include "irrArray.h" using namespace Assimp; #ifdef _DEBUG #define IRR_DEBUGPRINT(x) printf((x)); #else // _DEBUG #define IRR_DEBUGPRINT(x) #endif // _DEBUG namespace irr { namespace io { //! implementation of the IrrXMLReader template class CXMLReaderImpl : public IIrrXMLReader { public: //! Constructor CXMLReaderImpl(IFileReadCallBack* callback, bool deleteCallBack = true) : TextData(0), P(0), TextBegin(0), TextSize(0), CurrentNodeType(EXN_NONE), SourceFormat(ETF_ASCII), TargetFormat(ETF_ASCII) { if (!callback) return; storeTargetFormat(); // read whole xml file readFile(callback); // clean up if (deleteCallBack) delete callback; // create list with special characters createSpecialCharacterList(); // set pointer to text begin P = TextBegin; } //! Destructor virtual ~CXMLReaderImpl() { delete [] TextData; } //! Reads forward to the next xml node. //! \return Returns false, if there was no further node. virtual bool read() { // if not end reached, parse the node if (P && (unsigned int)(P - TextBegin) < TextSize - 1 && *P != 0) { parseCurrentNode(); return true; } _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; return false; } //! Returns the type of the current XML node. virtual EXML_NODE getNodeType() const { return CurrentNodeType; } //! Returns attribute count of the current XML node. virtual int getAttributeCount() const { return Attributes.size(); } //! Returns name of an attribute. virtual const char_type* getAttributeName(int idx) const { if (idx < 0 || idx >= (int)Attributes.size()) return 0; return Attributes[idx].Name.c_str(); } //! Returns the value of an attribute. virtual const char_type* getAttributeValue(int idx) const { if (idx < 0 || idx >= (int)Attributes.size()) return 0; return Attributes[idx].Value.c_str(); } //! Returns the value of an attribute. virtual const char_type* getAttributeValue(const char_type* name) const { const SAttribute* attr = getAttributeByName(name); if (!attr) return 0; return attr->Value.c_str(); } //! Returns the value of an attribute virtual const char_type* getAttributeValueSafe(const char_type* name) const { const SAttribute* attr = getAttributeByName(name); if (!attr) return EmptyString.c_str(); return attr->Value.c_str(); } //! Returns the value of an attribute as integer. int getAttributeValueAsInt(const char_type* name) const { return (int)getAttributeValueAsFloat(name); } //! Returns the value of an attribute as integer. int getAttributeValueAsInt(int idx) const { return (int)getAttributeValueAsFloat(idx); } //! Returns the value of an attribute as float. float getAttributeValueAsFloat(const char_type* name) const { const SAttribute* attr = getAttributeByName(name); if (!attr) return 0; core::stringc c = attr->Value.c_str(); return fast_atof(c.c_str()); } //! Returns the value of an attribute as float. float getAttributeValueAsFloat(int idx) const { const char_type* attrvalue = getAttributeValue(idx); if (!attrvalue) return 0; core::stringc c = attrvalue; return fast_atof(c.c_str()); } //! Returns the name of the current node. virtual const char_type* getNodeName() const { return NodeName.c_str(); } //! Returns data of the current node. virtual const char_type* getNodeData() const { return NodeName.c_str(); } //! Returns if an element is an empty element, like virtual bool isEmptyElement() const { return IsEmptyElement; } //! Returns format of the source xml file. virtual ETEXT_FORMAT getSourceFormat() const { return SourceFormat; } //! Returns format of the strings returned by the parser. virtual ETEXT_FORMAT getParserFormat() const { return TargetFormat; } private: // Reads the current xml node void parseCurrentNode() { char_type* start = P; // more forward until '<' found while(*P != L'<' && *P) ++P; if (!*P) return; if (P - start > 0) { // we found some text, store it if (setText(start, P)) return; } ++P; // based on current token, parse and report next element switch(*P) { case L'/': parseClosingXMLElement(); break; case L'?': ignoreDefinition(); break; case L'!': if (!parseCDATA()) parseComment(); break; default: parseOpeningXMLElement(); break; } } //! sets the state that text was found. Returns true if set should be set bool setText(char_type* start, char_type* end) { // check if text is more than 2 characters, and if not, check if there is // only white space, so that this text won't be reported if (end - start < 3) { char_type* p = start; for(; p != end; ++p) if (!isWhiteSpace(*p)) break; if (p == end) return false; } // set current text to the parsed text, and replace xml special characters core::string s(start, (int)(end - start)); NodeName = replaceSpecialCharacters(s); // current XML node type is text CurrentNodeType = EXN_TEXT; return true; } //! ignores an xml definition like void ignoreDefinition() { CurrentNodeType = EXN_UNKNOWN; // move until end marked with '>' reached while(*P != L'>') ++P; ++P; } //! parses a comment void parseComment() { CurrentNodeType = EXN_COMMENT; P += 1; char_type *pCommentBegin = P; int count = 1; // move until end of comment reached while(count) { if (*P == L'>') --count; else if (*P == L'<') ++count; ++P; } P -= 3; NodeName = core::string(pCommentBegin+2, (int)(P - pCommentBegin-2)); P += 3; } //! parses an opening xml element and reads attributes void parseOpeningXMLElement() { CurrentNodeType = EXN_ELEMENT; IsEmptyElement = false; Attributes.clear(); // find name const char_type* startName = P; // find end of element while(*P != L'>' && !isWhiteSpace(*P)) ++P; const char_type* endName = P; // find Attributes while(*P != L'>') { if (isWhiteSpace(*P)) ++P; else { if (*P != L'/') { // we've got an attribute // read the attribute names const char_type* attributeNameBegin = P; while(!isWhiteSpace(*P) && *P != L'=') ++P; const char_type* attributeNameEnd = P; ++P; // read the attribute value // check for quotes and single quotes, thx to murphy while( (*P != L'\"') && (*P != L'\'') && *P) ++P; if (!*P) // malformatted xml file return; const char_type attributeQuoteChar = *P; ++P; const char_type* attributeValueBegin = P; while(*P != attributeQuoteChar && *P) ++P; if (!*P) // malformatted xml file return; const char_type* attributeValueEnd = P; ++P; SAttribute attr; attr.Name = core::string(attributeNameBegin, (int)(attributeNameEnd - attributeNameBegin)); core::string s(attributeValueBegin, (int)(attributeValueEnd - attributeValueBegin)); attr.Value = replaceSpecialCharacters(s); Attributes.push_back(attr); } else { // tag is closed directly ++P; IsEmptyElement = true; break; } } } // check if this tag is closing directly if (endName > startName && *(endName-1) == L'/') { // directly closing tag IsEmptyElement = true; endName--; } NodeName = core::string(startName, (int)(endName - startName)); ++P; } //! parses an closing xml tag void parseClosingXMLElement() { CurrentNodeType = EXN_ELEMENT_END; IsEmptyElement = false; Attributes.clear(); ++P; const char_type* pBeginClose = P; while(*P != L'>') ++P; // remove trailing whitespace, if any while( isspace( P[-1])) --P; NodeName = core::string(pBeginClose, (int)(P - pBeginClose)); ++P; } //! parses a possible CDATA section, returns false if begin was not a CDATA section bool parseCDATA() { if (*(P+1) != L'[') return false; CurrentNodeType = EXN_CDATA; // skip '' && (*(P-1) == L']') && (*(P-2) == L']')) { cDataEnd = P - 2; } ++P; } if ( cDataEnd ) NodeName = core::string(cDataBegin, (int)(cDataEnd - cDataBegin)); else NodeName = ""; return true; } // structure for storing attribute-name pairs struct SAttribute { core::string Name; core::string Value; }; // finds a current attribute by name, returns 0 if not found const SAttribute* getAttributeByName(const char_type* name) const { if (!name) return 0; core::string n = name; for (int i=0; i<(int)Attributes.size(); ++i) if (Attributes[i].Name == n) return &Attributes[i]; return 0; } // replaces xml special characters in a string and creates a new one core::string replaceSpecialCharacters( core::string& origstr) { int pos = origstr.findFirst(L'&'); int oldPos = 0; if (pos == -1) return origstr; core::string newstr; while(pos != -1 && pos < origstr.size()-2) { // check if it is one of the special characters int specialChar = -1; for (int i=0; i<(int)SpecialCharacters.size(); ++i) { const char_type* p = &origstr.c_str()[pos]+1; if (equalsn(&SpecialCharacters[i][1], p, SpecialCharacters[i].size()-1)) { specialChar = i; break; } } if (specialChar != -1) { newstr.append(origstr.subString(oldPos, pos - oldPos)); newstr.append(SpecialCharacters[specialChar][0]); pos += SpecialCharacters[specialChar].size(); } else { newstr.append(origstr.subString(oldPos, pos - oldPos + 1)); pos += 1; } // find next & oldPos = pos; pos = origstr.findNext(L'&', pos); } if (oldPos < origstr.size()-1) newstr.append(origstr.subString(oldPos, origstr.size()-oldPos)); return newstr; } //! reads the xml file and converts it into the wanted character format. bool readFile(IFileReadCallBack* callback) { int size = callback->getSize(); size += 4; // We need two terminating 0's at the end. // For ASCII we need 1 0's, for UTF-16 2, for UTF-32 4. char* data8 = new char[size]; if (!callback->read(data8, size-4)) { delete [] data8; return false; } // add zeros at end data8[size-1] = 0; data8[size-2] = 0; data8[size-3] = 0; data8[size-4] = 0; char16* data16 = reinterpret_cast(data8); char32* data32 = reinterpret_cast(data8); // now we need to convert the data to the desired target format // based on the byte order mark. const unsigned char UTF8[] = {0xEF, 0xBB, 0xBF}; // 0xEFBBBF; const int UTF16_BE = 0xFFFE; const int UTF16_LE = 0xFEFF; const int UTF32_BE = 0xFFFE0000; const int UTF32_LE = 0x0000FEFF; // check source for all utf versions and convert to target data format if (size >= 4 && data32[0] == (char32)UTF32_BE) { // UTF-32, big endian SourceFormat = ETF_UTF32_BE; convertTextData(data32+1, data8, (size/4)); // data32+1 because we need to skip the header } else if (size >= 4 && data32[0] == (char32)UTF32_LE) { // UTF-32, little endian SourceFormat = ETF_UTF32_LE; convertTextData(data32+1, data8, (size/4)); // data32+1 because we need to skip the header } else if (size >= 2 && data16[0] == UTF16_BE) { // UTF-16, big endian SourceFormat = ETF_UTF16_BE; convertTextData(data16+1, data8, (size/2)); // data16+1 because we need to skip the header } else if (size >= 2 && data16[0] == UTF16_LE) { // UTF-16, little endian SourceFormat = ETF_UTF16_LE; convertTextData(data16+1, data8, (size/2)); // data16+1 because we need to skip the header } else if (size >= 3 && data8[0] == UTF8[0] && data8[1] == UTF8[1] && data8[2] == UTF8[2]) { // UTF-8 SourceFormat = ETF_UTF8; convertTextData(data8+3, data8, size); // data8+3 because we need to skip the header } else { // ASCII SourceFormat = ETF_ASCII; convertTextData(data8, data8, size); } return true; } //! converts the text file into the desired format. //! \param source: begin of the text (without byte order mark) //! \param pointerToStore: pointer to text data block which can be //! stored or deleted based on the nesessary conversion. //! \param sizeWithoutHeader: Text size in characters without header template void convertTextData(src_char_type* source, char* pointerToStore, int sizeWithoutHeader) { // convert little to big endian if necessary if (sizeof(src_char_type) > 1 && isLittleEndian(TargetFormat) != isLittleEndian(SourceFormat)) convertToLittleEndian(source); // check if conversion is necessary: if (sizeof(src_char_type) == sizeof(char_type)) { // no need to convert TextBegin = (char_type*)source; TextData = (char_type*)pointerToStore; TextSize = sizeWithoutHeader; } else { // convert source into target data format. // TODO: implement a real conversion. This one just // copies bytes. This is a problem when there are // unicode symbols using more than one character. TextData = new char_type[sizeWithoutHeader]; // MSVC debugger complains here about loss of data ... // FIXME - gcc complains about 'shift width larger than width of type' // for T == unsigned long. Avoid it by messing around volatile .. volatile unsigned int c = 3; const src_char_type cc = (src_char_type)((((uint64_t)1u << (sizeof( char_type)< void convertToLittleEndian(src_char_type* t) { if (sizeof(src_char_type) == 4) { // 32 bit while(*t) { *t = ((*t & 0xff000000) >> 24) | ((*t & 0x00ff0000) >> 8) | ((*t & 0x0000ff00) << 8) | ((*t & 0x000000ff) << 24); ++t; } } else { // 16 bit while(*t) { *t = (*t >> 8) | (*t << 8); ++t; } } } //! returns if a format is little endian inline bool isLittleEndian(ETEXT_FORMAT f) { return f == ETF_ASCII || f == ETF_UTF8 || f == ETF_UTF16_LE || f == ETF_UTF32_LE; } //! returns true if a character is whitespace inline bool isWhiteSpace(char_type c) { return (c==' ' || c=='\t' || c=='\n' || c=='\r'); } //! generates a list with xml special characters void createSpecialCharacterList() { // list of strings containing special symbols, // the first character is the special character, // the following is the symbol string without trailing &. SpecialCharacters.push_back("&"); SpecialCharacters.push_back("gt;"); SpecialCharacters.push_back("\"quot;"); SpecialCharacters.push_back("'apos;"); } //! compares the first n characters of the strings bool equalsn(const char_type* str1, const char_type* str2, int len) { int i; for(i=0; str1[i] && str2[i] && i < len; ++i) if (str1[i] != str2[i]) return false; // if one (or both) of the strings was smaller then they // are only equal if they have the same lenght return (i == len) || (str1[i] == 0 && str2[i] == 0); } //! stores the target text format void storeTargetFormat() { // get target format. We could have done this using template specialization, // but VisualStudio 6 don't like it and we want to support it. switch(sizeof(char_type)) { case 1: TargetFormat = ETF_UTF8; break; case 2: TargetFormat = ETF_UTF16_LE; break; case 4: TargetFormat = ETF_UTF32_LE; break; default: TargetFormat = ETF_ASCII; // should never happen. } } // instance variables: char_type* TextData; // data block of the text file char_type* P; // current point in text to parse char_type* TextBegin; // start of text to parse unsigned int TextSize; // size of text to parse in characters, not bytes EXML_NODE CurrentNodeType; // type of the currently parsed node ETEXT_FORMAT SourceFormat; // source format of the xml file ETEXT_FORMAT TargetFormat; // output format of this parser core::string NodeName; // name of the node currently in core::string EmptyString; // empty string to be returned by getSafe() methods bool IsEmptyElement; // is the currently parsed node empty? core::array< core::string > SpecialCharacters; // see createSpecialCharacterList() core::array Attributes; // attributes of current element }; // end CXMLReaderImpl } // end namespace } // end namespace #endif assimp-3.0/contrib/irrXML/heapsort.h0000644002537200234200000000270611100431042017720 0ustar zmoelnigiemusers// Copyright (C) 2002-2005 Nikolaus Gebhardt // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h #ifndef __IRR_HEAPSORT_H_INCLUDED__ #define __IRR_HEAPSORT_H_INCLUDED__ #include "irrTypes.h" namespace irr { namespace core { //! Sinks an element into the heap. template inline void heapsink(T*array, s32 element, s32 max) { while ((element<<1) < max) // there is a left child { s32 j = (element<<1); if (j+1 < max && array[j] < array[j+1]) j = j+1; // take right child if (array[element] < array[j]) { T t = array[j]; // swap elements array[j] = array[element]; array[element] = t; element = j; } else return; } } //! Sorts an array with size 'size' using heapsort. template inline void heapsort(T* array_, s32 size) { // for heapsink we pretent this is not c++, where // arrays start with index 0. So we decrease the array pointer, // the maximum always +2 and the element always +1 T* virtualArray = array_ - 1; s32 virtualSize = size + 2; s32 i; // build heap for (i=((size-1)/2); i>=0; --i) heapsink(virtualArray, i+1, virtualSize-1); // sort array for (i=size-1; i>=0; --i) { T t = array_[0]; array_[0] = array_[i]; array_[i] = t; heapsink(virtualArray, 1, i + 1); } } } // end namespace core } // end namespace irr #endif assimp-3.0/contrib/irrXML/irrXML.cpp0000644002537200234200000000672311134737711017631 0ustar zmoelnigiemusers// Copyright (C) 2002-2005 Nikolaus Gebhardt // This file is part of the "Irrlicht Engine" and the "irrXML" project. // For conditions of distribution and use, see copyright notice in irrlicht.h and/or irrXML.h // Need to include Assimp, too. We're using Assimp's version of fast_atof // so we need stdint.h. But no PCH. #include "./../../code/AssimpPCH.h" #include "irrXML.h" #include "irrString.h" #include "irrArray.h" #include "./../../code/fast_atof.h" #include "CXMLReaderImpl.h" namespace irr { namespace io { //! Implementation of the file read callback for ordinary files class CFileReadCallBack : public IFileReadCallBack { public: //! construct from filename CFileReadCallBack(const char* filename) : File(0), Size(0), Close(true) { // open file File = fopen(filename, "rb"); if (File) getFileSize(); } //! construct from FILE pointer CFileReadCallBack(FILE* file) : File(file), Size(0), Close(false) { if (File) getFileSize(); } //! destructor virtual ~CFileReadCallBack() { if (Close && File) fclose(File); } //! Reads an amount of bytes from the file. virtual int read(void* buffer, int sizeToRead) { if (!File) return 0; return (int)fread(buffer, 1, sizeToRead, File); } //! Returns size of file in bytes virtual int getSize() { return Size; } private: //! retrieves the file size of the open file void getFileSize() { fseek(File, 0, SEEK_END); Size = ftell(File); fseek(File, 0, SEEK_SET); } FILE* File; int Size; bool Close; }; // end class CFileReadCallBack // FACTORY FUNCTIONS: //! Creates an instance of an UFT-8 or ASCII character xml parser. IrrXMLReader* createIrrXMLReader(const char* filename) { return new CXMLReaderImpl(new CFileReadCallBack(filename)); } //! Creates an instance of an UFT-8 or ASCII character xml parser. IrrXMLReader* createIrrXMLReader(FILE* file) { return new CXMLReaderImpl(new CFileReadCallBack(file)); } //! Creates an instance of an UFT-8 or ASCII character xml parser. IrrXMLReader* createIrrXMLReader(IFileReadCallBack* callback) { return new CXMLReaderImpl(callback, false); } //! Creates an instance of an UTF-16 xml parser. IrrXMLReaderUTF16* createIrrXMLReaderUTF16(const char* filename) { return new CXMLReaderImpl(new CFileReadCallBack(filename)); } //! Creates an instance of an UTF-16 xml parser. IrrXMLReaderUTF16* createIrrXMLReaderUTF16(FILE* file) { return new CXMLReaderImpl(new CFileReadCallBack(file)); } //! Creates an instance of an UTF-16 xml parser. IrrXMLReaderUTF16* createIrrXMLReaderUTF16(IFileReadCallBack* callback) { return new CXMLReaderImpl(callback, false); } //! Creates an instance of an UTF-32 xml parser. IrrXMLReaderUTF32* createIrrXMLReaderUTF32(const char* filename) { return new CXMLReaderImpl(new CFileReadCallBack(filename)); } //! Creates an instance of an UTF-32 xml parser. IrrXMLReaderUTF32* createIrrXMLReaderUTF32(FILE* file) { return new CXMLReaderImpl(new CFileReadCallBack(file)); } //! Creates an instance of an UTF-32 xml parser. IrrXMLReaderUTF32* createIrrXMLReaderUTF32(IFileReadCallBack* callback) { return new CXMLReaderImpl(callback, false); } } // end namespace io } // end namespace irr assimp-3.0/contrib/unzip/0000755002537200234200000000000011770676627015746 5ustar zmoelnigiemusersassimp-3.0/contrib/unzip/ioapi.h0000644002537200234200000000502111406727256017205 0ustar zmoelnigiemusers/* ioapi.h -- IO base function header for compress/uncompress .zip files using zlib + zip or unzip API Version 1.01e, February 12th, 2005 Copyright (C) 1998-2005 Gilles Vollant */ #ifndef _ZLIBIOAPI_H #define _ZLIBIOAPI_H #define ZLIB_FILEFUNC_SEEK_CUR (1) #define ZLIB_FILEFUNC_SEEK_END (2) #define ZLIB_FILEFUNC_SEEK_SET (0) #define ZLIB_FILEFUNC_MODE_READ (1) #define ZLIB_FILEFUNC_MODE_WRITE (2) #define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) #define ZLIB_FILEFUNC_MODE_EXISTING (4) #define ZLIB_FILEFUNC_MODE_CREATE (8) #ifndef ZCALLBACK #if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) #define ZCALLBACK CALLBACK #else #define ZCALLBACK #endif #endif #ifdef __cplusplus extern "C" { #endif typedef voidpf (ZCALLBACK *open_file_func) (voidpf opaque, const char* filename, int mode); typedef uLong (ZCALLBACK *read_file_func) (voidpf opaque, voidpf stream, void* buf, uLong size); typedef uLong (ZCALLBACK *write_file_func)(voidpf opaque, voidpf stream, const void* buf, uLong size); typedef long (ZCALLBACK *tell_file_func) (voidpf opaque, voidpf stream); typedef long (ZCALLBACK *seek_file_func) (voidpf opaque, voidpf stream, uLong offset, int origin); typedef int (ZCALLBACK *close_file_func) (voidpf opaque, voidpf stream); typedef int (ZCALLBACK *testerror_file_func) (voidpf opaque, voidpf stream); typedef struct zlib_filefunc_def_s { open_file_func zopen_file; read_file_func zread_file; write_file_func zwrite_file; tell_file_func ztell_file; seek_file_func zseek_file; close_file_func zclose_file; testerror_file_func zerror_file; voidpf opaque; } zlib_filefunc_def; void fill_fopen_filefunc (zlib_filefunc_def* pzlib_filefunc_def); #define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size)) #define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size)) #define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream)) #define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode)) #define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream)) #define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream)) #ifdef __cplusplus } #endif #endif assimp-3.0/contrib/unzip/unzip.h0000644002537200234200000003205111420115620017232 0ustar zmoelnigiemusers/* unzip.h -- IO for uncompress .zip files using zlib Version 1.01e, February 12th, 2005 Copyright (C) 1998-2005 Gilles Vollant This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g WinZip, InfoZip tools and compatible. Multi volume ZipFile (span) are not supported. Encryption compatible with pkzip 2.04g only supported Old compressions used by old PKZip 1.x are not supported I WAIT FEEDBACK at mail info@winimage.com Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution Condition of use and distribution are the same than zlib : This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* for more info about .ZIP format, see http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip http://www.info-zip.org/pub/infozip/doc/ PkWare has also a specification at : ftp://ftp.pkware.com/probdesc.zip */ #ifndef _unz_H #define _unz_H #ifdef __cplusplus extern "C" { #endif #ifndef _ZLIB_H # ifdef ASSIMP_BUILD_NO_OWN_ZLIB # include # else # include "../zlib/zlib.h" # endif #endif #ifndef _ZLIBIOAPI_H #include "ioapi.h" #endif #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) /* like the STRICT of WIN32, we define a pointer that cannot be converted from (void*) without cast */ typedef struct TagunzFile__ { int unused; } unzFile__; typedef unzFile__ *unzFile; #else typedef voidp unzFile; #endif #define UNZ_OK (0) #define UNZ_END_OF_LIST_OF_FILE (-100) #define UNZ_ERRNO (Z_ERRNO) #define UNZ_EOF (0) #define UNZ_PARAMERROR (-102) #define UNZ_BADZIPFILE (-103) #define UNZ_INTERNALERROR (-104) #define UNZ_CRCERROR (-105) /* tm_unz contain date/time info */ typedef struct tm_unz_s { uInt tm_sec; /* seconds after the minute - [0,59] */ uInt tm_min; /* minutes after the hour - [0,59] */ uInt tm_hour; /* hours since midnight - [0,23] */ uInt tm_mday; /* day of the month - [1,31] */ uInt tm_mon; /* months since January - [0,11] */ uInt tm_year; /* years - [1980..2044] */ } tm_unz; /* unz_global_info structure contain global data about the ZIPfile These data comes from the end of central dir */ typedef struct unz_global_info_s { uLong number_entry; /* total number of entries in the central dir on this disk */ uLong size_comment; /* size of the global comment of the zipfile */ } unz_global_info; /* unz_file_info contain information about a file in the zipfile */ typedef struct unz_file_info_s { uLong version; /* version made by 2 bytes */ uLong version_needed; /* version needed to extract 2 bytes */ uLong flag; /* general purpose bit flag 2 bytes */ uLong compression_method; /* compression method 2 bytes */ uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ uLong crc; /* crc-32 4 bytes */ uLong compressed_size; /* compressed size 4 bytes */ uLong uncompressed_size; /* uncompressed size 4 bytes */ uLong size_filename; /* filename length 2 bytes */ uLong size_file_extra; /* extra field length 2 bytes */ uLong size_file_comment; /* file comment length 2 bytes */ uLong disk_num_start; /* disk number start 2 bytes */ uLong internal_fa; /* internal file attributes 2 bytes */ uLong external_fa; /* external file attributes 4 bytes */ tm_unz tmu_date; } unz_file_info; extern int ZEXPORT unzStringFileNameCompare (const char* fileName1, const char* fileName2, int iCaseSensitivity); /* Compare two filename (fileName1,fileName2). If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi or strcasecmp) If iCaseSenisivity = 0, case sensitivity is defaut of your operating system (like 1 on Unix, 2 on Windows) */ extern unzFile ZEXPORT unzOpen (const char *path); /* Open a Zip file. path contain the full pathname (by example, on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer "zlib/zlib113.zip". If the zipfile cannot be opened (file don't exist or in not valid), the return value is NULL. Else, the return value is a unzFile Handle, usable with other function of this unzip package. */ extern unzFile ZEXPORT unzOpen2 (const char *path, zlib_filefunc_def* pzlib_filefunc_def); /* Open a Zip file, like unzOpen, but provide a set of file low level API for read/write the zip file (see ioapi.h) */ extern int ZEXPORT unzClose (unzFile file); /* Close a ZipFile opened with unzipOpen. If there is files inside the .Zip opened with unzOpenCurrentFile (see later), these files MUST be closed with unzipCloseCurrentFile before call unzipClose. return UNZ_OK if there is no problem. */ extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info *pglobal_info); /* Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ extern int ZEXPORT unzGetGlobalComment (unzFile file, char *szComment, uLong uSizeBuf); /* Get the global comment string of the ZipFile, in the szComment buffer. uSizeBuf is the size of the szComment buffer. return the number of byte copied or an error code <0 */ /***************************************************************************/ /* Unzip package allow you browse the directory of the zipfile */ extern int ZEXPORT unzGoToFirstFile (unzFile file); /* Set the current file of the zipfile to the first file. return UNZ_OK if there is no problem */ extern int ZEXPORT unzGoToNextFile (unzFile file); /* Set the current file of the zipfile to the next file. return UNZ_OK if there is no problem return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. */ extern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity); /* Try locate the file szFileName in the zipfile. For the iCaseSensitivity signification, see unzStringFileNameCompare return value : UNZ_OK if the file is found. It becomes the current file. UNZ_END_OF_LIST_OF_FILE if the file is not found */ /* ****************************************** */ /* Ryan supplied functions */ /* unz_file_info contain information about a file in the zipfile */ typedef struct unz_file_pos_s { uLong pos_in_zip_directory; /* offset in zip file directory */ uLong num_of_file; /* # of file */ } unz_file_pos; extern int ZEXPORT unzGetFilePos( unzFile file, unz_file_pos* file_pos); extern int ZEXPORT unzGoToFilePos( unzFile file, unz_file_pos* file_pos); /* ****************************************** */ extern int ZEXPORT unzGetCurrentFileInfo (unzFile file, unz_file_info *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize); /* Get Info about the current file if pfile_info!=NULL, the *pfile_info structure will contain somes info about the current file if szFileName!=NULL, the filemane string will be copied in szFileName (fileNameBufferSize is the size of the buffer) if extraField!=NULL, the extra field information will be copied in extraField (extraFieldBufferSize is the size of the buffer). This is the Central-header version of the extra field if szComment!=NULL, the comment string of the file will be copied in szComment (commentBufferSize is the size of the buffer) */ /***************************************************************************/ /* for reading the content of the current zipfile, you can open it, read data from it, and close it (you can close it before reading all the file) */ extern int ZEXPORT unzOpenCurrentFile (unzFile file); /* Open for reading data the current file in the zipfile. If there is no error, the return value is UNZ_OK. */ extern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, const char* password); /* Open for reading data the current file in the zipfile. password is a crypting password If there is no error, the return value is UNZ_OK. */ extern int ZEXPORT unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw); /* Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) if raw==1 *method will receive method of compression, *level will receive level of compression note : you can set level parameter as NULL (if you did not want known level, but you CANNOT set method parameter as NULL */ extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method, int* level, int raw, const char* password); /* Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) if raw==1 *method will receive method of compression, *level will receive level of compression note : you can set level parameter as NULL (if you did not want known level, but you CANNOT set method parameter as NULL */ extern int ZEXPORT unzCloseCurrentFile (unzFile file); /* Close the file in zip opened with unzOpenCurrentFile Return UNZ_CRCERROR if all the file was read but the CRC is not good */ extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len); /* Read bytes from the current file (opened by unzOpenCurrentFile) buf contain buffer where data must be copied len the size of buf. return the number of byte copied if somes bytes are copied return 0 if the end of file was reached return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error) */ extern z_off_t ZEXPORT unztell (unzFile file); /* Give the current position in uncompressed data */ extern int ZEXPORT unzeof (unzFile file); /* return 1 if the end of file was reached, 0 elsewhere */ extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len); /* Read extra field from the current file (opened by unzOpenCurrentFile) This is the local-header version of the extra field (sometimes, there is more info in the local-header version than in the central-header) if buf==NULL, it return the size of the local extra field if buf!=NULL, len is the size of the buffer, the extra header is copied in buf. the return value is the number of bytes copied in buf, or (if <0) the error code */ /***************************************************************************/ /* Get the current file offset */ extern uLong ZEXPORT unzGetOffset (unzFile file); /* Set the current file offset */ extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); #ifdef __cplusplus } #endif #endif /* _unz_H */ assimp-3.0/contrib/unzip/crypt.h0000644002537200234200000001135411574156020017242 0ustar zmoelnigiemusers/* crypt.h -- base code for crypt/uncrypt ZIPfile Version 1.01e, February 12th, 2005 Copyright (C) 1998-2005 Gilles Vollant This code is a modified version of crypting code in Infozip distribution The encryption/decryption parts of this source code (as opposed to the non-echoing password parts) were originally written in Europe. The whole source package can be freely distributed, including from the USA. (Prior to January 2000, re-export from the US was a violation of US law.) This encryption code is a direct transcription of the algorithm from Roger Schlafly, described by Phil Katz in the file appnote.txt. This file (appnote.txt) is distributed with the PKZIP program (even in the version without encryption capabilities). If you don't need crypting in your application, just define symbols NOCRYPT and NOUNCRYPT. This code support the "Traditional PKWARE Encryption". The new AES encryption added on Zip format by Winzip (see the page http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong Encryption is not supported. */ #define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8)) /*********************************************************************** * Return the next byte in the pseudo-random sequence */ static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab) { unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an * unpredictable manner on 16-bit systems; not a problem * with any known compiler so far, though */ temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2; return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); } /*********************************************************************** * Update the encryption keys with the next byte of plain text */ static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c) { (*(pkeys+0)) = CRC32((*(pkeys+0)), c); (*(pkeys+1)) += (*(pkeys+0)) & 0xff; (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1; { register int keyshift = (int)((*(pkeys+1)) >> 24); (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift); } return c; } /*********************************************************************** * Initialize the encryption keys and the random header according to * the given password. */ static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab) { *(pkeys+0) = 305419896L; *(pkeys+1) = 591751049L; *(pkeys+2) = 878082192L; while (*passwd != '\0') { update_keys(pkeys,pcrc_32_tab,(int)*passwd); passwd++; } } #define zdecode(pkeys,pcrc_32_tab,c) \ (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab))) #define zencode(pkeys,pcrc_32_tab,c,t) \ (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c)) #ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED #define RAND_HEAD_LEN 12 /* "last resort" source for second part of crypt seed pattern */ # ifndef ZCR_SEED2 # define ZCR_SEED2 3141592654UL /* use PI as default pattern */ # endif static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting) const char *passwd; /* password string */ unsigned char *buf; /* where to write header */ int bufSize; unsigned long* pkeys; const unsigned long* pcrc_32_tab; unsigned long crcForCrypting; { int n; /* index in random header */ int t; /* temporary */ int c; /* random byte */ unsigned char header[RAND_HEAD_LEN-2]; /* random header */ static unsigned calls = 0; /* ensure different random header each time */ if (bufSize> 7) & 0xff; header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t); } /* Encrypt random header (last two bytes is high word of crc) */ init_keys(passwd, pkeys, pcrc_32_tab); for (n = 0; n < RAND_HEAD_LEN-2; n++) { buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t); } buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t); buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t); return n; } #endif assimp-3.0/contrib/unzip/unzip.c0000644002537200234200000014333711420115620017237 0ustar zmoelnigiemusers/* unzip.c -- IO for uncompress .zip files using zlib Version 1.01e, February 12th, 2005 Copyright (C) 1998-2005 Gilles Vollant Read unzip.h for more info */ /* Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of compatibility with older software. The following is from the original crypt.c. Code woven in by Terry Thorsen 1/2003. */ /* Copyright (c) 1990-2000 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h] The encryption/decryption parts of this source code (as opposed to the non-echoing password parts) were originally written in Europe. The whole source package can be freely distributed, including from the USA. (Prior to January 2000, re-export from the US was a violation of US law.) */ /* This encryption code is a direct transcription of the algorithm from Roger Schlafly, described by Phil Katz in the file appnote.txt. This file (appnote.txt) is distributed with the PKZIP program (even in the version without encryption capabilities). */ #include #include #include #include "./unzip.h" #ifdef STDC # include # include # include #endif #ifdef NO_ERRNO_H extern int errno; #else # include #endif #ifndef local # define local static #endif /* compile with -Dlocal if your debugger can't find static symbols */ #ifndef CASESENSITIVITYDEFAULT_NO # if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) # define CASESENSITIVITYDEFAULT_NO # endif #endif #ifndef UNZ_BUFSIZE #define UNZ_BUFSIZE (16384) #endif #ifndef UNZ_MAXFILENAMEINZIP #define UNZ_MAXFILENAMEINZIP (256) #endif #ifndef ALLOC # define ALLOC(size) (malloc(size)) #endif #ifndef TRYFREE # define TRYFREE(p) {if (p) free(p);} #endif #define SIZECENTRALDIRITEM (0x2e) #define SIZEZIPLOCALHEADER (0x1e) const char unz_copyright[] = " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; /* unz_file_info_interntal contain internal info about a file in zipfile*/ typedef struct unz_file_info_internal_s { uLong offset_curfile;/* relative offset of local header 4 bytes */ } unz_file_info_internal; /* file_in_zip_read_info_s contain internal information about a file in zipfile, when reading and decompress it */ typedef struct { char *read_buffer; /* internal buffer for compressed data */ z_stream stream; /* zLib stream structure for inflate */ uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ uLong stream_initialised; /* flag set if stream structure is initialised*/ uLong offset_local_extrafield;/* offset of the local extra field */ uInt size_local_extrafield;/* size of the local extra field */ uLong pos_local_extrafield; /* position in the local extra field in read*/ uLong crc32; /* crc32 of all data uncompressed */ uLong crc32_wait; /* crc32 we must obtain after decompress all */ uLong rest_read_compressed; /* number of byte to be decompressed */ uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/ zlib_filefunc_def z_filefunc; voidpf filestream; /* io structore of the zipfile */ uLong compression_method; /* compression method (0==store) */ uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ int raw; } file_in_zip_read_info_s; /* unz_s contain internal information about the zipfile */ typedef struct { zlib_filefunc_def z_filefunc; voidpf filestream; /* io structore of the zipfile */ unz_global_info gi; /* public global information */ uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ uLong num_file; /* number of the current file in the zipfile*/ uLong pos_in_central_dir; /* pos of the current file in the central dir*/ uLong current_file_ok; /* flag about the usability of the current file*/ uLong central_pos; /* position of the beginning of the central dir*/ uLong size_central_dir; /* size of the central directory */ uLong offset_central_dir; /* offset of start of central directory with respect to the starting disk number */ unz_file_info cur_file_info; /* public info about the current file in zip*/ unz_file_info_internal cur_file_info_internal; /* private info about it*/ file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current file if we are decompressing it */ int encrypted; # ifndef NOUNCRYPT unsigned long keys[3]; /* keys defining the pseudo-random sequence */ const unsigned long* pcrc_32_tab; # endif } unz_s; #ifndef NOUNCRYPT #include "crypt.h" #endif /* =========================================================================== Read a byte from a gz_stream; update next_in and avail_in. Return EOF for end of file. IN assertion: the stream s has been sucessfully opened for reading. */ local int unzlocal_getByte ( const zlib_filefunc_def* pzlib_filefunc_def, voidpf filestream, int *pi); local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi) const zlib_filefunc_def* pzlib_filefunc_def; voidpf filestream; int *pi; { unsigned char c; int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); if (err==1) { *pi = (int)c; return UNZ_OK; } else { if (ZERROR(*pzlib_filefunc_def,filestream)) return UNZ_ERRNO; else return UNZ_EOF; } } /* =========================================================================== Reads a long in LSB order from the given gz_stream. Sets */ local int unzlocal_getShort ( const zlib_filefunc_def* pzlib_filefunc_def, voidpf filestream, uLong *pX); local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX) const zlib_filefunc_def* pzlib_filefunc_def; voidpf filestream; uLong *pX; { uLong x ; int i; int err; err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x = (uLong)i; if (err==UNZ_OK) err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<8; if (err==UNZ_OK) *pX = x; else *pX = 0; return err; } local int unzlocal_getLong ( const zlib_filefunc_def* pzlib_filefunc_def, voidpf filestream, uLong *pX); local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX) const zlib_filefunc_def* pzlib_filefunc_def; voidpf filestream; uLong *pX; { uLong x ; int i; int err; err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x = (uLong)i; if (err==UNZ_OK) err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<8; if (err==UNZ_OK) err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<16; if (err==UNZ_OK) err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<24; if (err==UNZ_OK) *pX = x; else *pX = 0; return err; } /* My own strcmpi / strcasecmp */ local int strcmpcasenosensitive_internal (fileName1,fileName2) const char* fileName1; const char* fileName2; { for (;;) { char c1=*(fileName1++); char c2=*(fileName2++); if ((c1>='a') && (c1<='z')) c1 -= 0x20; if ((c2>='a') && (c2<='z')) c2 -= 0x20; if (c1=='\0') return ((c2=='\0') ? 0 : -1); if (c2=='\0') return 1; if (c1c2) return 1; } } #ifdef CASESENSITIVITYDEFAULT_NO #define CASESENSITIVITYDEFAULTVALUE 2 #else #define CASESENSITIVITYDEFAULTVALUE 1 #endif #ifndef STRCMPCASENOSENTIVEFUNCTION #define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal #endif /* Compare two filename (fileName1,fileName2). If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi or strcasecmp) If iCaseSenisivity = 0, case sensitivity is defaut of your operating system (like 1 on Unix, 2 on Windows) */ extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity) const char* fileName1; const char* fileName2; int iCaseSensitivity; { if (iCaseSensitivity==0) iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; if (iCaseSensitivity==1) return strcmp(fileName1,fileName2); return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2); } #ifndef BUFREADCOMMENT #define BUFREADCOMMENT (0x400) #endif /* Locate the Central directory of a zipfile (at the end, just before the global comment) */ local uLong unzlocal_SearchCentralDir ( const zlib_filefunc_def* pzlib_filefunc_def, voidpf filestream); local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream) const zlib_filefunc_def* pzlib_filefunc_def; voidpf filestream; { unsigned char* buf; uLong uSizeFile; uLong uBackRead; uLong uMaxBack=0xffff; /* maximum size of global comment */ uLong uPosFound=0; if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) return 0; uSizeFile = ZTELL(*pzlib_filefunc_def,filestream); if (uMaxBack>uSizeFile) uMaxBack = uSizeFile; buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); if (buf==NULL) return 0; uBackRead = 4; while (uBackReaduMaxBack) uBackRead = uMaxBack; else uBackRead+=BUFREADCOMMENT; uReadPos = uSizeFile-uBackRead ; uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) break; if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) break; for (i=(int)uReadSize-3; (i--)>0;) if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) { uPosFound = uReadPos+i; break; } if (uPosFound!=0) break; } TRYFREE(buf); return uPosFound; } /* Open a Zip file. path contain the full pathname (by example, on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer "zlib/zlib114.zip". If the zipfile cannot be opened (file doesn't exist or in not valid), the return value is NULL. Else, the return value is a unzFile Handle, usable with other function of this unzip package. */ extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def) const char *path; zlib_filefunc_def* pzlib_filefunc_def; { unz_s us; unz_s *s; uLong central_pos,uL; uLong number_disk; /* number of the current dist, used for spaning ZIP, unsupported, always 0*/ uLong number_disk_with_CD; /* number the the disk with central dir, used for spaning ZIP, unsupported, always 0*/ uLong number_entry_CD; /* total number of entries in the central dir (same than number_entry on nospan) */ int err=UNZ_OK; if (unz_copyright[0]!=' ') return NULL; if (pzlib_filefunc_def==NULL) fill_fopen_filefunc(&us.z_filefunc); else us.z_filefunc = *pzlib_filefunc_def; us.filestream= (*(us.z_filefunc.zopen_file))(us.z_filefunc.opaque, path, ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_EXISTING); if (us.filestream==NULL) return NULL; central_pos = unzlocal_SearchCentralDir(&us.z_filefunc,us.filestream); if (central_pos==0) err=UNZ_ERRNO; if (ZSEEK(us.z_filefunc, us.filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) err=UNZ_ERRNO; /* the signature, already checked */ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) err=UNZ_ERRNO; /* number of this disk */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) err=UNZ_ERRNO; /* number of the disk with the start of the central directory */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) err=UNZ_ERRNO; /* total number of entries in the central dir on this disk */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK) err=UNZ_ERRNO; /* total number of entries in the central dir */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK) err=UNZ_ERRNO; if ((number_entry_CD!=us.gi.number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) err=UNZ_BADZIPFILE; /* size of the central directory */ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK) err=UNZ_ERRNO; /* offset of start of central directory with respect to the starting disk number */ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK) err=UNZ_ERRNO; /* zipfile comment length */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK) err=UNZ_ERRNO; if ((central_pospfile_in_zip_read!=NULL) unzCloseCurrentFile(file); ZCLOSE(s->z_filefunc, s->filestream); TRYFREE(s); return UNZ_OK; } /* Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info) unzFile file; unz_global_info *pglobal_info; { unz_s* s; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; *pglobal_info=s->gi; return UNZ_OK; } /* Translate date/time from Dos format to tm_unz (readable more easilty) */ local void unzlocal_DosDateToTmuDate (ulDosDate, ptm) uLong ulDosDate; tm_unz* ptm; { uLong uDate; uDate = (uLong)(ulDosDate>>16); ptm->tm_mday = (uInt)(uDate&0x1f) ; ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; } /* Get Info about the current file in the zipfile, with internal only info */ local int unzlocal_GetCurrentFileInfoInternal (unzFile file, unz_file_info *pfile_info, unz_file_info_internal *pfile_info_internal, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize); local int unzlocal_GetCurrentFileInfoInternal (file, pfile_info, pfile_info_internal, szFileName, fileNameBufferSize, extraField, extraFieldBufferSize, szComment, commentBufferSize) unzFile file; unz_file_info *pfile_info; unz_file_info_internal *pfile_info_internal; char *szFileName; uLong fileNameBufferSize; void *extraField; uLong extraFieldBufferSize; char *szComment; uLong commentBufferSize; { unz_s* s; unz_file_info file_info; unz_file_info_internal file_info_internal; int err=UNZ_OK; uLong uMagic; long lSeek=0; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (ZSEEK(s->z_filefunc, s->filestream, s->pos_in_central_dir+s->byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET)!=0) err=UNZ_ERRNO; /* we check the magic */ if (err==UNZ_OK) { if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x02014b50) err=UNZ_BADZIPFILE; } if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK) err=UNZ_ERRNO; unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK) err=UNZ_ERRNO; lSeek+=file_info.size_filename; if ((err==UNZ_OK) && (szFileName!=NULL)) { uLong uSizeRead ; if (file_info.size_filename0) && (fileNameBufferSize>0)) if (ZREAD(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead) err=UNZ_ERRNO; lSeek -= uSizeRead; } if ((err==UNZ_OK) && (extraField!=NULL)) { uLong uSizeRead ; if (file_info.size_file_extraz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; } if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead) err=UNZ_ERRNO; lSeek += file_info.size_file_extra - uSizeRead; } else lSeek+=file_info.size_file_extra; if ((err==UNZ_OK) && (szComment!=NULL)) { uLong uSizeRead ; if (file_info.size_file_commentz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; } if ((file_info.size_file_comment>0) && (commentBufferSize>0)) if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead) err=UNZ_ERRNO; lSeek+=file_info.size_file_comment - uSizeRead; } else lSeek+=file_info.size_file_comment; if ((err==UNZ_OK) && (pfile_info!=NULL)) *pfile_info=file_info; if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) *pfile_info_internal=file_info_internal; return err; } /* Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ extern int ZEXPORT unzGetCurrentFileInfo (file, pfile_info, szFileName, fileNameBufferSize, extraField, extraFieldBufferSize, szComment, commentBufferSize) unzFile file; unz_file_info *pfile_info; char *szFileName; uLong fileNameBufferSize; void *extraField; uLong extraFieldBufferSize; char *szComment; uLong commentBufferSize; { return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL, szFileName,fileNameBufferSize, extraField,extraFieldBufferSize, szComment,commentBufferSize); } /* Set the current file of the zipfile to the first file. return UNZ_OK if there is no problem */ extern int ZEXPORT unzGoToFirstFile (file) unzFile file; { int err=UNZ_OK; unz_s* s; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; s->pos_in_central_dir=s->offset_central_dir; s->num_file=0; err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); s->current_file_ok = (err == UNZ_OK); return err; } /* Set the current file of the zipfile to the next file. return UNZ_OK if there is no problem return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. */ extern int ZEXPORT unzGoToNextFile (file) unzFile file; { unz_s* s; int err; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */ if (s->num_file+1==s->gi.number_entry) return UNZ_END_OF_LIST_OF_FILE; s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; s->num_file++; err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); s->current_file_ok = (err == UNZ_OK); return err; } /* Try locate the file szFileName in the zipfile. For the iCaseSensitivity signification, see unzipStringFileNameCompare return value : UNZ_OK if the file is found. It becomes the current file. UNZ_END_OF_LIST_OF_FILE if the file is not found */ extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) unzFile file; const char *szFileName; int iCaseSensitivity; { unz_s* s; int err; /* We remember the 'current' position in the file so that we can jump * back there if we fail. */ unz_file_info cur_file_infoSaved; unz_file_info_internal cur_file_info_internalSaved; uLong num_fileSaved; uLong pos_in_central_dirSaved; if (file==NULL) return UNZ_PARAMERROR; if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; /* Save the current state */ num_fileSaved = s->num_file; pos_in_central_dirSaved = s->pos_in_central_dir; cur_file_infoSaved = s->cur_file_info; cur_file_info_internalSaved = s->cur_file_info_internal; err = unzGoToFirstFile(file); while (err == UNZ_OK) { char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; err = unzGetCurrentFileInfo(file,NULL, szCurrentFileName,sizeof(szCurrentFileName)-1, NULL,0,NULL,0); if (err == UNZ_OK) { if (unzStringFileNameCompare(szCurrentFileName, szFileName,iCaseSensitivity)==0) return UNZ_OK; err = unzGoToNextFile(file); } } /* We failed, so restore the state of the 'current file' to where we * were. */ s->num_file = num_fileSaved ; s->pos_in_central_dir = pos_in_central_dirSaved ; s->cur_file_info = cur_file_infoSaved; s->cur_file_info_internal = cur_file_info_internalSaved; return err; } /* /////////////////////////////////////////// // Contributed by Ryan Haksi (mailto://cryogen@infoserve.net) // I need random access // // Further optimization could be realized by adding an ability // to cache the directory in memory. The goal being a single // comprehensive file read to put the file I need in a memory. */ /* typedef struct unz_file_pos_s { uLong pos_in_zip_directory; // offset in file uLong num_of_file; // # of file } unz_file_pos; */ extern int ZEXPORT unzGetFilePos(file, file_pos) unzFile file; unz_file_pos* file_pos; { unz_s* s; if (file==NULL || file_pos==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; file_pos->pos_in_zip_directory = s->pos_in_central_dir; file_pos->num_of_file = s->num_file; return UNZ_OK; } extern int ZEXPORT unzGoToFilePos(file, file_pos) unzFile file; unz_file_pos* file_pos; { unz_s* s; int err; if (file==NULL || file_pos==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; /* jump to the right spot */ s->pos_in_central_dir = file_pos->pos_in_zip_directory; s->num_file = file_pos->num_of_file; /* set the current file */ err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); /* return results */ s->current_file_ok = (err == UNZ_OK); return err; } /* // Unzip Helper Functions - should be here? /////////////////////////////////////////// */ /* Read the local header of the current zipfile Check the coherency of the local header and info in the end of central directory about this file store in *piSizeVar the size of extra info in local header (filename and size of extra field data) */ local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, poffset_local_extrafield, psize_local_extrafield) unz_s* s; uInt* piSizeVar; uLong *poffset_local_extrafield; uInt *psize_local_extrafield; { uLong uMagic,uData,uFlags; uLong size_filename; uLong size_extra_field; int err=UNZ_OK; *piSizeVar = 0; *poffset_local_extrafield = 0; *psize_local_extrafield = 0; if (ZSEEK(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile + s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; if (err==UNZ_OK) { if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x04034b50) err=UNZ_BADZIPFILE; } if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) err=UNZ_ERRNO; /* else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) err=UNZ_BADZIPFILE; */ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) err=UNZ_ERRNO; else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) err=UNZ_BADZIPFILE; if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && (s->cur_file_info.compression_method!=Z_DEFLATED)) err=UNZ_BADZIPFILE; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */ err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */ err=UNZ_ERRNO; else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */ err=UNZ_ERRNO; else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */ err=UNZ_ERRNO; else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK) err=UNZ_ERRNO; else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) err=UNZ_BADZIPFILE; *piSizeVar += (uInt)size_filename; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK) err=UNZ_ERRNO; *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + size_filename; *psize_local_extrafield = (uInt)size_extra_field; *piSizeVar += (uInt)size_extra_field; return err; } /* Open for reading data the current file in the zipfile. If there is no error and the file is opened, the return value is UNZ_OK. */ extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password) unzFile file; int* method; int* level; int raw; const char* password; { int err=UNZ_OK; uInt iSizeVar; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; uLong offset_local_extrafield; /* offset of the local extra field */ uInt size_local_extrafield; /* size of the local extra field */ # ifndef NOUNCRYPT char source[12]; # else if (password != NULL) return UNZ_PARAMERROR; # endif if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return UNZ_PARAMERROR; if (s->pfile_in_zip_read != NULL) unzCloseCurrentFile(file); if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) return UNZ_BADZIPFILE; pfile_in_zip_read_info = (file_in_zip_read_info_s*) ALLOC(sizeof(file_in_zip_read_info_s)); if (pfile_in_zip_read_info==NULL) return UNZ_INTERNALERROR; pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE); pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; pfile_in_zip_read_info->pos_local_extrafield=0; pfile_in_zip_read_info->raw=raw; if (pfile_in_zip_read_info->read_buffer==NULL) { TRYFREE(pfile_in_zip_read_info); return UNZ_INTERNALERROR; } pfile_in_zip_read_info->stream_initialised=0; if (method!=NULL) *method = (int)s->cur_file_info.compression_method; if (level!=NULL) { *level = 6; switch (s->cur_file_info.flag & 0x06) { case 6 : *level = 1; break; case 4 : *level = 2; break; case 2 : *level = 9; break; } } if ((s->cur_file_info.compression_method!=0) && (s->cur_file_info.compression_method!=Z_DEFLATED)) err=UNZ_BADZIPFILE; pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; pfile_in_zip_read_info->crc32=0; pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method; pfile_in_zip_read_info->filestream=s->filestream; pfile_in_zip_read_info->z_filefunc=s->z_filefunc; pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; pfile_in_zip_read_info->stream.total_out = 0; if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw)) { pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; pfile_in_zip_read_info->stream.zfree = (free_func)0; pfile_in_zip_read_info->stream.opaque = (voidpf)0; pfile_in_zip_read_info->stream.next_in = (voidpf)0; pfile_in_zip_read_info->stream.avail_in = 0; err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); if (err == Z_OK) pfile_in_zip_read_info->stream_initialised=1; else { TRYFREE(pfile_in_zip_read_info); return err; } /* windowBits is passed < 0 to tell that there is no zlib header. * Note that in this case inflate *requires* an extra "dummy" byte * after the compressed stream in order to complete decompression and * return Z_STREAM_END. * In unzip, i don't wait absolutely Z_STREAM_END because I known the * size of both compressed and uncompressed data */ } pfile_in_zip_read_info->rest_read_compressed = s->cur_file_info.compressed_size ; pfile_in_zip_read_info->rest_read_uncompressed = s->cur_file_info.uncompressed_size ; pfile_in_zip_read_info->pos_in_zipfile = s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + iSizeVar; pfile_in_zip_read_info->stream.avail_in = (uInt)0; s->pfile_in_zip_read = pfile_in_zip_read_info; # ifndef NOUNCRYPT if (password != NULL) { int i; s->pcrc_32_tab = get_crc_table(); init_keys(password,s->keys,s->pcrc_32_tab); if (ZSEEK(s->z_filefunc, s->filestream, s->pfile_in_zip_read->pos_in_zipfile + s->pfile_in_zip_read->byte_before_the_zipfile, SEEK_SET)!=0) return UNZ_INTERNALERROR; if(ZREAD(s->z_filefunc, s->filestream,source, 12)<12) return UNZ_INTERNALERROR; for (i = 0; i<12; i++) zdecode(s->keys,s->pcrc_32_tab,source[i]); s->pfile_in_zip_read->pos_in_zipfile+=12; s->encrypted=1; } # endif return UNZ_OK; } extern int ZEXPORT unzOpenCurrentFile (file) unzFile file; { return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); } extern int ZEXPORT unzOpenCurrentFilePassword (file, password) unzFile file; const char* password; { return unzOpenCurrentFile3(file, NULL, NULL, 0, password); } extern int ZEXPORT unzOpenCurrentFile2 (file,method,level,raw) unzFile file; int* method; int* level; int raw; { return unzOpenCurrentFile3(file, method, level, raw, NULL); } /* Read bytes from the current file. buf contain buffer where data must be copied len the size of buf. return the number of byte copied if somes bytes are copied return 0 if the end of file was reached return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error) */ extern int ZEXPORT unzReadCurrentFile (file, buf, len) unzFile file; voidp buf; unsigned len; { int err=UNZ_OK; uInt iRead = 0; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; if ((pfile_in_zip_read_info->read_buffer == NULL)) return UNZ_END_OF_LIST_OF_FILE; if (len==0) return 0; pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; pfile_in_zip_read_info->stream.avail_out = (uInt)len; if ((len>pfile_in_zip_read_info->rest_read_uncompressed) && (!(pfile_in_zip_read_info->raw))) pfile_in_zip_read_info->stream.avail_out = (uInt)pfile_in_zip_read_info->rest_read_uncompressed; if ((len>pfile_in_zip_read_info->rest_read_compressed+ pfile_in_zip_read_info->stream.avail_in) && (pfile_in_zip_read_info->raw)) pfile_in_zip_read_info->stream.avail_out = (uInt)pfile_in_zip_read_info->rest_read_compressed+ pfile_in_zip_read_info->stream.avail_in; while (pfile_in_zip_read_info->stream.avail_out>0) { if ((pfile_in_zip_read_info->stream.avail_in==0) && (pfile_in_zip_read_info->rest_read_compressed>0)) { uInt uReadThis = UNZ_BUFSIZE; if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; if (uReadThis == 0) return UNZ_EOF; if (ZSEEK(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, pfile_in_zip_read_info->pos_in_zipfile + pfile_in_zip_read_info->byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; if (ZREAD(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, pfile_in_zip_read_info->read_buffer, uReadThis)!=uReadThis) return UNZ_ERRNO; # ifndef NOUNCRYPT if(s->encrypted) { uInt i; for(i=0;iread_buffer[i] = zdecode(s->keys,s->pcrc_32_tab, pfile_in_zip_read_info->read_buffer[i]); } # endif pfile_in_zip_read_info->pos_in_zipfile += uReadThis; pfile_in_zip_read_info->rest_read_compressed-=uReadThis; pfile_in_zip_read_info->stream.next_in = (Bytef*)pfile_in_zip_read_info->read_buffer; pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; } if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw)) { uInt uDoCopy,i ; if ((pfile_in_zip_read_info->stream.avail_in == 0) && (pfile_in_zip_read_info->rest_read_compressed == 0)) return (iRead==0) ? UNZ_EOF : iRead; if (pfile_in_zip_read_info->stream.avail_out < pfile_in_zip_read_info->stream.avail_in) uDoCopy = pfile_in_zip_read_info->stream.avail_out ; else uDoCopy = pfile_in_zip_read_info->stream.avail_in ; for (i=0;istream.next_out+i) = *(pfile_in_zip_read_info->stream.next_in+i); pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, pfile_in_zip_read_info->stream.next_out, uDoCopy); pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; pfile_in_zip_read_info->stream.avail_in -= uDoCopy; pfile_in_zip_read_info->stream.avail_out -= uDoCopy; pfile_in_zip_read_info->stream.next_out += uDoCopy; pfile_in_zip_read_info->stream.next_in += uDoCopy; pfile_in_zip_read_info->stream.total_out += uDoCopy; iRead += uDoCopy; } else { uLong uTotalOutBefore,uTotalOutAfter; const Bytef *bufBefore; uLong uOutThis; int flush=Z_SYNC_FLUSH; uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; bufBefore = pfile_in_zip_read_info->stream.next_out; /* if ((pfile_in_zip_read_info->rest_read_uncompressed == pfile_in_zip_read_info->stream.avail_out) && (pfile_in_zip_read_info->rest_read_compressed == 0)) flush = Z_FINISH; */ err=inflate(&pfile_in_zip_read_info->stream,flush); if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL)) err = Z_DATA_ERROR; uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; uOutThis = uTotalOutAfter-uTotalOutBefore; pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis)); pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis; iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); if (err==Z_STREAM_END) return (iRead==0) ? UNZ_EOF : iRead; if (err!=Z_OK) break; } } if (err==Z_OK) return iRead; return err; } /* Give the current position in uncompressed data */ extern z_off_t ZEXPORT unztell (file) unzFile file; { unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; return (z_off_t)pfile_in_zip_read_info->stream.total_out; } /* return 1 if the end of file was reached, 0 elsewhere */ extern int ZEXPORT unzeof (file) unzFile file; { unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; if (pfile_in_zip_read_info->rest_read_uncompressed == 0) return 1; else return 0; } /* Read extra field from the current file (opened by unzOpenCurrentFile) This is the local-header version of the extra field (sometimes, there is more info in the local-header version than in the central-header) if buf==NULL, it return the size of the local extra field that can be read if buf!=NULL, len is the size of the buffer, the extra header is copied in buf. the return value is the number of bytes copied in buf, or (if <0) the error code */ extern int ZEXPORT unzGetLocalExtrafield (file,buf,len) unzFile file; voidp buf; unsigned len; { unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; uInt read_now; uLong size_to_read; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; size_to_read = (pfile_in_zip_read_info->size_local_extrafield - pfile_in_zip_read_info->pos_local_extrafield); if (buf==NULL) return (int)size_to_read; if (len>size_to_read) read_now = (uInt)size_to_read; else read_now = (uInt)len ; if (read_now==0) return 0; if (ZSEEK(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, pfile_in_zip_read_info->offset_local_extrafield + pfile_in_zip_read_info->pos_local_extrafield, ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; if (ZREAD(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, buf,read_now)!=read_now) return UNZ_ERRNO; return (int)read_now; } /* Close the file in zip opened with unzipOpenCurrentFile Return UNZ_CRCERROR if all the file was read but the CRC is not good */ extern int ZEXPORT unzCloseCurrentFile (file) unzFile file; { int err=UNZ_OK; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) && (!pfile_in_zip_read_info->raw)) { if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) err=UNZ_CRCERROR; } TRYFREE(pfile_in_zip_read_info->read_buffer); pfile_in_zip_read_info->read_buffer = NULL; if (pfile_in_zip_read_info->stream_initialised) inflateEnd(&pfile_in_zip_read_info->stream); pfile_in_zip_read_info->stream_initialised = 0; TRYFREE(pfile_in_zip_read_info); s->pfile_in_zip_read=NULL; return err; } /* Get the global comment string of the ZipFile, in the szComment buffer. uSizeBuf is the size of the szComment buffer. return the number of byte copied or an error code <0 */ extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf) unzFile file; char *szComment; uLong uSizeBuf; { unz_s* s; uLong uReadThis ; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; uReadThis = uSizeBuf; if (uReadThis>s->gi.size_comment) uReadThis = s->gi.size_comment; if (ZSEEK(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; if (uReadThis>0) { *szComment='\0'; if (ZREAD(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis) return UNZ_ERRNO; } if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) *(szComment+s->gi.size_comment)='\0'; return (int)uReadThis; } /* Additions by RX '2004 */ extern uLong ZEXPORT unzGetOffset (file) unzFile file; { unz_s* s; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return 0; if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff) if (s->num_file==s->gi.number_entry) return 0; return s->pos_in_central_dir; } extern int ZEXPORT unzSetOffset (file, pos) unzFile file; uLong pos; { unz_s* s; int err; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; s->pos_in_central_dir = pos; s->num_file = s->gi.number_entry; /* hack */ err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); s->current_file_ok = (err == UNZ_OK); return err; } assimp-3.0/contrib/unzip/ioapi.c0000644002537200234200000000752511420117534017177 0ustar zmoelnigiemusers/* ioapi.c -- IO base function header for compress/uncompress .zip files using zlib + zip or unzip API Version 1.01e, February 12th, 2005 Copyright (C) 1998-2005 Gilles Vollant */ #include #include #include # ifdef ASSIMP_BUILD_NO_OWN_ZLIB # include # else # include "../zlib/zlib.h" # endif #include "ioapi.h" /* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ #ifndef SEEK_CUR #define SEEK_CUR 1 #endif #ifndef SEEK_END #define SEEK_END 2 #endif #ifndef SEEK_SET #define SEEK_SET 0 #endif voidpf ZCALLBACK fopen_file_func ( voidpf opaque, const char* filename, int mode); uLong ZCALLBACK fread_file_func ( voidpf opaque, voidpf stream, void* buf, uLong size); uLong ZCALLBACK fwrite_file_func ( voidpf opaque, voidpf stream, const void* buf, uLong size); long ZCALLBACK ftell_file_func ( voidpf opaque, voidpf stream); long ZCALLBACK fseek_file_func ( voidpf opaque, voidpf stream, uLong offset, int origin); int ZCALLBACK fclose_file_func ( voidpf opaque, voidpf stream); int ZCALLBACK ferror_file_func ( voidpf opaque, voidpf stream); voidpf ZCALLBACK fopen_file_func (opaque, filename, mode) voidpf opaque; const char* filename; int mode; { FILE* file = NULL; const char* mode_fopen = NULL; if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) mode_fopen = "rb"; else if (mode & ZLIB_FILEFUNC_MODE_EXISTING) mode_fopen = "r+b"; else if (mode & ZLIB_FILEFUNC_MODE_CREATE) mode_fopen = "wb"; if ((filename!=NULL) && (mode_fopen != NULL)) file = fopen(filename, mode_fopen); return file; } uLong ZCALLBACK fread_file_func (opaque, stream, buf, size) voidpf opaque; voidpf stream; void* buf; uLong size; { uLong ret; ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); return ret; } uLong ZCALLBACK fwrite_file_func (opaque, stream, buf, size) voidpf opaque; voidpf stream; const void* buf; uLong size; { uLong ret; ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); return ret; } long ZCALLBACK ftell_file_func (opaque, stream) voidpf opaque; voidpf stream; { long ret; ret = ftell((FILE *)stream); return ret; } long ZCALLBACK fseek_file_func (opaque, stream, offset, origin) voidpf opaque; voidpf stream; uLong offset; int origin; { int fseek_origin=0; long ret; switch (origin) { case ZLIB_FILEFUNC_SEEK_CUR : fseek_origin = SEEK_CUR; break; case ZLIB_FILEFUNC_SEEK_END : fseek_origin = SEEK_END; break; case ZLIB_FILEFUNC_SEEK_SET : fseek_origin = SEEK_SET; break; default: return -1; } ret = 0; fseek((FILE *)stream, offset, fseek_origin); return ret; } int ZCALLBACK fclose_file_func (opaque, stream) voidpf opaque; voidpf stream; { int ret; ret = fclose((FILE *)stream); return ret; } int ZCALLBACK ferror_file_func (opaque, stream) voidpf opaque; voidpf stream; { int ret; ret = ferror((FILE *)stream); return ret; } void fill_fopen_filefunc (pzlib_filefunc_def) zlib_filefunc_def* pzlib_filefunc_def; { pzlib_filefunc_def->zopen_file = fopen_file_func; pzlib_filefunc_def->zread_file = fread_file_func; pzlib_filefunc_def->zwrite_file = fwrite_file_func; pzlib_filefunc_def->ztell_file = ftell_file_func; pzlib_filefunc_def->zseek_file = fseek_file_func; pzlib_filefunc_def->zclose_file = fclose_file_func; pzlib_filefunc_def->zerror_file = ferror_file_func; pzlib_filefunc_def->opaque = NULL; } assimp-3.0/CHANGES0000644002537200234200000000673111472233607014125 0ustar zmoelnigiemusers---------------------------------------------------------------------- CHANGELOG ---------------------------------------------------------------------- 2.0 (2010-11-21) FEATURES: - Add support for static Blender (*.blend) scenes - Add support for Q3BSP scenes - Add a windows-based OpenGL sample featuring texturing & basic materials - Add an experimental progress feedback interface. - Vastly improved performance (up to 500%, depending on mesh size and spatial structure) in some expensive postprocessing steps - AssimpView now uses a reworked layout which leaves more space to the scene hierarchy window - Add C# bindings ('Assimp.NET') - Keep BSD-licensed and otherwise free test files in separate folders (./test/models and ./test/models-nonbsd). FIXES: - Many Collada bugfixes, improve fault tolerance - Fix possible crashes in the Obj loader - Improve the Ogre XML loader - OpenGL-sample now works with MinGW - Fix Importer::FindLoader failing on uppercase file extensions - Fix flawed path handling when locating external files - Limit the maximum number of vertices, faces, face indices and weights that Assimp is able to handle. This is to avoid crashes due to overflowing counters. - Updated XCode project files - Further CMAKE build improvements API CHANGES: - Add data structures for vertex-based animations (These are not currently used, however ...) - Some Assimp::Importer methods are const now. 1.1 (2010-04-17) This is the list of relevant changes from the 1.0 (r412) release to 1.1 (r700). FEATURES: - Vastly improved Collada support - Add MS3D (Milkshape 3D) support - Add support for Ogre XML static meshes - Add experimental COB (TrueSpace) support - Automatic test suite to quickly locate regressions - D bindings (`dAssimp`) - Python 2.n bindings (`PyAssimp`) - Add basic support for Unicode input files (utf8, utf16 and utf32) - Add further utilities to the `assimp` tool (xml/binary dumps, quick file stats) - Switch to a CMAKE-based build system including an install target for unix'es - Automatic evaluation of subdivision surfaces for some formats. - Add `Importer::ReadFileFromMemory` and the corresponding C-API `aiReadFileFromMemory` - Expose further math utilities via the C-API (i.e. `aiMultiplyMatrix4`) - Move noboost files away from the public include directory - Many, many bugfixes and improvements in existing loaders and postprocessing steps - Documentation improved and clarified in many places. - Add a sample on using Assimp in conjunction with OpenGL - Distribution/packaging: comfortable SDK installer for Windows - Distribution/packaging: improved release packages for other architectures CRITICAL FIXES: - Resolve problems with clashing heap managers, STL ABIs and runtime libraries (win32) - Fix automatic detection of file type if no file extension is given - Improved exception safety and robustness, prevent leaking of exceptions through the C interface - Fix possible heap corruption due to material properties pulled in incorrectly - Avoid leaking in certain error scenarios - Fix 64 bit compatibility problems in some loaders (i.e. MDL) BREAKING API CHANGES: - None - MINOR API BEHAVIOUR CHANGES: - Change quaternion orientation to suit to the more common convention (-w). - aiString is utf8 now. Not yet consistent, however.assimp-3.0/AssimpBuildTreeSettings.cmake.in0000644002537200234200000000011311760750030021274 0ustar zmoelnigiemusersset(ASSIMP_INCLUDE_DIRS "@PROJECT_SOURCE_DIR@" "@PROJECT_BINARY_DIR@") assimp-3.0/CREDITS0000644002537200234200000000731711756253342014156 0ustar zmoelnigiemusers=============================================================== Open Asset Import Library (Assimp) Developers and Contributors =============================================================== The following is the list of all constributors. Thanks for your help! - Alexander Gessler, 3DS-, BLEND-, ASE-, DXF-, HMP-, MDL-, MD2-, MD3-, MD5-, MDC-, NFF-, PLY-, STL-, RAW-, OFF-, MS3D-, Q3D- and LWO-Loader, Assimp-Viewer, assimp-cmd, -noboost, Website (Admin and Design). - Thomas Schulze, X-, Collada-, BVH-Loader, Postprocessing framework. Data structure & Interface design, documentation. - Kim Kulling, Obj-Loader, Logging system, Scons-build environment, CMake build environment, Linux build. - R.Schmidt, Linux build, eclipse support. - Matthias Gubisch, Assimp.net Visual Studio 9 support, bugfixes. - Mark Sibly B3D-Loader, Assimp testing - Jonathan Klein Ogre Loader, VC2010 fixes and CMake fixes. - Sebastian Hempel, PyAssimp (first version) Compile-Bugfixes for mingw, add enviroment for static library support in make. - Jonathan Pokrass Supplied a bugfix concerning the scaling in the md3 loader. - Andrew Galante, Submitted patches to make Assimp compile with GCC-4, a makefile and the xcode3 workspace. - Andreas Nagel First Assimp testing & verification under Windows Vista 64 Bit. - Marius Schröder Allowed us to use many of his models for screenshots and testing. - Christian Schubert Supplied various XFiles for testing purposes. - Tizian Wieland Searched the web for hundreds of test models for internal use - John Connors Supplied patches for linux and SCons. - T. R. The GUY who performed some of the CSM mocaps. - Andy Maloney Contributed fixes for the documentation and the doxygen markup - Zhao Lei Contributed several bugfixes fixing memory leaks and improving float parsing - sueastside Updated PyAssimp to the latest Assimp data structures and provided a script to keep the Python binding up-to-date. - Tobias Rittig Collada testing with Cinema 4D - Brad Grantham Improvements in OpenGL-Sample. - Robert Ramirez Add group loading feature to Obj-Loader. - Chris Maiwald Many bugreports, improving Assimp's portability, regular testing & feedback. - Stepan Hrbek Bugreport and fix for a obj-materialloader crash. - David Nadlinger D bindings, CMake install support. - Dario Accornero Contributed several patches regarding Mac OS/XCode targets, bug reports. - Martin Walser (Samhayne) Contributed the 'SimpleTexturedOpenGl' sample. - Matthias Fauconneau Contributed a fix for the Q3-BSP loader. - Jørgen P. Tjernø Contributed updated and improved xcode workspaces - drparallax Contributed the /samples/SimpleAssimpViewX sample - Carsten Fuchs Contributed a fix for the Normalize method in aiQuaternion. - dbburgess Contributes a Android-specific build issue: log the hardware architecture for ARM. - alfiereinre7 Contributes a obj-fileparser fix: missing tokens in the obj-token list. - Roman Kharitonov Contributes a fix for the configure script environment. - Ed Diana Contributed AssimpDelphi (/port/AssimpDelphi). - rdb Contributes a bundle of fixes and improvments for the bsp-importer. - Mick P For contributing the De-bone postprocessing step and filing various bug reports. - Rosen Diankov Contributed patches to build assimp debian packages using cmake. - Mark Page Contributed a patch to fix the VertexTriangleAdjacency postprocessing step. - IOhannes Contributed the Debian build fixes ( architecture macro ). - gellule Several LWO and LWS fixes (pivoting). - Marcel Metz GCC/Linux fixes for the SimpleOpenGL sample. - Brian Miller Bugfix for a compiler fix for iOS on arm.assimp-3.0/ProjectHome.url0000644002537200234200000000010111557566063016067 0ustar zmoelnigiemusers[InternetShortcut] URL=http://sourceforge.net/projects/assimp/ assimp-3.0/AssimpConfigVersion.cmake.in0000644002537200234200000000057411760750030020462 0ustar zmoelnigiemusersset(PACKAGE_VERSION "@ASSIMP_SOVERSION@") # Check whether the requested PACKAGE_FIND_VERSION is compatible if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_COMPATIBLE FALSE) else() set(PACKAGE_VERSION_COMPATIBLE TRUE) if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_EXACT TRUE) endif() endif() assimp-3.0/scripts/0000755002537200234200000000000011770676611014621 5ustar zmoelnigiemusersassimp-3.0/scripts/OgreImporter/0000755002537200234200000000000011770676611017237 5ustar zmoelnigiemusersassimp-3.0/scripts/OgreImporter/assimp.tpl0000644002537200234200000000026311250504203021231 0ustar zmoelnigiemusers material %_materialName { set $specular %_specular set $diffuse %_diffuse set $ambient %_ambient set $colormap %color._texture set $normalmap %normal._texture } assimp-3.0/scripts/IFCImporter/0000755002537200234200000000000011770676611016744 5ustar zmoelnigiemusersassimp-3.0/scripts/IFCImporter/IFCReaderGen.cpp.template0000644002537200234200000000517211561105172023430 0ustar zmoelnigiemusers/* Open Asset Import Library (ASSIMP) ---------------------------------------------------------------------- Copyright (c) 2006-2010, ASSIMP Development Team All rights reserved. Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the ASSIMP team, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of the ASSIMP Development Team. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ /** MACHINE-GENERATED by scripts/ICFImporter/CppGenerator.py */ #include "AssimpPCH.h" #ifndef ASSIMP_BUILD_NO_IFC_IMPORTER #include "IFCReaderGen.h" namespace Assimp { using namespace IFC; namespace { typedef EXPRESS::ConversionSchema::SchemaEntry SchemaEntry; const SchemaEntry schema_raw[] = { {schema-static-table} }; } // ----------------------------------------------------------------------------------------------------------- void IFC::GetSchema(EXPRESS::ConversionSchema& out) { out = EXPRESS::ConversionSchema(schema_raw); } namespace STEP { // ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill(const STEP::DB& db, const LIST& params, NotImplemented* in) { return 0; } {converter-impl} } // ! STEP } // ! Assimp #endif assimp-3.0/scripts/IFCImporter/genentitylist.sh0000644002537200234200000000027211610433341022163 0ustar zmoelnigiemusers#!/bin/sh cd ../../code grep -E 'Ifc([A-Z][a-z]*)+' -o IFCLoader.cpp IFCGeometry.cpp IFCCurve.cpp IFCProfile.cpp IFCMaterial.cpp | uniq | sed s/.*:// > ../scripts/IFCImporter/output.txt assimp-3.0/scripts/IFCImporter/IFCReaderGen.h.template0000644002537200234200000000601111561105172023066 0ustar zmoelnigiemusers/* Open Asset Import Library (ASSIMP) ---------------------------------------------------------------------- Copyright (c) 2006-2010, ASSIMP Development Team All rights reserved. Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the ASSIMP team, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of the ASSIMP Development Team. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ /** MACHINE-GENERATED by scripts/ICFImporter/CppGenerator.py */ #ifndef INCLUDED_IFC_READER_GEN_H #define INCLUDED_IFC_READER_GEN_H #include "STEPFile.h" namespace Assimp { namespace IFC { using namespace STEP; using namespace STEP::EXPRESS; struct NotImplemented : public ObjectHelper { }; // ****************************************************************************** // IFC Custom data types // ****************************************************************************** {types} // ****************************************************************************** // IFC Entities // ****************************************************************************** {predefs} {entities} void GetSchema(EXPRESS::ConversionSchema& out); } //! IFC namespace STEP { // ****************************************************************************** // Converter stubs // ****************************************************************************** #define DECL_CONV_STUB(type) template <> size_t GenericFill(const STEP::DB& db, const EXPRESS::LIST& params, IFC::type* in) {converter-decl} #undef DECL_CONV_STUB } //! STEP } //! Assimp #endif // INCLUDED_IFC_READER_GEN_H assimp-3.0/scripts/IFCImporter/CppGenerator.py0000644002537200234200000002642611624027201021700 0ustar zmoelnigiemusers#!/usr/bin/env python3 # -*- Coding: UTF-8 -*- # --------------------------------------------------------------------------- # Open Asset Import Library (ASSIMP) # --------------------------------------------------------------------------- # # Copyright (c) 2006-2010, ASSIMP Development Team # # All rights reserved. # # Redistribution and use of this software in source and binary forms, # with or without modification, are permitted provided that the following # conditions are met: # # * Redistributions of source code must retain the above # copyright notice, this list of conditions and the # following disclaimer. # # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the # following disclaimer in the documentation and/or other # materials provided with the distribution. # # * Neither the name of the ASSIMP team, nor the names of its # contributors may be used to endorse or promote products # derived from this software without specific prior # written permission of the ASSIMP Development Team. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # --------------------------------------------------------------------------- """Generate the C++ glue code needed to map EXPRESS to C++""" import sys, os, re input_template_h = 'IFCReaderGen.h.template' input_template_cpp = 'IFCReaderGen.cpp.template' output_file_h = os.path.join('..','..','code','IFCReaderGen.h') output_file_cpp = os.path.join('..','..','code','IFCReaderGen.cpp') template_entity_predef = '\tstruct {entity};\n' template_entity_predef_ni = '\ttypedef NotImplemented {entity}; // (not currently used by Assimp)\n' template_entity = r""" // C++ wrapper for {entity} struct {entity} : {parent} ObjectHelper<{entity},{argcnt}> {{ {entity}() : Object("{entity}") {{}} {fields} }};""" template_entity_ni = '' template_type = r""" // C++ wrapper type for {type} typedef {real_type} {type};""" template_stub_decl = '\tDECL_CONV_STUB({type});\n' template_schema = '\t\tSchemaEntry("{normalized_name}",&STEP::ObjectHelper<{type},{argcnt}>::Construct )\n' template_schema_type = '\t\tSchemaEntry("{normalized_name}",NULL )\n' template_converter = r""" // ----------------------------------------------------------------------------------------------------------- template <> size_t GenericFill<{type}>(const DB& db, const LIST& params, {type}* in) {{ {contents} }}""" template_converter_prologue_a = '\tsize_t base = GenericFill(db,params,static_cast<{parent}*>(in));\n' template_converter_prologue_b = '\tsize_t base = 0;\n' template_converter_check_argcnt = '\tif (params.GetSize() < {max_arg}) {{ throw STEP::TypeError("expected {max_arg} arguments to {name}"); }}' template_converter_code_per_field = r""" do {{ // convert the '{fieldname}' argument boost::shared_ptr arg = params[base++];{handle_unset}{convert} }} while(0); """ template_allow_optional = r""" if (dynamic_cast(&*arg)) break;""" template_allow_derived = r""" if (dynamic_cast(&*arg)) {{ in->ObjectHelper::aux_is_derived[{argnum}]=true; break; }}""" template_convert_single = r""" try {{ GenericConvert( in->{name}, arg, db ); break; }} catch (const TypeError& t) {{ throw TypeError(t.what() + std::string(" - expected argument {argnum} to {classname} to be a `{full_type}`")); }}""" template_converter_omitted = '// this data structure is not used yet, so there is no code generated to fill its members\n' template_converter_epilogue = '\treturn base;' import ExpressReader def get_list_bounds(collection_spec): start,end = [(int(n) if n!='?' else 0) for n in re.findall(r'(\d+|\?)',collection_spec)] return start,end def get_cpp_type(field,schema): isobjref = field.type in schema.entities base = field.type if isobjref: base = 'Lazy< '+(base if base in schema.whitelist else 'NotImplemented')+' >' if field.collection: start,end = get_list_bounds(field.collection) base = 'ListOf< {0}, {1}, {2} >'.format(base,start,end) if not isobjref: base += '::Out' if field.optional: base = 'Maybe< '+base+' >' return base def generate_fields(entity,schema): fields = [] for e in entity.members: fields.append('\t\t{type} {name};'.format(type=get_cpp_type(e,schema),name=e.name)) return '\n'.join(fields) def handle_unset_args(field,entity,schema,argnum): n = '' # if someone derives from this class, check for derived fields. if any(entity.name==e.parent for e in schema.entities.values()): n += template_allow_derived.format(type=entity.name,argcnt=len(entity.members),argnum=argnum) if not field.optional: return n+'' return n+template_allow_optional.format() def get_single_conversion(field,schema,argnum=0,classname='?'): typen = field.type name = field.name if field.collection: typen = 'LIST' return template_convert_single.format(type=typen,name=name,argnum=argnum,classname=classname,full_type=field.fullspec) def count_args_up(entity,schema): return len(entity.members) + (count_args_up(schema.entities[entity.parent],schema) if entity.parent else 0) def resolve_base_type(base,schema): if base in ('INTEGER','REAL','STRING','ENUMERATION','BOOLEAN','NUMBER', 'SELECT','LOGICAL'): return base if base in schema.types: return resolve_base_type(schema.types[base].equals,schema) print(base) return None def gen_type_struct(typen,schema): base = resolve_base_type(typen.equals,schema) if not base: return '' if typen.aggregate: start,end = get_list_bounds(typen.aggregate) base = 'ListOf< {0}, {1}, {2} >'.format(base,start,end) return template_type.format(type=typen.name,real_type=base) def gen_converter(entity,schema): max_arg = count_args_up(entity,schema) arg_idx = arg_idx_ofs = max_arg - len(entity.members) code = template_converter_prologue_a.format(parent=entity.parent) if entity.parent else template_converter_prologue_b if entity.name in schema.blacklist_partial: return code+template_converter_omitted+template_converter_epilogue; if max_arg > 0: code +=template_converter_check_argcnt.format(max_arg=max_arg,name=entity.name) for field in entity.members: code += template_converter_code_per_field.format(fieldname=field.name, handle_unset=handle_unset_args(field,entity,schema,arg_idx-arg_idx_ofs), convert=get_single_conversion(field,schema,arg_idx,entity.name)) arg_idx += 1 return code+template_converter_epilogue def get_base_classes(e,schema): def addit(e,out): if e.parent: out.append(e.parent) addit(schema.entities[e.parent],out) res = [] addit(e,res) return list(reversed(res)) def get_derived(e,schema): def get_deriv(e,out): # bit slow, but doesn't matter here s = [ee for ee in schema.entities.values() if ee.parent == e.name] for sel in s: out.append(sel.name) get_deriv(sel,out) res = [] get_deriv(e,res) return res def get_hierarchy(e,schema): return get_derived(e.schema)+[e.name]+get_base_classes(e,schema) def sort_entity_list(schema): deps = [] entities = schema.entities for e in entities.values(): deps += get_base_classes(e,schema)+[e.name] checked = [] for e in deps: if e not in checked: checked.append(e) return [entities[e] for e in checked] def work(filename): schema = ExpressReader.read(filename,silent=True) entities, stub_decls, schema_table, converters, typedefs, predefs = '','',[],'','','' whitelist = [] with open('entitylist.txt', 'rt') as inp: whitelist = [n.strip() for n in inp.read().split('\n') if n[:1]!='#' and n.strip()] schema.whitelist = set() schema.blacklist_partial = set() for ename in whitelist: try: e = schema.entities[ename] except KeyError: # type, not entity continue for base in [e.name]+get_base_classes(e,schema): schema.whitelist.add(base) for base in get_derived(e,schema): schema.blacklist_partial.add(base) schema.blacklist_partial -= schema.whitelist schema.whitelist |= schema.blacklist_partial # uncomment this to disable automatic code reduction based on whitelisting all used entities # (blacklisted entities are those who are in the whitelist and may be instanced, but will # only be accessed through a pointer to a base-class. #schema.whitelist = set(schema.entities.keys()) #schema.blacklist_partial = set() for ntype in schema.types.values(): typedefs += gen_type_struct(ntype,schema) schema_table.append(template_schema_type.format(normalized_name=ntype.name.lower())) sorted_entities = sort_entity_list(schema) for entity in sorted_entities: parent = entity.parent+',' if entity.parent else '' if entity.name in schema.whitelist: converters += template_converter.format(type=entity.name,contents=gen_converter(entity,schema)) schema_table.append(template_schema.format(type=entity.name,normalized_name=entity.name.lower(),argcnt=len(entity.members))) entities += template_entity.format(entity=entity.name,argcnt=len(entity.members),parent=parent,fields=generate_fields(entity,schema)) predefs += template_entity_predef.format(entity=entity.name) stub_decls += template_stub_decl.format(type=entity.name) else: entities += template_entity_ni.format(entity=entity.name) predefs += template_entity_predef_ni.format(entity=entity.name) schema_table.append(template_schema.format(type="NotImplemented",normalized_name=entity.name.lower(),argcnt=0)) schema_table = ','.join(schema_table) with open(input_template_h,'rt') as inp: with open(output_file_h,'wt') as outp: # can't use format() here since the C++ code templates contain single, unescaped curly brackets outp.write(inp.read().replace('{predefs}',predefs).replace('{types}',typedefs).replace('{entities}',entities).replace('{converter-decl}',stub_decls)) with open(input_template_cpp,'rt') as inp: with open(output_file_cpp,'wt') as outp: outp.write(inp.read().replace('{schema-static-table}',schema_table).replace('{converter-impl}',converters)) if __name__ == "__main__": sys.exit(work(sys.argv[1] if len(sys.argv)>1 else 'schema.exp')) assimp-3.0/scripts/IFCImporter/ExpressReader.py0000644002537200234200000001121311610433545022056 0ustar zmoelnigiemusers#!/usr/bin/env python3 # -*- Coding: UTF-8 -*- # --------------------------------------------------------------------------- # Open Asset Import Library (ASSIMP) # --------------------------------------------------------------------------- # # Copyright (c) 2006-2010, ASSIMP Development Team # # All rights reserved. # # Redistribution and use of this software in source and binary forms, # with or without modification, are permitted provided that the following # conditions are met: # # * Redistributions of source code must retain the above # copyright notice, this list of conditions and the # following disclaimer. # # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the # following disclaimer in the documentation and/or other # materials provided with the distribution. # # * Neither the name of the ASSIMP team, nor the names of its # contributors may be used to endorse or promote products # derived from this software without specific prior # written permission of the ASSIMP Development Team. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # --------------------------------------------------------------------------- """Parse an EXPRESS file and extract basic information on all entities and data types contained""" import sys, os, re re_match_entity = re.compile(r""" ENTITY\s+(\w+)\s* # 'ENTITY foo' .*? # skip SUPERTYPE-of (?:SUBTYPE\s+OF\s+\((\w+)\))?; # 'SUBTYPE OF (bar);' or simply ';' (.*?) # 'a : atype;' (0 or more lines like this) (?:(?:INVERSE|UNIQUE|WHERE)\s*$.*?)? # skip the INVERSE, UNIQUE, WHERE clauses and everything behind END_ENTITY; """,re.VERBOSE|re.DOTALL|re.MULTILINE) re_match_type = re.compile(r""" TYPE\s+(\w+?)\s*=\s*((?:LIST|SET)\s*\[\d+:[\d?]+\]\s*OF)?(?:\s*UNIQUE)?\s*(\w+) # TYPE foo = LIST[1:2] of blub (?:(?<=ENUMERATION)\s*OF\s*\((.*?)\))? .*? # skip the WHERE clause END_TYPE; """,re.VERBOSE|re.DOTALL) re_match_field = re.compile(r""" \s+(\w+?)\s*:\s*(OPTIONAL)?\s*((?:LIST|SET)\s*\[\d+:[\d?]+\]\s*OF)?(?:\s*UNIQUE)?\s*(\w+?); """,re.VERBOSE|re.DOTALL) class Schema: def __init__(self): self.entities = {} self.types = {} class Entity: def __init__(self,name,parent,members): self.name = name self.parent = parent self.members = members class Field: def __init__(self,name,type,optional,collection): self.name = name self.type = type self.optional = optional self.collection = collection self.fullspec = (self.collection+' ' if self.collection else '') + self.type class Type: def __init__(self,name,aggregate,equals,enums): self.name = name self.aggregate = aggregate self.equals = equals self.enums = enums def read(filename,silent=False): schema = Schema() with open(filename,'rt') as inp: contents = inp.read() types = re.findall(re_match_type,contents) for name,aggregate,equals,enums in types: schema.types[name] = Type(name,aggregate,equals,enums) entities = re.findall(re_match_entity,contents) for name,parent,fields_raw in entities: print('process entity {0}, parent is {1}'.format(name,parent)) if not silent else None fields = re.findall(re_match_field,fields_raw) members = [Field(name,type,opt,coll) for name, opt, coll, type in fields] print(' got {0} fields'.format(len(members))) if not silent else None schema.entities[name] = Entity(name,parent,members) return schema if __name__ == "__main__": sys.exit(read(sys.argv[1] if len(sys.argv)>1 else 'schema.exp')) assimp-3.0/scripts/IFCImporter/entitylist.txt0000644002537200234200000000452011610433341021676 0ustar zmoelnigiemusers# ============================================================================== # List of IFC structures needed by Assimp # ============================================================================== # use genentitylist.sh to update this list # This machine-generated list is not complete, it lacks many intermediate # classes in the inheritance hierarchy. Those are magically augmented by the # code generator. Also, the names of all used entities need to be present # in the source code for this to work. IfcAnnotation IfcArbitraryClosedProfileDef IfcArbitraryOpenProfileDef IfcAxis1Placement IfcAxis2Placement IfcAxis2Placement2D IfcAxis2Placement3D IfcBooleanClippingResult IfcBooleanResult IfcBoundedCurve IfcBoundingBox IfcBSplineCurve IfcBuilding IfcCartesianPoint IfcCartesianTransformationOperator IfcCartesianTransformationOperator3D IfcCartesianTransformationOperator3DnonUniform IfcCircle IfcCircleHollowProfileDef IfcCircleProfileDef IfcClosedShell IfcColourOrFactor IfcColourRgb IfcCompositeCurve IfcCompositeCurveSegment IfcConic IfcConnectedFaceSet IfcConversionBasedUnit IfcCurve IfcDirection IfcDoor IfcEllipse IfcExtrudedAreaSolid IfcFace IfcFaceBasedSurfaceModel IfcFaceBound IfcFaceOuterBound IfcFeatureElementSubtraction IfcGeometricRepresentationContext IfcGeometricRepresentationItem IfcHalfSpaceSolid IfcLine IfcLocalPlacement IfcManifoldSolidBrep IfcMappedItem IfcMeasureWithUnit IfcNamedUnit IfcObjectDefinition IfcObjectPlacement IfcOpeningElement IfcParameterizedProfileDef IfcPlane IfcPolygonalBoundedHalfSpace IfcPolyline IfcPolyLoop IfcPresentationStyleAssignment IfcPresentationStyleSelect IfcProduct IfcProductRepresentation IfcProfileDef IfcProject IfcRectangleProfileDef IfcRelAggregates IfcRelContainedInSpatialStructure IfcRelFillsElement IfcRelVoidsElement IfcRepresentation IfcRepresentationContext IfcRepresentationItem IfcRepresentationMap IfcRevolvedAreaSolid IfcShell IfcShellBasedSurfaceModel IfcSite IfcSIUnit IfcSomething IfcSpace IfcSpatialStructureElement IfcSpatialStructureElements IfcStyledItem IfcSurfaceStyle IfcSurfaceStyleElementSelect IfcSurfaceStyleRendering IfcSurfaceStyleShading IfcSurfaceStyleWithTextures IfcSweptAreaSolid IfcTopologicalRepresentationItem IfcTrimmedCurve IfcUnit IfcUnitAssignment IfcVector assimp-3.0/scripts/BlenderImporter/0000755002537200234200000000000011770676611017716 5ustar zmoelnigiemusersassimp-3.0/scripts/BlenderImporter/BlenderScene.cpp.template0000644002537200234200000000411311371757140024556 0ustar zmoelnigiemusers/* Open Asset Import Library (ASSIMP) ---------------------------------------------------------------------- Copyright (c) 2006-2010, ASSIMP Development Team All rights reserved. Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the ASSIMP team, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of the ASSIMP Development Team. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ /** @file BlenderScene.cpp * @brief MACHINE GENERATED BY ./scripts/BlenderImporter/genblenddna.py */ #include "AssimpPCH.h" #ifndef AI_BUILD_NO_BLEND_IMPORTER #include "BlenderDNA.h" #include "BlenderScene.h" #include "BlenderSceneGen.h" using namespace Assimp; using namespace Assimp::Blender; #endif assimp-3.0/scripts/BlenderImporter/BlenderSceneGen.h.template0000644002537200234200000000400011371757140024650 0ustar zmoelnigiemusers/* Open Asset Import Library (ASSIMP) ---------------------------------------------------------------------- Copyright (c) 2006-2010, ASSIMP Development Team All rights reserved. Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the ASSIMP team, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of the ASSIMP Development Team. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ /** @file BlenderSceneGen.h * @brief MACHINE GENERATED BY ./scripts/BlenderImporter/genblenddna.py */ #ifndef INCLUDED_AI_BLEND_SCENEGEN_H #define INCLUDED_AI_BLEND_SCENEGEN_H namespace Assimp { namespace Blender { } } #endif assimp-3.0/scripts/BlenderImporter/genblenddna.py0000644002537200234200000002122511734435205022523 0ustar zmoelnigiemusers#!/usr/bin/env python3 # -*- Coding: UTF-8 -*- # --------------------------------------------------------------------------- # Open Asset Import Library (ASSIMP) # --------------------------------------------------------------------------- # # Copyright (c) 2006-2010, ASSIMP Development Team # # All rights reserved. # # Redistribution and use of this software in source and binary forms, # with or without modification, are permitted provided that the following # conditions are met: # # * Redistributions of source code must retain the above # copyright notice, this list of conditions and the # following disclaimer. # # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the # following disclaimer in the documentation and/or other # materials provided with the distribution. # # * Neither the name of the ASSIMP team, nor the names of its # contributors may be used to endorse or promote products # derived from this software without specific prior # written permission of the ASSIMP Development Team. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # --------------------------------------------------------------------------- """Generate BlenderSceneGen.h and BlenderScene.cpp from the data structures in BlenderScene.h to map from *any* DNA to *our* DNA""" import sys import os import re inputfile = os.path.join("..","..","code","BlenderScene.h") outputfile_gen = os.path.join("..","..","code","BlenderSceneGen.h") outputfile_src = os.path.join("..","..","code","BlenderScene.cpp") template_gen = "BlenderSceneGen.h.template" template_src = "BlenderScene.cpp.template" Structure_Convert_decl = """ template <> void Structure :: Convert<{a}> ( {a}& dest, const FileDatabase& db ) const """ Structure_Convert_ptrdecl = """ ReadFieldPtr<{policy}>({destcast}dest.{name_canonical},"{name_dna}",db);""" Structure_Convert_rawptrdecl = """ {{ boost::shared_ptr<{type}> {name_canonical}; ReadFieldPtr<{policy}>({destcast}{name_canonical},"{name_dna}",db); dest.{name_canonical} = {name_canonical}.get(); }}""" Structure_Convert_arraydecl = """ ReadFieldArray<{policy}>({destcast}dest.{name_canonical},"{name_dna}",db);""" Structure_Convert_arraydecl2d = """ ReadFieldArray2<{policy}>({destcast}dest.{name_canonical},"{name_dna}",db);""" Structure_Convert_normal = """ ReadField<{policy}>({destcast}dest.{name_canonical},"{name_dna}",db);""" DNA_RegisterConverters_decl = """ void DNA::RegisterConverters() """ DNA_RegisterConverters_add = """ converters["{a}"] = DNA::FactoryPair( &Structure::Allocate<{a}>, &Structure::Convert<{a}> );""" map_policy = { "" : "ErrorPolicy_Igno" ,"IGNO" : "ErrorPolicy_Igno" ,"WARN" : "ErrorPolicy_Warn" ,"FAIL" : "ErrorPolicy_Fail" } # def main(): # ----------------------------------------------------------------------- # Parse structure definitions from BlenderScene.h input = open(inputfile,"rt").read() flags = re.ASCII|re.DOTALL|re.MULTILINE #stripcoms = re.compile(r"/\*(.*?)*\/",flags) getstruct = re.compile(r"struct\s+(\w+?)\s*(:\s*ElemBase)?\s*\{(.*?)^\}\s*;",flags) getsmartx = re.compile(r"(std\s*::\s*)?(vector)\s*<\s*(boost\s*::\s*)?shared_(ptr)\s*<\s*(\w+)\s*>\s*>\s*",flags) getsmartp = re.compile(r"(boost\s*::\s*)?shared_(ptr)\s*<\s*(\w+)\s*>\s*",flags) getrawp = re.compile(r"(\w+)\s*\*\s*",flags) getsmarta = re.compile(r"(std\s*::\s*)?(vector)\s*<\s*(\w+)\s*>\s*",flags) getpolicy = re.compile(r"\s*(WARN|FAIL|IGNO)",flags) stripenum = re.compile(r"enum\s+(\w+)\s*{.*?\}\s*;",flags) assert getsmartx and getsmartp and getsmarta and getrawp and getpolicy and stripenum enums = set() #re.sub(stripcoms," ",input) #print(input) hits = {} while 1: match = re.search(getstruct,input) if match is None: break tmp = match.groups()[2] while 1: match2 = re.search(stripenum,tmp) if match2 is None: break tmp = tmp[match2.end():] enums.add(match2.groups()[0]) hits[match.groups()[0]] = list( filter(lambda x:x[:2] != "//" and len(x), map(str.strip, re.sub(stripenum," ",match.groups()[2]).split(";") ))) input = input[match.end():] [print ("Enum: "+e) for e in enums] for k,v in hits.items(): out = [] for line in v: policy = "IGNO" py = re.search(getpolicy,line) if not py is None: policy = py.groups()[0] line = re.sub(getpolicy,"",line) ty = re.match(getsmartx,line) or re.match(getsmartp,line) or\ re.match(getsmarta,line) or re.match(getrawp,line) if ty is None: ty = line.split(None,1)[0] else: if len(ty.groups()) == 1: ty = ty.groups()[-1] + "$" elif ty.groups()[1] == "ptr": ty = ty.groups()[2] + "*" elif ty.groups()[1] == "vector": ty = ty.groups()[-1] + ("*" if len(ty.groups()) == 3 else "**") else: assert False #print(line) sp = line.split(',') out.append((ty,sp[0].split(None)[-1].strip(),policy)) for m in sp[1:]: out.append((ty,m.strip(),policy)) v[:] = out print("Structure {0}".format(k)) [print("\t"+"\t".join(elem)) for elem in out] print("") output = open(outputfile_gen,"wt") templt = open(template_gen,"rt").read() s = "" # ----------------------------------------------------------------------- # Structure::Convert declarations for all supported structures for k,v in hits.items(): s += Structure_Convert_decl.format(a=k)+";\n"; output.write(templt.replace("",s)) output = open(outputfile_src,"wt") templt = open(template_src,"rt").read() s = "" # ----------------------------------------------------------------------- # Structure::Convert definitions for all supported structures for k,v in hits.items(): s += "//" + "-"*80 + Structure_Convert_decl.format(a=k)+ "{ \n"; for type, name, policy in v: splits = name.split("[",1) name_canonical = splits[0] #array_part = "" if len(splits)==1 else "["+splits[1] is_raw_ptr = not not type.count("$") ptr_decl = "*"*(type.count("*") + (1 if is_raw_ptr else 0)) name_dna = ptr_decl+name_canonical #+array_part #required = "false" policy = map_policy[policy] destcast = "(int&)" if type in enums else "" # POINTER if is_raw_ptr: type = type.replace('$','') s += Structure_Convert_rawptrdecl.format(**locals()) elif ptr_decl: s += Structure_Convert_ptrdecl.format(**locals()) # ARRAY MEMBER elif name.count('[')==1: s += Structure_Convert_arraydecl.format(**locals()) elif name.count('[')==2: s += Structure_Convert_arraydecl2d.format(**locals()) # NORMAL MEMBER else: s += Structure_Convert_normal.format(**locals()) s += "\n\n\tdb.reader->IncPtr(size);\n}\n\n" # ----------------------------------------------------------------------- # DNA::RegisterConverters - collect all available converter functions # in a std::map #s += "#if 0\n" s += "//" + "-"*80 + DNA_RegisterConverters_decl + "{\n" for k,v in hits.items(): s += DNA_RegisterConverters_add.format(a=k) s += "\n}\n" #s += "#endif\n" output.write(templt.replace("",s)) if __name__ == "__main__": sys.exit(main()) assimp-3.0/workspaces/0000755002537200234200000000000011770676611015313 5ustar zmoelnigiemusersassimp-3.0/workspaces/xcode3/0000755002537200234200000000000011770676611016500 5ustar zmoelnigiemusersassimp-3.0/workspaces/xcode3/info.txt0000644002537200234200000000060411656216526020172 0ustar zmoelnigiemusersThe xcode project files in this directory are contributed by Andy Maloney and are not continuously updated. Currently, it's for Assimp r352. If you're using a newer revision, watch out for missing files/includes/... See Andy's description at http://sourceforge.net/tracker/index.php?func=detail&aid=2659135&group_id=226462&atid=1067634 (Tracker item 2659135) for more information. assimp-3.0/workspaces/xcode3/assimp.xcodeproj/0000755002537200234200000000000011770676611021770 5ustar zmoelnigiemusersassimp-3.0/workspaces/xcode3/assimp.xcodeproj/project.pbxproj0000644002537200234200000144254011745111671025046 0ustar zmoelnigiemusers// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 44; objects = { /* Begin PBXBuildFile section */ 3AB8A3AF0E50D67A00606590 /* MDCFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */; }; 3AB8A3B00E50D67A00606590 /* MDCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */; }; 3AB8A3B10E50D67A00606590 /* MDCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */; }; 3AB8A3B20E50D67A00606590 /* MDCNormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */; }; 3AB8A3B50E50D69D00606590 /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */; }; 3AB8A3B60E50D69D00606590 /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */; }; 3AB8A3BA0E50D6DB00606590 /* LWOFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */; }; 3AB8A3BB0E50D6DB00606590 /* LWOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */; }; 3AB8A3BC0E50D6DB00606590 /* LWOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */; }; 3AB8A3C40E50D74500606590 /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */; }; 3AB8A3C60E50D77900606590 /* HMPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C50E50D77900606590 /* HMPFileData.h */; }; 3AB8A3CA0E50D7CC00606590 /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C90E50D7CC00606590 /* IFF.h */; }; 3AB8A3CD0E50D7FF00606590 /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3CB0E50D7FF00606590 /* Hash.h */; }; 3AB8A7DD0E53715F00606590 /* LWOMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */; }; 3AF45AF90E4B716800207D74 /* 3DSConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */; }; 3AF45AFB0E4B716800207D74 /* 3DSHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A880E4B716800207D74 /* 3DSHelper.h */; }; 3AF45AFC0E4B716800207D74 /* 3DSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A890E4B716800207D74 /* 3DSLoader.cpp */; }; 3AF45AFD0E4B716800207D74 /* 3DSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8A0E4B716800207D74 /* 3DSLoader.h */; }; 3AF45B010E4B716800207D74 /* ASELoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A8E0E4B716800207D74 /* ASELoader.cpp */; }; 3AF45B020E4B716800207D74 /* ASELoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8F0E4B716800207D74 /* ASELoader.h */; }; 3AF45B030E4B716800207D74 /* ASEParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A900E4B716800207D74 /* ASEParser.cpp */; }; 3AF45B040E4B716800207D74 /* ASEParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A910E4B716800207D74 /* ASEParser.h */; }; 3AF45B050E4B716800207D74 /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A920E4B716800207D74 /* Assimp.cpp */; }; 3AF45B060E4B716800207D74 /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A930E4B716800207D74 /* BaseImporter.cpp */; }; 3AF45B070E4B716800207D74 /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A940E4B716800207D74 /* BaseImporter.h */; }; 3AF45B080E4B716800207D74 /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A950E4B716800207D74 /* BaseProcess.h */; }; 3AF45B090E4B716800207D74 /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A960E4B716800207D74 /* ByteSwap.h */; }; 3AF45B0A0E4B716800207D74 /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */; }; 3AF45B0B0E4B716800207D74 /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */; }; 3AF45B0C0E4B716800207D74 /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */; }; 3AF45B0D0E4B716800207D74 /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */; }; 3AF45B0E0E4B716800207D74 /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */; }; 3AF45B0F0E4B716800207D74 /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */; }; 3AF45B100E4B716800207D74 /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */; }; 3AF45B110E4B716800207D74 /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */; }; 3AF45B120E4B716800207D74 /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */; }; 3AF45B150E4B716800207D74 /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA30E4B716800207D74 /* fast_atof.h */; }; 3AF45B160E4B716800207D74 /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA40E4B716800207D74 /* FileLogStream.h */; }; 3AF45B170E4B716800207D74 /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */; }; 3AF45B180E4B716800207D74 /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */; }; 3AF45B190E4B716800207D74 /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */; }; 3AF45B1A0E4B716800207D74 /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */; }; 3AF45B1B0E4B716800207D74 /* HalfLifeFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */; }; 3AF45B1D0E4B716800207D74 /* HMPLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */; }; 3AF45B1E0E4B716800207D74 /* HMPLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAC0E4B716800207D74 /* HMPLoader.h */; }; 3AF45B1F0E4B716800207D74 /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAD0E4B716800207D74 /* Importer.cpp */; }; 3AF45B200E4B716800207D74 /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */; }; 3AF45B210E4B716800207D74 /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */; }; 3AF45B220E4B716800207D74 /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */; }; 3AF45B230E4B716800207D74 /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */; }; 3AF45B260E4B716800207D74 /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */; }; 3AF45B270E4B716800207D74 /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */; }; 3AF45B280E4B716800207D74 /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */; }; 3AF45B290E4B716800207D74 /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB70E4B716800207D74 /* MaterialSystem.h */; }; 3AF45B2A0E4B716800207D74 /* MD2FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB80E4B716800207D74 /* MD2FileData.h */; }; 3AF45B2B0E4B716800207D74 /* MD2Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */; }; 3AF45B2C0E4B716800207D74 /* MD2Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABA0E4B716800207D74 /* MD2Loader.h */; }; 3AF45B2D0E4B716800207D74 /* MD2NormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABB0E4B716800207D74 /* MD2NormalTable.h */; }; 3AF45B2E0E4B716800207D74 /* MD3FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABC0E4B716800207D74 /* MD3FileData.h */; }; 3AF45B2F0E4B716800207D74 /* MD3Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ABD0E4B716800207D74 /* MD3Loader.cpp */; }; 3AF45B300E4B716800207D74 /* MD3Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABE0E4B716800207D74 /* MD3Loader.h */; }; 3AF45B340E4B716800207D74 /* MD5Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC20E4B716800207D74 /* MD5Loader.cpp */; }; 3AF45B350E4B716800207D74 /* MD5Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC30E4B716800207D74 /* MD5Loader.h */; }; 3AF45B360E4B716800207D74 /* MD5Parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC40E4B716800207D74 /* MD5Parser.cpp */; }; 3AF45B370E4B716800207D74 /* MD5Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC50E4B716800207D74 /* MD5Parser.h */; }; 3AF45B380E4B716800207D74 /* MDLDefaultColorMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC60E4B716800207D74 /* MDLDefaultColorMap.h */; }; 3AF45B390E4B716800207D74 /* MDLFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC70E4B716800207D74 /* MDLFileData.h */; }; 3AF45B3A0E4B716800207D74 /* MDLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */; }; 3AF45B3B0E4B716800207D74 /* MDLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC90E4B716800207D74 /* MDLLoader.h */; }; 3AF45B3C0E4B716800207D74 /* MDLMaterialLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */; }; 3AF45B3D0E4B716800207D74 /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACB0E4B716800207D74 /* ObjFileData.h */; }; 3AF45B3E0E4B716800207D74 /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */; }; 3AF45B3F0E4B716800207D74 /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */; }; 3AF45B400E4B716800207D74 /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */; }; 3AF45B410E4B716800207D74 /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */; }; 3AF45B420E4B716800207D74 /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */; }; 3AF45B430E4B716800207D74 /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD10E4B716800207D74 /* ObjFileParser.h */; }; 3AF45B440E4B716800207D74 /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD20E4B716800207D74 /* ObjTools.h */; }; 3AF45B450E4B716800207D74 /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD30E4B716800207D74 /* ParsingUtils.h */; }; 3AF45B460E4B716800207D74 /* PlyLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */; }; 3AF45B470E4B716800207D74 /* PlyLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD50E4B716800207D74 /* PlyLoader.h */; }; 3AF45B480E4B716800207D74 /* PlyParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD60E4B716800207D74 /* PlyParser.cpp */; }; 3AF45B490E4B716800207D74 /* PlyParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD70E4B716800207D74 /* PlyParser.h */; }; 3AF45B4A0E4B716800207D74 /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */; }; 3AF45B4B0E4B716800207D74 /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD90E4B716800207D74 /* PretransformVertices.h */; }; 3AF45B4C0E4B716800207D74 /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADA0E4B716800207D74 /* qnan.h */; }; 3AF45B4D0E4B716800207D74 /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */; }; 3AF45B4E0E4B716800207D74 /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADC0E4B716800207D74 /* RemoveComments.h */; }; 3AF45B4F0E4B716800207D74 /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */; }; 3AF45B500E4B716800207D74 /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */; }; 3AF45B520E4B716800207D74 /* SMDLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */; }; 3AF45B530E4B716800207D74 /* SMDLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE30E4B716800207D74 /* SMDLoader.h */; }; 3AF45B540E4B716800207D74 /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */; }; 3AF45B550E4B716800207D74 /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE50E4B716800207D74 /* SpatialSort.h */; }; 3AF45B560E4B716800207D74 /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */; }; 3AF45B570E4B716800207D74 /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */; }; 3AF45B580E4B716800207D74 /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE80E4B716800207D74 /* STLLoader.cpp */; }; 3AF45B590E4B716800207D74 /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE90E4B716800207D74 /* STLLoader.h */; }; 3AF45B5A0E4B716800207D74 /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEA0E4B716800207D74 /* StringComparison.h */; }; 3AF45B5B0E4B716800207D74 /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */; }; 3AF45B5C0E4B716800207D74 /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEC0E4B716800207D74 /* TextureTransform.h */; }; 3AF45B5D0E4B716800207D74 /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */; }; 3AF45B5E0E4B716800207D74 /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */; }; 3AF45B5F0E4B716800207D74 /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */; }; 3AF45B600E4B716800207D74 /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */; }; 3AF45B610E4B716800207D74 /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */; }; 3AF45B620E4B716800207D74 /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */; }; 3AF45B630E4B716800207D74 /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */; }; 3AF45B640E4B716800207D74 /* XFileHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF40E4B716800207D74 /* XFileHelper.h */; }; 3AF45B650E4B716800207D74 /* XFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */; }; 3AF45B660E4B716800207D74 /* XFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF60E4B716800207D74 /* XFileImporter.h */; }; 3AF45B670E4B716800207D74 /* XFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF70E4B716800207D74 /* XFileParser.cpp */; }; 3AF45B680E4B716800207D74 /* XFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF80E4B716800207D74 /* XFileParser.h */; }; 7411B15011416D5E00BCD793 /* CSMLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B14E11416D5E00BCD793 /* CSMLoader.cpp */; }; 7411B15111416D5E00BCD793 /* CSMLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B14F11416D5E00BCD793 /* CSMLoader.h */; }; 7411B15211416D5E00BCD793 /* CSMLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B14E11416D5E00BCD793 /* CSMLoader.cpp */; }; 7411B15311416D5E00BCD793 /* CSMLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B14F11416D5E00BCD793 /* CSMLoader.h */; }; 7411B15411416D5E00BCD793 /* CSMLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B14E11416D5E00BCD793 /* CSMLoader.cpp */; }; 7411B15511416D5E00BCD793 /* CSMLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B14F11416D5E00BCD793 /* CSMLoader.h */; }; 7411B15611416D5E00BCD793 /* CSMLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B14E11416D5E00BCD793 /* CSMLoader.cpp */; }; 7411B15711416D5E00BCD793 /* CSMLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B14F11416D5E00BCD793 /* CSMLoader.h */; }; 7411B15B11416DDD00BCD793 /* LWSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B15911416DDD00BCD793 /* LWSLoader.cpp */; }; 7411B15C11416DDD00BCD793 /* LWSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B15A11416DDD00BCD793 /* LWSLoader.h */; }; 7411B15D11416DDD00BCD793 /* LWSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B15911416DDD00BCD793 /* LWSLoader.cpp */; }; 7411B15E11416DDD00BCD793 /* LWSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B15A11416DDD00BCD793 /* LWSLoader.h */; }; 7411B15F11416DDD00BCD793 /* LWSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B15911416DDD00BCD793 /* LWSLoader.cpp */; }; 7411B16011416DDD00BCD793 /* LWSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B15A11416DDD00BCD793 /* LWSLoader.h */; }; 7411B16111416DDD00BCD793 /* LWSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B15911416DDD00BCD793 /* LWSLoader.cpp */; }; 7411B16211416DDD00BCD793 /* LWSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B15A11416DDD00BCD793 /* LWSLoader.h */; }; 7411B16511416DF400BCD793 /* LWOAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B16311416DF400BCD793 /* LWOAnimation.cpp */; }; 7411B16611416DF400BCD793 /* LWOAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B16411416DF400BCD793 /* LWOAnimation.h */; }; 7411B16711416DF400BCD793 /* LWOAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B16311416DF400BCD793 /* LWOAnimation.cpp */; }; 7411B16811416DF400BCD793 /* LWOAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B16411416DF400BCD793 /* LWOAnimation.h */; }; 7411B16911416DF400BCD793 /* LWOAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B16311416DF400BCD793 /* LWOAnimation.cpp */; }; 7411B16A11416DF400BCD793 /* LWOAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B16411416DF400BCD793 /* LWOAnimation.h */; }; 7411B16B11416DF400BCD793 /* LWOAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B16311416DF400BCD793 /* LWOAnimation.cpp */; }; 7411B16C11416DF400BCD793 /* LWOAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B16411416DF400BCD793 /* LWOAnimation.h */; }; 7411B17211416E2500BCD793 /* MS3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B17011416E2500BCD793 /* MS3DLoader.cpp */; }; 7411B17311416E2500BCD793 /* MS3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B17111416E2500BCD793 /* MS3DLoader.h */; }; 7411B17411416E2500BCD793 /* MS3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B17011416E2500BCD793 /* MS3DLoader.cpp */; }; 7411B17511416E2500BCD793 /* MS3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B17111416E2500BCD793 /* MS3DLoader.h */; }; 7411B17611416E2500BCD793 /* MS3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B17011416E2500BCD793 /* MS3DLoader.cpp */; }; 7411B17711416E2500BCD793 /* MS3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B17111416E2500BCD793 /* MS3DLoader.h */; }; 7411B17811416E2500BCD793 /* MS3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B17011416E2500BCD793 /* MS3DLoader.cpp */; }; 7411B17911416E2500BCD793 /* MS3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B17111416E2500BCD793 /* MS3DLoader.h */; }; 7411B18D11416EBC00BCD793 /* UnrealLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B18B11416EBC00BCD793 /* UnrealLoader.cpp */; }; 7411B18E11416EBC00BCD793 /* UnrealLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B18C11416EBC00BCD793 /* UnrealLoader.h */; }; 7411B18F11416EBC00BCD793 /* UnrealLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B18B11416EBC00BCD793 /* UnrealLoader.cpp */; }; 7411B19011416EBC00BCD793 /* UnrealLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B18C11416EBC00BCD793 /* UnrealLoader.h */; }; 7411B19111416EBC00BCD793 /* UnrealLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B18B11416EBC00BCD793 /* UnrealLoader.cpp */; }; 7411B19211416EBC00BCD793 /* UnrealLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B18C11416EBC00BCD793 /* UnrealLoader.h */; }; 7411B19311416EBC00BCD793 /* UnrealLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B18B11416EBC00BCD793 /* UnrealLoader.cpp */; }; 7411B19411416EBC00BCD793 /* UnrealLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B18C11416EBC00BCD793 /* UnrealLoader.h */; }; 7411B1A611416EF400BCD793 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19711416EF400BCD793 /* FileSystemFilter.h */; }; 7411B1A711416EF400BCD793 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19811416EF400BCD793 /* GenericProperty.h */; }; 7411B1A811416EF400BCD793 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */; }; 7411B1A911416EF400BCD793 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */; }; 7411B1AA11416EF400BCD793 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19B11416EF400BCD793 /* OptimizeGraph.h */; }; 7411B1AB11416EF400BCD793 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */; }; 7411B1AC11416EF400BCD793 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */; }; 7411B1AD11416EF400BCD793 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19E11416EF400BCD793 /* ProcessHelper.h */; }; 7411B1AE11416EF400BCD793 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */; }; 7411B1AF11416EF400BCD793 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A011416EF400BCD793 /* StreamReader.h */; }; 7411B1B011416EF400BCD793 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A111416EF400BCD793 /* Subdivision.cpp */; }; 7411B1B111416EF400BCD793 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A211416EF400BCD793 /* Subdivision.h */; }; 7411B1B211416EF400BCD793 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */; }; 7411B1B311416EF400BCD793 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A411416EF400BCD793 /* TargetAnimation.h */; }; 7411B1B411416EF400BCD793 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A511416EF400BCD793 /* Vertex.h */; }; 7411B1B511416EF400BCD793 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19711416EF400BCD793 /* FileSystemFilter.h */; }; 7411B1B611416EF400BCD793 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19811416EF400BCD793 /* GenericProperty.h */; }; 7411B1B711416EF400BCD793 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */; }; 7411B1B811416EF400BCD793 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */; }; 7411B1B911416EF400BCD793 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19B11416EF400BCD793 /* OptimizeGraph.h */; }; 7411B1BA11416EF400BCD793 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */; }; 7411B1BB11416EF400BCD793 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */; }; 7411B1BC11416EF400BCD793 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19E11416EF400BCD793 /* ProcessHelper.h */; }; 7411B1BD11416EF400BCD793 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */; }; 7411B1BE11416EF400BCD793 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A011416EF400BCD793 /* StreamReader.h */; }; 7411B1BF11416EF400BCD793 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A111416EF400BCD793 /* Subdivision.cpp */; }; 7411B1C011416EF400BCD793 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A211416EF400BCD793 /* Subdivision.h */; }; 7411B1C111416EF400BCD793 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */; }; 7411B1C211416EF400BCD793 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A411416EF400BCD793 /* TargetAnimation.h */; }; 7411B1C311416EF400BCD793 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A511416EF400BCD793 /* Vertex.h */; }; 7411B1C411416EF400BCD793 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19711416EF400BCD793 /* FileSystemFilter.h */; }; 7411B1C511416EF400BCD793 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19811416EF400BCD793 /* GenericProperty.h */; }; 7411B1C611416EF400BCD793 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */; }; 7411B1C711416EF400BCD793 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */; }; 7411B1C811416EF400BCD793 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19B11416EF400BCD793 /* OptimizeGraph.h */; }; 7411B1C911416EF400BCD793 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */; }; 7411B1CA11416EF400BCD793 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */; }; 7411B1CB11416EF400BCD793 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19E11416EF400BCD793 /* ProcessHelper.h */; }; 7411B1CC11416EF400BCD793 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */; }; 7411B1CD11416EF400BCD793 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A011416EF400BCD793 /* StreamReader.h */; }; 7411B1CE11416EF400BCD793 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A111416EF400BCD793 /* Subdivision.cpp */; }; 7411B1CF11416EF400BCD793 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A211416EF400BCD793 /* Subdivision.h */; }; 7411B1D011416EF400BCD793 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */; }; 7411B1D111416EF400BCD793 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A411416EF400BCD793 /* TargetAnimation.h */; }; 7411B1D211416EF400BCD793 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A511416EF400BCD793 /* Vertex.h */; }; 7411B1D311416EF400BCD793 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19711416EF400BCD793 /* FileSystemFilter.h */; }; 7411B1D411416EF400BCD793 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19811416EF400BCD793 /* GenericProperty.h */; }; 7411B1D511416EF400BCD793 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */; }; 7411B1D611416EF400BCD793 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */; }; 7411B1D711416EF400BCD793 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19B11416EF400BCD793 /* OptimizeGraph.h */; }; 7411B1D811416EF400BCD793 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */; }; 7411B1D911416EF400BCD793 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */; }; 7411B1DA11416EF400BCD793 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19E11416EF400BCD793 /* ProcessHelper.h */; }; 7411B1DB11416EF400BCD793 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */; }; 7411B1DC11416EF400BCD793 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A011416EF400BCD793 /* StreamReader.h */; }; 7411B1DD11416EF400BCD793 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A111416EF400BCD793 /* Subdivision.cpp */; }; 7411B1DE11416EF400BCD793 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A211416EF400BCD793 /* Subdivision.h */; }; 7411B1DF11416EF400BCD793 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */; }; 7411B1E011416EF400BCD793 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A411416EF400BCD793 /* TargetAnimation.h */; }; 7411B1E111416EF400BCD793 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A511416EF400BCD793 /* Vertex.h */; }; 7437C959113F18C70067B9B9 /* foreach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C950113F18C70067B9B9 /* foreach.hpp */; }; 7437C95A113F18C70067B9B9 /* format.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C951113F18C70067B9B9 /* format.hpp */; }; 7437C95B113F18C70067B9B9 /* common_factor_rt.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C953113F18C70067B9B9 /* common_factor_rt.hpp */; }; 7437C95C113F18C70067B9B9 /* scoped_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C954113F18C70067B9B9 /* scoped_array.hpp */; }; 7437C95D113F18C70067B9B9 /* scoped_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C955113F18C70067B9B9 /* scoped_ptr.hpp */; }; 7437C95E113F18C70067B9B9 /* static_assert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C956113F18C70067B9B9 /* static_assert.hpp */; }; 7437C95F113F18C70067B9B9 /* tuple.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C958113F18C70067B9B9 /* tuple.hpp */; }; 7437C960113F18C70067B9B9 /* foreach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C950113F18C70067B9B9 /* foreach.hpp */; }; 7437C961113F18C70067B9B9 /* format.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C951113F18C70067B9B9 /* format.hpp */; }; 7437C962113F18C70067B9B9 /* common_factor_rt.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C953113F18C70067B9B9 /* common_factor_rt.hpp */; }; 7437C963113F18C70067B9B9 /* scoped_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C954113F18C70067B9B9 /* scoped_array.hpp */; }; 7437C964113F18C70067B9B9 /* scoped_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C955113F18C70067B9B9 /* scoped_ptr.hpp */; }; 7437C965113F18C70067B9B9 /* static_assert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C956113F18C70067B9B9 /* static_assert.hpp */; }; 7437C966113F18C70067B9B9 /* tuple.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C958113F18C70067B9B9 /* tuple.hpp */; }; 745FF840113ECB080020C31B /* 3DSHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A880E4B716800207D74 /* 3DSHelper.h */; }; 745FF841113ECB080020C31B /* 3DSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8A0E4B716800207D74 /* 3DSLoader.h */; }; 745FF842113ECB080020C31B /* ASELoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8F0E4B716800207D74 /* ASELoader.h */; }; 745FF843113ECB080020C31B /* ASEParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A910E4B716800207D74 /* ASEParser.h */; }; 745FF844113ECB080020C31B /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A940E4B716800207D74 /* BaseImporter.h */; }; 745FF845113ECB080020C31B /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A950E4B716800207D74 /* BaseProcess.h */; }; 745FF846113ECB080020C31B /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A960E4B716800207D74 /* ByteSwap.h */; }; 745FF847113ECB080020C31B /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */; }; 745FF848113ECB080020C31B /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */; }; 745FF849113ECB080020C31B /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */; }; 745FF84A113ECB080020C31B /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */; }; 745FF84C113ECB080020C31B /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA30E4B716800207D74 /* fast_atof.h */; }; 745FF84D113ECB080020C31B /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA40E4B716800207D74 /* FileLogStream.h */; }; 745FF84E113ECB080020C31B /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */; }; 745FF84F113ECB080020C31B /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */; }; 745FF850113ECB080020C31B /* HalfLifeFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */; }; 745FF851113ECB080020C31B /* HMPLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAC0E4B716800207D74 /* HMPLoader.h */; }; 745FF852113ECB080020C31B /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */; }; 745FF853113ECB080020C31B /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */; }; 745FF854113ECB080020C31B /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */; }; 745FF855113ECB080020C31B /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB70E4B716800207D74 /* MaterialSystem.h */; }; 745FF856113ECB080020C31B /* MD2FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB80E4B716800207D74 /* MD2FileData.h */; }; 745FF857113ECB080020C31B /* MD2Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABA0E4B716800207D74 /* MD2Loader.h */; }; 745FF858113ECB080020C31B /* MD2NormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABB0E4B716800207D74 /* MD2NormalTable.h */; }; 745FF859113ECB080020C31B /* MD3FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABC0E4B716800207D74 /* MD3FileData.h */; }; 745FF85A113ECB080020C31B /* MD3Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABE0E4B716800207D74 /* MD3Loader.h */; }; 745FF85B113ECB080020C31B /* MD5Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC30E4B716800207D74 /* MD5Loader.h */; }; 745FF85C113ECB080020C31B /* MD5Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC50E4B716800207D74 /* MD5Parser.h */; }; 745FF85D113ECB080020C31B /* MDLDefaultColorMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC60E4B716800207D74 /* MDLDefaultColorMap.h */; }; 745FF85E113ECB080020C31B /* MDLFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC70E4B716800207D74 /* MDLFileData.h */; }; 745FF85F113ECB080020C31B /* MDLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC90E4B716800207D74 /* MDLLoader.h */; }; 745FF860113ECB080020C31B /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACB0E4B716800207D74 /* ObjFileData.h */; }; 745FF861113ECB080020C31B /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */; }; 745FF862113ECB080020C31B /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */; }; 745FF863113ECB080020C31B /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD10E4B716800207D74 /* ObjFileParser.h */; }; 745FF864113ECB080020C31B /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD20E4B716800207D74 /* ObjTools.h */; }; 745FF865113ECB080020C31B /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD30E4B716800207D74 /* ParsingUtils.h */; }; 745FF866113ECB080020C31B /* PlyLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD50E4B716800207D74 /* PlyLoader.h */; }; 745FF867113ECB080020C31B /* PlyParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD70E4B716800207D74 /* PlyParser.h */; }; 745FF868113ECB080020C31B /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD90E4B716800207D74 /* PretransformVertices.h */; }; 745FF869113ECB080020C31B /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADA0E4B716800207D74 /* qnan.h */; }; 745FF86A113ECB080020C31B /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADC0E4B716800207D74 /* RemoveComments.h */; }; 745FF86B113ECB080020C31B /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */; }; 745FF86C113ECB080020C31B /* SMDLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE30E4B716800207D74 /* SMDLoader.h */; }; 745FF86D113ECB080020C31B /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE50E4B716800207D74 /* SpatialSort.h */; }; 745FF86E113ECB080020C31B /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */; }; 745FF86F113ECB080020C31B /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE90E4B716800207D74 /* STLLoader.h */; }; 745FF870113ECB080020C31B /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEA0E4B716800207D74 /* StringComparison.h */; }; 745FF871113ECB080020C31B /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEC0E4B716800207D74 /* TextureTransform.h */; }; 745FF872113ECB080020C31B /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */; }; 745FF873113ECB080020C31B /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */; }; 745FF874113ECB080020C31B /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */; }; 745FF875113ECB080020C31B /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */; }; 745FF876113ECB080020C31B /* XFileHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF40E4B716800207D74 /* XFileHelper.h */; }; 745FF877113ECB080020C31B /* XFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF60E4B716800207D74 /* XFileImporter.h */; }; 745FF878113ECB080020C31B /* XFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF80E4B716800207D74 /* XFileParser.h */; }; 745FF87B113ECB080020C31B /* MDCFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */; }; 745FF87C113ECB080020C31B /* MDCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */; }; 745FF87D113ECB080020C31B /* MDCNormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */; }; 745FF87E113ECB080020C31B /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */; }; 745FF87F113ECB080020C31B /* LWOFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */; }; 745FF880113ECB080020C31B /* LWOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */; }; 745FF881113ECB080020C31B /* HMPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C50E50D77900606590 /* HMPFileData.h */; }; 745FF883113ECB080020C31B /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C90E50D7CC00606590 /* IFF.h */; }; 745FF884113ECB080020C31B /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3CB0E50D7FF00606590 /* Hash.h */; }; 745FF889113ECB080020C31B /* ACLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFD10F5DD87000124155 /* ACLoader.h */; }; 745FF88A113ECB080020C31B /* IRRLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDA0F5DD90800124155 /* IRRLoader.h */; }; 745FF88B113ECB080020C31B /* IRRMeshLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */; }; 745FF88C113ECB080020C31B /* IRRShared.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDE0F5DD90800124155 /* IRRShared.h */; }; 745FF88D113ECB080020C31B /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFE80F5DD93600124155 /* ColladaHelper.h */; }; 745FF88E113ECB080020C31B /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEA0F5DD93600124155 /* ColladaLoader.h */; }; 745FF88F113ECB080020C31B /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEC0F5DD93600124155 /* ColladaParser.h */; }; 745FF890113ECB080020C31B /* NFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFF50F5DD96100124155 /* NFFLoader.h */; }; 745FF891113ECB080020C31B /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */; }; 745FF892113ECB080020C31B /* Q3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0070F5DD9DD00124155 /* Q3DLoader.h */; }; 745FF893113ECB080020C31B /* BVHLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB00C0F5DD9F400124155 /* BVHLoader.h */; }; 745FF894113ECB080020C31B /* OFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0130F5DDA1400124155 /* OFFLoader.h */; }; 745FF895113ECB080020C31B /* RawLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB01B0F5DDA4400124155 /* RawLoader.h */; }; 745FF896113ECB080020C31B /* DXFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0210F5DDA5700124155 /* DXFLoader.h */; }; 745FF897113ECB080020C31B /* TerragenLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB02F0F5DDAB500124155 /* TerragenLoader.h */; }; 745FF898113ECB080020C31B /* irrXMLWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */; }; 745FF899113ECB080020C31B /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */; }; 745FF89A113ECB080020C31B /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB03B0F5DDB3200124155 /* SceneCombiner.h */; }; 745FF89B113ECB080020C31B /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */; }; 745FF89C113ECB080020C31B /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0470F5DDB6100124155 /* FindDegenerates.h */; }; 745FF89D113ECB080020C31B /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */; }; 745FF89E113ECB080020C31B /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0510F5DDBA800124155 /* StandardShapes.h */; }; 745FF89F113ECB080020C31B /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */; }; 745FF8A0113ECB080020C31B /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */; }; 745FF8A1113ECB080020C31B /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */; }; 745FF8A2113ECB080020C31B /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */; }; 745FF8A3113ECB080020C31B /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */; }; 745FF8AA113ECB080020C31B /* B3DImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0870F5DDE0700124155 /* B3DImporter.h */; }; 745FF8AE113ECB080020C31B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BB06D0F5DDCFC00124155 /* libz.dylib */; }; 745FF8B0113ECB080020C31B /* 3DSConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */; }; 745FF8B1113ECB080020C31B /* 3DSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A890E4B716800207D74 /* 3DSLoader.cpp */; }; 745FF8B3113ECB080020C31B /* ASELoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A8E0E4B716800207D74 /* ASELoader.cpp */; }; 745FF8B4113ECB080020C31B /* ASEParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A900E4B716800207D74 /* ASEParser.cpp */; }; 745FF8B5113ECB080020C31B /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A920E4B716800207D74 /* Assimp.cpp */; }; 745FF8B6113ECB080020C31B /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A930E4B716800207D74 /* BaseImporter.cpp */; }; 745FF8B7113ECB080020C31B /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */; }; 745FF8B8113ECB080020C31B /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */; }; 745FF8B9113ECB080020C31B /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */; }; 745FF8BA113ECB080020C31B /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */; }; 745FF8BB113ECB080020C31B /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */; }; 745FF8BD113ECB080020C31B /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */; }; 745FF8BE113ECB080020C31B /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */; }; 745FF8BF113ECB080020C31B /* HMPLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */; }; 745FF8C0113ECB080020C31B /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAD0E4B716800207D74 /* Importer.cpp */; }; 745FF8C1113ECB080020C31B /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */; }; 745FF8C2113ECB080020C31B /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */; }; 745FF8C3113ECB080020C31B /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */; }; 745FF8C4113ECB080020C31B /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */; }; 745FF8C5113ECB080020C31B /* MD2Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */; }; 745FF8C6113ECB080020C31B /* MD3Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ABD0E4B716800207D74 /* MD3Loader.cpp */; }; 745FF8C7113ECB080020C31B /* MD5Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC20E4B716800207D74 /* MD5Loader.cpp */; }; 745FF8C8113ECB080020C31B /* MD5Parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC40E4B716800207D74 /* MD5Parser.cpp */; }; 745FF8C9113ECB080020C31B /* MDLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */; }; 745FF8CA113ECB080020C31B /* MDLMaterialLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */; }; 745FF8CB113ECB080020C31B /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */; }; 745FF8CC113ECB080020C31B /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */; }; 745FF8CD113ECB080020C31B /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */; }; 745FF8CE113ECB080020C31B /* PlyLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */; }; 745FF8CF113ECB080020C31B /* PlyParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD60E4B716800207D74 /* PlyParser.cpp */; }; 745FF8D0113ECB080020C31B /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */; }; 745FF8D1113ECB080020C31B /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */; }; 745FF8D2113ECB080020C31B /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */; }; 745FF8D3113ECB080020C31B /* SMDLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */; }; 745FF8D4113ECB080020C31B /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */; }; 745FF8D5113ECB080020C31B /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */; }; 745FF8D6113ECB080020C31B /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE80E4B716800207D74 /* STLLoader.cpp */; }; 745FF8D7113ECB080020C31B /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */; }; 745FF8D8113ECB080020C31B /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */; }; 745FF8D9113ECB080020C31B /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */; }; 745FF8DA113ECB080020C31B /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */; }; 745FF8DB113ECB080020C31B /* XFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */; }; 745FF8DC113ECB080020C31B /* XFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF70E4B716800207D74 /* XFileParser.cpp */; }; 745FF8DD113ECB080020C31B /* MDCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */; }; 745FF8DE113ECB080020C31B /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */; }; 745FF8DF113ECB080020C31B /* LWOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */; }; 745FF8E0113ECB080020C31B /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */; }; 745FF8E1113ECB080020C31B /* LWOMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */; }; 745FF8E2113ECB080020C31B /* ACLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD00F5DD87000124155 /* ACLoader.cpp */; }; 745FF8E3113ECB080020C31B /* IRRLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD90F5DD90800124155 /* IRRLoader.cpp */; }; 745FF8E4113ECB080020C31B /* IRRMeshLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDB0F5DD90800124155 /* IRRMeshLoader.cpp */; }; 745FF8E5113ECB080020C31B /* IRRShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDD0F5DD90800124155 /* IRRShared.cpp */; }; 745FF8E6113ECB080020C31B /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */; }; 745FF8E7113ECB080020C31B /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */; }; 745FF8E8113ECB080020C31B /* NFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFF60F5DD96100124155 /* NFFLoader.cpp */; }; 745FF8E9113ECB080020C31B /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */; }; 745FF8EA113ECB080020C31B /* Q3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */; }; 745FF8EB113ECB080020C31B /* BVHLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB00D0F5DD9F400124155 /* BVHLoader.cpp */; }; 745FF8EC113ECB080020C31B /* OFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0140F5DDA1400124155 /* OFFLoader.cpp */; }; 745FF8ED113ECB080020C31B /* RawLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB01C0F5DDA4400124155 /* RawLoader.cpp */; }; 745FF8EE113ECB080020C31B /* DXFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0220F5DDA5700124155 /* DXFLoader.cpp */; }; 745FF8EF113ECB080020C31B /* LWOBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0270F5DDA9200124155 /* LWOBLoader.cpp */; }; 745FF8F0113ECB080020C31B /* TerragenLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */; }; 745FF8F1113ECB080020C31B /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */; }; 745FF8F2113ECB080020C31B /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */; }; 745FF8F3113ECB080020C31B /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */; }; 745FF8F4113ECB080020C31B /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */; }; 745FF8F5113ECB080020C31B /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */; }; 745FF8F6113ECB080020C31B /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0520F5DDBA800124155 /* StandardShapes.cpp */; }; 745FF8F7113ECB080020C31B /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */; }; 745FF8F8113ECB080020C31B /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */; }; 745FF8F9113ECB080020C31B /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */; }; 745FF8FA113ECB080020C31B /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */; }; 745FF8FC113ECB080020C31B /* B3DImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0880F5DDE0700124155 /* B3DImporter.cpp */; }; 745FF923113ECC660020C31B /* 3DSHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A880E4B716800207D74 /* 3DSHelper.h */; }; 745FF924113ECC660020C31B /* 3DSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8A0E4B716800207D74 /* 3DSLoader.h */; }; 745FF925113ECC660020C31B /* ASELoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8F0E4B716800207D74 /* ASELoader.h */; }; 745FF926113ECC660020C31B /* ASEParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A910E4B716800207D74 /* ASEParser.h */; }; 745FF927113ECC660020C31B /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A940E4B716800207D74 /* BaseImporter.h */; }; 745FF928113ECC660020C31B /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A950E4B716800207D74 /* BaseProcess.h */; }; 745FF929113ECC660020C31B /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A960E4B716800207D74 /* ByteSwap.h */; }; 745FF92A113ECC660020C31B /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */; }; 745FF92B113ECC660020C31B /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */; }; 745FF92C113ECC660020C31B /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */; }; 745FF92D113ECC660020C31B /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */; }; 745FF92F113ECC660020C31B /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA30E4B716800207D74 /* fast_atof.h */; }; 745FF930113ECC660020C31B /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA40E4B716800207D74 /* FileLogStream.h */; }; 745FF931113ECC660020C31B /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */; }; 745FF932113ECC660020C31B /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */; }; 745FF933113ECC660020C31B /* HalfLifeFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */; }; 745FF934113ECC660020C31B /* HMPLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAC0E4B716800207D74 /* HMPLoader.h */; }; 745FF935113ECC660020C31B /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */; }; 745FF936113ECC660020C31B /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */; }; 745FF937113ECC660020C31B /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */; }; 745FF938113ECC660020C31B /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB70E4B716800207D74 /* MaterialSystem.h */; }; 745FF939113ECC660020C31B /* MD2FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB80E4B716800207D74 /* MD2FileData.h */; }; 745FF93A113ECC660020C31B /* MD2Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABA0E4B716800207D74 /* MD2Loader.h */; }; 745FF93B113ECC660020C31B /* MD2NormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABB0E4B716800207D74 /* MD2NormalTable.h */; }; 745FF93C113ECC660020C31B /* MD3FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABC0E4B716800207D74 /* MD3FileData.h */; }; 745FF93D113ECC660020C31B /* MD3Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABE0E4B716800207D74 /* MD3Loader.h */; }; 745FF93E113ECC660020C31B /* MD5Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC30E4B716800207D74 /* MD5Loader.h */; }; 745FF93F113ECC660020C31B /* MD5Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC50E4B716800207D74 /* MD5Parser.h */; }; 745FF940113ECC660020C31B /* MDLDefaultColorMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC60E4B716800207D74 /* MDLDefaultColorMap.h */; }; 745FF941113ECC660020C31B /* MDLFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC70E4B716800207D74 /* MDLFileData.h */; }; 745FF942113ECC660020C31B /* MDLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC90E4B716800207D74 /* MDLLoader.h */; }; 745FF943113ECC660020C31B /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACB0E4B716800207D74 /* ObjFileData.h */; }; 745FF944113ECC660020C31B /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */; }; 745FF945113ECC660020C31B /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */; }; 745FF946113ECC660020C31B /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD10E4B716800207D74 /* ObjFileParser.h */; }; 745FF947113ECC660020C31B /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD20E4B716800207D74 /* ObjTools.h */; }; 745FF948113ECC660020C31B /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD30E4B716800207D74 /* ParsingUtils.h */; }; 745FF949113ECC660020C31B /* PlyLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD50E4B716800207D74 /* PlyLoader.h */; }; 745FF94A113ECC660020C31B /* PlyParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD70E4B716800207D74 /* PlyParser.h */; }; 745FF94B113ECC660020C31B /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD90E4B716800207D74 /* PretransformVertices.h */; }; 745FF94C113ECC660020C31B /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADA0E4B716800207D74 /* qnan.h */; }; 745FF94D113ECC660020C31B /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADC0E4B716800207D74 /* RemoveComments.h */; }; 745FF94E113ECC660020C31B /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */; }; 745FF94F113ECC660020C31B /* SMDLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE30E4B716800207D74 /* SMDLoader.h */; }; 745FF950113ECC660020C31B /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE50E4B716800207D74 /* SpatialSort.h */; }; 745FF951113ECC660020C31B /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */; }; 745FF952113ECC660020C31B /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE90E4B716800207D74 /* STLLoader.h */; }; 745FF953113ECC660020C31B /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEA0E4B716800207D74 /* StringComparison.h */; }; 745FF954113ECC660020C31B /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEC0E4B716800207D74 /* TextureTransform.h */; }; 745FF955113ECC660020C31B /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */; }; 745FF956113ECC660020C31B /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */; }; 745FF957113ECC660020C31B /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */; }; 745FF958113ECC660020C31B /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */; }; 745FF959113ECC660020C31B /* XFileHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF40E4B716800207D74 /* XFileHelper.h */; }; 745FF95A113ECC660020C31B /* XFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF60E4B716800207D74 /* XFileImporter.h */; }; 745FF95B113ECC660020C31B /* XFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF80E4B716800207D74 /* XFileParser.h */; }; 745FF95E113ECC660020C31B /* MDCFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */; }; 745FF95F113ECC660020C31B /* MDCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */; }; 745FF960113ECC660020C31B /* MDCNormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */; }; 745FF961113ECC660020C31B /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */; }; 745FF962113ECC660020C31B /* LWOFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */; }; 745FF963113ECC660020C31B /* LWOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */; }; 745FF964113ECC660020C31B /* HMPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C50E50D77900606590 /* HMPFileData.h */; }; 745FF966113ECC660020C31B /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C90E50D7CC00606590 /* IFF.h */; }; 745FF967113ECC660020C31B /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3CB0E50D7FF00606590 /* Hash.h */; }; 745FF96C113ECC660020C31B /* ACLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFD10F5DD87000124155 /* ACLoader.h */; }; 745FF96D113ECC660020C31B /* IRRLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDA0F5DD90800124155 /* IRRLoader.h */; }; 745FF96E113ECC660020C31B /* IRRMeshLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */; }; 745FF96F113ECC660020C31B /* IRRShared.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDE0F5DD90800124155 /* IRRShared.h */; }; 745FF970113ECC660020C31B /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFE80F5DD93600124155 /* ColladaHelper.h */; }; 745FF971113ECC660020C31B /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEA0F5DD93600124155 /* ColladaLoader.h */; }; 745FF972113ECC660020C31B /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEC0F5DD93600124155 /* ColladaParser.h */; }; 745FF973113ECC660020C31B /* NFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFF50F5DD96100124155 /* NFFLoader.h */; }; 745FF974113ECC660020C31B /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */; }; 745FF975113ECC660020C31B /* Q3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0070F5DD9DD00124155 /* Q3DLoader.h */; }; 745FF976113ECC660020C31B /* BVHLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB00C0F5DD9F400124155 /* BVHLoader.h */; }; 745FF977113ECC660020C31B /* OFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0130F5DDA1400124155 /* OFFLoader.h */; }; 745FF978113ECC660020C31B /* RawLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB01B0F5DDA4400124155 /* RawLoader.h */; }; 745FF979113ECC660020C31B /* DXFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0210F5DDA5700124155 /* DXFLoader.h */; }; 745FF97A113ECC660020C31B /* TerragenLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB02F0F5DDAB500124155 /* TerragenLoader.h */; }; 745FF97B113ECC660020C31B /* irrXMLWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */; }; 745FF97C113ECC660020C31B /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */; }; 745FF97D113ECC660020C31B /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB03B0F5DDB3200124155 /* SceneCombiner.h */; }; 745FF97E113ECC660020C31B /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */; }; 745FF97F113ECC660020C31B /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0470F5DDB6100124155 /* FindDegenerates.h */; }; 745FF980113ECC660020C31B /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */; }; 745FF981113ECC660020C31B /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0510F5DDBA800124155 /* StandardShapes.h */; }; 745FF982113ECC660020C31B /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */; }; 745FF983113ECC660020C31B /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */; }; 745FF984113ECC660020C31B /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */; }; 745FF985113ECC660020C31B /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */; }; 745FF986113ECC660020C31B /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */; }; 745FF98D113ECC660020C31B /* B3DImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0870F5DDE0700124155 /* B3DImporter.h */; }; 745FF991113ECC660020C31B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BB06D0F5DDCFC00124155 /* libz.dylib */; }; 745FF993113ECC660020C31B /* 3DSConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */; }; 745FF994113ECC660020C31B /* 3DSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A890E4B716800207D74 /* 3DSLoader.cpp */; }; 745FF996113ECC660020C31B /* ASELoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A8E0E4B716800207D74 /* ASELoader.cpp */; }; 745FF997113ECC660020C31B /* ASEParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A900E4B716800207D74 /* ASEParser.cpp */; }; 745FF998113ECC660020C31B /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A920E4B716800207D74 /* Assimp.cpp */; }; 745FF999113ECC660020C31B /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A930E4B716800207D74 /* BaseImporter.cpp */; }; 745FF99A113ECC660020C31B /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */; }; 745FF99B113ECC660020C31B /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */; }; 745FF99C113ECC660020C31B /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */; }; 745FF99D113ECC660020C31B /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */; }; 745FF99E113ECC660020C31B /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */; }; 745FF9A0113ECC660020C31B /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */; }; 745FF9A1113ECC660020C31B /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */; }; 745FF9A2113ECC660020C31B /* HMPLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */; }; 745FF9A3113ECC660020C31B /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAD0E4B716800207D74 /* Importer.cpp */; }; 745FF9A4113ECC660020C31B /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */; }; 745FF9A5113ECC660020C31B /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */; }; 745FF9A6113ECC660020C31B /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */; }; 745FF9A7113ECC660020C31B /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */; }; 745FF9A8113ECC660020C31B /* MD2Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */; }; 745FF9A9113ECC660020C31B /* MD3Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ABD0E4B716800207D74 /* MD3Loader.cpp */; }; 745FF9AA113ECC660020C31B /* MD5Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC20E4B716800207D74 /* MD5Loader.cpp */; }; 745FF9AB113ECC660020C31B /* MD5Parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC40E4B716800207D74 /* MD5Parser.cpp */; }; 745FF9AC113ECC660020C31B /* MDLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */; }; 745FF9AD113ECC660020C31B /* MDLMaterialLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */; }; 745FF9AE113ECC660020C31B /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */; }; 745FF9AF113ECC660020C31B /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */; }; 745FF9B0113ECC660020C31B /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */; }; 745FF9B1113ECC660020C31B /* PlyLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */; }; 745FF9B2113ECC660020C31B /* PlyParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD60E4B716800207D74 /* PlyParser.cpp */; }; 745FF9B3113ECC660020C31B /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */; }; 745FF9B4113ECC660020C31B /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */; }; 745FF9B5113ECC660020C31B /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */; }; 745FF9B6113ECC660020C31B /* SMDLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */; }; 745FF9B7113ECC660020C31B /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */; }; 745FF9B8113ECC660020C31B /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */; }; 745FF9B9113ECC660020C31B /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE80E4B716800207D74 /* STLLoader.cpp */; }; 745FF9BA113ECC660020C31B /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */; }; 745FF9BB113ECC660020C31B /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */; }; 745FF9BC113ECC660020C31B /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */; }; 745FF9BD113ECC660020C31B /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */; }; 745FF9BE113ECC660020C31B /* XFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */; }; 745FF9BF113ECC660020C31B /* XFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF70E4B716800207D74 /* XFileParser.cpp */; }; 745FF9C0113ECC660020C31B /* MDCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */; }; 745FF9C1113ECC660020C31B /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */; }; 745FF9C2113ECC660020C31B /* LWOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */; }; 745FF9C3113ECC660020C31B /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */; }; 745FF9C4113ECC660020C31B /* LWOMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */; }; 745FF9C5113ECC660020C31B /* ACLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD00F5DD87000124155 /* ACLoader.cpp */; }; 745FF9C6113ECC660020C31B /* IRRLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD90F5DD90800124155 /* IRRLoader.cpp */; }; 745FF9C7113ECC660020C31B /* IRRMeshLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDB0F5DD90800124155 /* IRRMeshLoader.cpp */; }; 745FF9C8113ECC660020C31B /* IRRShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDD0F5DD90800124155 /* IRRShared.cpp */; }; 745FF9C9113ECC660020C31B /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */; }; 745FF9CA113ECC660020C31B /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */; }; 745FF9CB113ECC660020C31B /* NFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFF60F5DD96100124155 /* NFFLoader.cpp */; }; 745FF9CC113ECC660020C31B /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */; }; 745FF9CD113ECC660020C31B /* Q3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */; }; 745FF9CE113ECC660020C31B /* BVHLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB00D0F5DD9F400124155 /* BVHLoader.cpp */; }; 745FF9CF113ECC660020C31B /* OFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0140F5DDA1400124155 /* OFFLoader.cpp */; }; 745FF9D0113ECC660020C31B /* RawLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB01C0F5DDA4400124155 /* RawLoader.cpp */; }; 745FF9D1113ECC660020C31B /* DXFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0220F5DDA5700124155 /* DXFLoader.cpp */; }; 745FF9D2113ECC660020C31B /* LWOBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0270F5DDA9200124155 /* LWOBLoader.cpp */; }; 745FF9D3113ECC660020C31B /* TerragenLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */; }; 745FF9D4113ECC660020C31B /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */; }; 745FF9D5113ECC660020C31B /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */; }; 745FF9D6113ECC660020C31B /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */; }; 745FF9D7113ECC660020C31B /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */; }; 745FF9D8113ECC660020C31B /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */; }; 745FF9D9113ECC660020C31B /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0520F5DDBA800124155 /* StandardShapes.cpp */; }; 745FF9DA113ECC660020C31B /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */; }; 745FF9DB113ECC660020C31B /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */; }; 745FF9DC113ECC660020C31B /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */; }; 745FF9DD113ECC660020C31B /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */; }; 745FF9DF113ECC660020C31B /* B3DImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0880F5DDE0700124155 /* B3DImporter.cpp */; }; 74C9BB5111ACBB1000AF885C /* BlenderDNA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4911ACBB1000AF885C /* BlenderDNA.cpp */; }; 74C9BB5211ACBB1000AF885C /* BlenderDNA.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4A11ACBB1000AF885C /* BlenderDNA.h */; }; 74C9BB5311ACBB1000AF885C /* BlenderLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4C11ACBB1000AF885C /* BlenderLoader.cpp */; }; 74C9BB5411ACBB1000AF885C /* BlenderLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4D11ACBB1000AF885C /* BlenderLoader.h */; }; 74C9BB5511ACBB1000AF885C /* BlenderScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4E11ACBB1000AF885C /* BlenderScene.cpp */; }; 74C9BB5611ACBB1000AF885C /* BlenderScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4F11ACBB1000AF885C /* BlenderScene.h */; }; 74C9BB5711ACBB1000AF885C /* BlenderSceneGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB5011ACBB1000AF885C /* BlenderSceneGen.h */; }; 74C9BB5811ACBB1000AF885C /* BlenderDNA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4911ACBB1000AF885C /* BlenderDNA.cpp */; }; 74C9BB5911ACBB1000AF885C /* BlenderDNA.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4A11ACBB1000AF885C /* BlenderDNA.h */; }; 74C9BB5A11ACBB1000AF885C /* BlenderLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4C11ACBB1000AF885C /* BlenderLoader.cpp */; }; 74C9BB5B11ACBB1000AF885C /* BlenderLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4D11ACBB1000AF885C /* BlenderLoader.h */; }; 74C9BB5C11ACBB1000AF885C /* BlenderScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4E11ACBB1000AF885C /* BlenderScene.cpp */; }; 74C9BB5D11ACBB1000AF885C /* BlenderScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4F11ACBB1000AF885C /* BlenderScene.h */; }; 74C9BB5E11ACBB1000AF885C /* BlenderSceneGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB5011ACBB1000AF885C /* BlenderSceneGen.h */; }; 74C9BB5F11ACBB1000AF885C /* BlenderDNA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4911ACBB1000AF885C /* BlenderDNA.cpp */; }; 74C9BB6011ACBB1000AF885C /* BlenderDNA.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4A11ACBB1000AF885C /* BlenderDNA.h */; }; 74C9BB6111ACBB1000AF885C /* BlenderLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4C11ACBB1000AF885C /* BlenderLoader.cpp */; }; 74C9BB6211ACBB1000AF885C /* BlenderLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4D11ACBB1000AF885C /* BlenderLoader.h */; }; 74C9BB6311ACBB1000AF885C /* BlenderScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4E11ACBB1000AF885C /* BlenderScene.cpp */; }; 74C9BB6411ACBB1000AF885C /* BlenderScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4F11ACBB1000AF885C /* BlenderScene.h */; }; 74C9BB6511ACBB1000AF885C /* BlenderSceneGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB5011ACBB1000AF885C /* BlenderSceneGen.h */; }; 74C9BB6611ACBB1000AF885C /* BlenderDNA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4911ACBB1000AF885C /* BlenderDNA.cpp */; }; 74C9BB6711ACBB1000AF885C /* BlenderDNA.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4A11ACBB1000AF885C /* BlenderDNA.h */; }; 74C9BB6811ACBB1000AF885C /* BlenderLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4C11ACBB1000AF885C /* BlenderLoader.cpp */; }; 74C9BB6911ACBB1000AF885C /* BlenderLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4D11ACBB1000AF885C /* BlenderLoader.h */; }; 74C9BB6A11ACBB1000AF885C /* BlenderScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4E11ACBB1000AF885C /* BlenderScene.cpp */; }; 74C9BB6B11ACBB1000AF885C /* BlenderScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4F11ACBB1000AF885C /* BlenderScene.h */; }; 74C9BB6C11ACBB1000AF885C /* BlenderSceneGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB5011ACBB1000AF885C /* BlenderSceneGen.h */; }; 74C9BB7211ACBB3600AF885C /* pointer_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB6F11ACBB3600AF885C /* pointer_cast.hpp */; }; 74C9BB7311ACBB3600AF885C /* shared_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7011ACBB3600AF885C /* shared_array.hpp */; }; 74C9BB7411ACBB3600AF885C /* shared_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7111ACBB3600AF885C /* shared_ptr.hpp */; }; 74C9BB7511ACBB3600AF885C /* pointer_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB6F11ACBB3600AF885C /* pointer_cast.hpp */; }; 74C9BB7611ACBB3600AF885C /* shared_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7011ACBB3600AF885C /* shared_array.hpp */; }; 74C9BB7711ACBB3600AF885C /* shared_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7111ACBB3600AF885C /* shared_ptr.hpp */; }; 74C9BB7E11ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */; }; 74C9BB7F11ACBB7800AF885C /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */; }; 74C9BB8011ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */; }; 74C9BB8111ACBB7800AF885C /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */; }; 74C9BB8211ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */; }; 74C9BB8311ACBB7800AF885C /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */; }; 74C9BB8411ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */; }; 74C9BB8511ACBB7800AF885C /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */; }; 74C9BB8811ACBB9900AF885C /* AssimpPCH.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB8611ACBB9900AF885C /* AssimpPCH.cpp */; }; 74C9BB8911ACBB9900AF885C /* AssimpPCH.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB8711ACBB9900AF885C /* AssimpPCH.h */; }; 74C9BB8A11ACBB9900AF885C /* AssimpPCH.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB8611ACBB9900AF885C /* AssimpPCH.cpp */; }; 74C9BB8B11ACBB9900AF885C /* AssimpPCH.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB8711ACBB9900AF885C /* AssimpPCH.h */; }; 74C9BB8C11ACBB9900AF885C /* AssimpPCH.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB8611ACBB9900AF885C /* AssimpPCH.cpp */; }; 74C9BB8D11ACBB9900AF885C /* AssimpPCH.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB8711ACBB9900AF885C /* AssimpPCH.h */; }; 74C9BB8E11ACBB9900AF885C /* AssimpPCH.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB8611ACBB9900AF885C /* AssimpPCH.cpp */; }; 74C9BB8F11ACBB9900AF885C /* AssimpPCH.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB8711ACBB9900AF885C /* AssimpPCH.h */; }; 74C9BB9611ACBBBC00AF885C /* COBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB9311ACBBBC00AF885C /* COBLoader.cpp */; }; 74C9BB9711ACBBBC00AF885C /* COBLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB9411ACBBBC00AF885C /* COBLoader.h */; }; 74C9BB9811ACBBBC00AF885C /* COBScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB9511ACBBBC00AF885C /* COBScene.h */; }; 74C9BB9911ACBBBC00AF885C /* COBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB9311ACBBBC00AF885C /* COBLoader.cpp */; }; 74C9BB9A11ACBBBC00AF885C /* COBLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB9411ACBBBC00AF885C /* COBLoader.h */; }; 74C9BB9B11ACBBBC00AF885C /* COBScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB9511ACBBBC00AF885C /* COBScene.h */; }; 74C9BB9C11ACBBBC00AF885C /* COBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB9311ACBBBC00AF885C /* COBLoader.cpp */; }; 74C9BB9D11ACBBBC00AF885C /* COBLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB9411ACBBBC00AF885C /* COBLoader.h */; }; 74C9BB9E11ACBBBC00AF885C /* COBScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB9511ACBBBC00AF885C /* COBScene.h */; }; 74C9BB9F11ACBBBC00AF885C /* COBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB9311ACBBBC00AF885C /* COBLoader.cpp */; }; 74C9BBA011ACBBBC00AF885C /* COBLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB9411ACBBBC00AF885C /* COBLoader.h */; }; 74C9BBA111ACBBBC00AF885C /* COBScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB9511ACBBBC00AF885C /* COBScene.h */; }; 74C9BBB411ACBC2600AF885C /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBB311ACBC2600AF885C /* revision.h */; }; 74C9BBB511ACBC2600AF885C /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBB311ACBC2600AF885C /* revision.h */; }; 74C9BBB611ACBC2600AF885C /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBB311ACBC2600AF885C /* revision.h */; }; 74C9BBB711ACBC2600AF885C /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBB311ACBC2600AF885C /* revision.h */; }; 74C9BBBF11ACBC6C00AF885C /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */; }; 74C9BBC011ACBC6C00AF885C /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */; }; 74C9BBC111ACBC6C00AF885C /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */; }; 74C9BBC211ACBC6C00AF885C /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */; }; 74C9BBC311ACBC6C00AF885C /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */; }; 74C9BBC411ACBC6C00AF885C /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */; }; 74C9BBC511ACBC6C00AF885C /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */; }; 74C9BBC611ACBC6C00AF885C /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */; }; 74C9BBC711ACBC6C00AF885C /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */; }; 74C9BBC811ACBC6C00AF885C /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */; }; 74C9BBC911ACBC6C00AF885C /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */; }; 74C9BBCA11ACBC6C00AF885C /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */; }; 74C9BBCB11ACBC6C00AF885C /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */; }; 74C9BBCC11ACBC6C00AF885C /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */; }; 74C9BBCD11ACBC6C00AF885C /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */; }; 74C9BBCE11ACBC6C00AF885C /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */; }; 8E7ABBA8127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA1127E0F1A00512ED1 /* Q3BSPFileData.h */; }; 8E7ABBA9127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA2127E0F1A00512ED1 /* Q3BSPFileImporter.cpp */; }; 8E7ABBAA127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA3127E0F1A00512ED1 /* Q3BSPFileImporter.h */; }; 8E7ABBAB127E0F1A00512ED1 /* Q3BSPFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA4127E0F1A00512ED1 /* Q3BSPFileParser.cpp */; }; 8E7ABBAC127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA5127E0F1A00512ED1 /* Q3BSPFileParser.h */; }; 8E7ABBAD127E0F1A00512ED1 /* Q3BSPZipArchive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA6127E0F1A00512ED1 /* Q3BSPZipArchive.cpp */; }; 8E7ABBAE127E0F1A00512ED1 /* Q3BSPZipArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA7127E0F1A00512ED1 /* Q3BSPZipArchive.h */; }; 8E7ABBAF127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA1127E0F1A00512ED1 /* Q3BSPFileData.h */; }; 8E7ABBB0127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA2127E0F1A00512ED1 /* Q3BSPFileImporter.cpp */; }; 8E7ABBB1127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA3127E0F1A00512ED1 /* Q3BSPFileImporter.h */; }; 8E7ABBB2127E0F1A00512ED1 /* Q3BSPFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA4127E0F1A00512ED1 /* Q3BSPFileParser.cpp */; }; 8E7ABBB3127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA5127E0F1A00512ED1 /* Q3BSPFileParser.h */; }; 8E7ABBB4127E0F1A00512ED1 /* Q3BSPZipArchive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA6127E0F1A00512ED1 /* Q3BSPZipArchive.cpp */; }; 8E7ABBB5127E0F1A00512ED1 /* Q3BSPZipArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA7127E0F1A00512ED1 /* Q3BSPZipArchive.h */; }; 8E7ABBB6127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA1127E0F1A00512ED1 /* Q3BSPFileData.h */; }; 8E7ABBB7127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA2127E0F1A00512ED1 /* Q3BSPFileImporter.cpp */; }; 8E7ABBB8127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA3127E0F1A00512ED1 /* Q3BSPFileImporter.h */; }; 8E7ABBB9127E0F1A00512ED1 /* Q3BSPFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA4127E0F1A00512ED1 /* Q3BSPFileParser.cpp */; }; 8E7ABBBA127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA5127E0F1A00512ED1 /* Q3BSPFileParser.h */; }; 8E7ABBBB127E0F1A00512ED1 /* Q3BSPZipArchive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA6127E0F1A00512ED1 /* Q3BSPZipArchive.cpp */; }; 8E7ABBBC127E0F1A00512ED1 /* Q3BSPZipArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA7127E0F1A00512ED1 /* Q3BSPZipArchive.h */; }; 8E7ABBBD127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA1127E0F1A00512ED1 /* Q3BSPFileData.h */; }; 8E7ABBBE127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA2127E0F1A00512ED1 /* Q3BSPFileImporter.cpp */; }; 8E7ABBBF127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA3127E0F1A00512ED1 /* Q3BSPFileImporter.h */; }; 8E7ABBC0127E0F1A00512ED1 /* Q3BSPFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA4127E0F1A00512ED1 /* Q3BSPFileParser.cpp */; }; 8E7ABBC1127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA5127E0F1A00512ED1 /* Q3BSPFileParser.h */; }; 8E7ABBC2127E0F1A00512ED1 /* Q3BSPZipArchive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA6127E0F1A00512ED1 /* Q3BSPZipArchive.cpp */; }; 8E7ABBC3127E0F1A00512ED1 /* Q3BSPZipArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA7127E0F1A00512ED1 /* Q3BSPZipArchive.h */; }; 8E7ABBC6127E0F2A00512ED1 /* NDOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBC4127E0F2A00512ED1 /* NDOLoader.cpp */; }; 8E7ABBC7127E0F2A00512ED1 /* NDOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBC5127E0F2A00512ED1 /* NDOLoader.h */; }; 8E7ABBC8127E0F2A00512ED1 /* NDOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBC4127E0F2A00512ED1 /* NDOLoader.cpp */; }; 8E7ABBC9127E0F2A00512ED1 /* NDOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBC5127E0F2A00512ED1 /* NDOLoader.h */; }; 8E7ABBCA127E0F2A00512ED1 /* NDOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBC4127E0F2A00512ED1 /* NDOLoader.cpp */; }; 8E7ABBCB127E0F2A00512ED1 /* NDOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBC5127E0F2A00512ED1 /* NDOLoader.h */; }; 8E7ABBCC127E0F2A00512ED1 /* NDOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBC4127E0F2A00512ED1 /* NDOLoader.cpp */; }; 8E7ABBCD127E0F2A00512ED1 /* NDOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBC5127E0F2A00512ED1 /* NDOLoader.h */; }; 8E7ABBD1127E0F3800512ED1 /* BlenderIntermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBCE127E0F3800512ED1 /* BlenderIntermediate.h */; }; 8E7ABBD2127E0F3800512ED1 /* BlenderModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBCF127E0F3800512ED1 /* BlenderModifier.cpp */; }; 8E7ABBD3127E0F3800512ED1 /* BlenderModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBD0127E0F3800512ED1 /* BlenderModifier.h */; }; 8E7ABBD4127E0F3800512ED1 /* BlenderIntermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBCE127E0F3800512ED1 /* BlenderIntermediate.h */; }; 8E7ABBD5127E0F3800512ED1 /* BlenderModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBCF127E0F3800512ED1 /* BlenderModifier.cpp */; }; 8E7ABBD6127E0F3800512ED1 /* BlenderModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBD0127E0F3800512ED1 /* BlenderModifier.h */; }; 8E7ABBD7127E0F3800512ED1 /* BlenderIntermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBCE127E0F3800512ED1 /* BlenderIntermediate.h */; }; 8E7ABBD8127E0F3800512ED1 /* BlenderModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBCF127E0F3800512ED1 /* BlenderModifier.cpp */; }; 8E7ABBD9127E0F3800512ED1 /* BlenderModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBD0127E0F3800512ED1 /* BlenderModifier.h */; }; 8E7ABBDA127E0F3800512ED1 /* BlenderIntermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBCE127E0F3800512ED1 /* BlenderIntermediate.h */; }; 8E7ABBDB127E0F3800512ED1 /* BlenderModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBCF127E0F3800512ED1 /* BlenderModifier.cpp */; }; 8E7ABBDC127E0F3800512ED1 /* BlenderModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBD0127E0F3800512ED1 /* BlenderModifier.h */; }; 8E7ABBE3127E0FA400512ED1 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */; }; 8E7ABBE4127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */; }; 8E7ABBE5127E0FA400512ED1 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE1127E0FA400512ED1 /* Profiler.h */; }; 8E7ABBE6127E0FA400512ED1 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE2127E0FA400512ED1 /* pstdint.h */; }; 8E7ABBE7127E0FA400512ED1 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */; }; 8E7ABBE8127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */; }; 8E7ABBE9127E0FA400512ED1 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE1127E0FA400512ED1 /* Profiler.h */; }; 8E7ABBEA127E0FA400512ED1 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE2127E0FA400512ED1 /* pstdint.h */; }; 8E7ABBEB127E0FA400512ED1 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */; }; 8E7ABBEC127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */; }; 8E7ABBED127E0FA400512ED1 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE1127E0FA400512ED1 /* Profiler.h */; }; 8E7ABBEE127E0FA400512ED1 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE2127E0FA400512ED1 /* pstdint.h */; }; 8E7ABBEF127E0FA400512ED1 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */; }; 8E7ABBF0127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */; }; 8E7ABBF1127E0FA400512ED1 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE1127E0FA400512ED1 /* Profiler.h */; }; 8E7ABBF2127E0FA400512ED1 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE2127E0FA400512ED1 /* pstdint.h */; }; 8E8DEE5C127E2B78005EF64D /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE4B127E2B78005EF64D /* ConvertUTF.c */; }; 8E8DEE5D127E2B78005EF64D /* ConvertUTF.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4C127E2B78005EF64D /* ConvertUTF.h */; }; 8E8DEE5E127E2B78005EF64D /* CXMLReaderImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4F127E2B78005EF64D /* CXMLReaderImpl.h */; }; 8E8DEE5F127E2B78005EF64D /* heapsort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE50127E2B78005EF64D /* heapsort.h */; }; 8E8DEE60127E2B78005EF64D /* irrArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE51127E2B78005EF64D /* irrArray.h */; }; 8E8DEE61127E2B78005EF64D /* irrString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE52127E2B78005EF64D /* irrString.h */; }; 8E8DEE62127E2B78005EF64D /* irrTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE53127E2B78005EF64D /* irrTypes.h */; }; 8E8DEE63127E2B78005EF64D /* irrXML.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE54127E2B78005EF64D /* irrXML.cpp */; }; 8E8DEE64127E2B78005EF64D /* irrXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE55127E2B78005EF64D /* irrXML.h */; }; 8E8DEE65127E2B78005EF64D /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE57127E2B78005EF64D /* crypt.h */; }; 8E8DEE66127E2B78005EF64D /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE58127E2B78005EF64D /* ioapi.c */; }; 8E8DEE67127E2B78005EF64D /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE59127E2B78005EF64D /* ioapi.h */; }; 8E8DEE68127E2B78005EF64D /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE5A127E2B78005EF64D /* unzip.c */; }; 8E8DEE69127E2B78005EF64D /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE5B127E2B78005EF64D /* unzip.h */; }; 8E8DEE6A127E2B78005EF64D /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE4B127E2B78005EF64D /* ConvertUTF.c */; }; 8E8DEE6B127E2B78005EF64D /* ConvertUTF.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4C127E2B78005EF64D /* ConvertUTF.h */; }; 8E8DEE6C127E2B78005EF64D /* CXMLReaderImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4F127E2B78005EF64D /* CXMLReaderImpl.h */; }; 8E8DEE6D127E2B78005EF64D /* heapsort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE50127E2B78005EF64D /* heapsort.h */; }; 8E8DEE6E127E2B78005EF64D /* irrArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE51127E2B78005EF64D /* irrArray.h */; }; 8E8DEE6F127E2B78005EF64D /* irrString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE52127E2B78005EF64D /* irrString.h */; }; 8E8DEE70127E2B78005EF64D /* irrTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE53127E2B78005EF64D /* irrTypes.h */; }; 8E8DEE71127E2B78005EF64D /* irrXML.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE54127E2B78005EF64D /* irrXML.cpp */; }; 8E8DEE72127E2B78005EF64D /* irrXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE55127E2B78005EF64D /* irrXML.h */; }; 8E8DEE73127E2B78005EF64D /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE57127E2B78005EF64D /* crypt.h */; }; 8E8DEE74127E2B78005EF64D /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE58127E2B78005EF64D /* ioapi.c */; }; 8E8DEE75127E2B78005EF64D /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE59127E2B78005EF64D /* ioapi.h */; }; 8E8DEE76127E2B78005EF64D /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE5A127E2B78005EF64D /* unzip.c */; }; 8E8DEE77127E2B78005EF64D /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE5B127E2B78005EF64D /* unzip.h */; }; 8E8DEE78127E2B78005EF64D /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE4B127E2B78005EF64D /* ConvertUTF.c */; }; 8E8DEE79127E2B78005EF64D /* ConvertUTF.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4C127E2B78005EF64D /* ConvertUTF.h */; }; 8E8DEE7A127E2B78005EF64D /* CXMLReaderImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4F127E2B78005EF64D /* CXMLReaderImpl.h */; }; 8E8DEE7B127E2B78005EF64D /* heapsort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE50127E2B78005EF64D /* heapsort.h */; }; 8E8DEE7C127E2B78005EF64D /* irrArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE51127E2B78005EF64D /* irrArray.h */; }; 8E8DEE7D127E2B78005EF64D /* irrString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE52127E2B78005EF64D /* irrString.h */; }; 8E8DEE7E127E2B78005EF64D /* irrTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE53127E2B78005EF64D /* irrTypes.h */; }; 8E8DEE7F127E2B78005EF64D /* irrXML.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE54127E2B78005EF64D /* irrXML.cpp */; }; 8E8DEE80127E2B78005EF64D /* irrXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE55127E2B78005EF64D /* irrXML.h */; }; 8E8DEE81127E2B78005EF64D /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE57127E2B78005EF64D /* crypt.h */; }; 8E8DEE82127E2B78005EF64D /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE58127E2B78005EF64D /* ioapi.c */; }; 8E8DEE83127E2B78005EF64D /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE59127E2B78005EF64D /* ioapi.h */; }; 8E8DEE84127E2B78005EF64D /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE5A127E2B78005EF64D /* unzip.c */; }; 8E8DEE85127E2B78005EF64D /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE5B127E2B78005EF64D /* unzip.h */; }; 8E8DEE86127E2B78005EF64D /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE4B127E2B78005EF64D /* ConvertUTF.c */; }; 8E8DEE87127E2B78005EF64D /* ConvertUTF.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4C127E2B78005EF64D /* ConvertUTF.h */; }; 8E8DEE88127E2B78005EF64D /* CXMLReaderImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4F127E2B78005EF64D /* CXMLReaderImpl.h */; }; 8E8DEE89127E2B78005EF64D /* heapsort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE50127E2B78005EF64D /* heapsort.h */; }; 8E8DEE8A127E2B78005EF64D /* irrArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE51127E2B78005EF64D /* irrArray.h */; }; 8E8DEE8B127E2B78005EF64D /* irrString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE52127E2B78005EF64D /* irrString.h */; }; 8E8DEE8C127E2B78005EF64D /* irrTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE53127E2B78005EF64D /* irrTypes.h */; }; 8E8DEE8D127E2B78005EF64D /* irrXML.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE54127E2B78005EF64D /* irrXML.cpp */; }; 8E8DEE8E127E2B78005EF64D /* irrXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE55127E2B78005EF64D /* irrXML.h */; }; 8E8DEE8F127E2B78005EF64D /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE57127E2B78005EF64D /* crypt.h */; }; 8E8DEE90127E2B78005EF64D /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE58127E2B78005EF64D /* ioapi.c */; }; 8E8DEE91127E2B78005EF64D /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE59127E2B78005EF64D /* ioapi.h */; }; 8E8DEE92127E2B78005EF64D /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE5A127E2B78005EF64D /* unzip.c */; }; 8E8DEE93127E2B78005EF64D /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE5B127E2B78005EF64D /* unzip.h */; }; F90BAFBA0F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BAFB90F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a */; }; F90BAFBC0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BAFBB0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a */; }; F90BAFD20F5DD87000124155 /* ACLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD00F5DD87000124155 /* ACLoader.cpp */; }; F90BAFD30F5DD87000124155 /* ACLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFD10F5DD87000124155 /* ACLoader.h */; }; F90BAFDF0F5DD90800124155 /* IRRLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD90F5DD90800124155 /* IRRLoader.cpp */; }; F90BAFE00F5DD90800124155 /* IRRLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDA0F5DD90800124155 /* IRRLoader.h */; }; F90BAFE10F5DD90800124155 /* IRRMeshLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDB0F5DD90800124155 /* IRRMeshLoader.cpp */; }; F90BAFE20F5DD90800124155 /* IRRMeshLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */; }; F90BAFE30F5DD90800124155 /* IRRShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDD0F5DD90800124155 /* IRRShared.cpp */; }; F90BAFE40F5DD90800124155 /* IRRShared.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDE0F5DD90800124155 /* IRRShared.h */; }; F90BAFED0F5DD93600124155 /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFE80F5DD93600124155 /* ColladaHelper.h */; }; F90BAFEE0F5DD93600124155 /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */; }; F90BAFEF0F5DD93600124155 /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEA0F5DD93600124155 /* ColladaLoader.h */; }; F90BAFF00F5DD93600124155 /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */; }; F90BAFF10F5DD93600124155 /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEC0F5DD93600124155 /* ColladaParser.h */; }; F90BAFF70F5DD96100124155 /* NFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFF50F5DD96100124155 /* NFFLoader.h */; }; F90BAFF80F5DD96100124155 /* NFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFF60F5DD96100124155 /* NFFLoader.cpp */; }; F90BAFFD0F5DD9A000124155 /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */; }; F90BAFFE0F5DD9A000124155 /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */; }; F90BB0080F5DD9DD00124155 /* Q3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */; }; F90BB0090F5DD9DD00124155 /* Q3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0070F5DD9DD00124155 /* Q3DLoader.h */; }; F90BB00E0F5DD9F400124155 /* BVHLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB00C0F5DD9F400124155 /* BVHLoader.h */; }; F90BB00F0F5DD9F400124155 /* BVHLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB00D0F5DD9F400124155 /* BVHLoader.cpp */; }; F90BB0150F5DDA1400124155 /* OFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0130F5DDA1400124155 /* OFFLoader.h */; }; F90BB0160F5DDA1400124155 /* OFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0140F5DDA1400124155 /* OFFLoader.cpp */; }; F90BB01D0F5DDA4400124155 /* RawLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB01B0F5DDA4400124155 /* RawLoader.h */; }; F90BB01E0F5DDA4400124155 /* RawLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB01C0F5DDA4400124155 /* RawLoader.cpp */; }; F90BB0230F5DDA5700124155 /* DXFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0210F5DDA5700124155 /* DXFLoader.h */; }; F90BB0240F5DDA5700124155 /* DXFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0220F5DDA5700124155 /* DXFLoader.cpp */; }; F90BB0280F5DDA9200124155 /* LWOBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0270F5DDA9200124155 /* LWOBLoader.cpp */; }; F90BB0310F5DDAB500124155 /* TerragenLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB02F0F5DDAB500124155 /* TerragenLoader.h */; }; F90BB0320F5DDAB500124155 /* TerragenLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */; }; F90BB0370F5DDB1B00124155 /* irrXMLWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */; }; F90BB03D0F5DDB3200124155 /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */; }; F90BB03E0F5DDB3200124155 /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */; }; F90BB03F0F5DDB3200124155 /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB03B0F5DDB3200124155 /* SceneCombiner.h */; }; F90BB0400F5DDB3200124155 /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */; }; F90BB0440F5DDB4600124155 /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */; }; F90BB0450F5DDB4600124155 /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */; }; F90BB0490F5DDB6100124155 /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0470F5DDB6100124155 /* FindDegenerates.h */; }; F90BB04A0F5DDB6100124155 /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */; }; F90BB04E0F5DDB8D00124155 /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */; }; F90BB04F0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */; }; F90BB0530F5DDBA800124155 /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0510F5DDBA800124155 /* StandardShapes.h */; }; F90BB0540F5DDBA800124155 /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0520F5DDBA800124155 /* StandardShapes.cpp */; }; F90BB0580F5DDBBF00124155 /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */; }; F90BB0590F5DDBBF00124155 /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */; }; F90BB05C0F5DDBCB00124155 /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */; }; F90BB05D0F5DDBCB00124155 /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */; }; F90BB0610F5DDBE600124155 /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */; }; F90BB0620F5DDBE600124155 /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */; }; F90BB0660F5DDC0700124155 /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */; }; F90BB0670F5DDC0700124155 /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */; }; F90BB06B0F5DDC1E00124155 /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */; }; F90BB06E0F5DDCFC00124155 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BB06D0F5DDCFC00124155 /* libz.dylib */; }; F90BB0890F5DDE0700124155 /* B3DImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0870F5DDE0700124155 /* B3DImporter.h */; }; F90BB08A0F5DDE0700124155 /* B3DImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0880F5DDE0700124155 /* B3DImporter.cpp */; }; F9606FF3154364E5004D91DD /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9606FF2154364E5004D91DD /* ProcessHelper.cpp */; }; F9606FF4154364E5004D91DD /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9606FF2154364E5004D91DD /* ProcessHelper.cpp */; }; F9606FF5154364E5004D91DD /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9606FF2154364E5004D91DD /* ProcessHelper.cpp */; }; F9606FF6154364E5004D91DD /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9606FF2154364E5004D91DD /* ProcessHelper.cpp */; }; F960705D154366AB004D91DD /* adler32.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607047154366AB004D91DD /* adler32.c */; }; F960705E154366AB004D91DD /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607049154366AB004D91DD /* compress.c */; }; F960705F154366AB004D91DD /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704A154366AB004D91DD /* crc32.c */; }; F9607060154366AB004D91DD /* crc32.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704B154366AB004D91DD /* crc32.h */; }; F9607061154366AB004D91DD /* deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704C154366AB004D91DD /* deflate.c */; }; F9607062154366AB004D91DD /* deflate.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704D154366AB004D91DD /* deflate.h */; }; F9607063154366AB004D91DD /* inffast.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704E154366AB004D91DD /* inffast.c */; }; F9607064154366AB004D91DD /* inffast.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704F154366AB004D91DD /* inffast.h */; }; F9607065154366AB004D91DD /* inffixed.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607050154366AB004D91DD /* inffixed.h */; }; F9607066154366AB004D91DD /* inflate.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607051154366AB004D91DD /* inflate.c */; }; F9607067154366AB004D91DD /* inflate.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607052154366AB004D91DD /* inflate.h */; }; F9607068154366AB004D91DD /* inftrees.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607053154366AB004D91DD /* inftrees.c */; }; F9607069154366AB004D91DD /* inftrees.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607054154366AB004D91DD /* inftrees.h */; }; F960706A154366AB004D91DD /* trees.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607056154366AB004D91DD /* trees.c */; }; F960706B154366AB004D91DD /* trees.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607057154366AB004D91DD /* trees.h */; }; F960706C154366AB004D91DD /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607058154366AB004D91DD /* zconf.h */; }; F960706D154366AB004D91DD /* zconf.in.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607059154366AB004D91DD /* zconf.in.h */; }; F960706E154366AB004D91DD /* zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = F960705A154366AB004D91DD /* zlib.h */; }; F960706F154366AB004D91DD /* zutil.c in Sources */ = {isa = PBXBuildFile; fileRef = F960705B154366AB004D91DD /* zutil.c */; }; F9607070154366AB004D91DD /* zutil.h in Headers */ = {isa = PBXBuildFile; fileRef = F960705C154366AB004D91DD /* zutil.h */; }; F9607071154366AB004D91DD /* adler32.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607047154366AB004D91DD /* adler32.c */; }; F9607072154366AB004D91DD /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607049154366AB004D91DD /* compress.c */; }; F9607073154366AB004D91DD /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704A154366AB004D91DD /* crc32.c */; }; F9607074154366AB004D91DD /* crc32.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704B154366AB004D91DD /* crc32.h */; }; F9607075154366AB004D91DD /* deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704C154366AB004D91DD /* deflate.c */; }; F9607076154366AB004D91DD /* deflate.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704D154366AB004D91DD /* deflate.h */; }; F9607077154366AB004D91DD /* inffast.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704E154366AB004D91DD /* inffast.c */; }; F9607078154366AB004D91DD /* inffast.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704F154366AB004D91DD /* inffast.h */; }; F9607079154366AB004D91DD /* inffixed.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607050154366AB004D91DD /* inffixed.h */; }; F960707A154366AB004D91DD /* inflate.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607051154366AB004D91DD /* inflate.c */; }; F960707B154366AB004D91DD /* inflate.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607052154366AB004D91DD /* inflate.h */; }; F960707C154366AB004D91DD /* inftrees.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607053154366AB004D91DD /* inftrees.c */; }; F960707D154366AB004D91DD /* inftrees.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607054154366AB004D91DD /* inftrees.h */; }; F960707E154366AB004D91DD /* trees.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607056154366AB004D91DD /* trees.c */; }; F960707F154366AB004D91DD /* trees.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607057154366AB004D91DD /* trees.h */; }; F9607080154366AB004D91DD /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607058154366AB004D91DD /* zconf.h */; }; F9607081154366AB004D91DD /* zconf.in.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607059154366AB004D91DD /* zconf.in.h */; }; F9607082154366AB004D91DD /* zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = F960705A154366AB004D91DD /* zlib.h */; }; F9607083154366AB004D91DD /* zutil.c in Sources */ = {isa = PBXBuildFile; fileRef = F960705B154366AB004D91DD /* zutil.c */; }; F9607084154366AB004D91DD /* zutil.h in Headers */ = {isa = PBXBuildFile; fileRef = F960705C154366AB004D91DD /* zutil.h */; }; F9607085154366AB004D91DD /* adler32.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607047154366AB004D91DD /* adler32.c */; }; F9607086154366AB004D91DD /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607049154366AB004D91DD /* compress.c */; }; F9607087154366AB004D91DD /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704A154366AB004D91DD /* crc32.c */; }; F9607088154366AB004D91DD /* crc32.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704B154366AB004D91DD /* crc32.h */; }; F9607089154366AB004D91DD /* deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704C154366AB004D91DD /* deflate.c */; }; F960708A154366AB004D91DD /* deflate.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704D154366AB004D91DD /* deflate.h */; }; F960708B154366AB004D91DD /* inffast.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704E154366AB004D91DD /* inffast.c */; }; F960708C154366AB004D91DD /* inffast.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704F154366AB004D91DD /* inffast.h */; }; F960708D154366AB004D91DD /* inffixed.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607050154366AB004D91DD /* inffixed.h */; }; F960708E154366AB004D91DD /* inflate.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607051154366AB004D91DD /* inflate.c */; }; F960708F154366AB004D91DD /* inflate.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607052154366AB004D91DD /* inflate.h */; }; F9607090154366AB004D91DD /* inftrees.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607053154366AB004D91DD /* inftrees.c */; }; F9607091154366AB004D91DD /* inftrees.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607054154366AB004D91DD /* inftrees.h */; }; F9607092154366AB004D91DD /* trees.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607056154366AB004D91DD /* trees.c */; }; F9607093154366AB004D91DD /* trees.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607057154366AB004D91DD /* trees.h */; }; F9607094154366AB004D91DD /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607058154366AB004D91DD /* zconf.h */; }; F9607095154366AB004D91DD /* zconf.in.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607059154366AB004D91DD /* zconf.in.h */; }; F9607096154366AB004D91DD /* zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = F960705A154366AB004D91DD /* zlib.h */; }; F9607097154366AB004D91DD /* zutil.c in Sources */ = {isa = PBXBuildFile; fileRef = F960705B154366AB004D91DD /* zutil.c */; }; F9607098154366AB004D91DD /* zutil.h in Headers */ = {isa = PBXBuildFile; fileRef = F960705C154366AB004D91DD /* zutil.h */; }; F9607099154366AB004D91DD /* adler32.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607047154366AB004D91DD /* adler32.c */; }; F960709A154366AB004D91DD /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607049154366AB004D91DD /* compress.c */; }; F960709B154366AB004D91DD /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704A154366AB004D91DD /* crc32.c */; }; F960709C154366AB004D91DD /* crc32.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704B154366AB004D91DD /* crc32.h */; }; F960709D154366AB004D91DD /* deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704C154366AB004D91DD /* deflate.c */; }; F960709E154366AB004D91DD /* deflate.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704D154366AB004D91DD /* deflate.h */; }; F960709F154366AB004D91DD /* inffast.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704E154366AB004D91DD /* inffast.c */; }; F96070A0154366AB004D91DD /* inffast.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704F154366AB004D91DD /* inffast.h */; }; F96070A1154366AB004D91DD /* inffixed.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607050154366AB004D91DD /* inffixed.h */; }; F96070A2154366AB004D91DD /* inflate.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607051154366AB004D91DD /* inflate.c */; }; F96070A3154366AB004D91DD /* inflate.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607052154366AB004D91DD /* inflate.h */; }; F96070A4154366AB004D91DD /* inftrees.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607053154366AB004D91DD /* inftrees.c */; }; F96070A5154366AB004D91DD /* inftrees.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607054154366AB004D91DD /* inftrees.h */; }; F96070A6154366AB004D91DD /* trees.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607056154366AB004D91DD /* trees.c */; }; F96070A7154366AB004D91DD /* trees.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607057154366AB004D91DD /* trees.h */; }; F96070A8154366AB004D91DD /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607058154366AB004D91DD /* zconf.h */; }; F96070A9154366AB004D91DD /* zconf.in.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607059154366AB004D91DD /* zconf.in.h */; }; F96070AA154366AB004D91DD /* zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = F960705A154366AB004D91DD /* zlib.h */; }; F96070AB154366AB004D91DD /* zutil.c in Sources */ = {isa = PBXBuildFile; fileRef = F960705B154366AB004D91DD /* zutil.c */; }; F96070AC154366AB004D91DD /* zutil.h in Headers */ = {isa = PBXBuildFile; fileRef = F960705C154366AB004D91DD /* zutil.h */; }; F96070B7154366ED004D91DD /* XGLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96070B5154366ED004D91DD /* XGLLoader.cpp */; }; F96070B8154366ED004D91DD /* XGLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070B6154366ED004D91DD /* XGLLoader.h */; }; F96070B9154366ED004D91DD /* XGLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96070B5154366ED004D91DD /* XGLLoader.cpp */; }; F96070BA154366ED004D91DD /* XGLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070B6154366ED004D91DD /* XGLLoader.h */; }; F96070BB154366ED004D91DD /* XGLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96070B5154366ED004D91DD /* XGLLoader.cpp */; }; F96070BC154366ED004D91DD /* XGLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070B6154366ED004D91DD /* XGLLoader.h */; }; F96070BD154366ED004D91DD /* XGLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96070B5154366ED004D91DD /* XGLLoader.cpp */; }; F96070BE154366ED004D91DD /* XGLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070B6154366ED004D91DD /* XGLLoader.h */; }; F96070C81543673B004D91DD /* clipper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96070C51543673B004D91DD /* clipper.cpp */; }; F96070C91543673B004D91DD /* clipper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F96070C61543673B004D91DD /* clipper.hpp */; }; F96070CA1543673B004D91DD /* clipper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96070C51543673B004D91DD /* clipper.cpp */; }; F96070CB1543673B004D91DD /* clipper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F96070C61543673B004D91DD /* clipper.hpp */; }; F96070CC1543673B004D91DD /* clipper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96070C51543673B004D91DD /* clipper.cpp */; }; F96070CD1543673B004D91DD /* clipper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F96070C61543673B004D91DD /* clipper.hpp */; }; F96070CE1543673B004D91DD /* clipper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96070C51543673B004D91DD /* clipper.cpp */; }; F96070CF1543673B004D91DD /* clipper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F96070C61543673B004D91DD /* clipper.hpp */; }; F96070DF1543675E004D91DD /* shapes.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D21543675E004D91DD /* shapes.cc */; }; F96070E01543675E004D91DD /* shapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D31543675E004D91DD /* shapes.h */; }; F96070E11543675E004D91DD /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D41543675E004D91DD /* utils.h */; }; F96070E21543675E004D91DD /* poly2tri.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D51543675E004D91DD /* poly2tri.h */; }; F96070E31543675E004D91DD /* advancing_front.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D71543675E004D91DD /* advancing_front.cc */; }; F96070E41543675E004D91DD /* advancing_front.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D81543675E004D91DD /* advancing_front.h */; }; F96070E51543675E004D91DD /* cdt.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D91543675E004D91DD /* cdt.cc */; }; F96070E61543675E004D91DD /* cdt.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DA1543675E004D91DD /* cdt.h */; }; F96070E71543675E004D91DD /* sweep.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070DB1543675E004D91DD /* sweep.cc */; }; F96070E81543675E004D91DD /* sweep.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DC1543675E004D91DD /* sweep.h */; }; F96070E91543675E004D91DD /* sweep_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070DD1543675E004D91DD /* sweep_context.cc */; }; F96070EA1543675E004D91DD /* sweep_context.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DE1543675E004D91DD /* sweep_context.h */; }; F96070EB1543675E004D91DD /* shapes.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D21543675E004D91DD /* shapes.cc */; }; F96070EC1543675E004D91DD /* shapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D31543675E004D91DD /* shapes.h */; }; F96070ED1543675E004D91DD /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D41543675E004D91DD /* utils.h */; }; F96070EE1543675E004D91DD /* poly2tri.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D51543675E004D91DD /* poly2tri.h */; }; F96070EF1543675E004D91DD /* advancing_front.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D71543675E004D91DD /* advancing_front.cc */; }; F96070F01543675E004D91DD /* advancing_front.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D81543675E004D91DD /* advancing_front.h */; }; F96070F11543675E004D91DD /* cdt.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D91543675E004D91DD /* cdt.cc */; }; F96070F21543675E004D91DD /* cdt.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DA1543675E004D91DD /* cdt.h */; }; F96070F31543675E004D91DD /* sweep.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070DB1543675E004D91DD /* sweep.cc */; }; F96070F41543675E004D91DD /* sweep.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DC1543675E004D91DD /* sweep.h */; }; F96070F51543675E004D91DD /* sweep_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070DD1543675E004D91DD /* sweep_context.cc */; }; F96070F61543675E004D91DD /* sweep_context.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DE1543675E004D91DD /* sweep_context.h */; }; F96070F71543675E004D91DD /* shapes.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D21543675E004D91DD /* shapes.cc */; }; F96070F81543675E004D91DD /* shapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D31543675E004D91DD /* shapes.h */; }; F96070F91543675E004D91DD /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D41543675E004D91DD /* utils.h */; }; F96070FA1543675E004D91DD /* poly2tri.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D51543675E004D91DD /* poly2tri.h */; }; F96070FB1543675E004D91DD /* advancing_front.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D71543675E004D91DD /* advancing_front.cc */; }; F96070FC1543675E004D91DD /* advancing_front.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D81543675E004D91DD /* advancing_front.h */; }; F96070FD1543675E004D91DD /* cdt.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D91543675E004D91DD /* cdt.cc */; }; F96070FE1543675E004D91DD /* cdt.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DA1543675E004D91DD /* cdt.h */; }; F96070FF1543675E004D91DD /* sweep.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070DB1543675E004D91DD /* sweep.cc */; }; F96071001543675E004D91DD /* sweep.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DC1543675E004D91DD /* sweep.h */; }; F96071011543675E004D91DD /* sweep_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070DD1543675E004D91DD /* sweep_context.cc */; }; F96071021543675E004D91DD /* sweep_context.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DE1543675E004D91DD /* sweep_context.h */; }; F96071031543675E004D91DD /* shapes.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D21543675E004D91DD /* shapes.cc */; }; F96071041543675E004D91DD /* shapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D31543675E004D91DD /* shapes.h */; }; F96071051543675E004D91DD /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D41543675E004D91DD /* utils.h */; }; F96071061543675E004D91DD /* poly2tri.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D51543675E004D91DD /* poly2tri.h */; }; F96071071543675E004D91DD /* advancing_front.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D71543675E004D91DD /* advancing_front.cc */; }; F96071081543675E004D91DD /* advancing_front.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D81543675E004D91DD /* advancing_front.h */; }; F96071091543675E004D91DD /* cdt.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D91543675E004D91DD /* cdt.cc */; }; F960710A1543675E004D91DD /* cdt.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DA1543675E004D91DD /* cdt.h */; }; F960710B1543675E004D91DD /* sweep.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070DB1543675E004D91DD /* sweep.cc */; }; F960710C1543675E004D91DD /* sweep.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DC1543675E004D91DD /* sweep.h */; }; F960710D1543675E004D91DD /* sweep_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070DD1543675E004D91DD /* sweep_context.cc */; }; F960710E1543675E004D91DD /* sweep_context.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DE1543675E004D91DD /* sweep_context.h */; }; F962E8880F5DE6B4009A5495 /* libboost_date_time-xgcc40-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BAFB90F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a */; }; F962E8890F5DE6B4009A5495 /* libboost_thread-xgcc40-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BAFBB0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a */; }; F962E88A0F5DE6B4009A5495 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BB06D0F5DDCFC00124155 /* libz.dylib */; }; F962E88B0F5DE6C8009A5495 /* 3DSConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */; }; F962E88C0F5DE6C8009A5495 /* 3DSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A890E4B716800207D74 /* 3DSLoader.cpp */; }; F962E88E0F5DE6C8009A5495 /* ASELoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A8E0E4B716800207D74 /* ASELoader.cpp */; }; F962E88F0F5DE6C8009A5495 /* ASEParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A900E4B716800207D74 /* ASEParser.cpp */; }; F962E8900F5DE6C8009A5495 /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A920E4B716800207D74 /* Assimp.cpp */; }; F962E8910F5DE6C8009A5495 /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A930E4B716800207D74 /* BaseImporter.cpp */; }; F962E8920F5DE6C8009A5495 /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */; }; F962E8930F5DE6C8009A5495 /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */; }; F962E8940F5DE6C8009A5495 /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */; }; F962E8950F5DE6C8009A5495 /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */; }; F962E8960F5DE6C8009A5495 /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */; }; F962E8980F5DE6C8009A5495 /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */; }; F962E8990F5DE6C8009A5495 /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */; }; F962E89A0F5DE6C8009A5495 /* HMPLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */; }; F962E89B0F5DE6C8009A5495 /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAD0E4B716800207D74 /* Importer.cpp */; }; F962E89C0F5DE6C8009A5495 /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */; }; F962E89D0F5DE6C8009A5495 /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */; }; F962E89E0F5DE6C8009A5495 /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */; }; F962E89F0F5DE6C8009A5495 /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */; }; F962E8A00F5DE6C8009A5495 /* MD2Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */; }; F962E8A10F5DE6C8009A5495 /* MD3Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ABD0E4B716800207D74 /* MD3Loader.cpp */; }; F962E8A20F5DE6C8009A5495 /* MD5Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC20E4B716800207D74 /* MD5Loader.cpp */; }; F962E8A30F5DE6C8009A5495 /* MD5Parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC40E4B716800207D74 /* MD5Parser.cpp */; }; F962E8A40F5DE6C8009A5495 /* MDLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */; }; F962E8A50F5DE6C8009A5495 /* MDLMaterialLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */; }; F962E8A60F5DE6C8009A5495 /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */; }; F962E8A70F5DE6C8009A5495 /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */; }; F962E8A80F5DE6C8009A5495 /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */; }; F962E8A90F5DE6C8009A5495 /* PlyLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */; }; F962E8AA0F5DE6C8009A5495 /* PlyParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD60E4B716800207D74 /* PlyParser.cpp */; }; F962E8AB0F5DE6C8009A5495 /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */; }; F962E8AC0F5DE6C8009A5495 /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */; }; F962E8AD0F5DE6C8009A5495 /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */; }; F962E8AE0F5DE6C8009A5495 /* SMDLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */; }; F962E8AF0F5DE6C8009A5495 /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */; }; F962E8B00F5DE6C8009A5495 /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */; }; F962E8B10F5DE6C8009A5495 /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE80E4B716800207D74 /* STLLoader.cpp */; }; F962E8B20F5DE6C8009A5495 /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */; }; F962E8B30F5DE6C8009A5495 /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */; }; F962E8B40F5DE6C8009A5495 /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */; }; F962E8B50F5DE6C8009A5495 /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */; }; F962E8B60F5DE6C8009A5495 /* XFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */; }; F962E8B70F5DE6C8009A5495 /* XFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF70E4B716800207D74 /* XFileParser.cpp */; }; F962E8B80F5DE6C8009A5495 /* MDCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */; }; F962E8B90F5DE6C8009A5495 /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */; }; F962E8BA0F5DE6C8009A5495 /* LWOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */; }; F962E8BB0F5DE6C8009A5495 /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */; }; F962E8BC0F5DE6C8009A5495 /* LWOMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */; }; F962E8BD0F5DE6C8009A5495 /* ACLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD00F5DD87000124155 /* ACLoader.cpp */; }; F962E8BE0F5DE6C8009A5495 /* IRRLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD90F5DD90800124155 /* IRRLoader.cpp */; }; F962E8BF0F5DE6C8009A5495 /* IRRMeshLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDB0F5DD90800124155 /* IRRMeshLoader.cpp */; }; F962E8C00F5DE6C8009A5495 /* IRRShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDD0F5DD90800124155 /* IRRShared.cpp */; }; F962E8C10F5DE6C8009A5495 /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */; }; F962E8C20F5DE6C8009A5495 /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */; }; F962E8C30F5DE6C8009A5495 /* NFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFF60F5DD96100124155 /* NFFLoader.cpp */; }; F962E8C40F5DE6C8009A5495 /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */; }; F962E8C50F5DE6C8009A5495 /* Q3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */; }; F962E8C60F5DE6C8009A5495 /* BVHLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB00D0F5DD9F400124155 /* BVHLoader.cpp */; }; F962E8C70F5DE6C8009A5495 /* OFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0140F5DDA1400124155 /* OFFLoader.cpp */; }; F962E8C80F5DE6C8009A5495 /* RawLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB01C0F5DDA4400124155 /* RawLoader.cpp */; }; F962E8C90F5DE6C8009A5495 /* DXFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0220F5DDA5700124155 /* DXFLoader.cpp */; }; F962E8CA0F5DE6C8009A5495 /* LWOBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0270F5DDA9200124155 /* LWOBLoader.cpp */; }; F962E8CB0F5DE6C8009A5495 /* TerragenLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */; }; F962E8CC0F5DE6C8009A5495 /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */; }; F962E8CD0F5DE6C8009A5495 /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */; }; F962E8CE0F5DE6C8009A5495 /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */; }; F962E8CF0F5DE6C8009A5495 /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */; }; F962E8D00F5DE6C8009A5495 /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */; }; F962E8D10F5DE6C8009A5495 /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0520F5DDBA800124155 /* StandardShapes.cpp */; }; F962E8D20F5DE6C8009A5495 /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */; }; F962E8D30F5DE6C8009A5495 /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */; }; F962E8D40F5DE6C8009A5495 /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */; }; F962E8D50F5DE6C8009A5495 /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */; }; F962E8D70F5DE6C8009A5495 /* B3DImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0880F5DDE0700124155 /* B3DImporter.cpp */; }; F962E8ED0F5DE6E2009A5495 /* 3DSHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A880E4B716800207D74 /* 3DSHelper.h */; }; F962E8EE0F5DE6E2009A5495 /* 3DSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8A0E4B716800207D74 /* 3DSLoader.h */; }; F962E8EF0F5DE6E2009A5495 /* ASELoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8F0E4B716800207D74 /* ASELoader.h */; }; F962E8F00F5DE6E2009A5495 /* ASEParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A910E4B716800207D74 /* ASEParser.h */; }; F962E8F10F5DE6E2009A5495 /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A940E4B716800207D74 /* BaseImporter.h */; }; F962E8F20F5DE6E2009A5495 /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A950E4B716800207D74 /* BaseProcess.h */; }; F962E8F30F5DE6E2009A5495 /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A960E4B716800207D74 /* ByteSwap.h */; }; F962E8F40F5DE6E2009A5495 /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */; }; F962E8F50F5DE6E2009A5495 /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */; }; F962E8F60F5DE6E2009A5495 /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */; }; F962E8F70F5DE6E2009A5495 /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */; }; F962E8F90F5DE6E2009A5495 /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA30E4B716800207D74 /* fast_atof.h */; }; F962E8FA0F5DE6E2009A5495 /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA40E4B716800207D74 /* FileLogStream.h */; }; F962E8FB0F5DE6E2009A5495 /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */; }; F962E8FC0F5DE6E2009A5495 /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */; }; F962E8FD0F5DE6E2009A5495 /* HalfLifeFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */; }; F962E8FE0F5DE6E2009A5495 /* HMPLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAC0E4B716800207D74 /* HMPLoader.h */; }; F962E8FF0F5DE6E2009A5495 /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */; }; F962E9000F5DE6E2009A5495 /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */; }; F962E9010F5DE6E2009A5495 /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */; }; F962E9020F5DE6E2009A5495 /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB70E4B716800207D74 /* MaterialSystem.h */; }; F962E9030F5DE6E2009A5495 /* MD2FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB80E4B716800207D74 /* MD2FileData.h */; }; F962E9040F5DE6E2009A5495 /* MD2Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABA0E4B716800207D74 /* MD2Loader.h */; }; F962E9050F5DE6E2009A5495 /* MD2NormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABB0E4B716800207D74 /* MD2NormalTable.h */; }; F962E9060F5DE6E2009A5495 /* MD3FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABC0E4B716800207D74 /* MD3FileData.h */; }; F962E9070F5DE6E2009A5495 /* MD3Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABE0E4B716800207D74 /* MD3Loader.h */; }; F962E9080F5DE6E2009A5495 /* MD5Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC30E4B716800207D74 /* MD5Loader.h */; }; F962E9090F5DE6E2009A5495 /* MD5Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC50E4B716800207D74 /* MD5Parser.h */; }; F962E90A0F5DE6E2009A5495 /* MDLDefaultColorMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC60E4B716800207D74 /* MDLDefaultColorMap.h */; }; F962E90B0F5DE6E2009A5495 /* MDLFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC70E4B716800207D74 /* MDLFileData.h */; }; F962E90C0F5DE6E2009A5495 /* MDLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC90E4B716800207D74 /* MDLLoader.h */; }; F962E90D0F5DE6E2009A5495 /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACB0E4B716800207D74 /* ObjFileData.h */; }; F962E90E0F5DE6E2009A5495 /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */; }; F962E90F0F5DE6E2009A5495 /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */; }; F962E9100F5DE6E2009A5495 /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD10E4B716800207D74 /* ObjFileParser.h */; }; F962E9110F5DE6E2009A5495 /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD20E4B716800207D74 /* ObjTools.h */; }; F962E9120F5DE6E2009A5495 /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD30E4B716800207D74 /* ParsingUtils.h */; }; F962E9130F5DE6E2009A5495 /* PlyLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD50E4B716800207D74 /* PlyLoader.h */; }; F962E9140F5DE6E2009A5495 /* PlyParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD70E4B716800207D74 /* PlyParser.h */; }; F962E9150F5DE6E2009A5495 /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD90E4B716800207D74 /* PretransformVertices.h */; }; F962E9160F5DE6E2009A5495 /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADA0E4B716800207D74 /* qnan.h */; }; F962E9170F5DE6E2009A5495 /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADC0E4B716800207D74 /* RemoveComments.h */; }; F962E9180F5DE6E2009A5495 /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */; }; F962E9190F5DE6E2009A5495 /* SMDLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE30E4B716800207D74 /* SMDLoader.h */; }; F962E91A0F5DE6E2009A5495 /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE50E4B716800207D74 /* SpatialSort.h */; }; F962E91B0F5DE6E2009A5495 /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */; }; F962E91C0F5DE6E2009A5495 /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE90E4B716800207D74 /* STLLoader.h */; }; F962E91D0F5DE6E2009A5495 /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEA0E4B716800207D74 /* StringComparison.h */; }; F962E91E0F5DE6E2009A5495 /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEC0E4B716800207D74 /* TextureTransform.h */; }; F962E91F0F5DE6E2009A5495 /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */; }; F962E9200F5DE6E2009A5495 /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */; }; F962E9210F5DE6E2009A5495 /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */; }; F962E9220F5DE6E2009A5495 /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */; }; F962E9230F5DE6E2009A5495 /* XFileHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF40E4B716800207D74 /* XFileHelper.h */; }; F962E9240F5DE6E2009A5495 /* XFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF60E4B716800207D74 /* XFileImporter.h */; }; F962E9250F5DE6E2009A5495 /* XFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF80E4B716800207D74 /* XFileParser.h */; }; F962E9280F5DE6E2009A5495 /* MDCFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */; }; F962E9290F5DE6E2009A5495 /* MDCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */; }; F962E92A0F5DE6E2009A5495 /* MDCNormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */; }; F962E92B0F5DE6E2009A5495 /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */; }; F962E92C0F5DE6E2009A5495 /* LWOFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */; }; F962E92D0F5DE6E2009A5495 /* LWOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */; }; F962E92E0F5DE6E2009A5495 /* HMPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C50E50D77900606590 /* HMPFileData.h */; }; F962E9300F5DE6E2009A5495 /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C90E50D7CC00606590 /* IFF.h */; }; F962E9310F5DE6E2009A5495 /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3CB0E50D7FF00606590 /* Hash.h */; }; F962E9360F5DE6E2009A5495 /* ACLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFD10F5DD87000124155 /* ACLoader.h */; }; F962E9370F5DE6E2009A5495 /* IRRLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDA0F5DD90800124155 /* IRRLoader.h */; }; F962E9380F5DE6E2009A5495 /* IRRMeshLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */; }; F962E9390F5DE6E2009A5495 /* IRRShared.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDE0F5DD90800124155 /* IRRShared.h */; }; F962E93A0F5DE6E2009A5495 /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFE80F5DD93600124155 /* ColladaHelper.h */; }; F962E93B0F5DE6E2009A5495 /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEA0F5DD93600124155 /* ColladaLoader.h */; }; F962E93C0F5DE6E2009A5495 /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEC0F5DD93600124155 /* ColladaParser.h */; }; F962E93D0F5DE6E2009A5495 /* NFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFF50F5DD96100124155 /* NFFLoader.h */; }; F962E93E0F5DE6E2009A5495 /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */; }; F962E93F0F5DE6E2009A5495 /* Q3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0070F5DD9DD00124155 /* Q3DLoader.h */; }; F962E9400F5DE6E2009A5495 /* BVHLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB00C0F5DD9F400124155 /* BVHLoader.h */; }; F962E9410F5DE6E2009A5495 /* OFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0130F5DDA1400124155 /* OFFLoader.h */; }; F962E9420F5DE6E2009A5495 /* RawLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB01B0F5DDA4400124155 /* RawLoader.h */; }; F962E9430F5DE6E2009A5495 /* DXFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0210F5DDA5700124155 /* DXFLoader.h */; }; F962E9440F5DE6E2009A5495 /* TerragenLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB02F0F5DDAB500124155 /* TerragenLoader.h */; }; F962E9450F5DE6E2009A5495 /* irrXMLWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */; }; F962E9460F5DE6E2009A5495 /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */; }; F962E9470F5DE6E2009A5495 /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB03B0F5DDB3200124155 /* SceneCombiner.h */; }; F962E9480F5DE6E2009A5495 /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */; }; F962E9490F5DE6E2009A5495 /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0470F5DDB6100124155 /* FindDegenerates.h */; }; F962E94A0F5DE6E2009A5495 /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */; }; F962E94B0F5DE6E2009A5495 /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0510F5DDBA800124155 /* StandardShapes.h */; }; F962E94C0F5DE6E2009A5495 /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */; }; F962E94D0F5DE6E2009A5495 /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */; }; F962E94E0F5DE6E2009A5495 /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */; }; F962E94F0F5DE6E2009A5495 /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */; }; F962E9500F5DE6E2009A5495 /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */; }; F962E9570F5DE6E2009A5495 /* B3DImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0870F5DDE0700124155 /* B3DImporter.h */; }; F97BA03615439DB3009EB9DD /* ai_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA03515439DB3009EB9DD /* ai_assert.h */; }; F97BA03715439DB3009EB9DD /* ai_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA03515439DB3009EB9DD /* ai_assert.h */; }; F97BA03815439DB3009EB9DD /* ai_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA03515439DB3009EB9DD /* ai_assert.h */; }; F97BA03915439DB3009EB9DD /* ai_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA03515439DB3009EB9DD /* ai_assert.h */; }; F97BA07015439FC3009EB9DD /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06615439FC3009EB9DD /* IFCCurve.cpp */; }; F97BA07115439FC3009EB9DD /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */; }; F97BA07215439FC3009EB9DD /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06815439FC3009EB9DD /* IFCLoader.cpp */; }; F97BA07315439FC3009EB9DD /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06915439FC3009EB9DD /* IFCLoader.h */; }; F97BA07415439FC3009EB9DD /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */; }; F97BA07515439FC3009EB9DD /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */; }; F97BA07615439FC3009EB9DD /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */; }; F97BA07715439FC3009EB9DD /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */; }; F97BA07815439FC3009EB9DD /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */; }; F97BA07915439FC3009EB9DD /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06F15439FC3009EB9DD /* IFCUtil.h */; }; F97BA07A15439FC3009EB9DD /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06615439FC3009EB9DD /* IFCCurve.cpp */; }; F97BA07B15439FC3009EB9DD /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */; }; F97BA07C15439FC3009EB9DD /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06815439FC3009EB9DD /* IFCLoader.cpp */; }; F97BA07D15439FC3009EB9DD /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06915439FC3009EB9DD /* IFCLoader.h */; }; F97BA07E15439FC3009EB9DD /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */; }; F97BA07F15439FC3009EB9DD /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */; }; F97BA08015439FC3009EB9DD /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */; }; F97BA08115439FC3009EB9DD /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */; }; F97BA08215439FC3009EB9DD /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */; }; F97BA08315439FC3009EB9DD /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06F15439FC3009EB9DD /* IFCUtil.h */; }; F97BA08415439FC3009EB9DD /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06615439FC3009EB9DD /* IFCCurve.cpp */; }; F97BA08515439FC3009EB9DD /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */; }; F97BA08615439FC3009EB9DD /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06815439FC3009EB9DD /* IFCLoader.cpp */; }; F97BA08715439FC3009EB9DD /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06915439FC3009EB9DD /* IFCLoader.h */; }; F97BA08815439FC3009EB9DD /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */; }; F97BA08915439FC3009EB9DD /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */; }; F97BA08A15439FC3009EB9DD /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */; }; F97BA08B15439FC3009EB9DD /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */; }; F97BA08C15439FC3009EB9DD /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */; }; F97BA08D15439FC3009EB9DD /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06F15439FC3009EB9DD /* IFCUtil.h */; }; F97BA08E15439FC3009EB9DD /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06615439FC3009EB9DD /* IFCCurve.cpp */; }; F97BA08F15439FC3009EB9DD /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */; }; F97BA09015439FC3009EB9DD /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06815439FC3009EB9DD /* IFCLoader.cpp */; }; F97BA09115439FC3009EB9DD /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06915439FC3009EB9DD /* IFCLoader.h */; }; F97BA09215439FC3009EB9DD /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */; }; F97BA09315439FC3009EB9DD /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */; }; F97BA09415439FC3009EB9DD /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */; }; F97BA09515439FC3009EB9DD /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */; }; F97BA09615439FC3009EB9DD /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */; }; F97BA09715439FC3009EB9DD /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06F15439FC3009EB9DD /* IFCUtil.h */; }; F99A9EB415436077000682F3 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB315436077000682F3 /* BlobIOSystem.h */; }; F99A9EB515436077000682F3 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB315436077000682F3 /* BlobIOSystem.h */; }; F99A9EB615436077000682F3 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB315436077000682F3 /* BlobIOSystem.h */; }; F99A9EB715436077000682F3 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB315436077000682F3 /* BlobIOSystem.h */; }; F99A9EB915436098000682F3 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB815436098000682F3 /* lexical_cast.hpp */; }; F99A9EBA15436098000682F3 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB815436098000682F3 /* lexical_cast.hpp */; }; F99A9EBB15436098000682F3 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB815436098000682F3 /* lexical_cast.hpp */; }; F99A9EBC15436098000682F3 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB815436098000682F3 /* lexical_cast.hpp */; }; F99A9EBE154360A0000682F3 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EBD154360A0000682F3 /* make_shared.hpp */; }; F99A9EBF154360A0000682F3 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EBD154360A0000682F3 /* make_shared.hpp */; }; F99A9EC0154360A0000682F3 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EBD154360A0000682F3 /* make_shared.hpp */; }; F99A9EC1154360A0000682F3 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EBD154360A0000682F3 /* make_shared.hpp */; }; F99A9EC3154360A5000682F3 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC2154360A5000682F3 /* noncopyable.hpp */; }; F99A9EC4154360A5000682F3 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC2154360A5000682F3 /* noncopyable.hpp */; }; F99A9EC5154360A5000682F3 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC2154360A5000682F3 /* noncopyable.hpp */; }; F99A9EC6154360A5000682F3 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC2154360A5000682F3 /* noncopyable.hpp */; }; F99A9EC8154360B5000682F3 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC7154360B5000682F3 /* timer.hpp */; }; F99A9EC9154360B5000682F3 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC7154360B5000682F3 /* timer.hpp */; }; F99A9ECA154360B5000682F3 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC7154360B5000682F3 /* timer.hpp */; }; F99A9ECB154360B5000682F3 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC7154360B5000682F3 /* timer.hpp */; }; F99A9ECD154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */; }; F99A9ECE154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */; }; F99A9ECF154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */; }; F99A9ED0154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */; }; F99A9ED315436125000682F3 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9ED115436125000682F3 /* DeboneProcess.cpp */; }; F99A9ED415436125000682F3 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ED215436125000682F3 /* DeboneProcess.h */; }; F99A9ED515436125000682F3 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9ED115436125000682F3 /* DeboneProcess.cpp */; }; F99A9ED615436125000682F3 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ED215436125000682F3 /* DeboneProcess.h */; }; F99A9ED715436125000682F3 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9ED115436125000682F3 /* DeboneProcess.cpp */; }; F99A9ED815436125000682F3 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ED215436125000682F3 /* DeboneProcess.h */; }; F99A9ED915436125000682F3 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9ED115436125000682F3 /* DeboneProcess.cpp */; }; F99A9EDA15436125000682F3 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ED215436125000682F3 /* DeboneProcess.h */; }; F99A9F18154361AD000682F3 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */; }; F99A9F19154361AD000682F3 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */; }; F99A9F1A154361AD000682F3 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */; }; F99A9F1B154361AD000682F3 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */; }; F99A9F1D154361D4000682F3 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F1C154361D4000682F3 /* LogAux.h */; }; F99A9F1E154361D4000682F3 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F1C154361D4000682F3 /* LogAux.h */; }; F99A9F1F154361D4000682F3 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F1C154361D4000682F3 /* LogAux.h */; }; F99A9F20154361D4000682F3 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F1C154361D4000682F3 /* LogAux.h */; }; F99A9F2815436207000682F3 /* M3Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F2615436207000682F3 /* M3Importer.cpp */; }; F99A9F2915436207000682F3 /* M3Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F2715436207000682F3 /* M3Importer.h */; }; F99A9F2A15436207000682F3 /* M3Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F2615436207000682F3 /* M3Importer.cpp */; }; F99A9F2B15436207000682F3 /* M3Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F2715436207000682F3 /* M3Importer.h */; }; F99A9F2C15436207000682F3 /* M3Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F2615436207000682F3 /* M3Importer.cpp */; }; F99A9F2D15436207000682F3 /* M3Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F2715436207000682F3 /* M3Importer.h */; }; F99A9F2E15436207000682F3 /* M3Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F2615436207000682F3 /* M3Importer.cpp */; }; F99A9F2F15436207000682F3 /* M3Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F2715436207000682F3 /* M3Importer.h */; }; F99A9F3215436269000682F3 /* PlyExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3015436269000682F3 /* PlyExporter.cpp */; }; F99A9F3315436269000682F3 /* PlyExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3115436269000682F3 /* PlyExporter.h */; }; F99A9F3415436269000682F3 /* PlyExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3015436269000682F3 /* PlyExporter.cpp */; }; F99A9F3515436269000682F3 /* PlyExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3115436269000682F3 /* PlyExporter.h */; }; F99A9F3615436269000682F3 /* PlyExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3015436269000682F3 /* PlyExporter.cpp */; }; F99A9F3715436269000682F3 /* PlyExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3115436269000682F3 /* PlyExporter.h */; }; F99A9F3815436269000682F3 /* PlyExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3015436269000682F3 /* PlyExporter.cpp */; }; F99A9F3915436269000682F3 /* PlyExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3115436269000682F3 /* PlyExporter.h */; }; F99A9F3B15436286000682F3 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3A15436286000682F3 /* PolyTools.h */; }; F99A9F3C15436286000682F3 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3A15436286000682F3 /* PolyTools.h */; }; F99A9F3D15436286000682F3 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3A15436286000682F3 /* PolyTools.h */; }; F99A9F3E15436286000682F3 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3A15436286000682F3 /* PolyTools.h */; }; F99A9F401543629F000682F3 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */; }; F99A9F411543629F000682F3 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */; }; F99A9F421543629F000682F3 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */; }; F99A9F431543629F000682F3 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */; }; F99A9F45154362DE000682F3 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F44154362DE000682F3 /* ScenePrivate.h */; }; F99A9F46154362DE000682F3 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F44154362DE000682F3 /* ScenePrivate.h */; }; F99A9F47154362DE000682F3 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F44154362DE000682F3 /* ScenePrivate.h */; }; F99A9F48154362DE000682F3 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F44154362DE000682F3 /* ScenePrivate.h */; }; F99A9F4B15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */; }; F99A9F4C15436304000682F3 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */; }; F99A9F4D15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */; }; F99A9F4E15436304000682F3 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */; }; F99A9F4F15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */; }; F99A9F5015436304000682F3 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */; }; F99A9F5115436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */; }; F99A9F5215436304000682F3 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */; }; F99A9F5C15436323000682F3 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5915436323000682F3 /* STEPFile.h */; }; F99A9F5D15436323000682F3 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F5A15436323000682F3 /* STEPFileReader.cpp */; }; F99A9F5E15436323000682F3 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5B15436323000682F3 /* STEPFileReader.h */; }; F99A9F5F15436323000682F3 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5915436323000682F3 /* STEPFile.h */; }; F99A9F6015436323000682F3 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F5A15436323000682F3 /* STEPFileReader.cpp */; }; F99A9F6115436323000682F3 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5B15436323000682F3 /* STEPFileReader.h */; }; F99A9F6215436323000682F3 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5915436323000682F3 /* STEPFile.h */; }; F99A9F6315436323000682F3 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F5A15436323000682F3 /* STEPFileReader.cpp */; }; F99A9F6415436323000682F3 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5B15436323000682F3 /* STEPFileReader.h */; }; F99A9F6515436323000682F3 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5915436323000682F3 /* STEPFile.h */; }; F99A9F6615436323000682F3 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F5A15436323000682F3 /* STEPFileReader.cpp */; }; F99A9F6715436323000682F3 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5B15436323000682F3 /* STEPFileReader.h */; }; F9BA8B9F1543268400E63FFE /* anim.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B751543268400E63FFE /* anim.h */; }; F9BA8BA11543268400E63FFE /* camera.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B771543268400E63FFE /* camera.h */; }; F9BA8BA21543268400E63FFE /* cexport.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B781543268400E63FFE /* cexport.h */; }; F9BA8BA31543268400E63FFE /* cfileio.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B791543268400E63FFE /* cfileio.h */; }; F9BA8BA41543268400E63FFE /* cimport.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7A1543268400E63FFE /* cimport.h */; }; F9BA8BA51543268400E63FFE /* color4.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7B1543268400E63FFE /* color4.h */; }; F9BA8BA61543268400E63FFE /* poppack1.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7E1543268400E63FFE /* poppack1.h */; }; F9BA8BA71543268400E63FFE /* pushpack1.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7F1543268400E63FFE /* pushpack1.h */; }; F9BA8BA81543268400E63FFE /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B801543268400E63FFE /* config.h */; }; F9BA8BA91543268400E63FFE /* DefaultLogger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B811543268400E63FFE /* DefaultLogger.hpp */; }; F9BA8BAA1543268400E63FFE /* defs.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B821543268400E63FFE /* defs.h */; }; F9BA8BAB1543268400E63FFE /* Exporter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B831543268400E63FFE /* Exporter.hpp */; }; F9BA8BAC1543268400E63FFE /* Importer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B841543268400E63FFE /* Importer.hpp */; }; F9BA8BAD1543268400E63FFE /* importerdesc.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B851543268400E63FFE /* importerdesc.h */; }; F9BA8BAE1543268400E63FFE /* IOStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B861543268400E63FFE /* IOStream.hpp */; }; F9BA8BAF1543268400E63FFE /* IOSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B871543268400E63FFE /* IOSystem.hpp */; }; F9BA8BB01543268400E63FFE /* light.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B881543268400E63FFE /* light.h */; }; F9BA8BB11543268400E63FFE /* Logger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B891543268400E63FFE /* Logger.hpp */; }; F9BA8BB21543268400E63FFE /* LogStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8A1543268400E63FFE /* LogStream.hpp */; }; F9BA8BB31543268400E63FFE /* material.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8B1543268400E63FFE /* material.h */; }; F9BA8BB41543268400E63FFE /* matrix3x3.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8D1543268400E63FFE /* matrix3x3.h */; }; F9BA8BB51543268400E63FFE /* matrix4x4.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8F1543268400E63FFE /* matrix4x4.h */; }; F9BA8BB61543268400E63FFE /* mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B911543268400E63FFE /* mesh.h */; }; F9BA8BB71543268400E63FFE /* NullLogger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B921543268400E63FFE /* NullLogger.hpp */; }; F9BA8BB81543268400E63FFE /* postprocess.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B931543268400E63FFE /* postprocess.h */; }; F9BA8BB91543268400E63FFE /* ProgressHandler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B941543268400E63FFE /* ProgressHandler.hpp */; }; F9BA8BBA1543268400E63FFE /* quaternion.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B951543268400E63FFE /* quaternion.h */; }; F9BA8BBB1543268400E63FFE /* scene.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B971543268400E63FFE /* scene.h */; }; F9BA8BBC1543268400E63FFE /* texture.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B981543268400E63FFE /* texture.h */; }; F9BA8BBD1543268400E63FFE /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B991543268400E63FFE /* types.h */; }; F9BA8BBE1543268400E63FFE /* vector2.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9A1543268400E63FFE /* vector2.h */; }; F9BA8BBF1543268400E63FFE /* vector3.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9C1543268400E63FFE /* vector3.h */; }; F9BA8BC01543268400E63FFE /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9E1543268400E63FFE /* version.h */; }; F9BA8BC11543268400E63FFE /* anim.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B751543268400E63FFE /* anim.h */; }; F9BA8BC31543268400E63FFE /* camera.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B771543268400E63FFE /* camera.h */; }; F9BA8BC41543268400E63FFE /* cexport.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B781543268400E63FFE /* cexport.h */; }; F9BA8BC51543268400E63FFE /* cfileio.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B791543268400E63FFE /* cfileio.h */; }; F9BA8BC61543268400E63FFE /* cimport.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7A1543268400E63FFE /* cimport.h */; }; F9BA8BC71543268400E63FFE /* color4.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7B1543268400E63FFE /* color4.h */; }; F9BA8BC81543268400E63FFE /* poppack1.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7E1543268400E63FFE /* poppack1.h */; }; F9BA8BC91543268400E63FFE /* pushpack1.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7F1543268400E63FFE /* pushpack1.h */; }; F9BA8BCA1543268400E63FFE /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B801543268400E63FFE /* config.h */; }; F9BA8BCB1543268400E63FFE /* DefaultLogger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B811543268400E63FFE /* DefaultLogger.hpp */; }; F9BA8BCC1543268400E63FFE /* defs.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B821543268400E63FFE /* defs.h */; }; F9BA8BCD1543268400E63FFE /* Exporter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B831543268400E63FFE /* Exporter.hpp */; }; F9BA8BCE1543268400E63FFE /* Importer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B841543268400E63FFE /* Importer.hpp */; }; F9BA8BCF1543268400E63FFE /* importerdesc.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B851543268400E63FFE /* importerdesc.h */; }; F9BA8BD01543268400E63FFE /* IOStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B861543268400E63FFE /* IOStream.hpp */; }; F9BA8BD11543268400E63FFE /* IOSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B871543268400E63FFE /* IOSystem.hpp */; }; F9BA8BD21543268400E63FFE /* light.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B881543268400E63FFE /* light.h */; }; F9BA8BD31543268400E63FFE /* Logger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B891543268400E63FFE /* Logger.hpp */; }; F9BA8BD41543268400E63FFE /* LogStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8A1543268400E63FFE /* LogStream.hpp */; }; F9BA8BD51543268400E63FFE /* material.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8B1543268400E63FFE /* material.h */; }; F9BA8BD61543268400E63FFE /* matrix3x3.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8D1543268400E63FFE /* matrix3x3.h */; }; F9BA8BD71543268400E63FFE /* matrix4x4.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8F1543268400E63FFE /* matrix4x4.h */; }; F9BA8BD81543268400E63FFE /* mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B911543268400E63FFE /* mesh.h */; }; F9BA8BD91543268400E63FFE /* NullLogger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B921543268400E63FFE /* NullLogger.hpp */; }; F9BA8BDA1543268400E63FFE /* postprocess.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B931543268400E63FFE /* postprocess.h */; }; F9BA8BDB1543268400E63FFE /* ProgressHandler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B941543268400E63FFE /* ProgressHandler.hpp */; }; F9BA8BDC1543268400E63FFE /* quaternion.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B951543268400E63FFE /* quaternion.h */; }; F9BA8BDD1543268400E63FFE /* scene.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B971543268400E63FFE /* scene.h */; }; F9BA8BDE1543268400E63FFE /* texture.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B981543268400E63FFE /* texture.h */; }; F9BA8BDF1543268400E63FFE /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B991543268400E63FFE /* types.h */; }; F9BA8BE01543268400E63FFE /* vector2.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9A1543268400E63FFE /* vector2.h */; }; F9BA8BE11543268400E63FFE /* vector3.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9C1543268400E63FFE /* vector3.h */; }; F9BA8BE21543268400E63FFE /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9E1543268400E63FFE /* version.h */; }; F9BA8BE31543268400E63FFE /* anim.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B751543268400E63FFE /* anim.h */; }; F9BA8BE51543268400E63FFE /* camera.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B771543268400E63FFE /* camera.h */; }; F9BA8BE61543268400E63FFE /* cexport.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B781543268400E63FFE /* cexport.h */; }; F9BA8BE71543268400E63FFE /* cfileio.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B791543268400E63FFE /* cfileio.h */; }; F9BA8BE81543268400E63FFE /* cimport.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7A1543268400E63FFE /* cimport.h */; }; F9BA8BE91543268400E63FFE /* color4.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7B1543268400E63FFE /* color4.h */; }; F9BA8BEA1543268400E63FFE /* poppack1.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7E1543268400E63FFE /* poppack1.h */; }; F9BA8BEB1543268400E63FFE /* pushpack1.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7F1543268400E63FFE /* pushpack1.h */; }; F9BA8BEC1543268400E63FFE /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B801543268400E63FFE /* config.h */; }; F9BA8BED1543268400E63FFE /* DefaultLogger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B811543268400E63FFE /* DefaultLogger.hpp */; }; F9BA8BEE1543268400E63FFE /* defs.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B821543268400E63FFE /* defs.h */; }; F9BA8BEF1543268400E63FFE /* Exporter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B831543268400E63FFE /* Exporter.hpp */; }; F9BA8BF01543268400E63FFE /* Importer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B841543268400E63FFE /* Importer.hpp */; }; F9BA8BF11543268400E63FFE /* importerdesc.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B851543268400E63FFE /* importerdesc.h */; }; F9BA8BF21543268400E63FFE /* IOStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B861543268400E63FFE /* IOStream.hpp */; }; F9BA8BF31543268400E63FFE /* IOSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B871543268400E63FFE /* IOSystem.hpp */; }; F9BA8BF41543268400E63FFE /* light.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B881543268400E63FFE /* light.h */; }; F9BA8BF51543268400E63FFE /* Logger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B891543268400E63FFE /* Logger.hpp */; }; F9BA8BF61543268400E63FFE /* LogStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8A1543268400E63FFE /* LogStream.hpp */; }; F9BA8BF71543268400E63FFE /* material.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8B1543268400E63FFE /* material.h */; }; F9BA8BF81543268400E63FFE /* matrix3x3.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8D1543268400E63FFE /* matrix3x3.h */; }; F9BA8BF91543268400E63FFE /* matrix4x4.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8F1543268400E63FFE /* matrix4x4.h */; }; F9BA8BFA1543268400E63FFE /* mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B911543268400E63FFE /* mesh.h */; }; F9BA8BFB1543268400E63FFE /* NullLogger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B921543268400E63FFE /* NullLogger.hpp */; }; F9BA8BFC1543268400E63FFE /* postprocess.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B931543268400E63FFE /* postprocess.h */; }; F9BA8BFD1543268400E63FFE /* ProgressHandler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B941543268400E63FFE /* ProgressHandler.hpp */; }; F9BA8BFE1543268400E63FFE /* quaternion.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B951543268400E63FFE /* quaternion.h */; }; F9BA8BFF1543268400E63FFE /* scene.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B971543268400E63FFE /* scene.h */; }; F9BA8C001543268400E63FFE /* texture.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B981543268400E63FFE /* texture.h */; }; F9BA8C011543268400E63FFE /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B991543268400E63FFE /* types.h */; }; F9BA8C021543268400E63FFE /* vector2.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9A1543268400E63FFE /* vector2.h */; }; F9BA8C031543268400E63FFE /* vector3.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9C1543268400E63FFE /* vector3.h */; }; F9BA8C041543268400E63FFE /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9E1543268400E63FFE /* version.h */; }; F9BA8C051543268400E63FFE /* anim.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B751543268400E63FFE /* anim.h */; }; F9BA8C071543268400E63FFE /* camera.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B771543268400E63FFE /* camera.h */; }; F9BA8C081543268400E63FFE /* cexport.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B781543268400E63FFE /* cexport.h */; }; F9BA8C091543268400E63FFE /* cfileio.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B791543268400E63FFE /* cfileio.h */; }; F9BA8C0A1543268400E63FFE /* cimport.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7A1543268400E63FFE /* cimport.h */; }; F9BA8C0B1543268400E63FFE /* color4.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7B1543268400E63FFE /* color4.h */; }; F9BA8C0C1543268400E63FFE /* poppack1.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7E1543268400E63FFE /* poppack1.h */; }; F9BA8C0D1543268400E63FFE /* pushpack1.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7F1543268400E63FFE /* pushpack1.h */; }; F9BA8C0E1543268400E63FFE /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B801543268400E63FFE /* config.h */; }; F9BA8C0F1543268400E63FFE /* DefaultLogger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B811543268400E63FFE /* DefaultLogger.hpp */; }; F9BA8C101543268400E63FFE /* defs.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B821543268400E63FFE /* defs.h */; }; F9BA8C111543268400E63FFE /* Exporter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B831543268400E63FFE /* Exporter.hpp */; }; F9BA8C121543268400E63FFE /* Importer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B841543268400E63FFE /* Importer.hpp */; }; F9BA8C131543268400E63FFE /* importerdesc.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B851543268400E63FFE /* importerdesc.h */; }; F9BA8C141543268400E63FFE /* IOStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B861543268400E63FFE /* IOStream.hpp */; }; F9BA8C151543268400E63FFE /* IOSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B871543268400E63FFE /* IOSystem.hpp */; }; F9BA8C161543268400E63FFE /* light.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B881543268400E63FFE /* light.h */; }; F9BA8C171543268400E63FFE /* Logger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B891543268400E63FFE /* Logger.hpp */; }; F9BA8C181543268400E63FFE /* LogStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8A1543268400E63FFE /* LogStream.hpp */; }; F9BA8C191543268400E63FFE /* material.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8B1543268400E63FFE /* material.h */; }; F9BA8C1A1543268400E63FFE /* matrix3x3.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8D1543268400E63FFE /* matrix3x3.h */; }; F9BA8C1B1543268400E63FFE /* matrix4x4.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8F1543268400E63FFE /* matrix4x4.h */; }; F9BA8C1C1543268400E63FFE /* mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B911543268400E63FFE /* mesh.h */; }; F9BA8C1D1543268400E63FFE /* NullLogger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B921543268400E63FFE /* NullLogger.hpp */; }; F9BA8C1E1543268400E63FFE /* postprocess.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B931543268400E63FFE /* postprocess.h */; }; F9BA8C1F1543268400E63FFE /* ProgressHandler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B941543268400E63FFE /* ProgressHandler.hpp */; }; F9BA8C201543268400E63FFE /* quaternion.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B951543268400E63FFE /* quaternion.h */; }; F9BA8C211543268400E63FFE /* scene.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B971543268400E63FFE /* scene.h */; }; F9BA8C221543268400E63FFE /* texture.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B981543268400E63FFE /* texture.h */; }; F9BA8C231543268400E63FFE /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B991543268400E63FFE /* types.h */; }; F9BA8C241543268400E63FFE /* vector2.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9A1543268400E63FFE /* vector2.h */; }; F9BA8C251543268400E63FFE /* vector3.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9C1543268400E63FFE /* vector3.h */; }; F9BA8C261543268400E63FFE /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9E1543268400E63FFE /* version.h */; }; F9BA8C3B154328B600E63FFE /* OgreImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C35154328B600E63FFE /* OgreImporter.cpp */; }; F9BA8C3C154328B600E63FFE /* OgreImporter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8C36154328B600E63FFE /* OgreImporter.hpp */; }; F9BA8C3D154328B600E63FFE /* OgreMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C37154328B600E63FFE /* OgreMaterial.cpp */; }; F9BA8C3E154328B600E63FFE /* OgreMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C38154328B600E63FFE /* OgreMesh.cpp */; }; F9BA8C3F154328B600E63FFE /* OgreSkeleton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C39154328B600E63FFE /* OgreSkeleton.cpp */; }; F9BA8C40154328B600E63FFE /* OgreXmlHelper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8C3A154328B600E63FFE /* OgreXmlHelper.hpp */; }; F9BA8C41154328B600E63FFE /* OgreImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C35154328B600E63FFE /* OgreImporter.cpp */; }; F9BA8C42154328B600E63FFE /* OgreImporter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8C36154328B600E63FFE /* OgreImporter.hpp */; }; F9BA8C43154328B600E63FFE /* OgreMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C37154328B600E63FFE /* OgreMaterial.cpp */; }; F9BA8C44154328B600E63FFE /* OgreMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C38154328B600E63FFE /* OgreMesh.cpp */; }; F9BA8C45154328B600E63FFE /* OgreSkeleton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C39154328B600E63FFE /* OgreSkeleton.cpp */; }; F9BA8C46154328B600E63FFE /* OgreXmlHelper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8C3A154328B600E63FFE /* OgreXmlHelper.hpp */; }; F9BA8C47154328B600E63FFE /* OgreImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C35154328B600E63FFE /* OgreImporter.cpp */; }; F9BA8C48154328B600E63FFE /* OgreImporter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8C36154328B600E63FFE /* OgreImporter.hpp */; }; F9BA8C49154328B600E63FFE /* OgreMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C37154328B600E63FFE /* OgreMaterial.cpp */; }; F9BA8C4A154328B600E63FFE /* OgreMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C38154328B600E63FFE /* OgreMesh.cpp */; }; F9BA8C4B154328B600E63FFE /* OgreSkeleton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C39154328B600E63FFE /* OgreSkeleton.cpp */; }; F9BA8C4C154328B600E63FFE /* OgreXmlHelper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8C3A154328B600E63FFE /* OgreXmlHelper.hpp */; }; F9BA8C4D154328B600E63FFE /* OgreImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C35154328B600E63FFE /* OgreImporter.cpp */; }; F9BA8C4E154328B600E63FFE /* OgreImporter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8C36154328B600E63FFE /* OgreImporter.hpp */; }; F9BA8C4F154328B600E63FFE /* OgreMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C37154328B600E63FFE /* OgreMaterial.cpp */; }; F9BA8C50154328B600E63FFE /* OgreMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C38154328B600E63FFE /* OgreMesh.cpp */; }; F9BA8C51154328B600E63FFE /* OgreSkeleton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C39154328B600E63FFE /* OgreSkeleton.cpp */; }; F9BA8C52154328B600E63FFE /* OgreXmlHelper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8C3A154328B600E63FFE /* OgreXmlHelper.hpp */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDCFileData.h; sourceTree = ""; }; 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MDCLoader.cpp; sourceTree = ""; }; 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDCLoader.h; sourceTree = ""; }; 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDCNormalTable.h; sourceTree = ""; }; 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FixNormalsStep.cpp; sourceTree = ""; }; 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FixNormalsStep.h; sourceTree = ""; }; 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LWOFileData.h; sourceTree = ""; }; 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LWOLoader.cpp; sourceTree = ""; }; 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LWOLoader.h; sourceTree = ""; }; 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseProcess.cpp; sourceTree = ""; }; 3AB8A3C50E50D77900606590 /* HMPFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HMPFileData.h; sourceTree = ""; }; 3AB8A3C90E50D7CC00606590 /* IFF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IFF.h; sourceTree = ""; }; 3AB8A3CB0E50D7FF00606590 /* Hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Hash.h; sourceTree = ""; }; 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LWOMaterial.cpp; sourceTree = ""; }; 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 3DSConverter.cpp; sourceTree = ""; }; 3AF45A880E4B716800207D74 /* 3DSHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 3DSHelper.h; sourceTree = ""; }; 3AF45A890E4B716800207D74 /* 3DSLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 3DSLoader.cpp; sourceTree = ""; }; 3AF45A8A0E4B716800207D74 /* 3DSLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 3DSLoader.h; sourceTree = ""; }; 3AF45A8E0E4B716800207D74 /* ASELoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ASELoader.cpp; sourceTree = ""; }; 3AF45A8F0E4B716800207D74 /* ASELoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASELoader.h; sourceTree = ""; }; 3AF45A900E4B716800207D74 /* ASEParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ASEParser.cpp; sourceTree = ""; }; 3AF45A910E4B716800207D74 /* ASEParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASEParser.h; sourceTree = ""; }; 3AF45A920E4B716800207D74 /* Assimp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Assimp.cpp; sourceTree = ""; }; 3AF45A930E4B716800207D74 /* BaseImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseImporter.cpp; sourceTree = ""; }; 3AF45A940E4B716800207D74 /* BaseImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseImporter.h; sourceTree = ""; }; 3AF45A950E4B716800207D74 /* BaseProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseProcess.h; sourceTree = ""; }; 3AF45A960E4B716800207D74 /* ByteSwap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ByteSwap.h; sourceTree = ""; }; 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CalcTangentsProcess.cpp; sourceTree = ""; }; 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CalcTangentsProcess.h; sourceTree = ""; }; 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConvertToLHProcess.cpp; sourceTree = ""; }; 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConvertToLHProcess.h; sourceTree = ""; }; 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DefaultIOStream.cpp; sourceTree = ""; }; 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultIOStream.h; sourceTree = ""; }; 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DefaultIOSystem.cpp; sourceTree = ""; }; 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultIOSystem.h; sourceTree = ""; }; 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DefaultLogger.cpp; sourceTree = ""; }; 3AF45AA30E4B716800207D74 /* fast_atof.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fast_atof.h; sourceTree = ""; }; 3AF45AA40E4B716800207D74 /* FileLogStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileLogStream.h; sourceTree = ""; }; 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenFaceNormalsProcess.cpp; sourceTree = ""; }; 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenFaceNormalsProcess.h; sourceTree = ""; }; 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenVertexNormalsProcess.cpp; sourceTree = ""; }; 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenVertexNormalsProcess.h; sourceTree = ""; }; 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HalfLifeFileData.h; sourceTree = ""; }; 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HMPLoader.cpp; sourceTree = ""; }; 3AF45AAC0E4B716800207D74 /* HMPLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HMPLoader.h; sourceTree = ""; }; 3AF45AAD0E4B716800207D74 /* Importer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Importer.cpp; sourceTree = ""; }; 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImproveCacheLocality.cpp; sourceTree = ""; }; 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImproveCacheLocality.h; sourceTree = ""; }; 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JoinVerticesProcess.cpp; sourceTree = ""; }; 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JoinVerticesProcess.h; sourceTree = ""; }; 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LimitBoneWeightsProcess.cpp; sourceTree = ""; }; 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LimitBoneWeightsProcess.h; sourceTree = ""; }; 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MaterialSystem.cpp; sourceTree = ""; }; 3AF45AB70E4B716800207D74 /* MaterialSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MaterialSystem.h; sourceTree = ""; }; 3AF45AB80E4B716800207D74 /* MD2FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD2FileData.h; sourceTree = ""; }; 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MD2Loader.cpp; sourceTree = ""; }; 3AF45ABA0E4B716800207D74 /* MD2Loader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD2Loader.h; sourceTree = ""; }; 3AF45ABB0E4B716800207D74 /* MD2NormalTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD2NormalTable.h; sourceTree = ""; }; 3AF45ABC0E4B716800207D74 /* MD3FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD3FileData.h; sourceTree = ""; }; 3AF45ABD0E4B716800207D74 /* MD3Loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MD3Loader.cpp; sourceTree = ""; }; 3AF45ABE0E4B716800207D74 /* MD3Loader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD3Loader.h; sourceTree = ""; }; 3AF45AC20E4B716800207D74 /* MD5Loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MD5Loader.cpp; sourceTree = ""; }; 3AF45AC30E4B716800207D74 /* MD5Loader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD5Loader.h; sourceTree = ""; }; 3AF45AC40E4B716800207D74 /* MD5Parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MD5Parser.cpp; sourceTree = ""; }; 3AF45AC50E4B716800207D74 /* MD5Parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD5Parser.h; sourceTree = ""; }; 3AF45AC60E4B716800207D74 /* MDLDefaultColorMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDLDefaultColorMap.h; sourceTree = ""; }; 3AF45AC70E4B716800207D74 /* MDLFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDLFileData.h; sourceTree = ""; }; 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MDLLoader.cpp; sourceTree = ""; }; 3AF45AC90E4B716800207D74 /* MDLLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDLLoader.h; sourceTree = ""; }; 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MDLMaterialLoader.cpp; sourceTree = ""; }; 3AF45ACB0E4B716800207D74 /* ObjFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileData.h; sourceTree = ""; }; 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjFileImporter.cpp; sourceTree = ""; }; 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileImporter.h; sourceTree = ""; }; 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjFileMtlImporter.cpp; sourceTree = ""; }; 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileMtlImporter.h; sourceTree = ""; }; 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjFileParser.cpp; sourceTree = ""; }; 3AF45AD10E4B716800207D74 /* ObjFileParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileParser.h; sourceTree = ""; }; 3AF45AD20E4B716800207D74 /* ObjTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjTools.h; sourceTree = ""; }; 3AF45AD30E4B716800207D74 /* ParsingUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParsingUtils.h; sourceTree = ""; }; 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlyLoader.cpp; sourceTree = ""; }; 3AF45AD50E4B716800207D74 /* PlyLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlyLoader.h; sourceTree = ""; }; 3AF45AD60E4B716800207D74 /* PlyParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlyParser.cpp; sourceTree = ""; }; 3AF45AD70E4B716800207D74 /* PlyParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlyParser.h; sourceTree = ""; }; 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PretransformVertices.cpp; sourceTree = ""; }; 3AF45AD90E4B716800207D74 /* PretransformVertices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PretransformVertices.h; sourceTree = ""; }; 3AF45ADA0E4B716800207D74 /* qnan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qnan.h; sourceTree = ""; }; 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveComments.cpp; sourceTree = ""; }; 3AF45ADC0E4B716800207D74 /* RemoveComments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveComments.h; sourceTree = ""; }; 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveRedundantMaterials.cpp; sourceTree = ""; }; 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveRedundantMaterials.h; sourceTree = ""; }; 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SMDLoader.cpp; sourceTree = ""; }; 3AF45AE30E4B716800207D74 /* SMDLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SMDLoader.h; sourceTree = ""; }; 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpatialSort.cpp; sourceTree = ""; }; 3AF45AE50E4B716800207D74 /* SpatialSort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpatialSort.h; sourceTree = ""; }; 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SplitLargeMeshes.cpp; sourceTree = ""; }; 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SplitLargeMeshes.h; sourceTree = ""; }; 3AF45AE80E4B716800207D74 /* STLLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = STLLoader.cpp; sourceTree = ""; }; 3AF45AE90E4B716800207D74 /* STLLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STLLoader.h; sourceTree = ""; }; 3AF45AEA0E4B716800207D74 /* StringComparison.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringComparison.h; sourceTree = ""; }; 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureTransform.cpp; sourceTree = ""; }; 3AF45AEC0E4B716800207D74 /* TextureTransform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureTransform.h; sourceTree = ""; }; 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TriangulateProcess.cpp; sourceTree = ""; }; 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TriangulateProcess.h; sourceTree = ""; }; 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ValidateDataStructure.cpp; sourceTree = ""; }; 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ValidateDataStructure.h; sourceTree = ""; }; 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VertexTriangleAdjacency.cpp; sourceTree = ""; }; 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexTriangleAdjacency.h; sourceTree = ""; }; 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Win32DebugLogStream.h; sourceTree = ""; }; 3AF45AF40E4B716800207D74 /* XFileHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFileHelper.h; sourceTree = ""; }; 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XFileImporter.cpp; sourceTree = ""; }; 3AF45AF60E4B716800207D74 /* XFileImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFileImporter.h; sourceTree = ""; }; 3AF45AF70E4B716800207D74 /* XFileParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XFileParser.cpp; sourceTree = ""; }; 3AF45AF80E4B716800207D74 /* XFileParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFileParser.h; sourceTree = ""; }; 7411B14E11416D5E00BCD793 /* CSMLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSMLoader.cpp; path = ../../code/CSMLoader.cpp; sourceTree = SOURCE_ROOT; }; 7411B14F11416D5E00BCD793 /* CSMLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSMLoader.h; path = ../../code/CSMLoader.h; sourceTree = SOURCE_ROOT; }; 7411B15911416DDD00BCD793 /* LWSLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LWSLoader.cpp; path = ../../code/LWSLoader.cpp; sourceTree = SOURCE_ROOT; }; 7411B15A11416DDD00BCD793 /* LWSLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LWSLoader.h; path = ../../code/LWSLoader.h; sourceTree = SOURCE_ROOT; }; 7411B16311416DF400BCD793 /* LWOAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LWOAnimation.cpp; path = ../../code/LWOAnimation.cpp; sourceTree = SOURCE_ROOT; }; 7411B16411416DF400BCD793 /* LWOAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LWOAnimation.h; path = ../../code/LWOAnimation.h; sourceTree = SOURCE_ROOT; }; 7411B17011416E2500BCD793 /* MS3DLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MS3DLoader.cpp; path = ../../code/MS3DLoader.cpp; sourceTree = SOURCE_ROOT; }; 7411B17111416E2500BCD793 /* MS3DLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MS3DLoader.h; path = ../../code/MS3DLoader.h; sourceTree = SOURCE_ROOT; }; 7411B18B11416EBC00BCD793 /* UnrealLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UnrealLoader.cpp; path = ../../code/UnrealLoader.cpp; sourceTree = SOURCE_ROOT; }; 7411B18C11416EBC00BCD793 /* UnrealLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UnrealLoader.h; path = ../../code/UnrealLoader.h; sourceTree = SOURCE_ROOT; }; 7411B19711416EF400BCD793 /* FileSystemFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileSystemFilter.h; path = ../../code/FileSystemFilter.h; sourceTree = SOURCE_ROOT; }; 7411B19811416EF400BCD793 /* GenericProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GenericProperty.h; path = ../../code/GenericProperty.h; sourceTree = SOURCE_ROOT; }; 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MemoryIOWrapper.h; path = ../../code/MemoryIOWrapper.h; sourceTree = SOURCE_ROOT; }; 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptimizeGraph.cpp; path = ../../code/OptimizeGraph.cpp; sourceTree = SOURCE_ROOT; }; 7411B19B11416EF400BCD793 /* OptimizeGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OptimizeGraph.h; path = ../../code/OptimizeGraph.h; sourceTree = SOURCE_ROOT; }; 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptimizeMeshes.cpp; path = ../../code/OptimizeMeshes.cpp; sourceTree = SOURCE_ROOT; }; 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OptimizeMeshes.h; path = ../../code/OptimizeMeshes.h; sourceTree = SOURCE_ROOT; }; 7411B19E11416EF400BCD793 /* ProcessHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProcessHelper.h; path = ../../code/ProcessHelper.h; sourceTree = SOURCE_ROOT; }; 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StdOStreamLogStream.h; path = ../../code/StdOStreamLogStream.h; sourceTree = SOURCE_ROOT; }; 7411B1A011416EF400BCD793 /* StreamReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StreamReader.h; path = ../../code/StreamReader.h; sourceTree = SOURCE_ROOT; }; 7411B1A111416EF400BCD793 /* Subdivision.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Subdivision.cpp; path = ../../code/Subdivision.cpp; sourceTree = SOURCE_ROOT; }; 7411B1A211416EF400BCD793 /* Subdivision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Subdivision.h; path = ../../code/Subdivision.h; sourceTree = SOURCE_ROOT; }; 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TargetAnimation.cpp; path = ../../code/TargetAnimation.cpp; sourceTree = SOURCE_ROOT; }; 7411B1A411416EF400BCD793 /* TargetAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TargetAnimation.h; path = ../../code/TargetAnimation.h; sourceTree = SOURCE_ROOT; }; 7411B1A511416EF400BCD793 /* Vertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vertex.h; path = ../../code/Vertex.h; sourceTree = SOURCE_ROOT; }; 7437C950113F18C70067B9B9 /* foreach.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = foreach.hpp; path = ../../code/BoostWorkaround/boost/foreach.hpp; sourceTree = SOURCE_ROOT; }; 7437C951113F18C70067B9B9 /* format.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = format.hpp; path = ../../code/BoostWorkaround/boost/format.hpp; sourceTree = SOURCE_ROOT; }; 7437C953113F18C70067B9B9 /* common_factor_rt.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = common_factor_rt.hpp; path = ../../code/BoostWorkaround/boost/math/common_factor_rt.hpp; sourceTree = SOURCE_ROOT; }; 7437C954113F18C70067B9B9 /* scoped_array.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = scoped_array.hpp; path = ../../code/BoostWorkaround/boost/scoped_array.hpp; sourceTree = SOURCE_ROOT; }; 7437C955113F18C70067B9B9 /* scoped_ptr.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = scoped_ptr.hpp; path = ../../code/BoostWorkaround/boost/scoped_ptr.hpp; sourceTree = SOURCE_ROOT; }; 7437C956113F18C70067B9B9 /* static_assert.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = static_assert.hpp; path = ../../code/BoostWorkaround/boost/static_assert.hpp; sourceTree = SOURCE_ROOT; }; 7437C958113F18C70067B9B9 /* tuple.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = tuple.hpp; path = ../../code/BoostWorkaround/boost/tuple/tuple.hpp; sourceTree = SOURCE_ROOT; }; 74C9BB4911ACBB1000AF885C /* BlenderDNA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BlenderDNA.cpp; path = ../../code/BlenderDNA.cpp; sourceTree = SOURCE_ROOT; }; 74C9BB4A11ACBB1000AF885C /* BlenderDNA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlenderDNA.h; path = ../../code/BlenderDNA.h; sourceTree = SOURCE_ROOT; }; 74C9BB4B11ACBB1000AF885C /* BlenderDNA.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = BlenderDNA.inl; path = ../../code/BlenderDNA.inl; sourceTree = SOURCE_ROOT; }; 74C9BB4C11ACBB1000AF885C /* BlenderLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BlenderLoader.cpp; path = ../../code/BlenderLoader.cpp; sourceTree = SOURCE_ROOT; }; 74C9BB4D11ACBB1000AF885C /* BlenderLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlenderLoader.h; path = ../../code/BlenderLoader.h; sourceTree = SOURCE_ROOT; }; 74C9BB4E11ACBB1000AF885C /* BlenderScene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BlenderScene.cpp; path = ../../code/BlenderScene.cpp; sourceTree = SOURCE_ROOT; }; 74C9BB4F11ACBB1000AF885C /* BlenderScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlenderScene.h; path = ../../code/BlenderScene.h; sourceTree = SOURCE_ROOT; }; 74C9BB5011ACBB1000AF885C /* BlenderSceneGen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlenderSceneGen.h; path = ../../code/BlenderSceneGen.h; sourceTree = SOURCE_ROOT; }; 74C9BB6F11ACBB3600AF885C /* pointer_cast.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = pointer_cast.hpp; path = ../../code/BoostWorkaround/boost/pointer_cast.hpp; sourceTree = SOURCE_ROOT; }; 74C9BB7011ACBB3600AF885C /* shared_array.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = shared_array.hpp; path = ../../code/BoostWorkaround/boost/shared_array.hpp; sourceTree = SOURCE_ROOT; }; 74C9BB7111ACBB3600AF885C /* shared_ptr.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = shared_ptr.hpp; path = ../../code/BoostWorkaround/boost/shared_ptr.hpp; sourceTree = SOURCE_ROOT; }; 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MakeVerboseFormat.cpp; path = ../../code/MakeVerboseFormat.cpp; sourceTree = SOURCE_ROOT; }; 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MakeVerboseFormat.h; path = ../../code/MakeVerboseFormat.h; sourceTree = SOURCE_ROOT; }; 74C9BB8611ACBB9900AF885C /* AssimpPCH.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AssimpPCH.cpp; path = ../../code/AssimpPCH.cpp; sourceTree = SOURCE_ROOT; }; 74C9BB8711ACBB9900AF885C /* AssimpPCH.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AssimpPCH.h; path = ../../code/AssimpPCH.h; sourceTree = SOURCE_ROOT; }; 74C9BB9311ACBBBC00AF885C /* COBLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = COBLoader.cpp; path = ../../code/COBLoader.cpp; sourceTree = SOURCE_ROOT; }; 74C9BB9411ACBBBC00AF885C /* COBLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = COBLoader.h; path = ../../code/COBLoader.h; sourceTree = SOURCE_ROOT; }; 74C9BB9511ACBBBC00AF885C /* COBScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = COBScene.h; path = ../../code/COBScene.h; sourceTree = SOURCE_ROOT; }; 74C9BBB311ACBC2600AF885C /* revision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = revision.h; path = ../../revision.h; sourceTree = SOURCE_ROOT; }; 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Exceptional.h; path = ../../code/Exceptional.h; sourceTree = SOURCE_ROOT; }; 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LineSplitter.h; path = ../../code/LineSplitter.h; sourceTree = SOURCE_ROOT; }; 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MD4FileData.h; path = ../../code/MD4FileData.h; sourceTree = SOURCE_ROOT; }; 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyFormatter.h; path = ../../code/TinyFormatter.h; sourceTree = SOURCE_ROOT; }; 8E7ABBA1127E0F1A00512ED1 /* Q3BSPFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Q3BSPFileData.h; path = ../../code/Q3BSPFileData.h; sourceTree = SOURCE_ROOT; }; 8E7ABBA2127E0F1A00512ED1 /* Q3BSPFileImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Q3BSPFileImporter.cpp; path = ../../code/Q3BSPFileImporter.cpp; sourceTree = SOURCE_ROOT; }; 8E7ABBA3127E0F1A00512ED1 /* Q3BSPFileImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Q3BSPFileImporter.h; path = ../../code/Q3BSPFileImporter.h; sourceTree = SOURCE_ROOT; }; 8E7ABBA4127E0F1A00512ED1 /* Q3BSPFileParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Q3BSPFileParser.cpp; path = ../../code/Q3BSPFileParser.cpp; sourceTree = SOURCE_ROOT; }; 8E7ABBA5127E0F1A00512ED1 /* Q3BSPFileParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Q3BSPFileParser.h; path = ../../code/Q3BSPFileParser.h; sourceTree = SOURCE_ROOT; }; 8E7ABBA6127E0F1A00512ED1 /* Q3BSPZipArchive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Q3BSPZipArchive.cpp; path = ../../code/Q3BSPZipArchive.cpp; sourceTree = SOURCE_ROOT; }; 8E7ABBA7127E0F1A00512ED1 /* Q3BSPZipArchive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Q3BSPZipArchive.h; path = ../../code/Q3BSPZipArchive.h; sourceTree = SOURCE_ROOT; }; 8E7ABBC4127E0F2A00512ED1 /* NDOLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NDOLoader.cpp; path = ../../code/NDOLoader.cpp; sourceTree = SOURCE_ROOT; }; 8E7ABBC5127E0F2A00512ED1 /* NDOLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NDOLoader.h; path = ../../code/NDOLoader.h; sourceTree = SOURCE_ROOT; }; 8E7ABBCE127E0F3800512ED1 /* BlenderIntermediate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlenderIntermediate.h; path = ../../code/BlenderIntermediate.h; sourceTree = SOURCE_ROOT; }; 8E7ABBCF127E0F3800512ED1 /* BlenderModifier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BlenderModifier.cpp; path = ../../code/BlenderModifier.cpp; sourceTree = SOURCE_ROOT; }; 8E7ABBD0127E0F3800512ED1 /* BlenderModifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlenderModifier.h; path = ../../code/BlenderModifier.h; sourceTree = SOURCE_ROOT; }; 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assbin_chunks.h; sourceTree = ""; }; 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultProgressHandler.h; sourceTree = ""; }; 8E7ABBE1127E0FA400512ED1 /* Profiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Profiler.h; sourceTree = ""; }; 8E7ABBE2127E0FA400512ED1 /* pstdint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pstdint.h; sourceTree = ""; }; 8E8DEE4B127E2B78005EF64D /* ConvertUTF.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ConvertUTF.c; sourceTree = ""; }; 8E8DEE4C127E2B78005EF64D /* ConvertUTF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConvertUTF.h; sourceTree = ""; }; 8E8DEE4F127E2B78005EF64D /* CXMLReaderImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CXMLReaderImpl.h; sourceTree = ""; }; 8E8DEE50127E2B78005EF64D /* heapsort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = heapsort.h; sourceTree = ""; }; 8E8DEE51127E2B78005EF64D /* irrArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = irrArray.h; sourceTree = ""; }; 8E8DEE52127E2B78005EF64D /* irrString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = irrString.h; sourceTree = ""; }; 8E8DEE53127E2B78005EF64D /* irrTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = irrTypes.h; sourceTree = ""; }; 8E8DEE54127E2B78005EF64D /* irrXML.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = irrXML.cpp; sourceTree = ""; }; 8E8DEE55127E2B78005EF64D /* irrXML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = irrXML.h; sourceTree = ""; }; 8E8DEE57127E2B78005EF64D /* crypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypt.h; sourceTree = ""; }; 8E8DEE58127E2B78005EF64D /* ioapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ioapi.c; sourceTree = ""; }; 8E8DEE59127E2B78005EF64D /* ioapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = ""; }; 8E8DEE5A127E2B78005EF64D /* unzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unzip.c; sourceTree = ""; }; 8E8DEE5B127E2B78005EF64D /* unzip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unzip.h; sourceTree = ""; }; 8E8DEEA3127E2D59005EF64D /* libassimp.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libassimp.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 8E8DEEA4127E2D59005EF64D /* libassimp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libassimp.a; sourceTree = BUILT_PRODUCTS_DIR; }; 8E8DEEA5127E2D59005EF64D /* libassimp.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libassimp.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 8E8DEEA6127E2D59005EF64D /* libassimp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libassimp.a; sourceTree = BUILT_PRODUCTS_DIR; }; F90BAFB90F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libboost_date_time-xgcc40-mt.a"; path = "/usr/local/lib/libboost_date_time-xgcc40-mt.a"; sourceTree = ""; }; F90BAFBB0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libboost_thread-xgcc40-mt.a"; path = "/usr/local/lib/libboost_thread-xgcc40-mt.a"; sourceTree = ""; }; F90BAFD00F5DD87000124155 /* ACLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ACLoader.cpp; sourceTree = ""; }; F90BAFD10F5DD87000124155 /* ACLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACLoader.h; sourceTree = ""; }; F90BAFD90F5DD90800124155 /* IRRLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IRRLoader.cpp; sourceTree = ""; }; F90BAFDA0F5DD90800124155 /* IRRLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IRRLoader.h; sourceTree = ""; }; F90BAFDB0F5DD90800124155 /* IRRMeshLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IRRMeshLoader.cpp; sourceTree = ""; }; F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IRRMeshLoader.h; sourceTree = ""; }; F90BAFDD0F5DD90800124155 /* IRRShared.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IRRShared.cpp; sourceTree = ""; }; F90BAFDE0F5DD90800124155 /* IRRShared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IRRShared.h; sourceTree = ""; }; F90BAFE80F5DD93600124155 /* ColladaHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColladaHelper.h; sourceTree = ""; }; F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColladaLoader.cpp; sourceTree = ""; }; F90BAFEA0F5DD93600124155 /* ColladaLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColladaLoader.h; sourceTree = ""; }; F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColladaParser.cpp; sourceTree = ""; }; F90BAFEC0F5DD93600124155 /* ColladaParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColladaParser.h; sourceTree = ""; }; F90BAFF50F5DD96100124155 /* NFFLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NFFLoader.h; sourceTree = ""; }; F90BAFF60F5DD96100124155 /* NFFLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NFFLoader.cpp; sourceTree = ""; }; F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGSpatialSort.h; sourceTree = ""; }; F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SGSpatialSort.cpp; sourceTree = ""; }; F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Q3DLoader.cpp; sourceTree = ""; }; F90BB0070F5DD9DD00124155 /* Q3DLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Q3DLoader.h; sourceTree = ""; }; F90BB00C0F5DD9F400124155 /* BVHLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BVHLoader.h; sourceTree = ""; }; F90BB00D0F5DD9F400124155 /* BVHLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BVHLoader.cpp; sourceTree = ""; }; F90BB0130F5DDA1400124155 /* OFFLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OFFLoader.h; sourceTree = ""; }; F90BB0140F5DDA1400124155 /* OFFLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OFFLoader.cpp; sourceTree = ""; }; F90BB01B0F5DDA4400124155 /* RawLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RawLoader.h; sourceTree = ""; }; F90BB01C0F5DDA4400124155 /* RawLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RawLoader.cpp; sourceTree = ""; }; F90BB0210F5DDA5700124155 /* DXFLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DXFLoader.h; sourceTree = ""; }; F90BB0220F5DDA5700124155 /* DXFLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DXFLoader.cpp; sourceTree = ""; }; F90BB0270F5DDA9200124155 /* LWOBLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LWOBLoader.cpp; sourceTree = ""; }; F90BB02F0F5DDAB500124155 /* TerragenLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TerragenLoader.h; sourceTree = ""; }; F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TerragenLoader.cpp; sourceTree = ""; }; F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = irrXMLWrapper.h; sourceTree = ""; }; F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScenePreprocessor.h; sourceTree = ""; }; F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SceneCombiner.cpp; sourceTree = ""; }; F90BB03B0F5DDB3200124155 /* SceneCombiner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SceneCombiner.h; sourceTree = ""; }; F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScenePreprocessor.cpp; sourceTree = ""; }; F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SortByPTypeProcess.h; sourceTree = ""; }; F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SortByPTypeProcess.cpp; sourceTree = ""; }; F90BB0470F5DDB6100124155 /* FindDegenerates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindDegenerates.h; sourceTree = ""; }; F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FindDegenerates.cpp; sourceTree = ""; }; F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComputeUVMappingProcess.h; sourceTree = ""; }; F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComputeUVMappingProcess.cpp; sourceTree = ""; }; F90BB0510F5DDBA800124155 /* StandardShapes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StandardShapes.h; sourceTree = ""; }; F90BB0520F5DDBA800124155 /* StandardShapes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StandardShapes.cpp; sourceTree = ""; }; F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindInstancesProcess.h; sourceTree = ""; }; F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FindInstancesProcess.cpp; sourceTree = ""; }; F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveVCProcess.h; sourceTree = ""; }; F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveVCProcess.cpp; sourceTree = ""; }; F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FindInvalidDataProcess.cpp; sourceTree = ""; }; F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindInvalidDataProcess.h; sourceTree = ""; }; F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonMeshBuilder.h; sourceTree = ""; }; F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonMeshBuilder.cpp; sourceTree = ""; }; F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmoothingGroups.h; sourceTree = ""; }; F90BB06A0F5DDC1E00124155 /* SmoothingGroups.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SmoothingGroups.inl; sourceTree = ""; }; F90BB06D0F5DDCFC00124155 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = ""; }; F90BB0870F5DDE0700124155 /* B3DImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = B3DImporter.h; path = ../../code/B3DImporter.h; sourceTree = SOURCE_ROOT; }; F90BB0880F5DDE0700124155 /* B3DImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = B3DImporter.cpp; path = ../../code/B3DImporter.cpp; sourceTree = SOURCE_ROOT; }; F9606FF2154364E5004D91DD /* ProcessHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProcessHelper.cpp; sourceTree = ""; }; F9607047154366AB004D91DD /* adler32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = adler32.c; sourceTree = ""; }; F9607049154366AB004D91DD /* compress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = compress.c; sourceTree = ""; }; F960704A154366AB004D91DD /* crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crc32.c; sourceTree = ""; }; F960704B154366AB004D91DD /* crc32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crc32.h; sourceTree = ""; }; F960704C154366AB004D91DD /* deflate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = deflate.c; sourceTree = ""; }; F960704D154366AB004D91DD /* deflate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = deflate.h; sourceTree = ""; }; F960704E154366AB004D91DD /* inffast.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = inffast.c; sourceTree = ""; }; F960704F154366AB004D91DD /* inffast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inffast.h; sourceTree = ""; }; F9607050154366AB004D91DD /* inffixed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inffixed.h; sourceTree = ""; }; F9607051154366AB004D91DD /* inflate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = inflate.c; sourceTree = ""; }; F9607052154366AB004D91DD /* inflate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inflate.h; sourceTree = ""; }; F9607053154366AB004D91DD /* inftrees.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = inftrees.c; sourceTree = ""; }; F9607054154366AB004D91DD /* inftrees.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inftrees.h; sourceTree = ""; }; F9607056154366AB004D91DD /* trees.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = trees.c; sourceTree = ""; }; F9607057154366AB004D91DD /* trees.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = trees.h; sourceTree = ""; }; F9607058154366AB004D91DD /* zconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zconf.h; sourceTree = ""; }; F9607059154366AB004D91DD /* zconf.in.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zconf.in.h; sourceTree = ""; }; F960705A154366AB004D91DD /* zlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zlib.h; sourceTree = ""; }; F960705B154366AB004D91DD /* zutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zutil.c; sourceTree = ""; }; F960705C154366AB004D91DD /* zutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zutil.h; sourceTree = ""; }; F96070B5154366ED004D91DD /* XGLLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = XGLLoader.cpp; path = ../../code/XGLLoader.cpp; sourceTree = SOURCE_ROOT; }; F96070B6154366ED004D91DD /* XGLLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XGLLoader.h; path = ../../code/XGLLoader.h; sourceTree = SOURCE_ROOT; }; F96070C51543673B004D91DD /* clipper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = clipper.cpp; sourceTree = ""; }; F96070C61543673B004D91DD /* clipper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = clipper.hpp; sourceTree = ""; }; F96070D21543675E004D91DD /* shapes.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shapes.cc; sourceTree = ""; }; F96070D31543675E004D91DD /* shapes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = shapes.h; sourceTree = ""; }; F96070D41543675E004D91DD /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = ""; }; F96070D51543675E004D91DD /* poly2tri.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = poly2tri.h; sourceTree = ""; }; F96070D71543675E004D91DD /* advancing_front.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = advancing_front.cc; sourceTree = ""; }; F96070D81543675E004D91DD /* advancing_front.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = advancing_front.h; sourceTree = ""; }; F96070D91543675E004D91DD /* cdt.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cdt.cc; sourceTree = ""; }; F96070DA1543675E004D91DD /* cdt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cdt.h; sourceTree = ""; }; F96070DB1543675E004D91DD /* sweep.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sweep.cc; sourceTree = ""; }; F96070DC1543675E004D91DD /* sweep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sweep.h; sourceTree = ""; }; F96070DD1543675E004D91DD /* sweep_context.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sweep_context.cc; sourceTree = ""; }; F96070DE1543675E004D91DD /* sweep_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sweep_context.h; sourceTree = ""; }; F97BA03515439DB3009EB9DD /* ai_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ai_assert.h; sourceTree = ""; }; F97BA06615439FC3009EB9DD /* IFCCurve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCCurve.cpp; path = ../../code/IFCCurve.cpp; sourceTree = SOURCE_ROOT; }; F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCGeometry.cpp; path = ../../code/IFCGeometry.cpp; sourceTree = SOURCE_ROOT; }; F97BA06815439FC3009EB9DD /* IFCLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCLoader.cpp; path = ../../code/IFCLoader.cpp; sourceTree = SOURCE_ROOT; }; F97BA06915439FC3009EB9DD /* IFCLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFCLoader.h; path = ../../code/IFCLoader.h; sourceTree = SOURCE_ROOT; }; F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCMaterial.cpp; path = ../../code/IFCMaterial.cpp; sourceTree = SOURCE_ROOT; }; F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCProfile.cpp; path = ../../code/IFCProfile.cpp; sourceTree = SOURCE_ROOT; }; F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCReaderGen.cpp; path = ../../code/IFCReaderGen.cpp; sourceTree = SOURCE_ROOT; }; F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFCReaderGen.h; path = ../../code/IFCReaderGen.h; sourceTree = SOURCE_ROOT; }; F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCUtil.cpp; path = ../../code/IFCUtil.cpp; sourceTree = SOURCE_ROOT; }; F97BA06F15439FC3009EB9DD /* IFCUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFCUtil.h; path = ../../code/IFCUtil.h; sourceTree = SOURCE_ROOT; }; F99A9EB315436077000682F3 /* BlobIOSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlobIOSystem.h; sourceTree = ""; }; F99A9EB815436098000682F3 /* lexical_cast.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = lexical_cast.hpp; sourceTree = ""; }; F99A9EBD154360A0000682F3 /* make_shared.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = make_shared.hpp; sourceTree = ""; }; F99A9EC2154360A5000682F3 /* noncopyable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = noncopyable.hpp; sourceTree = ""; }; F99A9EC7154360B5000682F3 /* timer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = timer.hpp; sourceTree = ""; }; F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CInterfaceIOWrapper.h; sourceTree = ""; }; F99A9ED115436125000682F3 /* DeboneProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeboneProcess.cpp; sourceTree = ""; }; F99A9ED215436125000682F3 /* DeboneProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeboneProcess.h; sourceTree = ""; }; F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImporterRegistry.cpp; sourceTree = ""; }; F99A9F1C154361D4000682F3 /* LogAux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LogAux.h; sourceTree = ""; }; F99A9F2615436207000682F3 /* M3Importer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = M3Importer.cpp; path = ../../code/M3Importer.cpp; sourceTree = SOURCE_ROOT; }; F99A9F2715436207000682F3 /* M3Importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = M3Importer.h; path = ../../code/M3Importer.h; sourceTree = SOURCE_ROOT; }; F99A9F3015436269000682F3 /* PlyExporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlyExporter.cpp; sourceTree = ""; }; F99A9F3115436269000682F3 /* PlyExporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlyExporter.h; sourceTree = ""; }; F99A9F3A15436286000682F3 /* PolyTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyTools.h; sourceTree = ""; }; F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PostStepRegistry.cpp; sourceTree = ""; }; F99A9F44154362DE000682F3 /* ScenePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScenePrivate.h; sourceTree = ""; }; F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SplitByBoneCountProcess.cpp; sourceTree = ""; }; F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SplitByBoneCountProcess.h; sourceTree = ""; }; F99A9F5915436323000682F3 /* STEPFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STEPFile.h; path = ../../code/STEPFile.h; sourceTree = SOURCE_ROOT; }; F99A9F5A15436323000682F3 /* STEPFileReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = STEPFileReader.cpp; path = ../../code/STEPFileReader.cpp; sourceTree = SOURCE_ROOT; }; F99A9F5B15436323000682F3 /* STEPFileReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STEPFileReader.h; path = ../../code/STEPFileReader.h; sourceTree = SOURCE_ROOT; }; F9BA8B751543268400E63FFE /* anim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = anim.h; sourceTree = ""; }; F9BA8B771543268400E63FFE /* camera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = camera.h; sourceTree = ""; }; F9BA8B781543268400E63FFE /* cexport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cexport.h; sourceTree = ""; }; F9BA8B791543268400E63FFE /* cfileio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfileio.h; sourceTree = ""; }; F9BA8B7A1543268400E63FFE /* cimport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cimport.h; sourceTree = ""; }; F9BA8B7B1543268400E63FFE /* color4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = color4.h; sourceTree = ""; }; F9BA8B7C1543268400E63FFE /* color4.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = color4.inl; sourceTree = ""; }; F9BA8B7E1543268400E63FFE /* poppack1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = poppack1.h; sourceTree = ""; }; F9BA8B7F1543268400E63FFE /* pushpack1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pushpack1.h; sourceTree = ""; }; F9BA8B801543268400E63FFE /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; F9BA8B811543268400E63FFE /* DefaultLogger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DefaultLogger.hpp; sourceTree = ""; }; F9BA8B821543268400E63FFE /* defs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = defs.h; sourceTree = ""; }; F9BA8B831543268400E63FFE /* Exporter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Exporter.hpp; sourceTree = ""; }; F9BA8B841543268400E63FFE /* Importer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Importer.hpp; sourceTree = ""; }; F9BA8B851543268400E63FFE /* importerdesc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = importerdesc.h; sourceTree = ""; }; F9BA8B861543268400E63FFE /* IOStream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IOStream.hpp; sourceTree = ""; }; F9BA8B871543268400E63FFE /* IOSystem.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IOSystem.hpp; sourceTree = ""; }; F9BA8B881543268400E63FFE /* light.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = light.h; sourceTree = ""; }; F9BA8B891543268400E63FFE /* Logger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Logger.hpp; sourceTree = ""; }; F9BA8B8A1543268400E63FFE /* LogStream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = LogStream.hpp; sourceTree = ""; }; F9BA8B8B1543268400E63FFE /* material.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = material.h; sourceTree = ""; }; F9BA8B8C1543268400E63FFE /* material.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = material.inl; sourceTree = ""; }; F9BA8B8D1543268400E63FFE /* matrix3x3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = matrix3x3.h; sourceTree = ""; }; F9BA8B8E1543268400E63FFE /* matrix3x3.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = matrix3x3.inl; sourceTree = ""; }; F9BA8B8F1543268400E63FFE /* matrix4x4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = matrix4x4.h; sourceTree = ""; }; F9BA8B901543268400E63FFE /* matrix4x4.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = matrix4x4.inl; sourceTree = ""; }; F9BA8B911543268400E63FFE /* mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mesh.h; sourceTree = ""; }; F9BA8B921543268400E63FFE /* NullLogger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = NullLogger.hpp; sourceTree = ""; }; F9BA8B931543268400E63FFE /* postprocess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = postprocess.h; sourceTree = ""; }; F9BA8B941543268400E63FFE /* ProgressHandler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ProgressHandler.hpp; sourceTree = ""; }; F9BA8B951543268400E63FFE /* quaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quaternion.h; sourceTree = ""; }; F9BA8B961543268400E63FFE /* quaternion.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = quaternion.inl; sourceTree = ""; }; F9BA8B971543268400E63FFE /* scene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scene.h; sourceTree = ""; }; F9BA8B981543268400E63FFE /* texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = texture.h; sourceTree = ""; }; F9BA8B991543268400E63FFE /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; F9BA8B9A1543268400E63FFE /* vector2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector2.h; sourceTree = ""; }; F9BA8B9B1543268400E63FFE /* vector2.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = vector2.inl; sourceTree = ""; }; F9BA8B9C1543268400E63FFE /* vector3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector3.h; sourceTree = ""; }; F9BA8B9D1543268400E63FFE /* vector3.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = vector3.inl; sourceTree = ""; }; F9BA8B9E1543268400E63FFE /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; F9BA8C35154328B600E63FFE /* OgreImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OgreImporter.cpp; path = ../../code/OgreImporter.cpp; sourceTree = SOURCE_ROOT; }; F9BA8C36154328B600E63FFE /* OgreImporter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = OgreImporter.hpp; path = ../../code/OgreImporter.hpp; sourceTree = SOURCE_ROOT; }; F9BA8C37154328B600E63FFE /* OgreMaterial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OgreMaterial.cpp; path = ../../code/OgreMaterial.cpp; sourceTree = SOURCE_ROOT; }; F9BA8C38154328B600E63FFE /* OgreMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OgreMesh.cpp; path = ../../code/OgreMesh.cpp; sourceTree = SOURCE_ROOT; }; F9BA8C39154328B600E63FFE /* OgreSkeleton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OgreSkeleton.cpp; path = ../../code/OgreSkeleton.cpp; sourceTree = SOURCE_ROOT; }; F9BA8C3A154328B600E63FFE /* OgreXmlHelper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = OgreXmlHelper.hpp; path = ../../code/OgreXmlHelper.hpp; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 745FF8AB113ECB080020C31B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 745FF8AE113ECB080020C31B /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 745FF98E113ECC660020C31B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 745FF991113ECC660020C31B /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; D2AAC09B05546B4700DB518D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( F90BAFBA0F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a in Frameworks */, F90BAFBC0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a in Frameworks */, F90BB06E0F5DDCFC00124155 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; F962E8820F5DE66A009A5495 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( F962E8880F5DE6B4009A5495 /* libboost_date_time-xgcc40-mt.a in Frameworks */, F962E8890F5DE6B4009A5495 /* libboost_thread-xgcc40-mt.a in Frameworks */, F962E88A0F5DE6B4009A5495 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 034768DDFF38A45A11DB9C8B /* Products */ = { isa = PBXGroup; children = ( 8E8DEEA3127E2D59005EF64D /* libassimp.dylib */, 8E8DEEA4127E2D59005EF64D /* libassimp.a */, 8E8DEEA5127E2D59005EF64D /* libassimp.dylib */, 8E8DEEA6127E2D59005EF64D /* libassimp.a */, ); name = Products; sourceTree = ""; }; 0867D691FE84028FC02AAC07 /* assimp */ = { isa = PBXGroup; children = ( 08FB77ACFE841707C02AAC07 /* Source */, F90BB0700F5DDD7000124155 /* 3rd party libs */, 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, 034768DDFF38A45A11DB9C8B /* Products */, ); name = assimp; sourceTree = ""; }; 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( F90BB06D0F5DDCFC00124155 /* libz.dylib */, F90BAFBB0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a */, F90BAFB90F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; 08FB77ACFE841707C02AAC07 /* Source */ = { isa = PBXGroup; children = ( 3AF45A850E4B716800207D74 /* code */, F90BB0830F5DDDC700124155 /* importers */, 3AF45A520E4B715000207D74 /* include */, 74C9BB8611ACBB9900AF885C /* AssimpPCH.cpp */, 74C9BB8711ACBB9900AF885C /* AssimpPCH.h */, 74C9BBB311ACBC2600AF885C /* revision.h */, ); name = Source; sourceTree = ""; }; 3AB8A3A70E50D59500606590 /* MDC */ = { isa = PBXGroup; children = ( 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */, 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */, 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */, 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */, ); name = MDC; path = ../../code; sourceTree = ""; }; 3AB8A3A80E50D5F400606590 /* LWO */ = { isa = PBXGroup; children = ( 7411B16311416DF400BCD793 /* LWOAnimation.cpp */, 7411B16411416DF400BCD793 /* LWOAnimation.h */, F90BB0270F5DDA9200124155 /* LWOBLoader.cpp */, 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */, 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */, 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */, 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */, ); name = LWO; path = ../../code; sourceTree = ""; }; 3AF45A520E4B715000207D74 /* include */ = { isa = PBXGroup; children = ( F9BA8B741543268400E63FFE /* assimp */, ); name = include; path = ../../include; sourceTree = SOURCE_ROOT; }; 3AF45A850E4B716800207D74 /* code */ = { isa = PBXGroup; children = ( 7437C94E113F18C70067B9B9 /* BoostWorkaround */, 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */, 3AF45A920E4B716800207D74 /* Assimp.cpp */, 3AF45A930E4B716800207D74 /* BaseImporter.cpp */, 3AF45A940E4B716800207D74 /* BaseImporter.h */, 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */, 3AF45A950E4B716800207D74 /* BaseProcess.h */, F99A9EB315436077000682F3 /* BlobIOSystem.h */, 3AF45A960E4B716800207D74 /* ByteSwap.h */, 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */, 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */, F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */, F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */, F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */, 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */, 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */, F99A9ED115436125000682F3 /* DeboneProcess.cpp */, F99A9ED215436125000682F3 /* DeboneProcess.h */, 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */, 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */, 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */, 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */, 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */, 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */, 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */, 3AF45AA30E4B716800207D74 /* fast_atof.h */, 3AF45AA40E4B716800207D74 /* FileLogStream.h */, 7411B19711416EF400BCD793 /* FileSystemFilter.h */, F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */, F90BB0470F5DDB6100124155 /* FindDegenerates.h */, F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */, F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */, F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */, F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */, 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */, 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */, 7411B19811416EF400BCD793 /* GenericProperty.h */, 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */, 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */, 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */, 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */, 3AB8A3CB0E50D7FF00606590 /* Hash.h */, 3AB8A3C90E50D7CC00606590 /* IFF.h */, 3AF45AAD0E4B716800207D74 /* Importer.cpp */, F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */, 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */, 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */, 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */, 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */, 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */, 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */, 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */, F99A9F1C154361D4000682F3 /* LogAux.h */, 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */, 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */, 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */, 3AF45AB70E4B716800207D74 /* MaterialSystem.h */, 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */, 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */, 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */, 7411B19B11416EF400BCD793 /* OptimizeGraph.h */, 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */, 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */, 3AF45AD30E4B716800207D74 /* ParsingUtils.h */, F99A9F3A15436286000682F3 /* PolyTools.h */, F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */, 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */, 3AF45AD90E4B716800207D74 /* PretransformVertices.h */, F9606FF2154364E5004D91DD /* ProcessHelper.cpp */, 7411B19E11416EF400BCD793 /* ProcessHelper.h */, 8E7ABBE1127E0FA400512ED1 /* Profiler.h */, 8E7ABBE2127E0FA400512ED1 /* pstdint.h */, 3AF45ADA0E4B716800207D74 /* qnan.h */, 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */, 3AF45ADC0E4B716800207D74 /* RemoveComments.h */, 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */, 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */, F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */, F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */, F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */, F90BB03B0F5DDB3200124155 /* SceneCombiner.h */, F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */, F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */, F99A9F44154362DE000682F3 /* ScenePrivate.h */, F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */, F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */, F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */, F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */, F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */, F90BB06A0F5DDC1E00124155 /* SmoothingGroups.inl */, F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */, F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */, 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */, 3AF45AE50E4B716800207D74 /* SpatialSort.h */, F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */, F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */, 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */, 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */, F90BB0520F5DDBA800124155 /* StandardShapes.cpp */, F90BB0510F5DDBA800124155 /* StandardShapes.h */, 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */, 7411B1A011416EF400BCD793 /* StreamReader.h */, 3AF45AEA0E4B716800207D74 /* StringComparison.h */, 7411B1A111416EF400BCD793 /* Subdivision.cpp */, 7411B1A211416EF400BCD793 /* Subdivision.h */, 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */, 7411B1A411416EF400BCD793 /* TargetAnimation.h */, 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */, 3AF45AEC0E4B716800207D74 /* TextureTransform.h */, 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */, 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */, 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */, 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */, 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */, 7411B1A511416EF400BCD793 /* Vertex.h */, 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */, 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */, 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */, ); name = code; path = ../../code; sourceTree = SOURCE_ROOT; }; 3AF45B690E4B722000207D74 /* 3DS */ = { isa = PBXGroup; children = ( 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */, 3AF45A880E4B716800207D74 /* 3DSHelper.h */, 3AF45A890E4B716800207D74 /* 3DSLoader.cpp */, 3AF45A8A0E4B716800207D74 /* 3DSLoader.h */, ); name = 3DS; path = ../../code; sourceTree = ""; }; 3AF45B6A0E4B726700207D74 /* ASE */ = { isa = PBXGroup; children = ( 3AF45A8E0E4B716800207D74 /* ASELoader.cpp */, 3AF45A8F0E4B716800207D74 /* ASELoader.h */, 3AF45A900E4B716800207D74 /* ASEParser.cpp */, 3AF45A910E4B716800207D74 /* ASEParser.h */, ); name = ASE; path = ../../code; sourceTree = ""; }; 3AF45B6C0E4B72C600207D74 /* HMP */ = { isa = PBXGroup; children = ( 3AB8A3C50E50D77900606590 /* HMPFileData.h */, 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */, 3AF45AAC0E4B716800207D74 /* HMPLoader.h */, ); name = HMP; path = ../../code; sourceTree = ""; }; 3AF45B870E4B74DA00207D74 /* MD2 */ = { isa = PBXGroup; children = ( 3AF45AB80E4B716800207D74 /* MD2FileData.h */, 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */, 3AF45ABA0E4B716800207D74 /* MD2Loader.h */, 3AF45ABB0E4B716800207D74 /* MD2NormalTable.h */, ); name = MD2; path = ../../code; sourceTree = ""; }; 3AF45B880E4B751000207D74 /* MD3 */ = { isa = PBXGroup; children = ( 3AF45ABC0E4B716800207D74 /* MD3FileData.h */, 3AF45ABD0E4B716800207D74 /* MD3Loader.cpp */, 3AF45ABE0E4B716800207D74 /* MD3Loader.h */, ); name = MD3; path = ../../code; sourceTree = ""; }; 3AF45B8A0E4B755E00207D74 /* MD5 */ = { isa = PBXGroup; children = ( 3AF45AC20E4B716800207D74 /* MD5Loader.cpp */, 3AF45AC30E4B716800207D74 /* MD5Loader.h */, 3AF45AC40E4B716800207D74 /* MD5Parser.cpp */, 3AF45AC50E4B716800207D74 /* MD5Parser.h */, ); name = MD5; path = ../../code; sourceTree = ""; }; 3AF45B8B0E4B75BC00207D74 /* MDL */ = { isa = PBXGroup; children = ( 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */, 3AF45AC60E4B716800207D74 /* MDLDefaultColorMap.h */, 3AF45AC70E4B716800207D74 /* MDLFileData.h */, 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */, 3AF45AC90E4B716800207D74 /* MDLLoader.h */, 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */, ); name = MDL; path = ../../code; sourceTree = ""; }; 3AF45B8C0E4B75F200207D74 /* Obj */ = { isa = PBXGroup; children = ( 3AF45ACB0E4B716800207D74 /* ObjFileData.h */, 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */, 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */, 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */, 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */, 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */, 3AF45AD10E4B716800207D74 /* ObjFileParser.h */, 3AF45AD20E4B716800207D74 /* ObjTools.h */, ); name = Obj; path = ../../code; sourceTree = ""; }; 3AF45B8D0E4B761A00207D74 /* Ply */ = { isa = PBXGroup; children = ( F99A9F3015436269000682F3 /* PlyExporter.cpp */, F99A9F3115436269000682F3 /* PlyExporter.h */, 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */, 3AF45AD50E4B716800207D74 /* PlyLoader.h */, 3AF45AD60E4B716800207D74 /* PlyParser.cpp */, 3AF45AD70E4B716800207D74 /* PlyParser.h */, ); name = Ply; path = ../../code; sourceTree = ""; }; 3AF45B8E0E4B764400207D74 /* SMD */ = { isa = PBXGroup; children = ( 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */, 3AF45AE30E4B716800207D74 /* SMDLoader.h */, ); name = SMD; path = ../../code; sourceTree = ""; }; 3AF45B8F0E4B766700207D74 /* X */ = { isa = PBXGroup; children = ( 3AF45AF40E4B716800207D74 /* XFileHelper.h */, 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */, 3AF45AF60E4B716800207D74 /* XFileImporter.h */, 3AF45AF70E4B716800207D74 /* XFileParser.cpp */, 3AF45AF80E4B716800207D74 /* XFileParser.h */, ); name = X; path = ../../code; sourceTree = ""; }; 3AF45B910E4B77BE00207D74 /* STL */ = { isa = PBXGroup; children = ( 3AF45AE80E4B716800207D74 /* STLLoader.cpp */, 3AF45AE90E4B716800207D74 /* STLLoader.h */, ); name = STL; path = ../../code; sourceTree = ""; }; 7411B14711416C3F00BCD793 /* CSM */ = { isa = PBXGroup; children = ( 7411B14E11416D5E00BCD793 /* CSMLoader.cpp */, 7411B14F11416D5E00BCD793 /* CSMLoader.h */, ); name = CSM; sourceTree = ""; }; 7411B15811416D6600BCD793 /* LWS */ = { isa = PBXGroup; children = ( 7411B15911416DDD00BCD793 /* LWSLoader.cpp */, 7411B15A11416DDD00BCD793 /* LWSLoader.h */, ); name = LWS; sourceTree = ""; }; 7411B16F11416E0400BCD793 /* MS3D */ = { isa = PBXGroup; children = ( 7411B17011416E2500BCD793 /* MS3DLoader.cpp */, 7411B17111416E2500BCD793 /* MS3DLoader.h */, ); name = MS3D; sourceTree = ""; }; 7411B17A11416E2E00BCD793 /* Ogre */ = { isa = PBXGroup; children = ( F9BA8C35154328B600E63FFE /* OgreImporter.cpp */, F9BA8C36154328B600E63FFE /* OgreImporter.hpp */, F9BA8C37154328B600E63FFE /* OgreMaterial.cpp */, F9BA8C38154328B600E63FFE /* OgreMesh.cpp */, F9BA8C39154328B600E63FFE /* OgreSkeleton.cpp */, F9BA8C3A154328B600E63FFE /* OgreXmlHelper.hpp */, ); name = Ogre; sourceTree = ""; }; 7411B18A11416EA100BCD793 /* Unreal */ = { isa = PBXGroup; children = ( 7411B18B11416EBC00BCD793 /* UnrealLoader.cpp */, 7411B18C11416EBC00BCD793 /* UnrealLoader.h */, ); name = Unreal; sourceTree = ""; }; 7437C94E113F18C70067B9B9 /* BoostWorkaround */ = { isa = PBXGroup; children = ( 7437C94F113F18C70067B9B9 /* boost */, ); name = BoostWorkaround; path = ../../code/BoostWorkaround; sourceTree = SOURCE_ROOT; }; 7437C94F113F18C70067B9B9 /* boost */ = { isa = PBXGroup; children = ( 7437C952113F18C70067B9B9 /* math */, 7437C957113F18C70067B9B9 /* tuple */, 7437C950113F18C70067B9B9 /* foreach.hpp */, 7437C951113F18C70067B9B9 /* format.hpp */, F99A9EB815436098000682F3 /* lexical_cast.hpp */, F99A9EBD154360A0000682F3 /* make_shared.hpp */, F99A9EC2154360A5000682F3 /* noncopyable.hpp */, 74C9BB6F11ACBB3600AF885C /* pointer_cast.hpp */, 7437C954113F18C70067B9B9 /* scoped_array.hpp */, 7437C955113F18C70067B9B9 /* scoped_ptr.hpp */, 74C9BB7011ACBB3600AF885C /* shared_array.hpp */, 74C9BB7111ACBB3600AF885C /* shared_ptr.hpp */, 7437C956113F18C70067B9B9 /* static_assert.hpp */, F99A9EC7154360B5000682F3 /* timer.hpp */, ); name = boost; path = ../../code/BoostWorkaround/boost; sourceTree = SOURCE_ROOT; }; 7437C952113F18C70067B9B9 /* math */ = { isa = PBXGroup; children = ( 7437C953113F18C70067B9B9 /* common_factor_rt.hpp */, ); name = math; path = ../../code/BoostWorkaround/boost/math; sourceTree = SOURCE_ROOT; }; 7437C957113F18C70067B9B9 /* tuple */ = { isa = PBXGroup; children = ( 7437C958113F18C70067B9B9 /* tuple.hpp */, ); name = tuple; path = ../../code/BoostWorkaround/boost/tuple; sourceTree = SOURCE_ROOT; }; 74C9BB4611ACBAE500AF885C /* Blender */ = { isa = PBXGroup; children = ( 74C9BB4911ACBB1000AF885C /* BlenderDNA.cpp */, 74C9BB4A11ACBB1000AF885C /* BlenderDNA.h */, 74C9BB4B11ACBB1000AF885C /* BlenderDNA.inl */, 8E7ABBCE127E0F3800512ED1 /* BlenderIntermediate.h */, 74C9BB4C11ACBB1000AF885C /* BlenderLoader.cpp */, 74C9BB4D11ACBB1000AF885C /* BlenderLoader.h */, 8E7ABBCF127E0F3800512ED1 /* BlenderModifier.cpp */, 8E7ABBD0127E0F3800512ED1 /* BlenderModifier.h */, 74C9BB4E11ACBB1000AF885C /* BlenderScene.cpp */, 74C9BB4F11ACBB1000AF885C /* BlenderScene.h */, 74C9BB5011ACBB1000AF885C /* BlenderSceneGen.h */, ); name = Blender; sourceTree = ""; }; 74C9BB9211ACBBA600AF885C /* COB */ = { isa = PBXGroup; children = ( 74C9BB9311ACBBBC00AF885C /* COBLoader.cpp */, 74C9BB9411ACBBBC00AF885C /* COBLoader.h */, 74C9BB9511ACBBBC00AF885C /* COBScene.h */, ); name = COB; sourceTree = ""; }; 8E7ABB99127E0EE000512ED1 /* NDO */ = { isa = PBXGroup; children = ( 8E7ABBC4127E0F2A00512ED1 /* NDOLoader.cpp */, 8E7ABBC5127E0F2A00512ED1 /* NDOLoader.h */, ); name = NDO; sourceTree = ""; }; 8E7ABB9C127E0EFD00512ED1 /* Q3BSP */ = { isa = PBXGroup; children = ( 8E7ABBA1127E0F1A00512ED1 /* Q3BSPFileData.h */, 8E7ABBA2127E0F1A00512ED1 /* Q3BSPFileImporter.cpp */, 8E7ABBA3127E0F1A00512ED1 /* Q3BSPFileImporter.h */, 8E7ABBA4127E0F1A00512ED1 /* Q3BSPFileParser.cpp */, 8E7ABBA5127E0F1A00512ED1 /* Q3BSPFileParser.h */, 8E7ABBA6127E0F1A00512ED1 /* Q3BSPZipArchive.cpp */, 8E7ABBA7127E0F1A00512ED1 /* Q3BSPZipArchive.h */, ); name = Q3BSP; sourceTree = ""; }; 8E8DEE4A127E2B78005EF64D /* ConvertUTF */ = { isa = PBXGroup; children = ( 8E8DEE4B127E2B78005EF64D /* ConvertUTF.c */, 8E8DEE4C127E2B78005EF64D /* ConvertUTF.h */, ); path = ConvertUTF; sourceTree = ""; }; 8E8DEE4E127E2B78005EF64D /* irrXML */ = { isa = PBXGroup; children = ( 8E8DEE4F127E2B78005EF64D /* CXMLReaderImpl.h */, 8E8DEE50127E2B78005EF64D /* heapsort.h */, 8E8DEE51127E2B78005EF64D /* irrArray.h */, 8E8DEE52127E2B78005EF64D /* irrString.h */, 8E8DEE53127E2B78005EF64D /* irrTypes.h */, 8E8DEE54127E2B78005EF64D /* irrXML.cpp */, 8E8DEE55127E2B78005EF64D /* irrXML.h */, ); path = irrXML; sourceTree = ""; }; 8E8DEE56127E2B78005EF64D /* unzip */ = { isa = PBXGroup; children = ( 8E8DEE57127E2B78005EF64D /* crypt.h */, 8E8DEE58127E2B78005EF64D /* ioapi.c */, 8E8DEE59127E2B78005EF64D /* ioapi.h */, 8E8DEE5A127E2B78005EF64D /* unzip.c */, 8E8DEE5B127E2B78005EF64D /* unzip.h */, ); path = unzip; sourceTree = ""; }; F90BAFCE0F5DD85F00124155 /* AC */ = { isa = PBXGroup; children = ( F90BAFD00F5DD87000124155 /* ACLoader.cpp */, F90BAFD10F5DD87000124155 /* ACLoader.h */, ); name = AC; path = ../../code; sourceTree = ""; }; F90BAFD40F5DD8F200124155 /* IRR */ = { isa = PBXGroup; children = ( F90BAFD90F5DD90800124155 /* IRRLoader.cpp */, F90BAFDA0F5DD90800124155 /* IRRLoader.h */, F90BAFDB0F5DD90800124155 /* IRRMeshLoader.cpp */, F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */, F90BAFDD0F5DD90800124155 /* IRRShared.cpp */, F90BAFDE0F5DD90800124155 /* IRRShared.h */, F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */, ); name = IRR; path = ../../code; sourceTree = ""; }; F90BAFE60F5DD91F00124155 /* COLLADA */ = { isa = PBXGroup; children = ( F90BAFE80F5DD93600124155 /* ColladaHelper.h */, F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */, F90BAFEA0F5DD93600124155 /* ColladaLoader.h */, F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */, F90BAFEC0F5DD93600124155 /* ColladaParser.h */, ); name = COLLADA; path = ../../code; sourceTree = ""; }; F90BAFF30F5DD95600124155 /* NFF */ = { isa = PBXGroup; children = ( F90BAFF50F5DD96100124155 /* NFFLoader.h */, F90BAFF60F5DD96100124155 /* NFFLoader.cpp */, ); name = NFF; path = ../../code; sourceTree = ""; }; F90BB0040F5DD9CD00124155 /* Q3D */ = { isa = PBXGroup; children = ( F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */, F90BB0070F5DD9DD00124155 /* Q3DLoader.h */, ); name = Q3D; path = ../../code; sourceTree = ""; }; F90BB00A0F5DD9E800124155 /* BVH */ = { isa = PBXGroup; children = ( F90BB00C0F5DD9F400124155 /* BVHLoader.h */, F90BB00D0F5DD9F400124155 /* BVHLoader.cpp */, ); name = BVH; path = ../../code; sourceTree = ""; }; F90BB0110F5DDA0B00124155 /* OFF */ = { isa = PBXGroup; children = ( F90BB0130F5DDA1400124155 /* OFFLoader.h */, F90BB0140F5DDA1400124155 /* OFFLoader.cpp */, ); name = OFF; path = ../../code; sourceTree = ""; }; F90BB0190F5DDA3100124155 /* RAW */ = { isa = PBXGroup; children = ( F90BB01B0F5DDA4400124155 /* RawLoader.h */, F90BB01C0F5DDA4400124155 /* RawLoader.cpp */, ); name = RAW; path = ../../code; sourceTree = ""; }; F90BB01F0F5DDA4A00124155 /* DXF */ = { isa = PBXGroup; children = ( F90BB0210F5DDA5700124155 /* DXFLoader.h */, F90BB0220F5DDA5700124155 /* DXFLoader.cpp */, ); name = DXF; path = ../../code; sourceTree = ""; }; F90BB02A0F5DDAA900124155 /* Terragen */ = { isa = PBXGroup; children = ( F90BB02F0F5DDAB500124155 /* TerragenLoader.h */, F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */, ); name = Terragen; path = ../../code; sourceTree = ""; }; F90BB0700F5DDD7000124155 /* 3rd party libs */ = { isa = PBXGroup; children = ( F96070C41543673B004D91DD /* clipper */, 8E8DEE4A127E2B78005EF64D /* ConvertUTF */, 8E8DEE4E127E2B78005EF64D /* irrXML */, F96070D01543675E004D91DD /* poly2tri */, 8E8DEE56127E2B78005EF64D /* unzip */, F9607046154366AB004D91DD /* zlib */, ); name = "3rd party libs"; path = ../../contrib; sourceTree = ""; }; F90BB0830F5DDDC700124155 /* importers */ = { isa = PBXGroup; children = ( 3AF45B690E4B722000207D74 /* 3DS */, F90BAFCE0F5DD85F00124155 /* AC */, 3AF45B6A0E4B726700207D74 /* ASE */, F90BB0850F5DDDF800124155 /* B3D */, 74C9BB4611ACBAE500AF885C /* Blender */, F90BB00A0F5DD9E800124155 /* BVH */, 74C9BB9211ACBBA600AF885C /* COB */, F90BAFE60F5DD91F00124155 /* COLLADA */, 7411B14711416C3F00BCD793 /* CSM */, F90BB01F0F5DDA4A00124155 /* DXF */, 3AF45B6C0E4B72C600207D74 /* HMP */, F97BA06415439FB2009EB9DD /* IFC */, F90BAFD40F5DD8F200124155 /* IRR */, 3AB8A3A80E50D5F400606590 /* LWO */, 7411B15811416D6600BCD793 /* LWS */, F99A9F21154361F8000682F3 /* M3 */, 3AF45B870E4B74DA00207D74 /* MD2 */, 3AF45B880E4B751000207D74 /* MD3 */, 3AF45B8A0E4B755E00207D74 /* MD5 */, 3AB8A3A70E50D59500606590 /* MDC */, 3AF45B8B0E4B75BC00207D74 /* MDL */, 7411B16F11416E0400BCD793 /* MS3D */, 8E7ABB99127E0EE000512ED1 /* NDO */, F90BAFF30F5DD95600124155 /* NFF */, 3AF45B8C0E4B75F200207D74 /* Obj */, F90BB0110F5DDA0B00124155 /* OFF */, 7411B17A11416E2E00BCD793 /* Ogre */, 3AF45B8D0E4B761A00207D74 /* Ply */, 8E7ABB9C127E0EFD00512ED1 /* Q3BSP */, F90BB0040F5DD9CD00124155 /* Q3D */, F90BB0190F5DDA3100124155 /* RAW */, 3AF45B8E0E4B764400207D74 /* SMD */, F99A9F5315436318000682F3 /* STEP */, 3AF45B910E4B77BE00207D74 /* STL */, F90BB02A0F5DDAA900124155 /* Terragen */, 7411B18A11416EA100BCD793 /* Unreal */, 3AF45B8F0E4B766700207D74 /* X */, F96070B1154366E3004D91DD /* XGL */, ); name = importers; sourceTree = ""; }; F90BB0850F5DDDF800124155 /* B3D */ = { isa = PBXGroup; children = ( F90BB0870F5DDE0700124155 /* B3DImporter.h */, F90BB0880F5DDE0700124155 /* B3DImporter.cpp */, ); name = B3D; sourceTree = ""; }; F9607046154366AB004D91DD /* zlib */ = { isa = PBXGroup; children = ( F9607047154366AB004D91DD /* adler32.c */, F9607049154366AB004D91DD /* compress.c */, F960704A154366AB004D91DD /* crc32.c */, F960704B154366AB004D91DD /* crc32.h */, F960704C154366AB004D91DD /* deflate.c */, F960704D154366AB004D91DD /* deflate.h */, F960704E154366AB004D91DD /* inffast.c */, F960704F154366AB004D91DD /* inffast.h */, F9607050154366AB004D91DD /* inffixed.h */, F9607051154366AB004D91DD /* inflate.c */, F9607052154366AB004D91DD /* inflate.h */, F9607053154366AB004D91DD /* inftrees.c */, F9607054154366AB004D91DD /* inftrees.h */, F9607056154366AB004D91DD /* trees.c */, F9607057154366AB004D91DD /* trees.h */, F9607058154366AB004D91DD /* zconf.h */, F9607059154366AB004D91DD /* zconf.in.h */, F960705A154366AB004D91DD /* zlib.h */, F960705B154366AB004D91DD /* zutil.c */, F960705C154366AB004D91DD /* zutil.h */, ); path = zlib; sourceTree = ""; }; F96070B1154366E3004D91DD /* XGL */ = { isa = PBXGroup; children = ( F96070B5154366ED004D91DD /* XGLLoader.cpp */, F96070B6154366ED004D91DD /* XGLLoader.h */, ); name = XGL; sourceTree = ""; }; F96070C41543673B004D91DD /* clipper */ = { isa = PBXGroup; children = ( F96070C51543673B004D91DD /* clipper.cpp */, F96070C61543673B004D91DD /* clipper.hpp */, ); path = clipper; sourceTree = ""; }; F96070D01543675E004D91DD /* poly2tri */ = { isa = PBXGroup; children = ( F96070D11543675E004D91DD /* common */, F96070D51543675E004D91DD /* poly2tri.h */, F96070D61543675E004D91DD /* sweep */, ); name = poly2tri; path = poly2tri/poly2tri; sourceTree = ""; }; F96070D11543675E004D91DD /* common */ = { isa = PBXGroup; children = ( F96070D21543675E004D91DD /* shapes.cc */, F96070D31543675E004D91DD /* shapes.h */, F96070D41543675E004D91DD /* utils.h */, ); path = common; sourceTree = ""; }; F96070D61543675E004D91DD /* sweep */ = { isa = PBXGroup; children = ( F96070D71543675E004D91DD /* advancing_front.cc */, F96070D81543675E004D91DD /* advancing_front.h */, F96070D91543675E004D91DD /* cdt.cc */, F96070DA1543675E004D91DD /* cdt.h */, F96070DB1543675E004D91DD /* sweep.cc */, F96070DC1543675E004D91DD /* sweep.h */, F96070DD1543675E004D91DD /* sweep_context.cc */, F96070DE1543675E004D91DD /* sweep_context.h */, ); path = sweep; sourceTree = ""; }; F97BA06415439FB2009EB9DD /* IFC */ = { isa = PBXGroup; children = ( F97BA06615439FC3009EB9DD /* IFCCurve.cpp */, F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */, F97BA06815439FC3009EB9DD /* IFCLoader.cpp */, F97BA06915439FC3009EB9DD /* IFCLoader.h */, F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */, F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */, F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */, F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */, F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */, F97BA06F15439FC3009EB9DD /* IFCUtil.h */, ); name = IFC; sourceTree = ""; }; F99A9F21154361F8000682F3 /* M3 */ = { isa = PBXGroup; children = ( F99A9F2615436207000682F3 /* M3Importer.cpp */, F99A9F2715436207000682F3 /* M3Importer.h */, ); name = M3; sourceTree = ""; }; F99A9F5315436318000682F3 /* STEP */ = { isa = PBXGroup; children = ( F99A9F5915436323000682F3 /* STEPFile.h */, F99A9F5A15436323000682F3 /* STEPFileReader.cpp */, F99A9F5B15436323000682F3 /* STEPFileReader.h */, ); name = STEP; sourceTree = ""; }; F9BA8B741543268400E63FFE /* assimp */ = { isa = PBXGroup; children = ( F97BA03515439DB3009EB9DD /* ai_assert.h */, F9BA8B751543268400E63FFE /* anim.h */, F9BA8B771543268400E63FFE /* camera.h */, F9BA8B781543268400E63FFE /* cexport.h */, F9BA8B791543268400E63FFE /* cfileio.h */, F9BA8B7A1543268400E63FFE /* cimport.h */, F9BA8B7B1543268400E63FFE /* color4.h */, F9BA8B7C1543268400E63FFE /* color4.inl */, F9BA8B7D1543268400E63FFE /* Compiler */, F9BA8B801543268400E63FFE /* config.h */, F9BA8B811543268400E63FFE /* DefaultLogger.hpp */, F9BA8B821543268400E63FFE /* defs.h */, F9BA8B831543268400E63FFE /* Exporter.hpp */, F9BA8B841543268400E63FFE /* Importer.hpp */, F9BA8B851543268400E63FFE /* importerdesc.h */, F9BA8B861543268400E63FFE /* IOStream.hpp */, F9BA8B871543268400E63FFE /* IOSystem.hpp */, F9BA8B881543268400E63FFE /* light.h */, F9BA8B891543268400E63FFE /* Logger.hpp */, F9BA8B8A1543268400E63FFE /* LogStream.hpp */, F9BA8B8B1543268400E63FFE /* material.h */, F9BA8B8C1543268400E63FFE /* material.inl */, F9BA8B8D1543268400E63FFE /* matrix3x3.h */, F9BA8B8E1543268400E63FFE /* matrix3x3.inl */, F9BA8B8F1543268400E63FFE /* matrix4x4.h */, F9BA8B901543268400E63FFE /* matrix4x4.inl */, F9BA8B911543268400E63FFE /* mesh.h */, F9BA8B921543268400E63FFE /* NullLogger.hpp */, F9BA8B931543268400E63FFE /* postprocess.h */, F9BA8B941543268400E63FFE /* ProgressHandler.hpp */, F9BA8B951543268400E63FFE /* quaternion.h */, F9BA8B961543268400E63FFE /* quaternion.inl */, F9BA8B971543268400E63FFE /* scene.h */, F9BA8B981543268400E63FFE /* texture.h */, F9BA8B991543268400E63FFE /* types.h */, F9BA8B9A1543268400E63FFE /* vector2.h */, F9BA8B9B1543268400E63FFE /* vector2.inl */, F9BA8B9C1543268400E63FFE /* vector3.h */, F9BA8B9D1543268400E63FFE /* vector3.inl */, F9BA8B9E1543268400E63FFE /* version.h */, ); path = assimp; sourceTree = ""; }; F9BA8B7D1543268400E63FFE /* Compiler */ = { isa = PBXGroup; children = ( F9BA8B7E1543268400E63FFE /* poppack1.h */, F9BA8B7F1543268400E63FFE /* pushpack1.h */, ); path = Compiler; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 745FF82A113ECB080020C31B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 745FF840113ECB080020C31B /* 3DSHelper.h in Headers */, 745FF841113ECB080020C31B /* 3DSLoader.h in Headers */, 745FF842113ECB080020C31B /* ASELoader.h in Headers */, 745FF843113ECB080020C31B /* ASEParser.h in Headers */, 745FF844113ECB080020C31B /* BaseImporter.h in Headers */, 745FF845113ECB080020C31B /* BaseProcess.h in Headers */, 745FF846113ECB080020C31B /* ByteSwap.h in Headers */, 745FF847113ECB080020C31B /* CalcTangentsProcess.h in Headers */, 745FF848113ECB080020C31B /* ConvertToLHProcess.h in Headers */, 745FF849113ECB080020C31B /* DefaultIOStream.h in Headers */, 745FF84A113ECB080020C31B /* DefaultIOSystem.h in Headers */, 745FF84C113ECB080020C31B /* fast_atof.h in Headers */, 745FF84D113ECB080020C31B /* FileLogStream.h in Headers */, 745FF84E113ECB080020C31B /* GenFaceNormalsProcess.h in Headers */, 745FF84F113ECB080020C31B /* GenVertexNormalsProcess.h in Headers */, 745FF850113ECB080020C31B /* HalfLifeFileData.h in Headers */, 745FF851113ECB080020C31B /* HMPLoader.h in Headers */, 745FF852113ECB080020C31B /* ImproveCacheLocality.h in Headers */, 745FF853113ECB080020C31B /* JoinVerticesProcess.h in Headers */, 745FF854113ECB080020C31B /* LimitBoneWeightsProcess.h in Headers */, 745FF855113ECB080020C31B /* MaterialSystem.h in Headers */, 745FF856113ECB080020C31B /* MD2FileData.h in Headers */, 745FF857113ECB080020C31B /* MD2Loader.h in Headers */, 745FF858113ECB080020C31B /* MD2NormalTable.h in Headers */, 745FF859113ECB080020C31B /* MD3FileData.h in Headers */, 745FF85A113ECB080020C31B /* MD3Loader.h in Headers */, 745FF85B113ECB080020C31B /* MD5Loader.h in Headers */, 745FF85C113ECB080020C31B /* MD5Parser.h in Headers */, 745FF85D113ECB080020C31B /* MDLDefaultColorMap.h in Headers */, 745FF85E113ECB080020C31B /* MDLFileData.h in Headers */, 745FF85F113ECB080020C31B /* MDLLoader.h in Headers */, 745FF860113ECB080020C31B /* ObjFileData.h in Headers */, 745FF861113ECB080020C31B /* ObjFileImporter.h in Headers */, 745FF862113ECB080020C31B /* ObjFileMtlImporter.h in Headers */, 745FF863113ECB080020C31B /* ObjFileParser.h in Headers */, 745FF864113ECB080020C31B /* ObjTools.h in Headers */, 745FF865113ECB080020C31B /* ParsingUtils.h in Headers */, 745FF866113ECB080020C31B /* PlyLoader.h in Headers */, 745FF867113ECB080020C31B /* PlyParser.h in Headers */, 745FF868113ECB080020C31B /* PretransformVertices.h in Headers */, 745FF869113ECB080020C31B /* qnan.h in Headers */, 745FF86A113ECB080020C31B /* RemoveComments.h in Headers */, 745FF86B113ECB080020C31B /* RemoveRedundantMaterials.h in Headers */, 745FF86C113ECB080020C31B /* SMDLoader.h in Headers */, 745FF86D113ECB080020C31B /* SpatialSort.h in Headers */, 745FF86E113ECB080020C31B /* SplitLargeMeshes.h in Headers */, 745FF86F113ECB080020C31B /* STLLoader.h in Headers */, 745FF870113ECB080020C31B /* StringComparison.h in Headers */, 745FF871113ECB080020C31B /* TextureTransform.h in Headers */, 745FF872113ECB080020C31B /* TriangulateProcess.h in Headers */, 745FF873113ECB080020C31B /* ValidateDataStructure.h in Headers */, 745FF874113ECB080020C31B /* VertexTriangleAdjacency.h in Headers */, 745FF875113ECB080020C31B /* Win32DebugLogStream.h in Headers */, 745FF876113ECB080020C31B /* XFileHelper.h in Headers */, 745FF877113ECB080020C31B /* XFileImporter.h in Headers */, 745FF878113ECB080020C31B /* XFileParser.h in Headers */, 745FF87B113ECB080020C31B /* MDCFileData.h in Headers */, 745FF87C113ECB080020C31B /* MDCLoader.h in Headers */, 745FF87D113ECB080020C31B /* MDCNormalTable.h in Headers */, 745FF87E113ECB080020C31B /* FixNormalsStep.h in Headers */, 745FF87F113ECB080020C31B /* LWOFileData.h in Headers */, 745FF880113ECB080020C31B /* LWOLoader.h in Headers */, 745FF881113ECB080020C31B /* HMPFileData.h in Headers */, 745FF883113ECB080020C31B /* IFF.h in Headers */, 745FF884113ECB080020C31B /* Hash.h in Headers */, 745FF889113ECB080020C31B /* ACLoader.h in Headers */, 745FF88A113ECB080020C31B /* IRRLoader.h in Headers */, 745FF88B113ECB080020C31B /* IRRMeshLoader.h in Headers */, 745FF88C113ECB080020C31B /* IRRShared.h in Headers */, 745FF88D113ECB080020C31B /* ColladaHelper.h in Headers */, 745FF88E113ECB080020C31B /* ColladaLoader.h in Headers */, 745FF88F113ECB080020C31B /* ColladaParser.h in Headers */, 745FF890113ECB080020C31B /* NFFLoader.h in Headers */, 745FF891113ECB080020C31B /* SGSpatialSort.h in Headers */, 745FF892113ECB080020C31B /* Q3DLoader.h in Headers */, 745FF893113ECB080020C31B /* BVHLoader.h in Headers */, 745FF894113ECB080020C31B /* OFFLoader.h in Headers */, 745FF895113ECB080020C31B /* RawLoader.h in Headers */, 745FF896113ECB080020C31B /* DXFLoader.h in Headers */, 745FF897113ECB080020C31B /* TerragenLoader.h in Headers */, 745FF898113ECB080020C31B /* irrXMLWrapper.h in Headers */, 745FF899113ECB080020C31B /* ScenePreprocessor.h in Headers */, 745FF89A113ECB080020C31B /* SceneCombiner.h in Headers */, 745FF89B113ECB080020C31B /* SortByPTypeProcess.h in Headers */, 745FF89C113ECB080020C31B /* FindDegenerates.h in Headers */, 745FF89D113ECB080020C31B /* ComputeUVMappingProcess.h in Headers */, 745FF89E113ECB080020C31B /* StandardShapes.h in Headers */, 745FF89F113ECB080020C31B /* FindInstancesProcess.h in Headers */, 745FF8A0113ECB080020C31B /* RemoveVCProcess.h in Headers */, 745FF8A1113ECB080020C31B /* FindInvalidDataProcess.h in Headers */, 745FF8A2113ECB080020C31B /* SkeletonMeshBuilder.h in Headers */, 745FF8A3113ECB080020C31B /* SmoothingGroups.h in Headers */, 745FF8AA113ECB080020C31B /* B3DImporter.h in Headers */, 7437C960113F18C70067B9B9 /* foreach.hpp in Headers */, 7437C961113F18C70067B9B9 /* format.hpp in Headers */, 7437C962113F18C70067B9B9 /* common_factor_rt.hpp in Headers */, 7437C963113F18C70067B9B9 /* scoped_array.hpp in Headers */, 7437C964113F18C70067B9B9 /* scoped_ptr.hpp in Headers */, 7437C965113F18C70067B9B9 /* static_assert.hpp in Headers */, 7437C966113F18C70067B9B9 /* tuple.hpp in Headers */, 7411B15311416D5E00BCD793 /* CSMLoader.h in Headers */, 7411B15E11416DDD00BCD793 /* LWSLoader.h in Headers */, 7411B16811416DF400BCD793 /* LWOAnimation.h in Headers */, 7411B17511416E2500BCD793 /* MS3DLoader.h in Headers */, 7411B19011416EBC00BCD793 /* UnrealLoader.h in Headers */, 7411B1B511416EF400BCD793 /* FileSystemFilter.h in Headers */, 7411B1B611416EF400BCD793 /* GenericProperty.h in Headers */, 7411B1B711416EF400BCD793 /* MemoryIOWrapper.h in Headers */, 7411B1B911416EF400BCD793 /* OptimizeGraph.h in Headers */, 7411B1BB11416EF400BCD793 /* OptimizeMeshes.h in Headers */, 7411B1BC11416EF400BCD793 /* ProcessHelper.h in Headers */, 7411B1BD11416EF400BCD793 /* StdOStreamLogStream.h in Headers */, 7411B1BE11416EF400BCD793 /* StreamReader.h in Headers */, 7411B1C011416EF400BCD793 /* Subdivision.h in Headers */, 7411B1C211416EF400BCD793 /* TargetAnimation.h in Headers */, 7411B1C311416EF400BCD793 /* Vertex.h in Headers */, 74C9BB6011ACBB1000AF885C /* BlenderDNA.h in Headers */, 74C9BB6211ACBB1000AF885C /* BlenderLoader.h in Headers */, 74C9BB6411ACBB1000AF885C /* BlenderScene.h in Headers */, 74C9BB6511ACBB1000AF885C /* BlenderSceneGen.h in Headers */, 74C9BB7211ACBB3600AF885C /* pointer_cast.hpp in Headers */, 74C9BB7311ACBB3600AF885C /* shared_array.hpp in Headers */, 74C9BB7411ACBB3600AF885C /* shared_ptr.hpp in Headers */, 74C9BB7F11ACBB7800AF885C /* MakeVerboseFormat.h in Headers */, 74C9BB8911ACBB9900AF885C /* AssimpPCH.h in Headers */, 74C9BB9711ACBBBC00AF885C /* COBLoader.h in Headers */, 74C9BB9811ACBBBC00AF885C /* COBScene.h in Headers */, 74C9BBB411ACBC2600AF885C /* revision.h in Headers */, 74C9BBBF11ACBC6C00AF885C /* Exceptional.h in Headers */, 74C9BBC011ACBC6C00AF885C /* LineSplitter.h in Headers */, 74C9BBC111ACBC6C00AF885C /* MD4FileData.h in Headers */, 74C9BBC211ACBC6C00AF885C /* TinyFormatter.h in Headers */, 8E7ABBA8127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */, 8E7ABBAA127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */, 8E7ABBAC127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */, 8E7ABBAE127E0F1A00512ED1 /* Q3BSPZipArchive.h in Headers */, 8E7ABBC7127E0F2A00512ED1 /* NDOLoader.h in Headers */, 8E7ABBD1127E0F3800512ED1 /* BlenderIntermediate.h in Headers */, 8E7ABBD3127E0F3800512ED1 /* BlenderModifier.h in Headers */, 8E7ABBE3127E0FA400512ED1 /* assbin_chunks.h in Headers */, 8E7ABBE4127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */, 8E7ABBE5127E0FA400512ED1 /* Profiler.h in Headers */, 8E7ABBE6127E0FA400512ED1 /* pstdint.h in Headers */, 8E8DEE5D127E2B78005EF64D /* ConvertUTF.h in Headers */, 8E8DEE5E127E2B78005EF64D /* CXMLReaderImpl.h in Headers */, 8E8DEE5F127E2B78005EF64D /* heapsort.h in Headers */, 8E8DEE60127E2B78005EF64D /* irrArray.h in Headers */, 8E8DEE61127E2B78005EF64D /* irrString.h in Headers */, 8E8DEE62127E2B78005EF64D /* irrTypes.h in Headers */, 8E8DEE64127E2B78005EF64D /* irrXML.h in Headers */, 8E8DEE65127E2B78005EF64D /* crypt.h in Headers */, 8E8DEE67127E2B78005EF64D /* ioapi.h in Headers */, 8E8DEE69127E2B78005EF64D /* unzip.h in Headers */, F9BA8BE31543268400E63FFE /* anim.h in Headers */, F9BA8BE51543268400E63FFE /* camera.h in Headers */, F9BA8BE61543268400E63FFE /* cexport.h in Headers */, F9BA8BE71543268400E63FFE /* cfileio.h in Headers */, F9BA8BE81543268400E63FFE /* cimport.h in Headers */, F9BA8BE91543268400E63FFE /* color4.h in Headers */, F9BA8BEA1543268400E63FFE /* poppack1.h in Headers */, F9BA8BEB1543268400E63FFE /* pushpack1.h in Headers */, F9BA8BEC1543268400E63FFE /* config.h in Headers */, F9BA8BED1543268400E63FFE /* DefaultLogger.hpp in Headers */, F9BA8BEE1543268400E63FFE /* defs.h in Headers */, F9BA8BEF1543268400E63FFE /* Exporter.hpp in Headers */, F9BA8BF01543268400E63FFE /* Importer.hpp in Headers */, F9BA8BF11543268400E63FFE /* importerdesc.h in Headers */, F9BA8BF21543268400E63FFE /* IOStream.hpp in Headers */, F9BA8BF31543268400E63FFE /* IOSystem.hpp in Headers */, F9BA8BF41543268400E63FFE /* light.h in Headers */, F9BA8BF51543268400E63FFE /* Logger.hpp in Headers */, F9BA8BF61543268400E63FFE /* LogStream.hpp in Headers */, F9BA8BF71543268400E63FFE /* material.h in Headers */, F9BA8BF81543268400E63FFE /* matrix3x3.h in Headers */, F9BA8BF91543268400E63FFE /* matrix4x4.h in Headers */, F9BA8BFA1543268400E63FFE /* mesh.h in Headers */, F9BA8BFB1543268400E63FFE /* NullLogger.hpp in Headers */, F9BA8BFC1543268400E63FFE /* postprocess.h in Headers */, F9BA8BFD1543268400E63FFE /* ProgressHandler.hpp in Headers */, F9BA8BFE1543268400E63FFE /* quaternion.h in Headers */, F9BA8BFF1543268400E63FFE /* scene.h in Headers */, F9BA8C001543268400E63FFE /* texture.h in Headers */, F9BA8C011543268400E63FFE /* types.h in Headers */, F9BA8C021543268400E63FFE /* vector2.h in Headers */, F9BA8C031543268400E63FFE /* vector3.h in Headers */, F9BA8C041543268400E63FFE /* version.h in Headers */, F9BA8C48154328B600E63FFE /* OgreImporter.hpp in Headers */, F9BA8C4C154328B600E63FFE /* OgreXmlHelper.hpp in Headers */, F99A9EB615436077000682F3 /* BlobIOSystem.h in Headers */, F99A9EBB15436098000682F3 /* lexical_cast.hpp in Headers */, F99A9EC0154360A0000682F3 /* make_shared.hpp in Headers */, F99A9EC5154360A5000682F3 /* noncopyable.hpp in Headers */, F99A9ECA154360B5000682F3 /* timer.hpp in Headers */, F99A9ECF154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */, F99A9ED815436125000682F3 /* DeboneProcess.h in Headers */, F99A9F1F154361D4000682F3 /* LogAux.h in Headers */, F99A9F2D15436207000682F3 /* M3Importer.h in Headers */, F99A9F3715436269000682F3 /* PlyExporter.h in Headers */, F99A9F3D15436286000682F3 /* PolyTools.h in Headers */, F99A9F47154362DE000682F3 /* ScenePrivate.h in Headers */, F99A9F5015436304000682F3 /* SplitByBoneCountProcess.h in Headers */, F99A9F6215436323000682F3 /* STEPFile.h in Headers */, F99A9F6415436323000682F3 /* STEPFileReader.h in Headers */, F9607088154366AB004D91DD /* crc32.h in Headers */, F960708A154366AB004D91DD /* deflate.h in Headers */, F960708C154366AB004D91DD /* inffast.h in Headers */, F960708D154366AB004D91DD /* inffixed.h in Headers */, F960708F154366AB004D91DD /* inflate.h in Headers */, F9607091154366AB004D91DD /* inftrees.h in Headers */, F9607093154366AB004D91DD /* trees.h in Headers */, F9607094154366AB004D91DD /* zconf.h in Headers */, F9607095154366AB004D91DD /* zconf.in.h in Headers */, F9607096154366AB004D91DD /* zlib.h in Headers */, F9607098154366AB004D91DD /* zutil.h in Headers */, F96070BC154366ED004D91DD /* XGLLoader.h in Headers */, F96070CD1543673B004D91DD /* clipper.hpp in Headers */, F96070F81543675E004D91DD /* shapes.h in Headers */, F96070F91543675E004D91DD /* utils.h in Headers */, F96070FA1543675E004D91DD /* poly2tri.h in Headers */, F96070FC1543675E004D91DD /* advancing_front.h in Headers */, F96070FE1543675E004D91DD /* cdt.h in Headers */, F96071001543675E004D91DD /* sweep.h in Headers */, F96071021543675E004D91DD /* sweep_context.h in Headers */, F97BA03815439DB3009EB9DD /* ai_assert.h in Headers */, F97BA08715439FC3009EB9DD /* IFCLoader.h in Headers */, F97BA08B15439FC3009EB9DD /* IFCReaderGen.h in Headers */, F97BA08D15439FC3009EB9DD /* IFCUtil.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 745FF90D113ECC660020C31B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 745FF923113ECC660020C31B /* 3DSHelper.h in Headers */, 745FF924113ECC660020C31B /* 3DSLoader.h in Headers */, 745FF925113ECC660020C31B /* ASELoader.h in Headers */, 745FF926113ECC660020C31B /* ASEParser.h in Headers */, 745FF927113ECC660020C31B /* BaseImporter.h in Headers */, 745FF928113ECC660020C31B /* BaseProcess.h in Headers */, 745FF929113ECC660020C31B /* ByteSwap.h in Headers */, 745FF92A113ECC660020C31B /* CalcTangentsProcess.h in Headers */, 745FF92B113ECC660020C31B /* ConvertToLHProcess.h in Headers */, 745FF92C113ECC660020C31B /* DefaultIOStream.h in Headers */, 745FF92D113ECC660020C31B /* DefaultIOSystem.h in Headers */, 745FF92F113ECC660020C31B /* fast_atof.h in Headers */, 745FF930113ECC660020C31B /* FileLogStream.h in Headers */, 745FF931113ECC660020C31B /* GenFaceNormalsProcess.h in Headers */, 745FF932113ECC660020C31B /* GenVertexNormalsProcess.h in Headers */, 745FF933113ECC660020C31B /* HalfLifeFileData.h in Headers */, 745FF934113ECC660020C31B /* HMPLoader.h in Headers */, 745FF935113ECC660020C31B /* ImproveCacheLocality.h in Headers */, 745FF936113ECC660020C31B /* JoinVerticesProcess.h in Headers */, 745FF937113ECC660020C31B /* LimitBoneWeightsProcess.h in Headers */, 745FF938113ECC660020C31B /* MaterialSystem.h in Headers */, 745FF939113ECC660020C31B /* MD2FileData.h in Headers */, 745FF93A113ECC660020C31B /* MD2Loader.h in Headers */, 745FF93B113ECC660020C31B /* MD2NormalTable.h in Headers */, 745FF93C113ECC660020C31B /* MD3FileData.h in Headers */, 745FF93D113ECC660020C31B /* MD3Loader.h in Headers */, 745FF93E113ECC660020C31B /* MD5Loader.h in Headers */, 745FF93F113ECC660020C31B /* MD5Parser.h in Headers */, 745FF940113ECC660020C31B /* MDLDefaultColorMap.h in Headers */, 745FF941113ECC660020C31B /* MDLFileData.h in Headers */, 745FF942113ECC660020C31B /* MDLLoader.h in Headers */, 745FF943113ECC660020C31B /* ObjFileData.h in Headers */, 745FF944113ECC660020C31B /* ObjFileImporter.h in Headers */, 745FF945113ECC660020C31B /* ObjFileMtlImporter.h in Headers */, 745FF946113ECC660020C31B /* ObjFileParser.h in Headers */, 745FF947113ECC660020C31B /* ObjTools.h in Headers */, 745FF948113ECC660020C31B /* ParsingUtils.h in Headers */, 745FF949113ECC660020C31B /* PlyLoader.h in Headers */, 745FF94A113ECC660020C31B /* PlyParser.h in Headers */, 745FF94B113ECC660020C31B /* PretransformVertices.h in Headers */, 745FF94C113ECC660020C31B /* qnan.h in Headers */, 745FF94D113ECC660020C31B /* RemoveComments.h in Headers */, 745FF94E113ECC660020C31B /* RemoveRedundantMaterials.h in Headers */, 745FF94F113ECC660020C31B /* SMDLoader.h in Headers */, 745FF950113ECC660020C31B /* SpatialSort.h in Headers */, 745FF951113ECC660020C31B /* SplitLargeMeshes.h in Headers */, 745FF952113ECC660020C31B /* STLLoader.h in Headers */, 745FF953113ECC660020C31B /* StringComparison.h in Headers */, 745FF954113ECC660020C31B /* TextureTransform.h in Headers */, 745FF955113ECC660020C31B /* TriangulateProcess.h in Headers */, 745FF956113ECC660020C31B /* ValidateDataStructure.h in Headers */, 745FF957113ECC660020C31B /* VertexTriangleAdjacency.h in Headers */, 745FF958113ECC660020C31B /* Win32DebugLogStream.h in Headers */, 745FF959113ECC660020C31B /* XFileHelper.h in Headers */, 745FF95A113ECC660020C31B /* XFileImporter.h in Headers */, 745FF95B113ECC660020C31B /* XFileParser.h in Headers */, 745FF95E113ECC660020C31B /* MDCFileData.h in Headers */, 745FF95F113ECC660020C31B /* MDCLoader.h in Headers */, 745FF960113ECC660020C31B /* MDCNormalTable.h in Headers */, 745FF961113ECC660020C31B /* FixNormalsStep.h in Headers */, 745FF962113ECC660020C31B /* LWOFileData.h in Headers */, 745FF963113ECC660020C31B /* LWOLoader.h in Headers */, 745FF964113ECC660020C31B /* HMPFileData.h in Headers */, 745FF966113ECC660020C31B /* IFF.h in Headers */, 745FF967113ECC660020C31B /* Hash.h in Headers */, 745FF96C113ECC660020C31B /* ACLoader.h in Headers */, 745FF96D113ECC660020C31B /* IRRLoader.h in Headers */, 745FF96E113ECC660020C31B /* IRRMeshLoader.h in Headers */, 745FF96F113ECC660020C31B /* IRRShared.h in Headers */, 745FF970113ECC660020C31B /* ColladaHelper.h in Headers */, 745FF971113ECC660020C31B /* ColladaLoader.h in Headers */, 745FF972113ECC660020C31B /* ColladaParser.h in Headers */, 745FF973113ECC660020C31B /* NFFLoader.h in Headers */, 745FF974113ECC660020C31B /* SGSpatialSort.h in Headers */, 745FF975113ECC660020C31B /* Q3DLoader.h in Headers */, 745FF976113ECC660020C31B /* BVHLoader.h in Headers */, 745FF977113ECC660020C31B /* OFFLoader.h in Headers */, 745FF978113ECC660020C31B /* RawLoader.h in Headers */, 745FF979113ECC660020C31B /* DXFLoader.h in Headers */, 745FF97A113ECC660020C31B /* TerragenLoader.h in Headers */, 745FF97B113ECC660020C31B /* irrXMLWrapper.h in Headers */, 745FF97C113ECC660020C31B /* ScenePreprocessor.h in Headers */, 745FF97D113ECC660020C31B /* SceneCombiner.h in Headers */, 745FF97E113ECC660020C31B /* SortByPTypeProcess.h in Headers */, 745FF97F113ECC660020C31B /* FindDegenerates.h in Headers */, 745FF980113ECC660020C31B /* ComputeUVMappingProcess.h in Headers */, 745FF981113ECC660020C31B /* StandardShapes.h in Headers */, 745FF982113ECC660020C31B /* FindInstancesProcess.h in Headers */, 745FF983113ECC660020C31B /* RemoveVCProcess.h in Headers */, 745FF984113ECC660020C31B /* FindInvalidDataProcess.h in Headers */, 745FF985113ECC660020C31B /* SkeletonMeshBuilder.h in Headers */, 745FF986113ECC660020C31B /* SmoothingGroups.h in Headers */, 745FF98D113ECC660020C31B /* B3DImporter.h in Headers */, 7437C959113F18C70067B9B9 /* foreach.hpp in Headers */, 7437C95A113F18C70067B9B9 /* format.hpp in Headers */, 7437C95B113F18C70067B9B9 /* common_factor_rt.hpp in Headers */, 7437C95C113F18C70067B9B9 /* scoped_array.hpp in Headers */, 7437C95D113F18C70067B9B9 /* scoped_ptr.hpp in Headers */, 7437C95E113F18C70067B9B9 /* static_assert.hpp in Headers */, 7437C95F113F18C70067B9B9 /* tuple.hpp in Headers */, 7411B15111416D5E00BCD793 /* CSMLoader.h in Headers */, 7411B15C11416DDD00BCD793 /* LWSLoader.h in Headers */, 7411B16611416DF400BCD793 /* LWOAnimation.h in Headers */, 7411B17311416E2500BCD793 /* MS3DLoader.h in Headers */, 7411B18E11416EBC00BCD793 /* UnrealLoader.h in Headers */, 7411B1A611416EF400BCD793 /* FileSystemFilter.h in Headers */, 7411B1A711416EF400BCD793 /* GenericProperty.h in Headers */, 7411B1A811416EF400BCD793 /* MemoryIOWrapper.h in Headers */, 7411B1AA11416EF400BCD793 /* OptimizeGraph.h in Headers */, 7411B1AC11416EF400BCD793 /* OptimizeMeshes.h in Headers */, 7411B1AD11416EF400BCD793 /* ProcessHelper.h in Headers */, 7411B1AE11416EF400BCD793 /* StdOStreamLogStream.h in Headers */, 7411B1AF11416EF400BCD793 /* StreamReader.h in Headers */, 7411B1B111416EF400BCD793 /* Subdivision.h in Headers */, 7411B1B311416EF400BCD793 /* TargetAnimation.h in Headers */, 7411B1B411416EF400BCD793 /* Vertex.h in Headers */, 74C9BB6711ACBB1000AF885C /* BlenderDNA.h in Headers */, 74C9BB6911ACBB1000AF885C /* BlenderLoader.h in Headers */, 74C9BB6B11ACBB1000AF885C /* BlenderScene.h in Headers */, 74C9BB6C11ACBB1000AF885C /* BlenderSceneGen.h in Headers */, 74C9BB7511ACBB3600AF885C /* pointer_cast.hpp in Headers */, 74C9BB7611ACBB3600AF885C /* shared_array.hpp in Headers */, 74C9BB7711ACBB3600AF885C /* shared_ptr.hpp in Headers */, 74C9BB8111ACBB7800AF885C /* MakeVerboseFormat.h in Headers */, 74C9BB8B11ACBB9900AF885C /* AssimpPCH.h in Headers */, 74C9BB9A11ACBBBC00AF885C /* COBLoader.h in Headers */, 74C9BB9B11ACBBBC00AF885C /* COBScene.h in Headers */, 74C9BBB511ACBC2600AF885C /* revision.h in Headers */, 74C9BBC311ACBC6C00AF885C /* Exceptional.h in Headers */, 74C9BBC411ACBC6C00AF885C /* LineSplitter.h in Headers */, 74C9BBC511ACBC6C00AF885C /* MD4FileData.h in Headers */, 74C9BBC611ACBC6C00AF885C /* TinyFormatter.h in Headers */, 8E7ABBBD127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */, 8E7ABBBF127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */, 8E7ABBC1127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */, 8E7ABBC3127E0F1A00512ED1 /* Q3BSPZipArchive.h in Headers */, 8E7ABBCD127E0F2A00512ED1 /* NDOLoader.h in Headers */, 8E7ABBDA127E0F3800512ED1 /* BlenderIntermediate.h in Headers */, 8E7ABBDC127E0F3800512ED1 /* BlenderModifier.h in Headers */, 8E7ABBEF127E0FA400512ED1 /* assbin_chunks.h in Headers */, 8E7ABBF0127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */, 8E7ABBF1127E0FA400512ED1 /* Profiler.h in Headers */, 8E7ABBF2127E0FA400512ED1 /* pstdint.h in Headers */, 8E8DEE87127E2B78005EF64D /* ConvertUTF.h in Headers */, 8E8DEE88127E2B78005EF64D /* CXMLReaderImpl.h in Headers */, 8E8DEE89127E2B78005EF64D /* heapsort.h in Headers */, 8E8DEE8A127E2B78005EF64D /* irrArray.h in Headers */, 8E8DEE8B127E2B78005EF64D /* irrString.h in Headers */, 8E8DEE8C127E2B78005EF64D /* irrTypes.h in Headers */, 8E8DEE8E127E2B78005EF64D /* irrXML.h in Headers */, 8E8DEE8F127E2B78005EF64D /* crypt.h in Headers */, 8E8DEE91127E2B78005EF64D /* ioapi.h in Headers */, 8E8DEE93127E2B78005EF64D /* unzip.h in Headers */, F9BA8C051543268400E63FFE /* anim.h in Headers */, F9BA8C071543268400E63FFE /* camera.h in Headers */, F9BA8C081543268400E63FFE /* cexport.h in Headers */, F9BA8C091543268400E63FFE /* cfileio.h in Headers */, F9BA8C0A1543268400E63FFE /* cimport.h in Headers */, F9BA8C0B1543268400E63FFE /* color4.h in Headers */, F9BA8C0C1543268400E63FFE /* poppack1.h in Headers */, F9BA8C0D1543268400E63FFE /* pushpack1.h in Headers */, F9BA8C0E1543268400E63FFE /* config.h in Headers */, F9BA8C0F1543268400E63FFE /* DefaultLogger.hpp in Headers */, F9BA8C101543268400E63FFE /* defs.h in Headers */, F9BA8C111543268400E63FFE /* Exporter.hpp in Headers */, F9BA8C121543268400E63FFE /* Importer.hpp in Headers */, F9BA8C131543268400E63FFE /* importerdesc.h in Headers */, F9BA8C141543268400E63FFE /* IOStream.hpp in Headers */, F9BA8C151543268400E63FFE /* IOSystem.hpp in Headers */, F9BA8C161543268400E63FFE /* light.h in Headers */, F9BA8C171543268400E63FFE /* Logger.hpp in Headers */, F9BA8C181543268400E63FFE /* LogStream.hpp in Headers */, F9BA8C191543268400E63FFE /* material.h in Headers */, F9BA8C1A1543268400E63FFE /* matrix3x3.h in Headers */, F9BA8C1B1543268400E63FFE /* matrix4x4.h in Headers */, F9BA8C1C1543268400E63FFE /* mesh.h in Headers */, F9BA8C1D1543268400E63FFE /* NullLogger.hpp in Headers */, F9BA8C1E1543268400E63FFE /* postprocess.h in Headers */, F9BA8C1F1543268400E63FFE /* ProgressHandler.hpp in Headers */, F9BA8C201543268400E63FFE /* quaternion.h in Headers */, F9BA8C211543268400E63FFE /* scene.h in Headers */, F9BA8C221543268400E63FFE /* texture.h in Headers */, F9BA8C231543268400E63FFE /* types.h in Headers */, F9BA8C241543268400E63FFE /* vector2.h in Headers */, F9BA8C251543268400E63FFE /* vector3.h in Headers */, F9BA8C261543268400E63FFE /* version.h in Headers */, F9BA8C4E154328B600E63FFE /* OgreImporter.hpp in Headers */, F9BA8C52154328B600E63FFE /* OgreXmlHelper.hpp in Headers */, F99A9EB715436077000682F3 /* BlobIOSystem.h in Headers */, F99A9EBC15436098000682F3 /* lexical_cast.hpp in Headers */, F99A9EC1154360A0000682F3 /* make_shared.hpp in Headers */, F99A9EC6154360A5000682F3 /* noncopyable.hpp in Headers */, F99A9ECB154360B5000682F3 /* timer.hpp in Headers */, F99A9ED0154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */, F99A9EDA15436125000682F3 /* DeboneProcess.h in Headers */, F99A9F20154361D4000682F3 /* LogAux.h in Headers */, F99A9F2F15436207000682F3 /* M3Importer.h in Headers */, F99A9F3915436269000682F3 /* PlyExporter.h in Headers */, F99A9F3E15436286000682F3 /* PolyTools.h in Headers */, F99A9F48154362DE000682F3 /* ScenePrivate.h in Headers */, F99A9F5215436304000682F3 /* SplitByBoneCountProcess.h in Headers */, F99A9F6515436323000682F3 /* STEPFile.h in Headers */, F99A9F6715436323000682F3 /* STEPFileReader.h in Headers */, F960709C154366AB004D91DD /* crc32.h in Headers */, F960709E154366AB004D91DD /* deflate.h in Headers */, F96070A0154366AB004D91DD /* inffast.h in Headers */, F96070A1154366AB004D91DD /* inffixed.h in Headers */, F96070A3154366AB004D91DD /* inflate.h in Headers */, F96070A5154366AB004D91DD /* inftrees.h in Headers */, F96070A7154366AB004D91DD /* trees.h in Headers */, F96070A8154366AB004D91DD /* zconf.h in Headers */, F96070A9154366AB004D91DD /* zconf.in.h in Headers */, F96070AA154366AB004D91DD /* zlib.h in Headers */, F96070AC154366AB004D91DD /* zutil.h in Headers */, F96070BE154366ED004D91DD /* XGLLoader.h in Headers */, F96070CF1543673B004D91DD /* clipper.hpp in Headers */, F96071041543675E004D91DD /* shapes.h in Headers */, F96071051543675E004D91DD /* utils.h in Headers */, F96071061543675E004D91DD /* poly2tri.h in Headers */, F96071081543675E004D91DD /* advancing_front.h in Headers */, F960710A1543675E004D91DD /* cdt.h in Headers */, F960710C1543675E004D91DD /* sweep.h in Headers */, F960710E1543675E004D91DD /* sweep_context.h in Headers */, F97BA03915439DB3009EB9DD /* ai_assert.h in Headers */, F97BA09115439FC3009EB9DD /* IFCLoader.h in Headers */, F97BA09515439FC3009EB9DD /* IFCReaderGen.h in Headers */, F97BA09715439FC3009EB9DD /* IFCUtil.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; D2AAC09905546B4700DB518D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 3AF45AFB0E4B716800207D74 /* 3DSHelper.h in Headers */, 3AF45AFD0E4B716800207D74 /* 3DSLoader.h in Headers */, 3AF45B020E4B716800207D74 /* ASELoader.h in Headers */, 3AF45B040E4B716800207D74 /* ASEParser.h in Headers */, 3AF45B070E4B716800207D74 /* BaseImporter.h in Headers */, 3AF45B080E4B716800207D74 /* BaseProcess.h in Headers */, 3AF45B090E4B716800207D74 /* ByteSwap.h in Headers */, 3AF45B0B0E4B716800207D74 /* CalcTangentsProcess.h in Headers */, 3AF45B0D0E4B716800207D74 /* ConvertToLHProcess.h in Headers */, 3AF45B0F0E4B716800207D74 /* DefaultIOStream.h in Headers */, 3AF45B110E4B716800207D74 /* DefaultIOSystem.h in Headers */, 3AF45B150E4B716800207D74 /* fast_atof.h in Headers */, 3AF45B160E4B716800207D74 /* FileLogStream.h in Headers */, 3AF45B180E4B716800207D74 /* GenFaceNormalsProcess.h in Headers */, 3AF45B1A0E4B716800207D74 /* GenVertexNormalsProcess.h in Headers */, 3AF45B1B0E4B716800207D74 /* HalfLifeFileData.h in Headers */, 3AF45B1E0E4B716800207D74 /* HMPLoader.h in Headers */, 3AF45B210E4B716800207D74 /* ImproveCacheLocality.h in Headers */, 3AF45B230E4B716800207D74 /* JoinVerticesProcess.h in Headers */, 3AF45B270E4B716800207D74 /* LimitBoneWeightsProcess.h in Headers */, 3AF45B290E4B716800207D74 /* MaterialSystem.h in Headers */, 3AF45B2A0E4B716800207D74 /* MD2FileData.h in Headers */, 3AF45B2C0E4B716800207D74 /* MD2Loader.h in Headers */, 3AF45B2D0E4B716800207D74 /* MD2NormalTable.h in Headers */, 3AF45B2E0E4B716800207D74 /* MD3FileData.h in Headers */, 3AF45B300E4B716800207D74 /* MD3Loader.h in Headers */, 3AF45B350E4B716800207D74 /* MD5Loader.h in Headers */, 3AF45B370E4B716800207D74 /* MD5Parser.h in Headers */, 3AF45B380E4B716800207D74 /* MDLDefaultColorMap.h in Headers */, 3AF45B390E4B716800207D74 /* MDLFileData.h in Headers */, 3AF45B3B0E4B716800207D74 /* MDLLoader.h in Headers */, 3AF45B3D0E4B716800207D74 /* ObjFileData.h in Headers */, 3AF45B3F0E4B716800207D74 /* ObjFileImporter.h in Headers */, 3AF45B410E4B716800207D74 /* ObjFileMtlImporter.h in Headers */, 3AF45B430E4B716800207D74 /* ObjFileParser.h in Headers */, 3AF45B440E4B716800207D74 /* ObjTools.h in Headers */, 3AF45B450E4B716800207D74 /* ParsingUtils.h in Headers */, 3AF45B470E4B716800207D74 /* PlyLoader.h in Headers */, 3AF45B490E4B716800207D74 /* PlyParser.h in Headers */, 3AF45B4B0E4B716800207D74 /* PretransformVertices.h in Headers */, 3AF45B4C0E4B716800207D74 /* qnan.h in Headers */, 3AF45B4E0E4B716800207D74 /* RemoveComments.h in Headers */, 3AF45B500E4B716800207D74 /* RemoveRedundantMaterials.h in Headers */, 3AF45B530E4B716800207D74 /* SMDLoader.h in Headers */, 3AF45B550E4B716800207D74 /* SpatialSort.h in Headers */, 3AF45B570E4B716800207D74 /* SplitLargeMeshes.h in Headers */, 3AF45B590E4B716800207D74 /* STLLoader.h in Headers */, 3AF45B5A0E4B716800207D74 /* StringComparison.h in Headers */, 3AF45B5C0E4B716800207D74 /* TextureTransform.h in Headers */, 3AF45B5E0E4B716800207D74 /* TriangulateProcess.h in Headers */, 3AF45B600E4B716800207D74 /* ValidateDataStructure.h in Headers */, 3AF45B620E4B716800207D74 /* VertexTriangleAdjacency.h in Headers */, 3AF45B630E4B716800207D74 /* Win32DebugLogStream.h in Headers */, 3AF45B640E4B716800207D74 /* XFileHelper.h in Headers */, 3AF45B660E4B716800207D74 /* XFileImporter.h in Headers */, 3AF45B680E4B716800207D74 /* XFileParser.h in Headers */, 3AB8A3AF0E50D67A00606590 /* MDCFileData.h in Headers */, 3AB8A3B10E50D67A00606590 /* MDCLoader.h in Headers */, 3AB8A3B20E50D67A00606590 /* MDCNormalTable.h in Headers */, 3AB8A3B60E50D69D00606590 /* FixNormalsStep.h in Headers */, 3AB8A3BA0E50D6DB00606590 /* LWOFileData.h in Headers */, 3AB8A3BC0E50D6DB00606590 /* LWOLoader.h in Headers */, 3AB8A3C60E50D77900606590 /* HMPFileData.h in Headers */, 3AB8A3CA0E50D7CC00606590 /* IFF.h in Headers */, 3AB8A3CD0E50D7FF00606590 /* Hash.h in Headers */, F90BAFD30F5DD87000124155 /* ACLoader.h in Headers */, F90BAFE00F5DD90800124155 /* IRRLoader.h in Headers */, F90BAFE20F5DD90800124155 /* IRRMeshLoader.h in Headers */, F90BAFE40F5DD90800124155 /* IRRShared.h in Headers */, F90BAFED0F5DD93600124155 /* ColladaHelper.h in Headers */, F90BAFEF0F5DD93600124155 /* ColladaLoader.h in Headers */, F90BAFF10F5DD93600124155 /* ColladaParser.h in Headers */, F90BAFF70F5DD96100124155 /* NFFLoader.h in Headers */, F90BAFFD0F5DD9A000124155 /* SGSpatialSort.h in Headers */, F90BB0090F5DD9DD00124155 /* Q3DLoader.h in Headers */, F90BB00E0F5DD9F400124155 /* BVHLoader.h in Headers */, F90BB0150F5DDA1400124155 /* OFFLoader.h in Headers */, F90BB01D0F5DDA4400124155 /* RawLoader.h in Headers */, F90BB0230F5DDA5700124155 /* DXFLoader.h in Headers */, F90BB0310F5DDAB500124155 /* TerragenLoader.h in Headers */, F90BB0370F5DDB1B00124155 /* irrXMLWrapper.h in Headers */, F90BB03D0F5DDB3200124155 /* ScenePreprocessor.h in Headers */, F90BB03F0F5DDB3200124155 /* SceneCombiner.h in Headers */, F90BB0440F5DDB4600124155 /* SortByPTypeProcess.h in Headers */, F90BB0490F5DDB6100124155 /* FindDegenerates.h in Headers */, F90BB04E0F5DDB8D00124155 /* ComputeUVMappingProcess.h in Headers */, F90BB0530F5DDBA800124155 /* StandardShapes.h in Headers */, F90BB0580F5DDBBF00124155 /* FindInstancesProcess.h in Headers */, F90BB05C0F5DDBCB00124155 /* RemoveVCProcess.h in Headers */, F90BB0620F5DDBE600124155 /* FindInvalidDataProcess.h in Headers */, F90BB0660F5DDC0700124155 /* SkeletonMeshBuilder.h in Headers */, F90BB06B0F5DDC1E00124155 /* SmoothingGroups.h in Headers */, F90BB0890F5DDE0700124155 /* B3DImporter.h in Headers */, 7411B15511416D5E00BCD793 /* CSMLoader.h in Headers */, 7411B16011416DDD00BCD793 /* LWSLoader.h in Headers */, 7411B16A11416DF400BCD793 /* LWOAnimation.h in Headers */, 7411B17711416E2500BCD793 /* MS3DLoader.h in Headers */, 7411B19211416EBC00BCD793 /* UnrealLoader.h in Headers */, 7411B1C411416EF400BCD793 /* FileSystemFilter.h in Headers */, 7411B1C511416EF400BCD793 /* GenericProperty.h in Headers */, 7411B1C611416EF400BCD793 /* MemoryIOWrapper.h in Headers */, 7411B1C811416EF400BCD793 /* OptimizeGraph.h in Headers */, 7411B1CA11416EF400BCD793 /* OptimizeMeshes.h in Headers */, 7411B1CB11416EF400BCD793 /* ProcessHelper.h in Headers */, 7411B1CC11416EF400BCD793 /* StdOStreamLogStream.h in Headers */, 7411B1CD11416EF400BCD793 /* StreamReader.h in Headers */, 7411B1CF11416EF400BCD793 /* Subdivision.h in Headers */, 7411B1D111416EF400BCD793 /* TargetAnimation.h in Headers */, 7411B1D211416EF400BCD793 /* Vertex.h in Headers */, 74C9BB5211ACBB1000AF885C /* BlenderDNA.h in Headers */, 74C9BB5411ACBB1000AF885C /* BlenderLoader.h in Headers */, 74C9BB5611ACBB1000AF885C /* BlenderScene.h in Headers */, 74C9BB5711ACBB1000AF885C /* BlenderSceneGen.h in Headers */, 74C9BB8311ACBB7800AF885C /* MakeVerboseFormat.h in Headers */, 74C9BB8D11ACBB9900AF885C /* AssimpPCH.h in Headers */, 74C9BB9D11ACBBBC00AF885C /* COBLoader.h in Headers */, 74C9BB9E11ACBBBC00AF885C /* COBScene.h in Headers */, 74C9BBB611ACBC2600AF885C /* revision.h in Headers */, 74C9BBC711ACBC6C00AF885C /* Exceptional.h in Headers */, 74C9BBC811ACBC6C00AF885C /* LineSplitter.h in Headers */, 74C9BBC911ACBC6C00AF885C /* MD4FileData.h in Headers */, 74C9BBCA11ACBC6C00AF885C /* TinyFormatter.h in Headers */, 8E7ABBAF127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */, 8E7ABBB1127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */, 8E7ABBB3127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */, 8E7ABBB5127E0F1A00512ED1 /* Q3BSPZipArchive.h in Headers */, 8E7ABBC9127E0F2A00512ED1 /* NDOLoader.h in Headers */, 8E7ABBD4127E0F3800512ED1 /* BlenderIntermediate.h in Headers */, 8E7ABBD6127E0F3800512ED1 /* BlenderModifier.h in Headers */, 8E7ABBE7127E0FA400512ED1 /* assbin_chunks.h in Headers */, 8E7ABBE8127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */, 8E7ABBE9127E0FA400512ED1 /* Profiler.h in Headers */, 8E7ABBEA127E0FA400512ED1 /* pstdint.h in Headers */, 8E8DEE6B127E2B78005EF64D /* ConvertUTF.h in Headers */, 8E8DEE6C127E2B78005EF64D /* CXMLReaderImpl.h in Headers */, 8E8DEE6D127E2B78005EF64D /* heapsort.h in Headers */, 8E8DEE6E127E2B78005EF64D /* irrArray.h in Headers */, 8E8DEE6F127E2B78005EF64D /* irrString.h in Headers */, 8E8DEE70127E2B78005EF64D /* irrTypes.h in Headers */, 8E8DEE72127E2B78005EF64D /* irrXML.h in Headers */, 8E8DEE73127E2B78005EF64D /* crypt.h in Headers */, 8E8DEE75127E2B78005EF64D /* ioapi.h in Headers */, 8E8DEE77127E2B78005EF64D /* unzip.h in Headers */, F9BA8B9F1543268400E63FFE /* anim.h in Headers */, F9BA8BA11543268400E63FFE /* camera.h in Headers */, F9BA8BA21543268400E63FFE /* cexport.h in Headers */, F9BA8BA31543268400E63FFE /* cfileio.h in Headers */, F9BA8BA41543268400E63FFE /* cimport.h in Headers */, F9BA8BA51543268400E63FFE /* color4.h in Headers */, F9BA8BA61543268400E63FFE /* poppack1.h in Headers */, F9BA8BA71543268400E63FFE /* pushpack1.h in Headers */, F9BA8BA81543268400E63FFE /* config.h in Headers */, F9BA8BA91543268400E63FFE /* DefaultLogger.hpp in Headers */, F9BA8BAA1543268400E63FFE /* defs.h in Headers */, F9BA8BAB1543268400E63FFE /* Exporter.hpp in Headers */, F9BA8BAC1543268400E63FFE /* Importer.hpp in Headers */, F9BA8BAD1543268400E63FFE /* importerdesc.h in Headers */, F9BA8BAE1543268400E63FFE /* IOStream.hpp in Headers */, F9BA8BAF1543268400E63FFE /* IOSystem.hpp in Headers */, F9BA8BB01543268400E63FFE /* light.h in Headers */, F9BA8BB11543268400E63FFE /* Logger.hpp in Headers */, F9BA8BB21543268400E63FFE /* LogStream.hpp in Headers */, F9BA8BB31543268400E63FFE /* material.h in Headers */, F9BA8BB41543268400E63FFE /* matrix3x3.h in Headers */, F9BA8BB51543268400E63FFE /* matrix4x4.h in Headers */, F9BA8BB61543268400E63FFE /* mesh.h in Headers */, F9BA8BB71543268400E63FFE /* NullLogger.hpp in Headers */, F9BA8BB81543268400E63FFE /* postprocess.h in Headers */, F9BA8BB91543268400E63FFE /* ProgressHandler.hpp in Headers */, F9BA8BBA1543268400E63FFE /* quaternion.h in Headers */, F9BA8BBB1543268400E63FFE /* scene.h in Headers */, F9BA8BBC1543268400E63FFE /* texture.h in Headers */, F9BA8BBD1543268400E63FFE /* types.h in Headers */, F9BA8BBE1543268400E63FFE /* vector2.h in Headers */, F9BA8BBF1543268400E63FFE /* vector3.h in Headers */, F9BA8BC01543268400E63FFE /* version.h in Headers */, F9BA8C3C154328B600E63FFE /* OgreImporter.hpp in Headers */, F9BA8C40154328B600E63FFE /* OgreXmlHelper.hpp in Headers */, F99A9EB415436077000682F3 /* BlobIOSystem.h in Headers */, F99A9EB915436098000682F3 /* lexical_cast.hpp in Headers */, F99A9EBE154360A0000682F3 /* make_shared.hpp in Headers */, F99A9EC3154360A5000682F3 /* noncopyable.hpp in Headers */, F99A9EC8154360B5000682F3 /* timer.hpp in Headers */, F99A9ECD154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */, F99A9ED415436125000682F3 /* DeboneProcess.h in Headers */, F99A9F1D154361D4000682F3 /* LogAux.h in Headers */, F99A9F2915436207000682F3 /* M3Importer.h in Headers */, F99A9F3315436269000682F3 /* PlyExporter.h in Headers */, F99A9F3B15436286000682F3 /* PolyTools.h in Headers */, F99A9F45154362DE000682F3 /* ScenePrivate.h in Headers */, F99A9F4C15436304000682F3 /* SplitByBoneCountProcess.h in Headers */, F99A9F5C15436323000682F3 /* STEPFile.h in Headers */, F99A9F5E15436323000682F3 /* STEPFileReader.h in Headers */, F9607060154366AB004D91DD /* crc32.h in Headers */, F9607062154366AB004D91DD /* deflate.h in Headers */, F9607064154366AB004D91DD /* inffast.h in Headers */, F9607065154366AB004D91DD /* inffixed.h in Headers */, F9607067154366AB004D91DD /* inflate.h in Headers */, F9607069154366AB004D91DD /* inftrees.h in Headers */, F960706B154366AB004D91DD /* trees.h in Headers */, F960706C154366AB004D91DD /* zconf.h in Headers */, F960706D154366AB004D91DD /* zconf.in.h in Headers */, F960706E154366AB004D91DD /* zlib.h in Headers */, F9607070154366AB004D91DD /* zutil.h in Headers */, F96070B8154366ED004D91DD /* XGLLoader.h in Headers */, F96070C91543673B004D91DD /* clipper.hpp in Headers */, F96070E01543675E004D91DD /* shapes.h in Headers */, F96070E11543675E004D91DD /* utils.h in Headers */, F96070E21543675E004D91DD /* poly2tri.h in Headers */, F96070E41543675E004D91DD /* advancing_front.h in Headers */, F96070E61543675E004D91DD /* cdt.h in Headers */, F96070E81543675E004D91DD /* sweep.h in Headers */, F96070EA1543675E004D91DD /* sweep_context.h in Headers */, F97BA03615439DB3009EB9DD /* ai_assert.h in Headers */, F97BA07315439FC3009EB9DD /* IFCLoader.h in Headers */, F97BA07715439FC3009EB9DD /* IFCReaderGen.h in Headers */, F97BA07915439FC3009EB9DD /* IFCUtil.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; F962E8800F5DE66A009A5495 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( F962E8ED0F5DE6E2009A5495 /* 3DSHelper.h in Headers */, F962E8EE0F5DE6E2009A5495 /* 3DSLoader.h in Headers */, F962E8EF0F5DE6E2009A5495 /* ASELoader.h in Headers */, F962E8F00F5DE6E2009A5495 /* ASEParser.h in Headers */, F962E8F10F5DE6E2009A5495 /* BaseImporter.h in Headers */, F962E8F20F5DE6E2009A5495 /* BaseProcess.h in Headers */, F962E8F30F5DE6E2009A5495 /* ByteSwap.h in Headers */, F962E8F40F5DE6E2009A5495 /* CalcTangentsProcess.h in Headers */, F962E8F50F5DE6E2009A5495 /* ConvertToLHProcess.h in Headers */, F962E8F60F5DE6E2009A5495 /* DefaultIOStream.h in Headers */, F962E8F70F5DE6E2009A5495 /* DefaultIOSystem.h in Headers */, F962E8F90F5DE6E2009A5495 /* fast_atof.h in Headers */, F962E8FA0F5DE6E2009A5495 /* FileLogStream.h in Headers */, F962E8FB0F5DE6E2009A5495 /* GenFaceNormalsProcess.h in Headers */, F962E8FC0F5DE6E2009A5495 /* GenVertexNormalsProcess.h in Headers */, F962E8FD0F5DE6E2009A5495 /* HalfLifeFileData.h in Headers */, F962E8FE0F5DE6E2009A5495 /* HMPLoader.h in Headers */, F962E8FF0F5DE6E2009A5495 /* ImproveCacheLocality.h in Headers */, F962E9000F5DE6E2009A5495 /* JoinVerticesProcess.h in Headers */, F962E9010F5DE6E2009A5495 /* LimitBoneWeightsProcess.h in Headers */, F962E9020F5DE6E2009A5495 /* MaterialSystem.h in Headers */, F962E9030F5DE6E2009A5495 /* MD2FileData.h in Headers */, F962E9040F5DE6E2009A5495 /* MD2Loader.h in Headers */, F962E9050F5DE6E2009A5495 /* MD2NormalTable.h in Headers */, F962E9060F5DE6E2009A5495 /* MD3FileData.h in Headers */, F962E9070F5DE6E2009A5495 /* MD3Loader.h in Headers */, F962E9080F5DE6E2009A5495 /* MD5Loader.h in Headers */, F962E9090F5DE6E2009A5495 /* MD5Parser.h in Headers */, F962E90A0F5DE6E2009A5495 /* MDLDefaultColorMap.h in Headers */, F962E90B0F5DE6E2009A5495 /* MDLFileData.h in Headers */, F962E90C0F5DE6E2009A5495 /* MDLLoader.h in Headers */, F962E90D0F5DE6E2009A5495 /* ObjFileData.h in Headers */, F962E90E0F5DE6E2009A5495 /* ObjFileImporter.h in Headers */, F962E90F0F5DE6E2009A5495 /* ObjFileMtlImporter.h in Headers */, F962E9100F5DE6E2009A5495 /* ObjFileParser.h in Headers */, F962E9110F5DE6E2009A5495 /* ObjTools.h in Headers */, F962E9120F5DE6E2009A5495 /* ParsingUtils.h in Headers */, F962E9130F5DE6E2009A5495 /* PlyLoader.h in Headers */, F962E9140F5DE6E2009A5495 /* PlyParser.h in Headers */, F962E9150F5DE6E2009A5495 /* PretransformVertices.h in Headers */, F962E9160F5DE6E2009A5495 /* qnan.h in Headers */, F962E9170F5DE6E2009A5495 /* RemoveComments.h in Headers */, F962E9180F5DE6E2009A5495 /* RemoveRedundantMaterials.h in Headers */, F962E9190F5DE6E2009A5495 /* SMDLoader.h in Headers */, F962E91A0F5DE6E2009A5495 /* SpatialSort.h in Headers */, F962E91B0F5DE6E2009A5495 /* SplitLargeMeshes.h in Headers */, F962E91C0F5DE6E2009A5495 /* STLLoader.h in Headers */, F962E91D0F5DE6E2009A5495 /* StringComparison.h in Headers */, F962E91E0F5DE6E2009A5495 /* TextureTransform.h in Headers */, F962E91F0F5DE6E2009A5495 /* TriangulateProcess.h in Headers */, F962E9200F5DE6E2009A5495 /* ValidateDataStructure.h in Headers */, F962E9210F5DE6E2009A5495 /* VertexTriangleAdjacency.h in Headers */, F962E9220F5DE6E2009A5495 /* Win32DebugLogStream.h in Headers */, F962E9230F5DE6E2009A5495 /* XFileHelper.h in Headers */, F962E9240F5DE6E2009A5495 /* XFileImporter.h in Headers */, F962E9250F5DE6E2009A5495 /* XFileParser.h in Headers */, F962E9280F5DE6E2009A5495 /* MDCFileData.h in Headers */, F962E9290F5DE6E2009A5495 /* MDCLoader.h in Headers */, F962E92A0F5DE6E2009A5495 /* MDCNormalTable.h in Headers */, F962E92B0F5DE6E2009A5495 /* FixNormalsStep.h in Headers */, F962E92C0F5DE6E2009A5495 /* LWOFileData.h in Headers */, F962E92D0F5DE6E2009A5495 /* LWOLoader.h in Headers */, F962E92E0F5DE6E2009A5495 /* HMPFileData.h in Headers */, F962E9300F5DE6E2009A5495 /* IFF.h in Headers */, F962E9310F5DE6E2009A5495 /* Hash.h in Headers */, F962E9360F5DE6E2009A5495 /* ACLoader.h in Headers */, F962E9370F5DE6E2009A5495 /* IRRLoader.h in Headers */, F962E9380F5DE6E2009A5495 /* IRRMeshLoader.h in Headers */, F962E9390F5DE6E2009A5495 /* IRRShared.h in Headers */, F962E93A0F5DE6E2009A5495 /* ColladaHelper.h in Headers */, F962E93B0F5DE6E2009A5495 /* ColladaLoader.h in Headers */, F962E93C0F5DE6E2009A5495 /* ColladaParser.h in Headers */, F962E93D0F5DE6E2009A5495 /* NFFLoader.h in Headers */, F962E93E0F5DE6E2009A5495 /* SGSpatialSort.h in Headers */, F962E93F0F5DE6E2009A5495 /* Q3DLoader.h in Headers */, F962E9400F5DE6E2009A5495 /* BVHLoader.h in Headers */, F962E9410F5DE6E2009A5495 /* OFFLoader.h in Headers */, F962E9420F5DE6E2009A5495 /* RawLoader.h in Headers */, F962E9430F5DE6E2009A5495 /* DXFLoader.h in Headers */, F962E9440F5DE6E2009A5495 /* TerragenLoader.h in Headers */, F962E9450F5DE6E2009A5495 /* irrXMLWrapper.h in Headers */, F962E9460F5DE6E2009A5495 /* ScenePreprocessor.h in Headers */, F962E9470F5DE6E2009A5495 /* SceneCombiner.h in Headers */, F962E9480F5DE6E2009A5495 /* SortByPTypeProcess.h in Headers */, F962E9490F5DE6E2009A5495 /* FindDegenerates.h in Headers */, F962E94A0F5DE6E2009A5495 /* ComputeUVMappingProcess.h in Headers */, F962E94B0F5DE6E2009A5495 /* StandardShapes.h in Headers */, F962E94C0F5DE6E2009A5495 /* FindInstancesProcess.h in Headers */, F962E94D0F5DE6E2009A5495 /* RemoveVCProcess.h in Headers */, F962E94E0F5DE6E2009A5495 /* FindInvalidDataProcess.h in Headers */, F962E94F0F5DE6E2009A5495 /* SkeletonMeshBuilder.h in Headers */, F962E9500F5DE6E2009A5495 /* SmoothingGroups.h in Headers */, F962E9570F5DE6E2009A5495 /* B3DImporter.h in Headers */, 7411B15711416D5E00BCD793 /* CSMLoader.h in Headers */, 7411B16211416DDD00BCD793 /* LWSLoader.h in Headers */, 7411B16C11416DF400BCD793 /* LWOAnimation.h in Headers */, 7411B17911416E2500BCD793 /* MS3DLoader.h in Headers */, 7411B19411416EBC00BCD793 /* UnrealLoader.h in Headers */, 7411B1D311416EF400BCD793 /* FileSystemFilter.h in Headers */, 7411B1D411416EF400BCD793 /* GenericProperty.h in Headers */, 7411B1D511416EF400BCD793 /* MemoryIOWrapper.h in Headers */, 7411B1D711416EF400BCD793 /* OptimizeGraph.h in Headers */, 7411B1D911416EF400BCD793 /* OptimizeMeshes.h in Headers */, 7411B1DA11416EF400BCD793 /* ProcessHelper.h in Headers */, 7411B1DB11416EF400BCD793 /* StdOStreamLogStream.h in Headers */, 7411B1DC11416EF400BCD793 /* StreamReader.h in Headers */, 7411B1DE11416EF400BCD793 /* Subdivision.h in Headers */, 7411B1E011416EF400BCD793 /* TargetAnimation.h in Headers */, 7411B1E111416EF400BCD793 /* Vertex.h in Headers */, 74C9BB5911ACBB1000AF885C /* BlenderDNA.h in Headers */, 74C9BB5B11ACBB1000AF885C /* BlenderLoader.h in Headers */, 74C9BB5D11ACBB1000AF885C /* BlenderScene.h in Headers */, 74C9BB5E11ACBB1000AF885C /* BlenderSceneGen.h in Headers */, 74C9BB8511ACBB7800AF885C /* MakeVerboseFormat.h in Headers */, 74C9BB8F11ACBB9900AF885C /* AssimpPCH.h in Headers */, 74C9BBA011ACBBBC00AF885C /* COBLoader.h in Headers */, 74C9BBA111ACBBBC00AF885C /* COBScene.h in Headers */, 74C9BBB711ACBC2600AF885C /* revision.h in Headers */, 74C9BBCB11ACBC6C00AF885C /* Exceptional.h in Headers */, 74C9BBCC11ACBC6C00AF885C /* LineSplitter.h in Headers */, 74C9BBCD11ACBC6C00AF885C /* MD4FileData.h in Headers */, 74C9BBCE11ACBC6C00AF885C /* TinyFormatter.h in Headers */, 8E7ABBB6127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */, 8E7ABBB8127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */, 8E7ABBBA127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */, 8E7ABBBC127E0F1A00512ED1 /* Q3BSPZipArchive.h in Headers */, 8E7ABBCB127E0F2A00512ED1 /* NDOLoader.h in Headers */, 8E7ABBD7127E0F3800512ED1 /* BlenderIntermediate.h in Headers */, 8E7ABBD9127E0F3800512ED1 /* BlenderModifier.h in Headers */, 8E7ABBEB127E0FA400512ED1 /* assbin_chunks.h in Headers */, 8E7ABBEC127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */, 8E7ABBED127E0FA400512ED1 /* Profiler.h in Headers */, 8E7ABBEE127E0FA400512ED1 /* pstdint.h in Headers */, 8E8DEE79127E2B78005EF64D /* ConvertUTF.h in Headers */, 8E8DEE7A127E2B78005EF64D /* CXMLReaderImpl.h in Headers */, 8E8DEE7B127E2B78005EF64D /* heapsort.h in Headers */, 8E8DEE7C127E2B78005EF64D /* irrArray.h in Headers */, 8E8DEE7D127E2B78005EF64D /* irrString.h in Headers */, 8E8DEE7E127E2B78005EF64D /* irrTypes.h in Headers */, 8E8DEE80127E2B78005EF64D /* irrXML.h in Headers */, 8E8DEE81127E2B78005EF64D /* crypt.h in Headers */, 8E8DEE83127E2B78005EF64D /* ioapi.h in Headers */, 8E8DEE85127E2B78005EF64D /* unzip.h in Headers */, F9BA8BC11543268400E63FFE /* anim.h in Headers */, F9BA8BC31543268400E63FFE /* camera.h in Headers */, F9BA8BC41543268400E63FFE /* cexport.h in Headers */, F9BA8BC51543268400E63FFE /* cfileio.h in Headers */, F9BA8BC61543268400E63FFE /* cimport.h in Headers */, F9BA8BC71543268400E63FFE /* color4.h in Headers */, F9BA8BC81543268400E63FFE /* poppack1.h in Headers */, F9BA8BC91543268400E63FFE /* pushpack1.h in Headers */, F9BA8BCA1543268400E63FFE /* config.h in Headers */, F9BA8BCB1543268400E63FFE /* DefaultLogger.hpp in Headers */, F9BA8BCC1543268400E63FFE /* defs.h in Headers */, F9BA8BCD1543268400E63FFE /* Exporter.hpp in Headers */, F9BA8BCE1543268400E63FFE /* Importer.hpp in Headers */, F9BA8BCF1543268400E63FFE /* importerdesc.h in Headers */, F9BA8BD01543268400E63FFE /* IOStream.hpp in Headers */, F9BA8BD11543268400E63FFE /* IOSystem.hpp in Headers */, F9BA8BD21543268400E63FFE /* light.h in Headers */, F9BA8BD31543268400E63FFE /* Logger.hpp in Headers */, F9BA8BD41543268400E63FFE /* LogStream.hpp in Headers */, F9BA8BD51543268400E63FFE /* material.h in Headers */, F9BA8BD61543268400E63FFE /* matrix3x3.h in Headers */, F9BA8BD71543268400E63FFE /* matrix4x4.h in Headers */, F9BA8BD81543268400E63FFE /* mesh.h in Headers */, F9BA8BD91543268400E63FFE /* NullLogger.hpp in Headers */, F9BA8BDA1543268400E63FFE /* postprocess.h in Headers */, F9BA8BDB1543268400E63FFE /* ProgressHandler.hpp in Headers */, F9BA8BDC1543268400E63FFE /* quaternion.h in Headers */, F9BA8BDD1543268400E63FFE /* scene.h in Headers */, F9BA8BDE1543268400E63FFE /* texture.h in Headers */, F9BA8BDF1543268400E63FFE /* types.h in Headers */, F9BA8BE01543268400E63FFE /* vector2.h in Headers */, F9BA8BE11543268400E63FFE /* vector3.h in Headers */, F9BA8BE21543268400E63FFE /* version.h in Headers */, F9BA8C42154328B600E63FFE /* OgreImporter.hpp in Headers */, F9BA8C46154328B600E63FFE /* OgreXmlHelper.hpp in Headers */, F99A9EB515436077000682F3 /* BlobIOSystem.h in Headers */, F99A9EBA15436098000682F3 /* lexical_cast.hpp in Headers */, F99A9EBF154360A0000682F3 /* make_shared.hpp in Headers */, F99A9EC4154360A5000682F3 /* noncopyable.hpp in Headers */, F99A9EC9154360B5000682F3 /* timer.hpp in Headers */, F99A9ECE154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */, F99A9ED615436125000682F3 /* DeboneProcess.h in Headers */, F99A9F1E154361D4000682F3 /* LogAux.h in Headers */, F99A9F2B15436207000682F3 /* M3Importer.h in Headers */, F99A9F3515436269000682F3 /* PlyExporter.h in Headers */, F99A9F3C15436286000682F3 /* PolyTools.h in Headers */, F99A9F46154362DE000682F3 /* ScenePrivate.h in Headers */, F99A9F4E15436304000682F3 /* SplitByBoneCountProcess.h in Headers */, F99A9F5F15436323000682F3 /* STEPFile.h in Headers */, F99A9F6115436323000682F3 /* STEPFileReader.h in Headers */, F9607074154366AB004D91DD /* crc32.h in Headers */, F9607076154366AB004D91DD /* deflate.h in Headers */, F9607078154366AB004D91DD /* inffast.h in Headers */, F9607079154366AB004D91DD /* inffixed.h in Headers */, F960707B154366AB004D91DD /* inflate.h in Headers */, F960707D154366AB004D91DD /* inftrees.h in Headers */, F960707F154366AB004D91DD /* trees.h in Headers */, F9607080154366AB004D91DD /* zconf.h in Headers */, F9607081154366AB004D91DD /* zconf.in.h in Headers */, F9607082154366AB004D91DD /* zlib.h in Headers */, F9607084154366AB004D91DD /* zutil.h in Headers */, F96070BA154366ED004D91DD /* XGLLoader.h in Headers */, F96070CB1543673B004D91DD /* clipper.hpp in Headers */, F96070EC1543675E004D91DD /* shapes.h in Headers */, F96070ED1543675E004D91DD /* utils.h in Headers */, F96070EE1543675E004D91DD /* poly2tri.h in Headers */, F96070F01543675E004D91DD /* advancing_front.h in Headers */, F96070F21543675E004D91DD /* cdt.h in Headers */, F96070F41543675E004D91DD /* sweep.h in Headers */, F96070F61543675E004D91DD /* sweep_context.h in Headers */, F97BA03715439DB3009EB9DD /* ai_assert.h in Headers */, F97BA07D15439FC3009EB9DD /* IFCLoader.h in Headers */, F97BA08115439FC3009EB9DD /* IFCReaderGen.h in Headers */, F97BA08315439FC3009EB9DD /* IFCUtil.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 745FF829113ECB080020C31B /* assimp-no-boost */ = { isa = PBXNativeTarget; buildConfigurationList = 745FF8FD113ECB080020C31B /* Build configuration list for PBXNativeTarget "assimp-no-boost" */; buildPhases = ( 745FF82A113ECB080020C31B /* Headers */, 745FF8AB113ECB080020C31B /* Frameworks */, 745FF8AF113ECB080020C31B /* Sources */, ); buildRules = ( ); dependencies = ( ); name = "assimp-no-boost"; productName = libassimp; productReference = 8E8DEEA5127E2D59005EF64D /* libassimp.dylib */; productType = "com.apple.product-type.library.dynamic"; }; 745FF90C113ECC660020C31B /* assimp-static-no-boost */ = { isa = PBXNativeTarget; buildConfigurationList = 745FF9E0113ECC660020C31B /* Build configuration list for PBXNativeTarget "assimp-static-no-boost" */; buildPhases = ( 745FF90D113ECC660020C31B /* Headers */, 745FF98E113ECC660020C31B /* Frameworks */, 745FF992113ECC660020C31B /* Sources */, ); buildRules = ( ); dependencies = ( ); name = "assimp-static-no-boost"; productName = "assimp-static"; productReference = 8E8DEEA6127E2D59005EF64D /* libassimp.a */; productType = "com.apple.product-type.library.static"; }; D2AAC09C05546B4700DB518D /* assimp */ = { isa = PBXNativeTarget; buildConfigurationList = 1DEB916008733D950010E9CD /* Build configuration list for PBXNativeTarget "assimp" */; buildPhases = ( D2AAC09905546B4700DB518D /* Headers */, D2AAC09B05546B4700DB518D /* Frameworks */, D2AAC09A05546B4700DB518D /* Sources */, ); buildRules = ( ); dependencies = ( ); name = assimp; productName = libassimp; productReference = 8E8DEEA3127E2D59005EF64D /* libassimp.dylib */; productType = "com.apple.product-type.library.dynamic"; }; F962E8830F5DE66A009A5495 /* assimp-static */ = { isa = PBXNativeTarget; buildConfigurationList = F962E8870F5DE689009A5495 /* Build configuration list for PBXNativeTarget "assimp-static" */; buildPhases = ( F962E8800F5DE66A009A5495 /* Headers */, F962E8820F5DE66A009A5495 /* Frameworks */, F962E8810F5DE66A009A5495 /* Sources */, ); buildRules = ( ); dependencies = ( ); name = "assimp-static"; productName = "assimp-static"; productReference = 8E8DEEA4127E2D59005EF64D /* libassimp.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; }; buildConfigurationList = 1DEB916408733D950010E9CD /* Build configuration list for PBXProject "assimp" */; compatibilityVersion = "Xcode 3.0"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( English, Japanese, French, German, ); mainGroup = 0867D691FE84028FC02AAC07 /* assimp */; productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( D2AAC09C05546B4700DB518D /* assimp */, F962E8830F5DE66A009A5495 /* assimp-static */, 745FF829113ECB080020C31B /* assimp-no-boost */, 745FF90C113ECC660020C31B /* assimp-static-no-boost */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ 745FF8AF113ECB080020C31B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 745FF8B0113ECB080020C31B /* 3DSConverter.cpp in Sources */, 745FF8B1113ECB080020C31B /* 3DSLoader.cpp in Sources */, 745FF8B3113ECB080020C31B /* ASELoader.cpp in Sources */, 745FF8B4113ECB080020C31B /* ASEParser.cpp in Sources */, 745FF8B5113ECB080020C31B /* Assimp.cpp in Sources */, 745FF8B6113ECB080020C31B /* BaseImporter.cpp in Sources */, 745FF8B7113ECB080020C31B /* CalcTangentsProcess.cpp in Sources */, 745FF8B8113ECB080020C31B /* ConvertToLHProcess.cpp in Sources */, 745FF8B9113ECB080020C31B /* DefaultIOStream.cpp in Sources */, 745FF8BA113ECB080020C31B /* DefaultIOSystem.cpp in Sources */, 745FF8BB113ECB080020C31B /* DefaultLogger.cpp in Sources */, 745FF8BD113ECB080020C31B /* GenFaceNormalsProcess.cpp in Sources */, 745FF8BE113ECB080020C31B /* GenVertexNormalsProcess.cpp in Sources */, 745FF8BF113ECB080020C31B /* HMPLoader.cpp in Sources */, 745FF8C0113ECB080020C31B /* Importer.cpp in Sources */, 745FF8C1113ECB080020C31B /* ImproveCacheLocality.cpp in Sources */, 745FF8C2113ECB080020C31B /* JoinVerticesProcess.cpp in Sources */, 745FF8C3113ECB080020C31B /* LimitBoneWeightsProcess.cpp in Sources */, 745FF8C4113ECB080020C31B /* MaterialSystem.cpp in Sources */, 745FF8C5113ECB080020C31B /* MD2Loader.cpp in Sources */, 745FF8C6113ECB080020C31B /* MD3Loader.cpp in Sources */, 745FF8C7113ECB080020C31B /* MD5Loader.cpp in Sources */, 745FF8C8113ECB080020C31B /* MD5Parser.cpp in Sources */, 745FF8C9113ECB080020C31B /* MDLLoader.cpp in Sources */, 745FF8CA113ECB080020C31B /* MDLMaterialLoader.cpp in Sources */, 745FF8CB113ECB080020C31B /* ObjFileImporter.cpp in Sources */, 745FF8CC113ECB080020C31B /* ObjFileMtlImporter.cpp in Sources */, 745FF8CD113ECB080020C31B /* ObjFileParser.cpp in Sources */, 745FF8CE113ECB080020C31B /* PlyLoader.cpp in Sources */, 745FF8CF113ECB080020C31B /* PlyParser.cpp in Sources */, 745FF8D0113ECB080020C31B /* PretransformVertices.cpp in Sources */, 745FF8D1113ECB080020C31B /* RemoveComments.cpp in Sources */, 745FF8D2113ECB080020C31B /* RemoveRedundantMaterials.cpp in Sources */, 745FF8D3113ECB080020C31B /* SMDLoader.cpp in Sources */, 745FF8D4113ECB080020C31B /* SpatialSort.cpp in Sources */, 745FF8D5113ECB080020C31B /* SplitLargeMeshes.cpp in Sources */, 745FF8D6113ECB080020C31B /* STLLoader.cpp in Sources */, 745FF8D7113ECB080020C31B /* TextureTransform.cpp in Sources */, 745FF8D8113ECB080020C31B /* TriangulateProcess.cpp in Sources */, 745FF8D9113ECB080020C31B /* ValidateDataStructure.cpp in Sources */, 745FF8DA113ECB080020C31B /* VertexTriangleAdjacency.cpp in Sources */, 745FF8DB113ECB080020C31B /* XFileImporter.cpp in Sources */, 745FF8DC113ECB080020C31B /* XFileParser.cpp in Sources */, 745FF8DD113ECB080020C31B /* MDCLoader.cpp in Sources */, 745FF8DE113ECB080020C31B /* FixNormalsStep.cpp in Sources */, 745FF8DF113ECB080020C31B /* LWOLoader.cpp in Sources */, 745FF8E0113ECB080020C31B /* BaseProcess.cpp in Sources */, 745FF8E1113ECB080020C31B /* LWOMaterial.cpp in Sources */, 745FF8E2113ECB080020C31B /* ACLoader.cpp in Sources */, 745FF8E3113ECB080020C31B /* IRRLoader.cpp in Sources */, 745FF8E4113ECB080020C31B /* IRRMeshLoader.cpp in Sources */, 745FF8E5113ECB080020C31B /* IRRShared.cpp in Sources */, 745FF8E6113ECB080020C31B /* ColladaLoader.cpp in Sources */, 745FF8E7113ECB080020C31B /* ColladaParser.cpp in Sources */, 745FF8E8113ECB080020C31B /* NFFLoader.cpp in Sources */, 745FF8E9113ECB080020C31B /* SGSpatialSort.cpp in Sources */, 745FF8EA113ECB080020C31B /* Q3DLoader.cpp in Sources */, 745FF8EB113ECB080020C31B /* BVHLoader.cpp in Sources */, 745FF8EC113ECB080020C31B /* OFFLoader.cpp in Sources */, 745FF8ED113ECB080020C31B /* RawLoader.cpp in Sources */, 745FF8EE113ECB080020C31B /* DXFLoader.cpp in Sources */, 745FF8EF113ECB080020C31B /* LWOBLoader.cpp in Sources */, 745FF8F0113ECB080020C31B /* TerragenLoader.cpp in Sources */, 745FF8F1113ECB080020C31B /* SceneCombiner.cpp in Sources */, 745FF8F2113ECB080020C31B /* ScenePreprocessor.cpp in Sources */, 745FF8F3113ECB080020C31B /* SortByPTypeProcess.cpp in Sources */, 745FF8F4113ECB080020C31B /* FindDegenerates.cpp in Sources */, 745FF8F5113ECB080020C31B /* ComputeUVMappingProcess.cpp in Sources */, 745FF8F6113ECB080020C31B /* StandardShapes.cpp in Sources */, 745FF8F7113ECB080020C31B /* FindInstancesProcess.cpp in Sources */, 745FF8F8113ECB080020C31B /* RemoveVCProcess.cpp in Sources */, 745FF8F9113ECB080020C31B /* FindInvalidDataProcess.cpp in Sources */, 745FF8FA113ECB080020C31B /* SkeletonMeshBuilder.cpp in Sources */, 745FF8FC113ECB080020C31B /* B3DImporter.cpp in Sources */, 7411B15211416D5E00BCD793 /* CSMLoader.cpp in Sources */, 7411B15D11416DDD00BCD793 /* LWSLoader.cpp in Sources */, 7411B16711416DF400BCD793 /* LWOAnimation.cpp in Sources */, 7411B17411416E2500BCD793 /* MS3DLoader.cpp in Sources */, 7411B18F11416EBC00BCD793 /* UnrealLoader.cpp in Sources */, 7411B1B811416EF400BCD793 /* OptimizeGraph.cpp in Sources */, 7411B1BA11416EF400BCD793 /* OptimizeMeshes.cpp in Sources */, 7411B1BF11416EF400BCD793 /* Subdivision.cpp in Sources */, 7411B1C111416EF400BCD793 /* TargetAnimation.cpp in Sources */, 74C9BB5F11ACBB1000AF885C /* BlenderDNA.cpp in Sources */, 74C9BB6111ACBB1000AF885C /* BlenderLoader.cpp in Sources */, 74C9BB6311ACBB1000AF885C /* BlenderScene.cpp in Sources */, 74C9BB7E11ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */, 74C9BB8811ACBB9900AF885C /* AssimpPCH.cpp in Sources */, 74C9BB9611ACBBBC00AF885C /* COBLoader.cpp in Sources */, 8E7ABBA9127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */, 8E7ABBAB127E0F1A00512ED1 /* Q3BSPFileParser.cpp in Sources */, 8E7ABBAD127E0F1A00512ED1 /* Q3BSPZipArchive.cpp in Sources */, 8E7ABBC6127E0F2A00512ED1 /* NDOLoader.cpp in Sources */, 8E7ABBD2127E0F3800512ED1 /* BlenderModifier.cpp in Sources */, 8E8DEE5C127E2B78005EF64D /* ConvertUTF.c in Sources */, 8E8DEE63127E2B78005EF64D /* irrXML.cpp in Sources */, 8E8DEE66127E2B78005EF64D /* ioapi.c in Sources */, 8E8DEE68127E2B78005EF64D /* unzip.c in Sources */, F9BA8C47154328B600E63FFE /* OgreImporter.cpp in Sources */, F9BA8C49154328B600E63FFE /* OgreMaterial.cpp in Sources */, F9BA8C4A154328B600E63FFE /* OgreMesh.cpp in Sources */, F9BA8C4B154328B600E63FFE /* OgreSkeleton.cpp in Sources */, F99A9ED715436125000682F3 /* DeboneProcess.cpp in Sources */, F99A9F1A154361AD000682F3 /* ImporterRegistry.cpp in Sources */, F99A9F2C15436207000682F3 /* M3Importer.cpp in Sources */, F99A9F3615436269000682F3 /* PlyExporter.cpp in Sources */, F99A9F421543629F000682F3 /* PostStepRegistry.cpp in Sources */, F99A9F4F15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */, F99A9F6315436323000682F3 /* STEPFileReader.cpp in Sources */, F9606FF5154364E5004D91DD /* ProcessHelper.cpp in Sources */, F9607085154366AB004D91DD /* adler32.c in Sources */, F9607086154366AB004D91DD /* compress.c in Sources */, F9607087154366AB004D91DD /* crc32.c in Sources */, F9607089154366AB004D91DD /* deflate.c in Sources */, F960708B154366AB004D91DD /* inffast.c in Sources */, F960708E154366AB004D91DD /* inflate.c in Sources */, F9607090154366AB004D91DD /* inftrees.c in Sources */, F9607092154366AB004D91DD /* trees.c in Sources */, F9607097154366AB004D91DD /* zutil.c in Sources */, F96070BB154366ED004D91DD /* XGLLoader.cpp in Sources */, F96070CC1543673B004D91DD /* clipper.cpp in Sources */, F96070F71543675E004D91DD /* shapes.cc in Sources */, F96070FB1543675E004D91DD /* advancing_front.cc in Sources */, F96070FD1543675E004D91DD /* cdt.cc in Sources */, F96070FF1543675E004D91DD /* sweep.cc in Sources */, F96071011543675E004D91DD /* sweep_context.cc in Sources */, F97BA08415439FC3009EB9DD /* IFCCurve.cpp in Sources */, F97BA08515439FC3009EB9DD /* IFCGeometry.cpp in Sources */, F97BA08615439FC3009EB9DD /* IFCLoader.cpp in Sources */, F97BA08815439FC3009EB9DD /* IFCMaterial.cpp in Sources */, F97BA08915439FC3009EB9DD /* IFCProfile.cpp in Sources */, F97BA08A15439FC3009EB9DD /* IFCReaderGen.cpp in Sources */, F97BA08C15439FC3009EB9DD /* IFCUtil.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 745FF992113ECC660020C31B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 745FF993113ECC660020C31B /* 3DSConverter.cpp in Sources */, 745FF994113ECC660020C31B /* 3DSLoader.cpp in Sources */, 745FF996113ECC660020C31B /* ASELoader.cpp in Sources */, 745FF997113ECC660020C31B /* ASEParser.cpp in Sources */, 745FF998113ECC660020C31B /* Assimp.cpp in Sources */, 745FF999113ECC660020C31B /* BaseImporter.cpp in Sources */, 745FF99A113ECC660020C31B /* CalcTangentsProcess.cpp in Sources */, 745FF99B113ECC660020C31B /* ConvertToLHProcess.cpp in Sources */, 745FF99C113ECC660020C31B /* DefaultIOStream.cpp in Sources */, 745FF99D113ECC660020C31B /* DefaultIOSystem.cpp in Sources */, 745FF99E113ECC660020C31B /* DefaultLogger.cpp in Sources */, 745FF9A0113ECC660020C31B /* GenFaceNormalsProcess.cpp in Sources */, 745FF9A1113ECC660020C31B /* GenVertexNormalsProcess.cpp in Sources */, 745FF9A2113ECC660020C31B /* HMPLoader.cpp in Sources */, 745FF9A3113ECC660020C31B /* Importer.cpp in Sources */, 745FF9A4113ECC660020C31B /* ImproveCacheLocality.cpp in Sources */, 745FF9A5113ECC660020C31B /* JoinVerticesProcess.cpp in Sources */, 745FF9A6113ECC660020C31B /* LimitBoneWeightsProcess.cpp in Sources */, 745FF9A7113ECC660020C31B /* MaterialSystem.cpp in Sources */, 745FF9A8113ECC660020C31B /* MD2Loader.cpp in Sources */, 745FF9A9113ECC660020C31B /* MD3Loader.cpp in Sources */, 745FF9AA113ECC660020C31B /* MD5Loader.cpp in Sources */, 745FF9AB113ECC660020C31B /* MD5Parser.cpp in Sources */, 745FF9AC113ECC660020C31B /* MDLLoader.cpp in Sources */, 745FF9AD113ECC660020C31B /* MDLMaterialLoader.cpp in Sources */, 745FF9AE113ECC660020C31B /* ObjFileImporter.cpp in Sources */, 745FF9AF113ECC660020C31B /* ObjFileMtlImporter.cpp in Sources */, 745FF9B0113ECC660020C31B /* ObjFileParser.cpp in Sources */, 745FF9B1113ECC660020C31B /* PlyLoader.cpp in Sources */, 745FF9B2113ECC660020C31B /* PlyParser.cpp in Sources */, 745FF9B3113ECC660020C31B /* PretransformVertices.cpp in Sources */, 745FF9B4113ECC660020C31B /* RemoveComments.cpp in Sources */, 745FF9B5113ECC660020C31B /* RemoveRedundantMaterials.cpp in Sources */, 745FF9B6113ECC660020C31B /* SMDLoader.cpp in Sources */, 745FF9B7113ECC660020C31B /* SpatialSort.cpp in Sources */, 745FF9B8113ECC660020C31B /* SplitLargeMeshes.cpp in Sources */, 745FF9B9113ECC660020C31B /* STLLoader.cpp in Sources */, 745FF9BA113ECC660020C31B /* TextureTransform.cpp in Sources */, 745FF9BB113ECC660020C31B /* TriangulateProcess.cpp in Sources */, 745FF9BC113ECC660020C31B /* ValidateDataStructure.cpp in Sources */, 745FF9BD113ECC660020C31B /* VertexTriangleAdjacency.cpp in Sources */, 745FF9BE113ECC660020C31B /* XFileImporter.cpp in Sources */, 745FF9BF113ECC660020C31B /* XFileParser.cpp in Sources */, 745FF9C0113ECC660020C31B /* MDCLoader.cpp in Sources */, 745FF9C1113ECC660020C31B /* FixNormalsStep.cpp in Sources */, 745FF9C2113ECC660020C31B /* LWOLoader.cpp in Sources */, 745FF9C3113ECC660020C31B /* BaseProcess.cpp in Sources */, 745FF9C4113ECC660020C31B /* LWOMaterial.cpp in Sources */, 745FF9C5113ECC660020C31B /* ACLoader.cpp in Sources */, 745FF9C6113ECC660020C31B /* IRRLoader.cpp in Sources */, 745FF9C7113ECC660020C31B /* IRRMeshLoader.cpp in Sources */, 745FF9C8113ECC660020C31B /* IRRShared.cpp in Sources */, 745FF9C9113ECC660020C31B /* ColladaLoader.cpp in Sources */, 745FF9CA113ECC660020C31B /* ColladaParser.cpp in Sources */, 745FF9CB113ECC660020C31B /* NFFLoader.cpp in Sources */, 745FF9CC113ECC660020C31B /* SGSpatialSort.cpp in Sources */, 745FF9CD113ECC660020C31B /* Q3DLoader.cpp in Sources */, 745FF9CE113ECC660020C31B /* BVHLoader.cpp in Sources */, 745FF9CF113ECC660020C31B /* OFFLoader.cpp in Sources */, 745FF9D0113ECC660020C31B /* RawLoader.cpp in Sources */, 745FF9D1113ECC660020C31B /* DXFLoader.cpp in Sources */, 745FF9D2113ECC660020C31B /* LWOBLoader.cpp in Sources */, 745FF9D3113ECC660020C31B /* TerragenLoader.cpp in Sources */, 745FF9D4113ECC660020C31B /* SceneCombiner.cpp in Sources */, 745FF9D5113ECC660020C31B /* ScenePreprocessor.cpp in Sources */, 745FF9D6113ECC660020C31B /* SortByPTypeProcess.cpp in Sources */, 745FF9D7113ECC660020C31B /* FindDegenerates.cpp in Sources */, 745FF9D8113ECC660020C31B /* ComputeUVMappingProcess.cpp in Sources */, 745FF9D9113ECC660020C31B /* StandardShapes.cpp in Sources */, 745FF9DA113ECC660020C31B /* FindInstancesProcess.cpp in Sources */, 745FF9DB113ECC660020C31B /* RemoveVCProcess.cpp in Sources */, 745FF9DC113ECC660020C31B /* FindInvalidDataProcess.cpp in Sources */, 745FF9DD113ECC660020C31B /* SkeletonMeshBuilder.cpp in Sources */, 745FF9DF113ECC660020C31B /* B3DImporter.cpp in Sources */, 7411B15011416D5E00BCD793 /* CSMLoader.cpp in Sources */, 7411B15B11416DDD00BCD793 /* LWSLoader.cpp in Sources */, 7411B16511416DF400BCD793 /* LWOAnimation.cpp in Sources */, 7411B17211416E2500BCD793 /* MS3DLoader.cpp in Sources */, 7411B18D11416EBC00BCD793 /* UnrealLoader.cpp in Sources */, 7411B1A911416EF400BCD793 /* OptimizeGraph.cpp in Sources */, 7411B1AB11416EF400BCD793 /* OptimizeMeshes.cpp in Sources */, 7411B1B011416EF400BCD793 /* Subdivision.cpp in Sources */, 7411B1B211416EF400BCD793 /* TargetAnimation.cpp in Sources */, 74C9BB6611ACBB1000AF885C /* BlenderDNA.cpp in Sources */, 74C9BB6811ACBB1000AF885C /* BlenderLoader.cpp in Sources */, 74C9BB6A11ACBB1000AF885C /* BlenderScene.cpp in Sources */, 74C9BB8011ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */, 74C9BB8A11ACBB9900AF885C /* AssimpPCH.cpp in Sources */, 74C9BB9911ACBBBC00AF885C /* COBLoader.cpp in Sources */, 8E7ABBBE127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */, 8E7ABBC0127E0F1A00512ED1 /* Q3BSPFileParser.cpp in Sources */, 8E7ABBC2127E0F1A00512ED1 /* Q3BSPZipArchive.cpp in Sources */, 8E7ABBCC127E0F2A00512ED1 /* NDOLoader.cpp in Sources */, 8E7ABBDB127E0F3800512ED1 /* BlenderModifier.cpp in Sources */, 8E8DEE86127E2B78005EF64D /* ConvertUTF.c in Sources */, 8E8DEE8D127E2B78005EF64D /* irrXML.cpp in Sources */, 8E8DEE90127E2B78005EF64D /* ioapi.c in Sources */, 8E8DEE92127E2B78005EF64D /* unzip.c in Sources */, F9BA8C4D154328B600E63FFE /* OgreImporter.cpp in Sources */, F9BA8C4F154328B600E63FFE /* OgreMaterial.cpp in Sources */, F9BA8C50154328B600E63FFE /* OgreMesh.cpp in Sources */, F9BA8C51154328B600E63FFE /* OgreSkeleton.cpp in Sources */, F99A9ED915436125000682F3 /* DeboneProcess.cpp in Sources */, F99A9F1B154361AD000682F3 /* ImporterRegistry.cpp in Sources */, F99A9F2E15436207000682F3 /* M3Importer.cpp in Sources */, F99A9F3815436269000682F3 /* PlyExporter.cpp in Sources */, F99A9F431543629F000682F3 /* PostStepRegistry.cpp in Sources */, F99A9F5115436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */, F99A9F6615436323000682F3 /* STEPFileReader.cpp in Sources */, F9606FF6154364E5004D91DD /* ProcessHelper.cpp in Sources */, F9607099154366AB004D91DD /* adler32.c in Sources */, F960709A154366AB004D91DD /* compress.c in Sources */, F960709B154366AB004D91DD /* crc32.c in Sources */, F960709D154366AB004D91DD /* deflate.c in Sources */, F960709F154366AB004D91DD /* inffast.c in Sources */, F96070A2154366AB004D91DD /* inflate.c in Sources */, F96070A4154366AB004D91DD /* inftrees.c in Sources */, F96070A6154366AB004D91DD /* trees.c in Sources */, F96070AB154366AB004D91DD /* zutil.c in Sources */, F96070BD154366ED004D91DD /* XGLLoader.cpp in Sources */, F96070CE1543673B004D91DD /* clipper.cpp in Sources */, F96071031543675E004D91DD /* shapes.cc in Sources */, F96071071543675E004D91DD /* advancing_front.cc in Sources */, F96071091543675E004D91DD /* cdt.cc in Sources */, F960710B1543675E004D91DD /* sweep.cc in Sources */, F960710D1543675E004D91DD /* sweep_context.cc in Sources */, F97BA08E15439FC3009EB9DD /* IFCCurve.cpp in Sources */, F97BA08F15439FC3009EB9DD /* IFCGeometry.cpp in Sources */, F97BA09015439FC3009EB9DD /* IFCLoader.cpp in Sources */, F97BA09215439FC3009EB9DD /* IFCMaterial.cpp in Sources */, F97BA09315439FC3009EB9DD /* IFCProfile.cpp in Sources */, F97BA09415439FC3009EB9DD /* IFCReaderGen.cpp in Sources */, F97BA09615439FC3009EB9DD /* IFCUtil.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; D2AAC09A05546B4700DB518D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 3AF45AF90E4B716800207D74 /* 3DSConverter.cpp in Sources */, 3AF45AFC0E4B716800207D74 /* 3DSLoader.cpp in Sources */, 3AF45B010E4B716800207D74 /* ASELoader.cpp in Sources */, 3AF45B030E4B716800207D74 /* ASEParser.cpp in Sources */, 3AF45B050E4B716800207D74 /* Assimp.cpp in Sources */, 3AF45B060E4B716800207D74 /* BaseImporter.cpp in Sources */, 3AF45B0A0E4B716800207D74 /* CalcTangentsProcess.cpp in Sources */, 3AF45B0C0E4B716800207D74 /* ConvertToLHProcess.cpp in Sources */, 3AF45B0E0E4B716800207D74 /* DefaultIOStream.cpp in Sources */, 3AF45B100E4B716800207D74 /* DefaultIOSystem.cpp in Sources */, 3AF45B120E4B716800207D74 /* DefaultLogger.cpp in Sources */, 3AF45B170E4B716800207D74 /* GenFaceNormalsProcess.cpp in Sources */, 3AF45B190E4B716800207D74 /* GenVertexNormalsProcess.cpp in Sources */, 3AF45B1D0E4B716800207D74 /* HMPLoader.cpp in Sources */, 3AF45B1F0E4B716800207D74 /* Importer.cpp in Sources */, 3AF45B200E4B716800207D74 /* ImproveCacheLocality.cpp in Sources */, 3AF45B220E4B716800207D74 /* JoinVerticesProcess.cpp in Sources */, 3AF45B260E4B716800207D74 /* LimitBoneWeightsProcess.cpp in Sources */, 3AF45B280E4B716800207D74 /* MaterialSystem.cpp in Sources */, 3AF45B2B0E4B716800207D74 /* MD2Loader.cpp in Sources */, 3AF45B2F0E4B716800207D74 /* MD3Loader.cpp in Sources */, 3AF45B340E4B716800207D74 /* MD5Loader.cpp in Sources */, 3AF45B360E4B716800207D74 /* MD5Parser.cpp in Sources */, 3AF45B3A0E4B716800207D74 /* MDLLoader.cpp in Sources */, 3AF45B3C0E4B716800207D74 /* MDLMaterialLoader.cpp in Sources */, 3AF45B3E0E4B716800207D74 /* ObjFileImporter.cpp in Sources */, 3AF45B400E4B716800207D74 /* ObjFileMtlImporter.cpp in Sources */, 3AF45B420E4B716800207D74 /* ObjFileParser.cpp in Sources */, 3AF45B460E4B716800207D74 /* PlyLoader.cpp in Sources */, 3AF45B480E4B716800207D74 /* PlyParser.cpp in Sources */, 3AF45B4A0E4B716800207D74 /* PretransformVertices.cpp in Sources */, 3AF45B4D0E4B716800207D74 /* RemoveComments.cpp in Sources */, 3AF45B4F0E4B716800207D74 /* RemoveRedundantMaterials.cpp in Sources */, 3AF45B520E4B716800207D74 /* SMDLoader.cpp in Sources */, 3AF45B540E4B716800207D74 /* SpatialSort.cpp in Sources */, 3AF45B560E4B716800207D74 /* SplitLargeMeshes.cpp in Sources */, 3AF45B580E4B716800207D74 /* STLLoader.cpp in Sources */, 3AF45B5B0E4B716800207D74 /* TextureTransform.cpp in Sources */, 3AF45B5D0E4B716800207D74 /* TriangulateProcess.cpp in Sources */, 3AF45B5F0E4B716800207D74 /* ValidateDataStructure.cpp in Sources */, 3AF45B610E4B716800207D74 /* VertexTriangleAdjacency.cpp in Sources */, 3AF45B650E4B716800207D74 /* XFileImporter.cpp in Sources */, 3AF45B670E4B716800207D74 /* XFileParser.cpp in Sources */, 3AB8A3B00E50D67A00606590 /* MDCLoader.cpp in Sources */, 3AB8A3B50E50D69D00606590 /* FixNormalsStep.cpp in Sources */, 3AB8A3BB0E50D6DB00606590 /* LWOLoader.cpp in Sources */, 3AB8A3C40E50D74500606590 /* BaseProcess.cpp in Sources */, 3AB8A7DD0E53715F00606590 /* LWOMaterial.cpp in Sources */, F90BAFD20F5DD87000124155 /* ACLoader.cpp in Sources */, F90BAFDF0F5DD90800124155 /* IRRLoader.cpp in Sources */, F90BAFE10F5DD90800124155 /* IRRMeshLoader.cpp in Sources */, F90BAFE30F5DD90800124155 /* IRRShared.cpp in Sources */, F90BAFEE0F5DD93600124155 /* ColladaLoader.cpp in Sources */, F90BAFF00F5DD93600124155 /* ColladaParser.cpp in Sources */, F90BAFF80F5DD96100124155 /* NFFLoader.cpp in Sources */, F90BAFFE0F5DD9A000124155 /* SGSpatialSort.cpp in Sources */, F90BB0080F5DD9DD00124155 /* Q3DLoader.cpp in Sources */, F90BB00F0F5DD9F400124155 /* BVHLoader.cpp in Sources */, F90BB0160F5DDA1400124155 /* OFFLoader.cpp in Sources */, F90BB01E0F5DDA4400124155 /* RawLoader.cpp in Sources */, F90BB0240F5DDA5700124155 /* DXFLoader.cpp in Sources */, F90BB0280F5DDA9200124155 /* LWOBLoader.cpp in Sources */, F90BB0320F5DDAB500124155 /* TerragenLoader.cpp in Sources */, F90BB03E0F5DDB3200124155 /* SceneCombiner.cpp in Sources */, F90BB0400F5DDB3200124155 /* ScenePreprocessor.cpp in Sources */, F90BB0450F5DDB4600124155 /* SortByPTypeProcess.cpp in Sources */, F90BB04A0F5DDB6100124155 /* FindDegenerates.cpp in Sources */, F90BB04F0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp in Sources */, F90BB0540F5DDBA800124155 /* StandardShapes.cpp in Sources */, F90BB0590F5DDBBF00124155 /* FindInstancesProcess.cpp in Sources */, F90BB05D0F5DDBCB00124155 /* RemoveVCProcess.cpp in Sources */, F90BB0610F5DDBE600124155 /* FindInvalidDataProcess.cpp in Sources */, F90BB0670F5DDC0700124155 /* SkeletonMeshBuilder.cpp in Sources */, F90BB08A0F5DDE0700124155 /* B3DImporter.cpp in Sources */, 7411B15411416D5E00BCD793 /* CSMLoader.cpp in Sources */, 7411B15F11416DDD00BCD793 /* LWSLoader.cpp in Sources */, 7411B16911416DF400BCD793 /* LWOAnimation.cpp in Sources */, 7411B17611416E2500BCD793 /* MS3DLoader.cpp in Sources */, 7411B19111416EBC00BCD793 /* UnrealLoader.cpp in Sources */, 7411B1C711416EF400BCD793 /* OptimizeGraph.cpp in Sources */, 7411B1C911416EF400BCD793 /* OptimizeMeshes.cpp in Sources */, 7411B1CE11416EF400BCD793 /* Subdivision.cpp in Sources */, 7411B1D011416EF400BCD793 /* TargetAnimation.cpp in Sources */, 74C9BB5111ACBB1000AF885C /* BlenderDNA.cpp in Sources */, 74C9BB5311ACBB1000AF885C /* BlenderLoader.cpp in Sources */, 74C9BB5511ACBB1000AF885C /* BlenderScene.cpp in Sources */, 74C9BB8211ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */, 74C9BB8C11ACBB9900AF885C /* AssimpPCH.cpp in Sources */, 74C9BB9C11ACBBBC00AF885C /* COBLoader.cpp in Sources */, 8E7ABBB0127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */, 8E7ABBB2127E0F1A00512ED1 /* Q3BSPFileParser.cpp in Sources */, 8E7ABBB4127E0F1A00512ED1 /* Q3BSPZipArchive.cpp in Sources */, 8E7ABBC8127E0F2A00512ED1 /* NDOLoader.cpp in Sources */, 8E7ABBD5127E0F3800512ED1 /* BlenderModifier.cpp in Sources */, 8E8DEE6A127E2B78005EF64D /* ConvertUTF.c in Sources */, 8E8DEE71127E2B78005EF64D /* irrXML.cpp in Sources */, 8E8DEE74127E2B78005EF64D /* ioapi.c in Sources */, 8E8DEE76127E2B78005EF64D /* unzip.c in Sources */, F9BA8C3B154328B600E63FFE /* OgreImporter.cpp in Sources */, F9BA8C3D154328B600E63FFE /* OgreMaterial.cpp in Sources */, F9BA8C3E154328B600E63FFE /* OgreMesh.cpp in Sources */, F9BA8C3F154328B600E63FFE /* OgreSkeleton.cpp in Sources */, F99A9ED315436125000682F3 /* DeboneProcess.cpp in Sources */, F99A9F18154361AD000682F3 /* ImporterRegistry.cpp in Sources */, F99A9F2815436207000682F3 /* M3Importer.cpp in Sources */, F99A9F3215436269000682F3 /* PlyExporter.cpp in Sources */, F99A9F401543629F000682F3 /* PostStepRegistry.cpp in Sources */, F99A9F4B15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */, F99A9F5D15436323000682F3 /* STEPFileReader.cpp in Sources */, F9606FF3154364E5004D91DD /* ProcessHelper.cpp in Sources */, F960705D154366AB004D91DD /* adler32.c in Sources */, F960705E154366AB004D91DD /* compress.c in Sources */, F960705F154366AB004D91DD /* crc32.c in Sources */, F9607061154366AB004D91DD /* deflate.c in Sources */, F9607063154366AB004D91DD /* inffast.c in Sources */, F9607066154366AB004D91DD /* inflate.c in Sources */, F9607068154366AB004D91DD /* inftrees.c in Sources */, F960706A154366AB004D91DD /* trees.c in Sources */, F960706F154366AB004D91DD /* zutil.c in Sources */, F96070B7154366ED004D91DD /* XGLLoader.cpp in Sources */, F96070C81543673B004D91DD /* clipper.cpp in Sources */, F96070DF1543675E004D91DD /* shapes.cc in Sources */, F96070E31543675E004D91DD /* advancing_front.cc in Sources */, F96070E51543675E004D91DD /* cdt.cc in Sources */, F96070E71543675E004D91DD /* sweep.cc in Sources */, F96070E91543675E004D91DD /* sweep_context.cc in Sources */, F97BA07015439FC3009EB9DD /* IFCCurve.cpp in Sources */, F97BA07115439FC3009EB9DD /* IFCGeometry.cpp in Sources */, F97BA07215439FC3009EB9DD /* IFCLoader.cpp in Sources */, F97BA07415439FC3009EB9DD /* IFCMaterial.cpp in Sources */, F97BA07515439FC3009EB9DD /* IFCProfile.cpp in Sources */, F97BA07615439FC3009EB9DD /* IFCReaderGen.cpp in Sources */, F97BA07815439FC3009EB9DD /* IFCUtil.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; F962E8810F5DE66A009A5495 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F962E88B0F5DE6C8009A5495 /* 3DSConverter.cpp in Sources */, F962E88C0F5DE6C8009A5495 /* 3DSLoader.cpp in Sources */, F962E88E0F5DE6C8009A5495 /* ASELoader.cpp in Sources */, F962E88F0F5DE6C8009A5495 /* ASEParser.cpp in Sources */, F962E8900F5DE6C8009A5495 /* Assimp.cpp in Sources */, F962E8910F5DE6C8009A5495 /* BaseImporter.cpp in Sources */, F962E8920F5DE6C8009A5495 /* CalcTangentsProcess.cpp in Sources */, F962E8930F5DE6C8009A5495 /* ConvertToLHProcess.cpp in Sources */, F962E8940F5DE6C8009A5495 /* DefaultIOStream.cpp in Sources */, F962E8950F5DE6C8009A5495 /* DefaultIOSystem.cpp in Sources */, F962E8960F5DE6C8009A5495 /* DefaultLogger.cpp in Sources */, F962E8980F5DE6C8009A5495 /* GenFaceNormalsProcess.cpp in Sources */, F962E8990F5DE6C8009A5495 /* GenVertexNormalsProcess.cpp in Sources */, F962E89A0F5DE6C8009A5495 /* HMPLoader.cpp in Sources */, F962E89B0F5DE6C8009A5495 /* Importer.cpp in Sources */, F962E89C0F5DE6C8009A5495 /* ImproveCacheLocality.cpp in Sources */, F962E89D0F5DE6C8009A5495 /* JoinVerticesProcess.cpp in Sources */, F962E89E0F5DE6C8009A5495 /* LimitBoneWeightsProcess.cpp in Sources */, F962E89F0F5DE6C8009A5495 /* MaterialSystem.cpp in Sources */, F962E8A00F5DE6C8009A5495 /* MD2Loader.cpp in Sources */, F962E8A10F5DE6C8009A5495 /* MD3Loader.cpp in Sources */, F962E8A20F5DE6C8009A5495 /* MD5Loader.cpp in Sources */, F962E8A30F5DE6C8009A5495 /* MD5Parser.cpp in Sources */, F962E8A40F5DE6C8009A5495 /* MDLLoader.cpp in Sources */, F962E8A50F5DE6C8009A5495 /* MDLMaterialLoader.cpp in Sources */, F962E8A60F5DE6C8009A5495 /* ObjFileImporter.cpp in Sources */, F962E8A70F5DE6C8009A5495 /* ObjFileMtlImporter.cpp in Sources */, F962E8A80F5DE6C8009A5495 /* ObjFileParser.cpp in Sources */, F962E8A90F5DE6C8009A5495 /* PlyLoader.cpp in Sources */, F962E8AA0F5DE6C8009A5495 /* PlyParser.cpp in Sources */, F962E8AB0F5DE6C8009A5495 /* PretransformVertices.cpp in Sources */, F962E8AC0F5DE6C8009A5495 /* RemoveComments.cpp in Sources */, F962E8AD0F5DE6C8009A5495 /* RemoveRedundantMaterials.cpp in Sources */, F962E8AE0F5DE6C8009A5495 /* SMDLoader.cpp in Sources */, F962E8AF0F5DE6C8009A5495 /* SpatialSort.cpp in Sources */, F962E8B00F5DE6C8009A5495 /* SplitLargeMeshes.cpp in Sources */, F962E8B10F5DE6C8009A5495 /* STLLoader.cpp in Sources */, F962E8B20F5DE6C8009A5495 /* TextureTransform.cpp in Sources */, F962E8B30F5DE6C8009A5495 /* TriangulateProcess.cpp in Sources */, F962E8B40F5DE6C8009A5495 /* ValidateDataStructure.cpp in Sources */, F962E8B50F5DE6C8009A5495 /* VertexTriangleAdjacency.cpp in Sources */, F962E8B60F5DE6C8009A5495 /* XFileImporter.cpp in Sources */, F962E8B70F5DE6C8009A5495 /* XFileParser.cpp in Sources */, F962E8B80F5DE6C8009A5495 /* MDCLoader.cpp in Sources */, F962E8B90F5DE6C8009A5495 /* FixNormalsStep.cpp in Sources */, F962E8BA0F5DE6C8009A5495 /* LWOLoader.cpp in Sources */, F962E8BB0F5DE6C8009A5495 /* BaseProcess.cpp in Sources */, F962E8BC0F5DE6C8009A5495 /* LWOMaterial.cpp in Sources */, F962E8BD0F5DE6C8009A5495 /* ACLoader.cpp in Sources */, F962E8BE0F5DE6C8009A5495 /* IRRLoader.cpp in Sources */, F962E8BF0F5DE6C8009A5495 /* IRRMeshLoader.cpp in Sources */, F962E8C00F5DE6C8009A5495 /* IRRShared.cpp in Sources */, F962E8C10F5DE6C8009A5495 /* ColladaLoader.cpp in Sources */, F962E8C20F5DE6C8009A5495 /* ColladaParser.cpp in Sources */, F962E8C30F5DE6C8009A5495 /* NFFLoader.cpp in Sources */, F962E8C40F5DE6C8009A5495 /* SGSpatialSort.cpp in Sources */, F962E8C50F5DE6C8009A5495 /* Q3DLoader.cpp in Sources */, F962E8C60F5DE6C8009A5495 /* BVHLoader.cpp in Sources */, F962E8C70F5DE6C8009A5495 /* OFFLoader.cpp in Sources */, F962E8C80F5DE6C8009A5495 /* RawLoader.cpp in Sources */, F962E8C90F5DE6C8009A5495 /* DXFLoader.cpp in Sources */, F962E8CA0F5DE6C8009A5495 /* LWOBLoader.cpp in Sources */, F962E8CB0F5DE6C8009A5495 /* TerragenLoader.cpp in Sources */, F962E8CC0F5DE6C8009A5495 /* SceneCombiner.cpp in Sources */, F962E8CD0F5DE6C8009A5495 /* ScenePreprocessor.cpp in Sources */, F962E8CE0F5DE6C8009A5495 /* SortByPTypeProcess.cpp in Sources */, F962E8CF0F5DE6C8009A5495 /* FindDegenerates.cpp in Sources */, F962E8D00F5DE6C8009A5495 /* ComputeUVMappingProcess.cpp in Sources */, F962E8D10F5DE6C8009A5495 /* StandardShapes.cpp in Sources */, F962E8D20F5DE6C8009A5495 /* FindInstancesProcess.cpp in Sources */, F962E8D30F5DE6C8009A5495 /* RemoveVCProcess.cpp in Sources */, F962E8D40F5DE6C8009A5495 /* FindInvalidDataProcess.cpp in Sources */, F962E8D50F5DE6C8009A5495 /* SkeletonMeshBuilder.cpp in Sources */, F962E8D70F5DE6C8009A5495 /* B3DImporter.cpp in Sources */, 7411B15611416D5E00BCD793 /* CSMLoader.cpp in Sources */, 7411B16111416DDD00BCD793 /* LWSLoader.cpp in Sources */, 7411B16B11416DF400BCD793 /* LWOAnimation.cpp in Sources */, 7411B17811416E2500BCD793 /* MS3DLoader.cpp in Sources */, 7411B19311416EBC00BCD793 /* UnrealLoader.cpp in Sources */, 7411B1D611416EF400BCD793 /* OptimizeGraph.cpp in Sources */, 7411B1D811416EF400BCD793 /* OptimizeMeshes.cpp in Sources */, 7411B1DD11416EF400BCD793 /* Subdivision.cpp in Sources */, 7411B1DF11416EF400BCD793 /* TargetAnimation.cpp in Sources */, 74C9BB5811ACBB1000AF885C /* BlenderDNA.cpp in Sources */, 74C9BB5A11ACBB1000AF885C /* BlenderLoader.cpp in Sources */, 74C9BB5C11ACBB1000AF885C /* BlenderScene.cpp in Sources */, 74C9BB8411ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */, 74C9BB8E11ACBB9900AF885C /* AssimpPCH.cpp in Sources */, 74C9BB9F11ACBBBC00AF885C /* COBLoader.cpp in Sources */, 8E7ABBB7127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */, 8E7ABBB9127E0F1A00512ED1 /* Q3BSPFileParser.cpp in Sources */, 8E7ABBBB127E0F1A00512ED1 /* Q3BSPZipArchive.cpp in Sources */, 8E7ABBCA127E0F2A00512ED1 /* NDOLoader.cpp in Sources */, 8E7ABBD8127E0F3800512ED1 /* BlenderModifier.cpp in Sources */, 8E8DEE78127E2B78005EF64D /* ConvertUTF.c in Sources */, 8E8DEE7F127E2B78005EF64D /* irrXML.cpp in Sources */, 8E8DEE82127E2B78005EF64D /* ioapi.c in Sources */, 8E8DEE84127E2B78005EF64D /* unzip.c in Sources */, F9BA8C41154328B600E63FFE /* OgreImporter.cpp in Sources */, F9BA8C43154328B600E63FFE /* OgreMaterial.cpp in Sources */, F9BA8C44154328B600E63FFE /* OgreMesh.cpp in Sources */, F9BA8C45154328B600E63FFE /* OgreSkeleton.cpp in Sources */, F99A9ED515436125000682F3 /* DeboneProcess.cpp in Sources */, F99A9F19154361AD000682F3 /* ImporterRegistry.cpp in Sources */, F99A9F2A15436207000682F3 /* M3Importer.cpp in Sources */, F99A9F3415436269000682F3 /* PlyExporter.cpp in Sources */, F99A9F411543629F000682F3 /* PostStepRegistry.cpp in Sources */, F99A9F4D15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */, F99A9F6015436323000682F3 /* STEPFileReader.cpp in Sources */, F9606FF4154364E5004D91DD /* ProcessHelper.cpp in Sources */, F9607071154366AB004D91DD /* adler32.c in Sources */, F9607072154366AB004D91DD /* compress.c in Sources */, F9607073154366AB004D91DD /* crc32.c in Sources */, F9607075154366AB004D91DD /* deflate.c in Sources */, F9607077154366AB004D91DD /* inffast.c in Sources */, F960707A154366AB004D91DD /* inflate.c in Sources */, F960707C154366AB004D91DD /* inftrees.c in Sources */, F960707E154366AB004D91DD /* trees.c in Sources */, F9607083154366AB004D91DD /* zutil.c in Sources */, F96070B9154366ED004D91DD /* XGLLoader.cpp in Sources */, F96070CA1543673B004D91DD /* clipper.cpp in Sources */, F96070EB1543675E004D91DD /* shapes.cc in Sources */, F96070EF1543675E004D91DD /* advancing_front.cc in Sources */, F96070F11543675E004D91DD /* cdt.cc in Sources */, F96070F31543675E004D91DD /* sweep.cc in Sources */, F96070F51543675E004D91DD /* sweep_context.cc in Sources */, F97BA07A15439FC3009EB9DD /* IFCCurve.cpp in Sources */, F97BA07B15439FC3009EB9DD /* IFCGeometry.cpp in Sources */, F97BA07C15439FC3009EB9DD /* IFCLoader.cpp in Sources */, F97BA07E15439FC3009EB9DD /* IFCMaterial.cpp in Sources */, F97BA07F15439FC3009EB9DD /* IFCProfile.cpp in Sources */, F97BA08015439FC3009EB9DD /* IFCReaderGen.cpp in Sources */, F97BA08215439FC3009EB9DD /* IFCUtil.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 1DEB916108733D950010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = stabs; EXECUTABLE_PREFIX = lib; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ""; LD_DYLIB_INSTALL_NAME = libassimpd.dylib; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../boost_1_35_0/bin.v2/libs/date_time/build/darwin/release/architecture-combined/macosx-version-10.4/threading-multi\"", "\"$(SRCROOT)/../../../boost_1_35_0/bin.v2/libs/thread/build/darwin/release/architecture-combined/macosx-version-10.4/threading-multi\"", ); PRODUCT_NAME = assimpd; ZERO_LINK = YES; }; name = Debug; }; 1DEB916208733D950010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = stabs; EXECUTABLE_PREFIX = lib; GCC_MODEL_TUNING = G5; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../../boost_1_35_0/bin.v2/libs/date_time/build/darwin/release/architecture-combined/macosx-version-10.4/threading-multi\"", "\"$(SRCROOT)/../../../boost_1_35_0/bin.v2/libs/thread/build/darwin/release/architecture-combined/macosx-version-10.4/threading-multi\"", ); PRODUCT_NAME = assimp; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; }; name = Release; }; 1DEB916508733D950010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ONLY_ACTIVE_ARCH_PRE_XCODE_3_1)"; CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; CONFIGURATION_TEMP_DIR = "$(OBJROOT)"; GCC_DEBUGGING_SYMBOLS = full; GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PFE_FILE_C_DIALECTS = "c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = ../../code/AssimpPCH.h; GCC_PREPROCESSOR_DEFINITIONS = DEBUG; GCC_VERSION = com.apple.compilers.llvmgcc42; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "/usr/local/include/boost-1_38"; LD_DYLIB_INSTALL_NAME = libassimp.dylib; LIBRARY_SEARCH_PATHS = /usr/local/lib; OBJROOT = "../../obj/$(PROJECT_NAME)_$(CONFIGURATION)_MacOSX"; ONLY_ACTIVE_ARCH_PRE_XCODE_3_1 = "$(NATIVE_ARCH)"; OTHER_LDFLAGS = ""; PREBINDING = NO; SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; SYMROOT = "../../bin/$(PROJECT_NAME)_$(CONFIGURATION)_MacOSX"; VALID_ARCHS = "i386 x86_64"; }; name = Debug; }; 1DEB916608733D950010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)"; ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386"; CONFIGURATION_BUILD_DIR = "$(SYMROOT)"; CONFIGURATION_TEMP_DIR = "$(OBJROOT)"; GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES; GCC_PFE_FILE_C_DIALECTS = "c++"; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = ../../code/AssimpPCH.h; GCC_PREPROCESSOR_DEFINITIONS = NDEBUG; GCC_VERSION = com.apple.compilers.llvmgcc42; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "/usr/local/include/boost-1_38"; LD_DYLIB_INSTALL_NAME = libassimp.dylib; LIBRARY_SEARCH_PATHS = /usr/local/lib; OBJROOT = "../../obj/$(PROJECT_NAME)_$(CONFIGURATION)_MacOSX"; OTHER_LDFLAGS = ""; PREBINDING = NO; SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; SYMROOT = "../../bin/$(PROJECT_NAME)_$(CONFIGURATION)_MacOSX"; VALID_ARCHS = "i386 x86_64"; }; name = Release; }; 745FF8FE113ECB080020C31B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = stabs; EXECUTABLE_PREFIX = lib; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ASSIMP_BUILD_BOOST_WORKAROUND; HEADER_SEARCH_PATHS = "${SRCROOT}/../../code/BoostWorkaround"; LD_DYLIB_INSTALL_NAME = libassimpd.dylib; LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = assimpd; ZERO_LINK = YES; }; name = Debug; }; 745FF8FF113ECB080020C31B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { DEBUG_INFORMATION_FORMAT = stabs; EXECUTABLE_PREFIX = lib; GCC_MODEL_TUNING = G5; GCC_PREPROCESSOR_DEFINITIONS = ( NDEBUG, ASSIMP_BUILD_BOOST_WORKAROUND, ); HEADER_SEARCH_PATHS = "${SRCROOT}/../../code/BoostWorkaround"; LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = assimp; STRIP_INSTALLED_PRODUCT = YES; STRIP_STYLE = "non-global"; }; name = Release; }; 745FF9E1113ECC660020C31B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = stabs; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_ENABLE_SYMBOL_SEPARATION = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ASSIMP_BUILD_BOOST_WORKAROUND; HEADER_SEARCH_PATHS = "${SRCROOT}/../../code/BoostWorkaround"; INSTALL_PATH = /usr/local/lib; LD_DYLIB_INSTALL_NAME = ""; PREBINDING = NO; PRODUCT_NAME = assimpd; SEPARATE_STRIP = NO; SKIP_INSTALL = YES; STRIP_INSTALLED_PRODUCT = NO; }; name = Debug; }; 745FF9E2113ECC660020C31B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_ENABLE_SYMBOL_SEPARATION = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; GCC_MODEL_TUNING = G5; GCC_PREPROCESSOR_DEFINITIONS = ( NDEBUG, ASSIMP_BUILD_BOOST_WORKAROUND, ); HEADER_SEARCH_PATHS = "${SRCROOT}/../../code/BoostWorkaround"; INSTALL_PATH = /usr/local/lib; PREBINDING = NO; PRODUCT_NAME = assimp; SEPARATE_STRIP = NO; SKIP_INSTALL = YES; STRIP_INSTALLED_PRODUCT = NO; ZERO_LINK = NO; }; name = Release; }; F962E8850F5DE66B009A5495 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = stabs; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_ENABLE_SYMBOL_SEPARATION = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ""; INSTALL_PATH = /usr/local/lib; LD_DYLIB_INSTALL_NAME = ""; PREBINDING = NO; PRODUCT_NAME = assimpd; SEPARATE_STRIP = NO; SKIP_INSTALL = YES; STRIP_INSTALLED_PRODUCT = NO; }; name = Debug; }; F962E8860F5DE66B009A5495 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_ENABLE_SYMBOL_SEPARATION = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; GCC_MODEL_TUNING = G5; INSTALL_PATH = /usr/local/lib; PREBINDING = NO; PRODUCT_NAME = assimp; SEPARATE_STRIP = NO; SKIP_INSTALL = YES; STRIP_INSTALLED_PRODUCT = NO; ZERO_LINK = NO; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1DEB916008733D950010E9CD /* Build configuration list for PBXNativeTarget "assimp" */ = { isa = XCConfigurationList; buildConfigurations = ( 1DEB916108733D950010E9CD /* Debug */, 1DEB916208733D950010E9CD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1DEB916408733D950010E9CD /* Build configuration list for PBXProject "assimp" */ = { isa = XCConfigurationList; buildConfigurations = ( 1DEB916508733D950010E9CD /* Debug */, 1DEB916608733D950010E9CD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 745FF8FD113ECB080020C31B /* Build configuration list for PBXNativeTarget "assimp-no-boost" */ = { isa = XCConfigurationList; buildConfigurations = ( 745FF8FE113ECB080020C31B /* Debug */, 745FF8FF113ECB080020C31B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 745FF9E0113ECC660020C31B /* Build configuration list for PBXNativeTarget "assimp-static-no-boost" */ = { isa = XCConfigurationList; buildConfigurations = ( 745FF9E1113ECC660020C31B /* Debug */, 745FF9E2113ECC660020C31B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; F962E8870F5DE689009A5495 /* Build configuration list for PBXNativeTarget "assimp-static" */ = { isa = XCConfigurationList; buildConfigurations = ( F962E8850F5DE66B009A5495 /* Debug */, F962E8860F5DE66B009A5495 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 0867D690FE84028FC02AAC07 /* Project object */; }assimp-3.0/workspaces/vc9/0000755002537200234200000000000011770676611016014 5ustar zmoelnigiemusersassimp-3.0/workspaces/vc9/assimp_view.vcproj0000644002537200234200000012070611437235264021570 0ustar zmoelnigiemusers assimp-3.0/workspaces/vc9/UnitTest.vcproj0000644002537200234200000012627311546054332021022 0ustar zmoelnigiemusers assimp-3.0/workspaces/vc9/shared/0000755002537200234200000000000011770676611017262 5ustar zmoelnigiemusersassimp-3.0/workspaces/vc9/shared/SingleThreadedShared.vsprops0000644002537200234200000000043011134476504024717 0ustar zmoelnigiemusers assimp-3.0/workspaces/vc9/shared/DllShared.vsprops0000644002537200234200000000076511134476504022563 0ustar zmoelnigiemusers assimp-3.0/workspaces/vc9/shared/LibShared.vsprops0000644002537200234200000000053211134476504022546 0ustar zmoelnigiemusers assimp-3.0/workspaces/vc9/shared/NoBoostShared.vsprops0000644002537200234200000000055411343554447023434 0ustar zmoelnigiemusers assimp-3.0/workspaces/vc9/shared/FastSTL.vsprops0000644002537200234200000000042711135712304022164 0ustar zmoelnigiemusers assimp-3.0/workspaces/vc9/shared/UnitTest.vsprops0000644002537200234200000000104211134476504022465 0ustar zmoelnigiemusers assimp-3.0/workspaces/vc9/assimp_cmd.vcproj0000644002537200234200000010336011546054021021345 0ustar zmoelnigiemusers assimp-3.0/workspaces/vc9/assimp.sln0000644002537200234200000003115711472301216020016 0ustar zmoelnigiemusers Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "assimpview", "assimp_view.vcproj", "{B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}" ProjectSection(ProjectDependencies) = postProject {5691E159-2D9B-407F-971F-EA5C592DC524} = {5691E159-2D9B-407F-971F-EA5C592DC524} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "assimp", "assimp.vcproj", "{5691E159-2D9B-407F-971F-EA5C592DC524}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit", "UnitTest.vcproj", "{9B9D1C90-8A03-409A-B547-AE7B48B90F1A}" ProjectSection(ProjectDependencies) = postProject {5691E159-2D9B-407F-971F-EA5C592DC524} = {5691E159-2D9B-407F-971F-EA5C592DC524} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "assimpcmd", "assimp_cmd.vcproj", "{7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}" ProjectSection(ProjectDependencies) = postProject {5691E159-2D9B-407F-971F-EA5C592DC524} = {5691E159-2D9B-407F-971F-EA5C592DC524} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution debug|Win32 = debug|Win32 debug|x64 = debug|x64 debug-dll|Win32 = debug-dll|Win32 debug-dll|x64 = debug-dll|x64 debug-noboost-st|Win32 = debug-noboost-st|Win32 debug-noboost-st|x64 = debug-noboost-st|x64 debug-st|Win32 = debug-st|Win32 debug-st|x64 = debug-st|x64 release|Win32 = release|Win32 release|x64 = release|x64 release-dll|Win32 = release-dll|Win32 release-dll|x64 = release-dll|x64 release-noboost-st|Win32 = release-noboost-st|Win32 release-noboost-st|x64 = release-noboost-st|x64 release-st|Win32 = release-st|Win32 release-st|x64 = release-st|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug|Win32.ActiveCfg = debug|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug|Win32.Build.0 = debug|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug|x64.ActiveCfg = debug|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug|x64.Build.0 = debug|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-dll|Win32.ActiveCfg = debug-dll|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-dll|Win32.Build.0 = debug-dll|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-dll|x64.ActiveCfg = debug-dll|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-dll|x64.Build.0 = debug-dll|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-noboost-st|Win32.ActiveCfg = debug-noboost-st|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-noboost-st|Win32.Build.0 = debug-noboost-st|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-noboost-st|x64.ActiveCfg = debug-noboost-st|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-noboost-st|x64.Build.0 = debug-noboost-st|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-st|Win32.ActiveCfg = debug-st|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-st|Win32.Build.0 = debug-st|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-st|x64.ActiveCfg = debug-st|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-st|x64.Build.0 = debug-st|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release|Win32.ActiveCfg = release|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release|Win32.Build.0 = release|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release|x64.ActiveCfg = release|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release|x64.Build.0 = release|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-dll|Win32.ActiveCfg = release-dll|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-dll|Win32.Build.0 = release-dll|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-dll|x64.ActiveCfg = release-dll|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-dll|x64.Build.0 = release-dll|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-noboost-st|Win32.ActiveCfg = release-noboost-st|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-noboost-st|Win32.Build.0 = release-noboost-st|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-noboost-st|x64.ActiveCfg = release-noboost-st|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-noboost-st|x64.Build.0 = release-noboost-st|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-st|Win32.ActiveCfg = release-st|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-st|Win32.Build.0 = release-st|Win32 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-st|x64.ActiveCfg = release-st|x64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-st|x64.Build.0 = release-st|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug|Win32.ActiveCfg = debug|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug|Win32.Build.0 = debug|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug|x64.ActiveCfg = debug|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug|x64.Build.0 = debug|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-dll|Win32.ActiveCfg = debug-dll|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-dll|Win32.Build.0 = debug-dll|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-dll|x64.ActiveCfg = debug-dll|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-dll|x64.Build.0 = debug-dll|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-noboost-st|Win32.ActiveCfg = debug-noboost-st|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-noboost-st|Win32.Build.0 = debug-noboost-st|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-noboost-st|x64.ActiveCfg = debug-noboost-st|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-noboost-st|x64.Build.0 = debug-noboost-st|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-st|Win32.ActiveCfg = debug-st|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-st|Win32.Build.0 = debug-st|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-st|x64.ActiveCfg = debug-st|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-st|x64.Build.0 = debug-st|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.release|Win32.ActiveCfg = release|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.release|Win32.Build.0 = release|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.release|x64.ActiveCfg = release|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.release|x64.Build.0 = release|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-dll|Win32.ActiveCfg = release-dll|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-dll|Win32.Build.0 = release-dll|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-dll|x64.ActiveCfg = release-dll|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-dll|x64.Build.0 = release-dll|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-noboost-st|Win32.ActiveCfg = release-noboost-st|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-noboost-st|Win32.Build.0 = release-noboost-st|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-noboost-st|x64.ActiveCfg = release-noboost-st|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-noboost-st|x64.Build.0 = release-noboost-st|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-st|Win32.ActiveCfg = release-st|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-st|Win32.Build.0 = release-st|Win32 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-st|x64.ActiveCfg = release-st|x64 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-st|x64.Build.0 = release-st|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug|Win32.ActiveCfg = debug|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug|Win32.Build.0 = debug|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug|x64.ActiveCfg = debug|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug|x64.Build.0 = debug|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-dll|Win32.ActiveCfg = debug-dll|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-dll|x64.ActiveCfg = debug-dll|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-dll|x64.Build.0 = debug-dll|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-noboost-st|Win32.ActiveCfg = debug-noboost-st|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-noboost-st|Win32.Build.0 = debug-noboost-st|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-noboost-st|x64.ActiveCfg = debug-noboost-st|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-noboost-st|x64.Build.0 = debug-noboost-st|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-st|Win32.ActiveCfg = debug-st|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-st|Win32.Build.0 = debug-st|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-st|x64.ActiveCfg = debug-st|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-st|x64.Build.0 = debug-st|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release|Win32.ActiveCfg = release|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release|Win32.Build.0 = release|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release|x64.ActiveCfg = release|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release|x64.Build.0 = release|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-dll|Win32.ActiveCfg = release-dll|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-dll|Win32.Build.0 = release-dll|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-dll|x64.ActiveCfg = release-dll|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-dll|x64.Build.0 = release-dll|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-noboost-st|Win32.ActiveCfg = release-noboost-st|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-noboost-st|Win32.Build.0 = release-noboost-st|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-noboost-st|x64.ActiveCfg = release-noboost-st|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-noboost-st|x64.Build.0 = release-noboost-st|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-st|Win32.ActiveCfg = release-st|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-st|Win32.Build.0 = release-st|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-st|x64.ActiveCfg = release-st|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-st|x64.Build.0 = release-st|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|Win32.ActiveCfg = Debug|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|Win32.Build.0 = Debug|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|x64.ActiveCfg = Debug|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|x64.Build.0 = Debug|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|Win32.ActiveCfg = debug-dll|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|Win32.Build.0 = debug-dll|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|x64.ActiveCfg = debug-dll|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|x64.Build.0 = debug-dll|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-noboost-st|Win32.ActiveCfg = debug-noboost-st|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-noboost-st|Win32.Build.0 = debug-noboost-st|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-noboost-st|x64.ActiveCfg = debug-noboost-st|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-noboost-st|x64.Build.0 = debug-noboost-st|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|Win32.ActiveCfg = debug-st|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|Win32.Build.0 = debug-st|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|x64.ActiveCfg = debug-st|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|x64.Build.0 = debug-st|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|Win32.ActiveCfg = Release|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|Win32.Build.0 = Release|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|x64.ActiveCfg = Release|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|x64.Build.0 = Release|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|Win32.ActiveCfg = release-dll|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|Win32.Build.0 = release-dll|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|x64.ActiveCfg = release-dll|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|x64.Build.0 = release-dll|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|Win32.ActiveCfg = release-noboost-st|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|Win32.Build.0 = release-noboost-st|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|x64.ActiveCfg = release-noboost-st|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|x64.Build.0 = release-noboost-st|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|Win32.ActiveCfg = release-st|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|Win32.Build.0 = release-st|Win32 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|x64.ActiveCfg = release-st|x64 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|x64.Build.0 = release-st|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal assimp-3.0/workspaces/vc9/assimp.vcproj0000644002537200234200000034244011745110337020532 0ustar zmoelnigiemusers assimp-3.0/assimp-config-version.cmake.in0000644002537200234200000000102111766707270020756 0ustar zmoelnigiemusersset( PACKAGE_VERSION "@ASSIMP_VERSION@" ) if( "${PACKAGE_FIND_VERSION}" VERSION_EQUAL "@ASSIMP_VERSION@") set(PACKAGE_VERSION_EXACT 1) endif() if( "${PACKAGE_FIND_VERSION_MAJOR}.${PACKAGE_FIND_VERSION_MINOR}" EQUAL "@ASSIMP_SOVERSION@" ) set(PACKAGE_VERSION_COMPATIBLE 1) elseif( "${PACKAGE_FIND_VERSION_MAJOR}" EQUAL "@ASSIMP_VERSION_MAJOR@" ) # for now backward compatible if minor version is less if( ${PACKAGE_FIND_VERSION_MINOR} LESS @ASSIMP_VERSION_MINOR@ ) set(PACKAGE_VERSION_COMPATIBLE 1) endif() endif() assimp-3.0/packaging/0000755002537200234200000000000011770676611015056 5ustar zmoelnigiemusersassimp-3.0/packaging/windows-innosetup/0000755002537200234200000000000011770676611020572 5ustar zmoelnigiemusersassimp-3.0/packaging/windows-innosetup/readme_installer.txt0000644002537200234200000000145511472242264024642 0ustar zmoelnigiemusers ------------------------------------------------------------------------------------ Open Asset Import Library (Assimp) SDK Installer Release Notes ------------------------------------------------------------------------------------ http://assimp.sf.net Troubleshooting =============== 1. Missing d3dx9_(some-number).dll? Install the latest DirectX runtime or grab the file from somewhere (that's evil but mostly fine). 2. Application configuration not correct / missing msvcr***.dll? Reinstall Microsoft Visual C++ 2005 SP1 Redistributable (x86 or x64, depending on your system) 3. assimp.exe not in PATH Add it to PATH. That's not a bug, the installer does not alter the PATH. 4. Crashes immediately You CPU lacks SSE2 support. Build Assimp from scratch to suit your CPU, sorry. assimp-3.0/packaging/windows-innosetup/readme_installer_vieweronly.txt0000644002537200234200000000225611472242264027125 0ustar zmoelnigiemusers ------------------------------------------------------------------------------------ Open Asset Import Library (Assimp) Viewer Installer Release Notes ------------------------------------------------------------------------------------ http://assimp.sf.net Known Bugs & Limitations ======================== Viewer - Normals appear flipped from time to time when either of the normals-related menu items was hit. - Alpha-sorting is implemented, but still causes artifacts when models are moved quickly. - Several important texture file formats (such as GIF) are not supported. - HUD is blurred on the right side. ATI/AMD hardware only. Troubleshooting =============== 1. Missing d3dx9_(number).dll? Install the latest DirectX runtime or grab the file from somewhere (that's evil but mostly fine). 2. Application configuration not correct / missing msvcr***.dll? Reinstall Microsoft Visual C++ 2005 SP1 Redistributable (x86 or x64, depending on your system) 3. assimp.exe not in PATH Add it to PATH. That's not a bug, the installer does not alter the PATH. 4. Crashes immediately You CPU lacks SSE2 support. Build Assimp from scratch to suit your CPU, sorry.assimp-3.0/packaging/windows-innosetup/WEB0000644002537200234200000000020611355511604021115 0ustar zmoelnigiemusers Project home page: http://assimp.sourceforge.net Sourceforge.net project page: http://www.sourceforge.net/projects/assimp assimp-3.0/packaging/windows-innosetup/howto-build-setup.txt0000644002537200234200000000144311472267270024724 0ustar zmoelnigiemusers How to build the Assimp installer using Inno Setup 1) Get MS VC 2008 SP1 redist packages for x86 and amd64 and copy 'em right here. vcredist_x86.exe vcredist_x64.exe 2) Get D3DCompiler_NN.dll and D3DX9_NN.dll from a) your system32 folder and b) your SysWOW64 folder. Copy all 4 here. Rename the 64 bit files to _x64.dll. NN is the D3DX version targeted by your DX SDK. If it is not 42, you need to update the Inno setup script (script.iss) as well. If you don't have a 64 bit Windows, get the DLLs from somebody else. Please don't ask google because many DLL downloads are infected. 3) Build assimp, assimpcmd and assimpview for the 'release-dll' target and both the Win32 and x64 architectures. 4) Get Inno Setup 5) Compile, output is written to the 'out' folder. assimp-3.0/packaging/windows-innosetup/LICENSE.rtf0000644002537200234200000000432411355511604022361 0ustar zmoelnigiemusers{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}} {\*\generator Msftedit 5.41.21.2509;}\viewkind4\uc1\pard\lang1031\f0\fs22\par \b\fs16 Copyright (c) 2006-2010, ASSIMP Development Team\par All rights reserved.\par \b0\par Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par \par * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par \par * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par \par * Neither the name of the ASSIMP team, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of the ASSIMP Development Team.\par \par THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ONANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par \par \par \b\i AN EXCEPTION \b0\i0 applies to all files in the ./test/models subfolder. These are 3d models for testing purposes, collected from various free sources on the internet. They are - unless otherwise stated - copyright of their respective creators. For a specific 3d model, see .source.txt for more legal information. If you're such a copyright holder and you believe we credited you inproperly or you don't want your files to appear in our repository, contact us.\par \par \fs14\par } assimp-3.0/packaging/windows-innosetup/script_vieweronly.iss0000644002537200234200000000510311472310731025063 0ustar zmoelnigiemusers; Setup script for use with Inno Setup. [Setup] AppName=Open Asset Import Library - Viewer AppVerName=Open Asset Import Library - Viewer (v2.0) DefaultDirName={pf}\AssimpView DefaultGroupName=AssimpView UninstallDisplayIcon={app}\bin\x86\assimp.exe OutputDir=out_vieweronly AppCopyright=Assimp Development Team SetupIconFile=..\..\tools\shared\assimp_tools_icon.ico WizardImageFile=compiler:WizModernImage-IS.BMP WizardSmallImageFile=compiler:WizModernSmallImage-IS.BMP LicenseFile=License.rtf OutputBaseFileName=assimp-view-2.0-setup VersionInfoVersion=2.0.0.0 VersionInfoTextVersion=2.0 VersionInfoCompany=Assimp Development Team ArchitecturesInstallIn64BitMode=x64 [Run] Filename: "{app}\stub\vcredist_x86.exe"; Parameters: "/qb"; StatusMsg: "Installing VS2008 SP1 redistributable package (32 Bit)"; Check: not IsWin64 Filename: "{app}\stub\vcredist_x64.exe"; Parameters: "/qb"; StatusMsg: "Installing VS2008 SP1 redistributable package (64 Bit)"; Check: IsWin64 [Files] Source: "readme_installer_vieweronly.txt"; DestDir: "{app}"; Flags: isreadme ; Installer stub Source: "vcredist_x86.exe"; DestDir: "{app}\stub\"; Check: not IsWin64 Source: "vcredist_x64.exe"; DestDir: "{app}\stub\"; Check: IsWin64 ; Common stuff Source: "..\..\CREDITS"; DestDir: "{app}" Source: "..\..\LICENSE"; DestDir: "{app}" Source: "..\..\README"; DestDir: "{app}" Source: "WEB"; DestDir: "{app}" ; x86 binaries Source: "..\..\bin\assimp_release-dll_Win32\Assimp32.dll"; DestDir: "{app}\bin\x86" Source: "..\..\bin\assimpview_release-dll_Win32\assimp_view.exe"; DestDir: "{app}\bin\x86" Source: "D3DCompiler_42.dll"; DestDir: "{app}\bin\x86" Source: "D3DX9_42.dll"; DestDir: "{app}\bin\x86" Source: "..\..\bin\assimpcmd_release-dll_Win32\assimp.exe"; DestDir: "{app}\bin\x86" ; x64 binaries Source: "..\..\bin\assimp_release-dll_x64\Assimp64.dll"; DestDir: "{app}\bin\x64" Source: "..\..\bin\assimpview_release-dll_x64\assimp_view.exe"; DestDir: "{app}\bin\x64" Source: "D3DCompiler_42_x64.dll"; DestDir: "{app}\bin\x64"; DestName: "D3DCompiler_42.dll" Source: "D3DX9_42_x64.dll"; DestDir: "{app}\bin\x64"; DestName: "D3DX9_42.dll" Source: "..\..\bin\assimpcmd_release-dll_x64\assimp.exe"; DestDir: "{app}\bin\x64" ; Documentation Source: "..\..\doc\AssimpCmdDoc_Html\AssimpCmdDoc.chm"; DestDir: "{app}\doc" [Icons] Name: "{group}\Assimp Command Line Manual"; Filename: "{app}\doc\AssimpCmdDoc.chm" Name: "{group}\AssimpView"; Filename: "{app}\bin\x64\assimp_view.exe"; Check: IsWin64 Name: "{group}\AssimpView"; Filename: "{app}\bin\x86\assimp_view.exe"; Check: not IsWin64 assimp-3.0/packaging/windows-innosetup/script.iss0000644002537200234200000001351511472301216022604 0ustar zmoelnigiemusers; Setup script for use with Inno Setup. [Setup] AppName=Open Asset Import Library - SDK AppVerName=Open Asset Import Library - SDK (v2.0) DefaultDirName={pf}\Assimp DefaultGroupName=Assimp UninstallDisplayIcon={app}\bin\x86\assimp.exe OutputDir=out AppCopyright=Assimp Development Team SetupIconFile=..\..\tools\shared\assimp_tools_icon.ico WizardImageFile=compiler:WizModernImage-IS.BMP WizardSmallImageFile=compiler:WizModernSmallImage-IS.BMP LicenseFile=License.rtf OutputBaseFileName=assimp-sdk-2.0-setup VersionInfoVersion=2.0.0.0 VersionInfoTextVersion=2.0 VersionInfoCompany=Assimp Development Team ArchitecturesInstallIn64BitMode=x64 [Types] Name: "full"; Description: "Full installation" Name: "compact"; Description: "Compact installation, no test models or language bindings" Name: "custom"; Description: "Custom installation"; Flags: iscustom [Components] Name: "main"; Description: "Main Files (32 and 64 Bit)"; Types: full compact custom; Flags: fixed Name: "tools"; Description: "Asset Viewer & Command Line Tools (32 and 64 Bit)"; Types: full compact Name: "help"; Description: "Help Files"; Types: full compact Name: "samples"; Description: "Samples"; Types: full ;Name: "wsource"; Description: "Source Code"; Types: full Name: "test"; Description: "Test Models (BSD-licensed)"; Types: full Name: "test_nonbsd"; Description: "Test Models (other (free) licenses)"; Types: full Name: "pyassimp"; Description: "Python Bindings"; Types: full Name: "dassimp"; Description: "D Bindings"; Types: full Name: "assimp_net"; Description: "C#/.NET Bindings"; Types: full ;Name: "vc8"; Description: "VC8 project files"; Types: full ;Name: "vc9"; Description: "VC9 project files"; Types: full [Run] Filename: "{app}\stub\vcredist_x86.exe"; Parameters: "/qb"; StatusMsg: "Installing VS2008 SP1 redistributable package (32 Bit)"; Check: not IsWin64 Filename: "{app}\stub\vcredist_x64.exe"; Parameters: "/qb"; StatusMsg: "Installing VS2008 SP1 redistributable package (64 Bit)"; Check: IsWin64 [Files] Source: "readme_installer.txt"; DestDir: "{app}"; Flags: isreadme ; Installer stub Source: "vcredist_x86.exe"; DestDir: "{app}\stub\"; Check: not IsWin64 Source: "vcredist_x64.exe"; DestDir: "{app}\stub\"; Check: IsWin64 ; Common stuff Source: "..\..\CREDITS"; DestDir: "{app}" Source: "..\..\LICENSE"; DestDir: "{app}" Source: "..\..\README"; DestDir: "{app}" Source: "WEB"; DestDir: "{app}" Source: "..\..\scripts\*"; DestDir: "{app}\scripts"; Flags: recursesubdirs ; x86 binaries Source: "..\..\bin\assimp_release-dll_Win32\Assimp32.dll"; DestDir: "{app}\bin\x86" Source: "..\..\bin\assimpview_release-dll_Win32\assimp_view.exe"; DestDir: "{app}\bin\x86"; Components: tools Source: "D3DCompiler_42.dll"; DestDir: "{app}\bin\x86"; Components: tools Source: "D3DX9_42.dll"; DestDir: "{app}\bin\x86"; Components: tools Source: "..\..\bin\assimpcmd_release-dll_Win32\assimp.exe"; DestDir: "{app}\bin\x86"; Components: tools ; x64 binaries Source: "..\..\bin\assimp_release-dll_x64\Assimp64.dll"; DestDir: "{app}\bin\x64" Source: "..\..\bin\assimpview_release-dll_x64\assimp_view.exe"; DestDir: "{app}\bin\x64"; Components: tools Source: "D3DCompiler_42_x64.dll"; DestDir: "{app}\bin\x64"; DestName: "D3DCompiler_42.dll"; Components: tools Source: "D3DX9_42_x64.dll"; DestDir: "{app}\bin\x64"; DestName: "D3DX9_42.dll"; Components: tools Source: "..\..\bin\assimpcmd_release-dll_x64\assimp.exe"; DestDir: "{app}\bin\x64"; Components: tools ; Documentation Source: "..\..\doc\AssimpDoc_Html\AssimpDoc.chm"; DestDir: "{app}\doc"; Components: help Source: "..\..\doc\AssimpCmdDoc_Html\AssimpCmdDoc.chm"; DestDir: "{app}\doc"; Components: help Source: "..\..\doc\datastructure.xml"; DestDir: "{app}\doc"; Components: help ; Import libraries Source: "..\..\lib\assimp_release-dll_Win32\assimp.lib"; DestDir: "{app}\lib\x86" Source: "..\..\lib\assimp_release-dll_x64\assimp.lib"; DestDir: "{app}\lib\x64" ; Samples Source: "..\..\samples\*"; DestDir: "{app}\samples"; Flags: recursesubdirs; Components: samples ; Include files Source: "..\..\include\*"; DestDir: "{app}\include"; Flags: recursesubdirs ; dAssimp Source: "..\..\port\dAssimp\*"; DestDir: "{app}\port\D"; Flags: recursesubdirs; Components: dassimp ; Assimp.NET Source: "..\..\port\Assimp.NET\*"; DestDir: "{app}\port\C#"; Flags: recursesubdirs; Components: assimp_net ; PyAssimp Source: "..\..\port\PyAssimp\*"; DestDir: "{app}\port\Python"; Excludes: "*.pyc,*.dll"; Flags: recursesubdirs; Components: pyassimp ; Test repository Source: "..\..\test\models\*"; DestDir: "{app}\test\models"; Flags: recursesubdirs; Components: test Source: "..\..\test\regression\*"; DestDir: "{app}\test\regression"; Flags: recursesubdirs; Components: test Source: "..\..\test\models-nonbsd\*"; DestDir: "{app}\test\models-nonbsd"; Flags: recursesubdirs; Components: test_nonbsd ; Source Code & Workspaces ;Source: "..\..\code\*"; Excludes: "*.o"; DestDir: "{app}\code"; Flags: recursesubdirs; Components: wsource ;Source: "..\..\workspaces\vc8\*.sln"; DestDir: "{app}\workspaces\vc8"; Components: wsource and vc8 ;Source: "..\..\workspaces\vc8\*.vcproj"; DestDir: "{app}\workspaces\vc8"; Components: wsource and vc8 ;Source: "..\..\workspaces\vc9\*.sln"; DestDir: "{app}\workspaces\vc9"; Components: wsource and vc9 ;Source: "..\..\workspaces\vc9\*.vcproj"; DestDir: "{app}\workspaces\vc9"; Components: wsource and vc9 ; Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme [Icons] Name: "{group}\Assimp Manual"; Filename: "{app}\doc\AssimpDoc.chm" ; Components: help Name: "{group}\Assimp Command Line Manual"; Filename: "{app}\doc\AssimpCmdDoc.chm"; Components: help Name: "{group}\AssimpView"; Filename: "{app}\bin\x64\assimp_view.exe"; Components: tools; Check: IsWin64 Name: "{group}\AssimpView"; Filename: "{app}\bin\x86\assimp_view.exe"; Components: tools; Check: not IsWin64 assimp-3.0/packaging/windows-mkzip/0000755002537200234200000000000011770676611017700 5ustar zmoelnigiemusersassimp-3.0/packaging/windows-mkzip/mkrev.bat0000644002537200234200000000131411356476252021512 0ustar zmoelnigiemusers@echo off rem ----------------------------------------------------- rem Tiny batch script to build the input file revision.h rem revision.h contains the revision number of the wc. rem It is included by assimp.rc. rem ----------------------------------------------------- rem This is not very elegant, but it works. rem ./bin shouldn't have any local modifications svnversion > tmpfile.txt set /p addtext= < tmpfile.txt del /q tmpfile.txt echo #define SVNRevision > tmpfile.txt if exist ..\..\revision.h del /q ..\..\revision.h for /f "delims=" %%l in (tmpfile.txt) Do ( for /f "delims=M:" %%r in ("%addtext%") Do ( echo %%l %%r >> ..\..\revision.h ) ) del /q tmpfile.txt assimp-3.0/packaging/windows-mkzip/bin_readme.txt0000644002537200234200000000217511472277637022537 0ustar zmoelnigiemusers ------------------------------------------------------------------------------------ Open Asset Import Library (Assimp) Tools/Binaries for Windows Release Notes ------------------------------------------------------------------------------------ Known Bugs & Limitations ======================== Viewer - For files more than one embedded texture, only the first is loaded. - Normals appear flipped from time to time when either of the normals-related menu items was hit. - Alpha-sorting is implemented, but still causes artifacts when models are moved quickly. - Several important texture file formats (such as GIF) are not supported. - HUD is blurred on the right side. ATI/AMD hardware only. Troubleshooting =============== 1. Missing d3dx9_42.dll? Install the latest DirectX runtime or grab the file from somewhere (that's evil but mostly fine). 2. Application configuration not correct / missing msv*** DLLs? (Re)install Microsoft Visual C++ 2005 SP1 Redistributable (x86 or x64, depending on your system) 3. Crashes immediately You CPU lacks SSE2 support. Build Assimp from scratch to suit your CPU, sorry.assimp-3.0/packaging/windows-mkzip/mkfinal.bat0000644002537200234200000001373111503212260021772 0ustar zmoelnigiemusers rem ----------------------------------------------------- rem Batch file to build zipped redist packages rem Two different packages are built: rem rem assimp---bin.zip rem Binaries for x86 and x64 rem Command line reference rem rem assimp---sdk.zip rem Binaries for x86 and x64, Debug & Release rem Libs for DLL build, x86 & 64, Debug & Release rem Full SVN checkout exluding mkutil & port rem rem rem PREREQUISITES: rem -7za.exe (7zip standalone) rem Download from http://www.7-zip.org/download.html rem rem -svnversion.exe (Subversion revision getter) rem Download any command line SVN package rem rem -doxygen.exe (Doxygen client) rem Download from www.doxygen.com rem rem -svn client rem rem NOTES: rem ./bin must not have any local modifications rem rem ----------------------------------------------------- @echo off color 4e cls rem ----------------------------------------------------- rem Setup file revision for build rem ----------------------------------------------------- call mkrev.bat rem ----------------------------------------------------- rem Build output file names rem ----------------------------------------------------- cd ..\..\bin svnversion > tmpfile.txt SET /p REVISIONBASE= < tmpfile.txt DEL /q tmpfile.txt cd ..\packaging\windows-mkzip SET VERSIONBASE=2.0.%REVISIONBASE% SET OUT_SDK=assimp--%VERSIONBASE%-sdk SET OUT_BIN=assimp--%VERSIONBASE%-bin SET BINCFG_x86=release-dll_win32 SET BINCFG_x64=release-dll_x64 SET BINCFG_x86_DEBUG=debug-dll_win32 SET BINCFG_x64_DEBUG=debug-dll_x64 rem ----------------------------------------------------- rem Delete previous output directories rem ----------------------------------------------------- RD /S /q final\ rem ----------------------------------------------------- rem Create output directories rem ----------------------------------------------------- mkdir final\%OUT_BIN%\x86 mkdir final\%OUT_BIN%\x64 rem ----------------------------------------------------- rem Copy all executables to 'final-bin' rem ----------------------------------------------------- copy /Y ..\..\bin\assimpview_%BINCFG_x86%\assimp_view.exe "final\%OUT_BIN%\x86\assimp_view.exe" copy /Y ..\..\bin\assimpview_%BINCFG_x64%\assimp_view.exe "final\%OUT_BIN%\x64\assimp_view.exe" copy /Y ..\..\bin\assimpcmd_%BINCFG_x86%\assimp.exe "final\%OUT_BIN%\x86\assimp.exe" copy /Y ..\..\bin\assimpcmd_%BINCFG_x64%\assimp.exe "final\%OUT_BIN%\x64\assimp.exe" copy /Y ..\..\bin\assimp_%BINCFG_x86%\Assimp32.dll "final\%OUT_BIN%\x86\Assimp32.dll" copy /Y ..\..\bin\assimp_%BINCFG_x64%\Assimp64.dll "final\%OUT_BIN%\x64\Assimp64.dll" copy ..\..\LICENSE final\%OUT_BIN%\LICENSE copy ..\..\CREDITS final\%OUT_BIN%\CREDITS copy bin_readme.txt final\%OUT_BIN%\README copy bin_readme.txt final\%OUT_BIN%\README copy ..\..\doc\AssimpCmdDoc_Html\AssimpCmdDoc.chm final\%OUT_BIN%\CommandLine.chm rem ----------------------------------------------------- rem Do a clean export of the repository and build SDK rem rem We take the current revision and remove some stuff rem that is nto yet ready to be published. rem ----------------------------------------------------- svn export .\..\..\ .\final\%OUT_SDK% mkdir final\%OUT_SDK%\doc\assimp_html mkdir final\%OUT_SDK%\doc\assimpcmd_html copy .\..\..\doc\AssimpDoc_Html\* final\%OUT_SDK%\doc\assimp_html copy .\..\..\doc\AssimpCmdDoc_Html\* final\%OUT_SDK%\doc\assimpcmd_html del final\%OUT_SDK%\doc\assimpcmd_html\AssimpCmdDoc.chm del final\%OUT_SDK%\doc\assimp_html\AssimpDoc.chm rem Copy doc to a suitable place move final\%OUT_SDK%\doc\AssimpDoc_Html\AssimpDoc.chm final\%OUT_SDK%\Documentation.chm move final\%OUT_SDK%\doc\AssimpCmdDoc_Html\AssimpCmdDoc.chm final\%OUT_SDK%\CommandLine.chm rem Cleanup ./doc folder del /q final\%OUT_SDK%\doc\Preamble.txt RD /s /q final\%OUT_SDK%\doc\AssimpDoc_Html RD /s /q final\%OUT_SDK%\doc\AssimpCmdDoc_Html rem Insert 'dummy' files into empty folders echo. > final\%OUT_SDK%\lib\dummy echo. > final\%OUT_SDK%\obj\dummy RD /s /q final\%OUT_SDK%\port\swig rem Also, repackaging is not a must-have feature RD /s /q final\%OUT_SDK%\packaging rem Copy prebuilt libs mkdir "final\%OUT_SDK%\lib\assimp_%BINCFG_x86%" mkdir "final\%OUT_SDK%\lib\assimp_%BINCFG_x64%" mkdir "final\%OUT_SDK%\lib\assimp_%BINCFG_x86_DEBUG%" mkdir "final\%OUT_SDK%\lib\assimp_%BINCFG_x64_DEBUG%" copy /Y ..\..\lib\assimp_%BINCFG_x86%\assimp.lib "final\%OUT_SDK%\lib\assimp_%BINCFG_x86%" copy /Y ..\..\lib\assimp_%BINCFG_x64%\assimp.lib "final\%OUT_SDK%\lib\assimp_%BINCFG_x64%\" copy /Y ..\..\lib\assimp_%BINCFG_x86_DEBUG%\assimp.lib "final\%OUT_SDK%\lib\assimp_%BINCFG_x86_DEBUG%\" copy /Y ..\..\lib\assimp_%BINCFG_x64_DEBUG%\assimp.lib "final\%OUT_SDK%\lib\assimp_%BINCFG_x64_DEBUG%\" rem Copy prebuilt DLLs mkdir "final\%OUT_SDK%\bin\assimp_%BINCFG_x86%" mkdir "final\%OUT_SDK%\bin\assimp_%BINCFG_x64%" mkdir "final\%OUT_SDK%\bin\assimp_%BINCFG_x86_DEBUG%" mkdir "final\%OUT_SDK%\bin\assimp_%BINCFG_x64_DEBUG%" copy /Y ..\..\bin\assimp_%BINCFG_x86%\Assimp32.dll "final\%OUT_SDK%\bin\assimp_%BINCFG_x86%\" copy /Y ..\..\bin\assimp_%BINCFG_x64%\Assimp64.dll "final\%OUT_SDK%\bin\assimp_%BINCFG_x64%\" copy /Y ..\..\bin\assimp_%BINCFG_x86_DEBUG%\Assimp32d.dll "final\%OUT_SDK%\bin\assimp_%BINCFG_x86_DEBUG%\" copy /Y ..\..\bin\assimp_%BINCFG_x64_DEBUG%\Assimp64d.dll "final\%OUT_SDK%\bin\assimp_%BINCFG_x64_DEBUG%\" rem ----------------------------------------------------- rem Make final-bin.zip and final-sdk.zip rem ----------------------------------------------------- IF NOT EXIST 7za.exe ( cls echo You need to have 7zip standalone installed to echo build ZIP archives. Download: http://www.7-zip.org/download.html pause ) else ( 7za.exe a -tzip "final\%OUT_BIN%.zip" ".\final\%OUT_BIN%" 7za.exe a -tzip "final\%OUT_SDK%.zip" ".\final\%OUT_SDK%" ) rem OK. We should have the release packages now. assimp-3.0/CMakeLists.txt0000644002537200234200000002346611770665021015676 0ustar zmoelnigiemuserscmake_minimum_required( VERSION 2.6 ) PROJECT( Assimp ) # Define here the needed parameters set (ASSIMP_SV_REVISION 1264) set (ASSIMP_VERSION_MAJOR 3) set (ASSIMP_VERSION_MINOR 0) set (ASSIMP_VERSION_PATCH ${ASSIMP_SV_REVISION}) # subversion revision? set (ASSIMP_VERSION ${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}.${ASSIMP_VERSION_PATCH}) set (ASSIMP_SOVERSION 3) SET ( PROJECT_VERSION "${ASSIMP_VERSION}" ) set(PACKAGE_VERSION "0" CACHE STRING "the package-specific version used for uploading the sources") option(OPT_BUILD_PACKAGES "Set to ON to generate CPack configuration files and packaging targets" OFF) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules") set(LIBASSIMP_COMPONENT libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}-r${ASSIMP_SV_REVISION}) set(LIBASSIMP-DEV_COMPONENT libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}-r${ASSIMP_SV_REVISION}-dev) set(CPACK_COMPONENTS_ALL assimp-bin ${LIBASSIMP_COMPONENT} ${LIBASSIMP-DEV_COMPONENT} assimp-dev) if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) add_definitions(-fPIC) # this is a very important switch and some libraries seem now to have it.... ## hide all not-exported symbols add_definitions( -fvisibility=hidden ) endif() INCLUDE (FindPkgConfig) INCLUDE_DIRECTORIES( include ) # If this is an in-source build (CMAKE_SOURCE_DIR == CMAKE_BINARY_DIR), # write the library/executable files to the respective directories in the # source tree. During an out-of-source build, however, do not litter this # directory, since that is probably what the user wanted to avoid. IF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib ) SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib ) SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin ) ENDIF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) # Cache these to allow the user to override them manually. SET( LIB_INSTALL_DIR "lib" CACHE PATH "Path the built library files are installed to." ) SET( INCLUDE_INSTALL_DIR "include" CACHE PATH "Path the header files are installed to." ) SET( BIN_INSTALL_DIR "bin" CACHE PATH "Path the tool executables are installed to." ) SET(DEBUG_POSTFIX "D" CACHE STRING "Debug Postfitx for lib, samples and tools") # Generate a pkg-config .pc for the Assimp library. CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/assimp.pc.in" "${PROJECT_BINARY_DIR}/assimp.pc" @ONLY ) INSTALL( FILES "${PROJECT_BINARY_DIR}/assimp.pc" DESTINATION ${LIB_INSTALL_DIR}/pkgconfig/ COMPONENT ${LIBASSIMP-DEV_COMPONENT}) # cmake configuration files configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config-version.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" @ONLY IMMEDIATE) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" DESTINATION "${LIB_INSTALL_DIR}/cmake/assimp-${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}" COMPONENT ${LIBASSIMP-DEV_COMPONENT}) # add make uninstall capability configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") # Allow the user to build a static library SET ( BUILD_STATIC_LIB OFF CACHE BOOL "Build a static (.a) version of the library" ) # Globally enbale Boost resp. the Boost workaround – it is also needed by the # tools which include the Assimp headers. SET ( ENABLE_BOOST_WORKAROUND OFF CACHE BOOL "If a simple implementation of the used Boost functions is used. Slightly reduces functionality, but enables builds without Boost available." ) IF ( ENABLE_BOOST_WORKAROUND ) INCLUDE_DIRECTORIES( code/BoostWorkaround ) ADD_DEFINITIONS( -DASSIMP_BUILD_BOOST_WORKAROUND ) MESSAGE( STATUS "Building a non-boost version of Assimp." ) ELSE ( ENABLE_BOOST_WORKAROUND ) SET( Boost_DETAILED_FAILURE_MSG ON ) SET( Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0" "1.48.0" "1.48" "1.49" "1.49.0" "1.50") FIND_PACKAGE( Boost ) IF ( NOT Boost_FOUND ) MESSAGE( FATAL_ERROR "Boost libraries (http://www.boost.org/) not found. " "You can build a non-boost version of Assimp with slightly reduced " "functionality by specifying -DENABLE_BOOST_WORKAROUND=ON." ) ENDIF ( NOT Boost_FOUND ) INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} ) ENDIF ( ENABLE_BOOST_WORKAROUND ) SET ( NO_EXPORT OFF CACHE BOOL "Disable Assimp's export functionality." ) # Search for external dependencies, and build them from source if not found # Search for zlib find_package(ZLIB) if( NOT ZLIB_FOUND ) message(STATUS "compiling zlib from souces") include(CheckIncludeFile) include(CheckTypeSize) include(CheckFunctionExists) # compile from sources add_subdirectory(contrib/zlib) set(ZLIB_FOUND 1) set(ZLIB_LIBRARIES zlib) set(ZLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zlib) else(NOT ZLIB_FOUND) ADD_DEFINITIONS(-DASSIMP_BUILD_NO_OWN_ZLIB) endif(NOT ZLIB_FOUND) INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) # Search for unzip if (PKG_CONFIG_FOUND) PKG_CHECK_MODULES(UNZIP minizip) endif (PKG_CONFIG_FOUND) IF ( NO_EXPORT ) ADD_DEFINITIONS( -DASSIMP_BUILD_NO_EXPORT) MESSAGE( STATUS "Build an import-only version of Assimp." ) ENDIF( NO_EXPORT ) SET ( ASSIMP_BUILD_ARCHITECTURE "" CACHE STRING "describe the current architecture." ) IF ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "") ELSE ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "") ADD_DEFINITIONS ( -D'ASSIMP_BUILD_ARCHITECTURE="${ASSIMP_BUILD_ARCHITECTURE}"' ) ENDIF ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "") SET ( ASSIMP_BUILD_COMPILER "" CACHE STRING "describe the current compiler." ) IF ( ASSIMP_BUILD_COMPILER STREQUAL "") ELSE ( ASSIMP_BUILD_COMPILER STREQUAL "") ADD_DEFINITIONS ( -D'ASSIMP_BUILD_COMPILER="${ASSIMP_BUILD_COMPILER}"' ) ENDIF ( ASSIMP_BUILD_COMPILER STREQUAL "") MARK_AS_ADVANCED ( ASSIMP_BUILD_ARCHITECTURE ASSIMP_BUILD_COMPILER ) ADD_SUBDIRECTORY( code/ ) SET ( BUILD_ASSIMP_TOOLS ON CACHE BOOL "If the supplementary tools for Assimp are built in addition to the library." ) IF ( BUILD_ASSIMP_TOOLS ) IF ( WIN32 ) ADD_SUBDIRECTORY( tools/assimp_view/ ) ENDIF ( WIN32 ) ADD_SUBDIRECTORY( tools/assimp_cmd/ ) ENDIF ( BUILD_ASSIMP_TOOLS ) SET ( BUILD_ASSIMP_SAMPLES ON CACHE BOOL "If the official samples are built as well (needs Glut)." ) IF ( BUILD_ASSIMP_SAMPLES) IF ( WIN32 ) ADD_SUBDIRECTORY( samples/SimpleTexturedOpenGL/ ) ENDIF ( WIN32 ) ADD_SUBDIRECTORY( samples/SimpleOpenGL/ ) ENDIF ( BUILD_ASSIMP_SAMPLES ) SET ( BUILD_TESTS OFF CACHE BOOL "If the test suite for Assimp is built in addition to the library." ) IF ( BUILD_TESTS ) IF ( WIN32 ) ADD_SUBDIRECTORY( test/ ) ELSE ( WIN32 ) MESSAGE( WARNING "The Assimp test suite is currently Windows-only." ) ENDIF ( WIN32 ) ENDIF ( BUILD_TESTS ) if(CMAKE_CPACK_COMMAND AND UNIX AND OPT_BUILD_PACKAGES) # Packing information set(CPACK_PACKAGE_NAME assimp{ASSIMP_VERSION_MAJOR}) set(CPACK_PACKAGE_CONTACT "" CACHE STRING "Package maintainer and PGP signer.") set(CPACK_PACKAGE_VENDOR "http://assimp.sourceforge.net/") set(CPACK_PACKAGE_DISPLAY_NAME "Assimp ${ASSIMP_VERSION}") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY " - Open Asset Import Library ${ASSIMP_VERSION}") set(CPACK_PACKAGE_VERSION ${ASSIMP_VERSION}.${PACKAGE_VERSION}) set(CPACK_PACKAGE_VERSION_MAJOR ${ASSIMP_VERSION_MAJOR}) set(CPACK_PACKAGE_VERSION_MINOR ${ASSIMP_VERSION_MINOR}) set(CPACK_PACKAGE_VERSION_PATCH ${ASSIMP_VERSION_PATCH}) set(CPACK_PACKAGE_INSTALL_DIRECTORY "assimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}") #set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/description) set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE) string(TOUPPER ${LIBASSIMP_COMPONENT} LIBASSIMP_COMPONENT_UPPER) string(TOUPPER ${LIBASSIMP-DEV_COMPONENT} LIBASSIMP-DEV_COMPONENT_UPPER) set(CPACK_COMPONENT_ASSIMP-BIN_DISPLAY_NAME "tools") set(CPACK_COMPONENT_ASSIMP-BIN_DEPENDS ${LIBASSIMP_COMPONENT}) set(CPACK_COMPONENT_${LIBASSIMP_COMPONENT_UPPER}_DISPLAY_NAME "libraries") set(CPACK_COMPONENT_${LIBASSIMP-DEV_COMPONENT_UPPER}_DISPLAY_NAME "common headers and installs") set(CPACK_COMPONENT_${LIBASSIMP-DEV_COMPONENT_UPPER}_DEPENDS ${LIBASSIMP_COMPONENT}) set(CPACK_COMPONENT_ASSIMP-DEV_DISPLAY_NAME ${CPACK_COMPONENT_${LIBASSIMP-DEV_COMPONENT}_DISPLAY_NAME}) set(CPACK_COMPONENT_ASSIMP-DEV_DEPENDS ${LIBASSIMP-DEV_COMPONENT}) set(CPACK_DEBIAN_BUILD_DEPENDS debhelper cmake libboost-dev libboost-thread-dev libboost-math-dev zlib1g-dev pkg-config) # debian set(CPACK_DEBIAN_PACKAGE_PRIORITY optional) set(CPACK_DEBIAN_CMAKE_OPTIONS "-DBUILD_ASSIMP_SAMPLES:BOOL=${BUILD_ASSIMP_SAMPLES}") set(CPACK_DEBIAN_PACKAGE_SECTION libs) set(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_COMPONENTS_ALL}) set(CPACK_DEBIAN_PACKAGE_SUGGESTS) set(CPACK_DEBIAN_PACKAGE_NAME assimp) set(CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES contrib/cppunit-1.12.1 contrib/cppunit_note.txt contrib/zlib workspaces test doc obj samples packaging) set(CPACK_DEBIAN_PACKAGE_SOURCE_COPY svn export --force) set(CPACK_DEBIAN_CHANGELOG) execute_process(COMMAND lsb_release -is OUTPUT_VARIABLE _lsb_distribution OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE _lsb_release_failed) set(CPACK_DEBIAN_DISTRIBUTION_NAME ${_lsb_distribution} CACHE STRING "Name of the distrubiton") string(TOLOWER ${CPACK_DEBIAN_DISTRIBUTION_NAME} CPACK_DEBIAN_DISTRIBUTION_NAME) if( ${CPACK_DEBIAN_DISTRIBUTION_NAME} STREQUAL "ubuntu" ) set(CPACK_DEBIAN_DISTRIBUTION_RELEASES lucid maverick natty oneiric precise CACHE STRING "Release code-names of the distrubiton release") endif() set(DPUT_HOST "" CACHE STRING "PPA repository to upload the debian sources") include(CPack) include(DebSourcePPA) endif() assimp-3.0/lib/0000755002537200234200000000000011770676611013700 5ustar zmoelnigiemusersassimp-3.0/Readme.md0000644002537200234200000000676411712627477014670 0ustar zmoelnigiemusersOpen Asset Import Library (_assimp_) ======== Table of contents 1. Overview 1.1 Supported file formats 1.2 File structure 2. Build the library 3. Where to get help 4. License ### 1. Overview ### Open Asset Import Library is a Open Source library designed to load various 3d file formats and convert them into a shared, in-memory format. It supports more than 30 file formats. It also supports exporting files to a few selected file formats. Its short name is _assimp_, which is an unintended joke (the abbreviation is derived from _Asset Importer_). __Note__: this `README` refers to the file structure used by release packages, which differs in some points from the development trunk. #### 1.1 Supported file formats #### The library provides importers for a lot of file formats, including: - 3DS - BLEND - DAE (Collada) - IFC-STEP - ASE - DXF - HMP - MD2 - MD3 - MD5 - MDC - MDL - NFF - PLY - STL - X - OBJ - SMD - LWO - LXO - LWS - XML - TER - AC3D - MS3D Exporters include: - DAE (Collada) - STL - OBJ See [the full list here](http://assimp.sourceforge.net/main_features_formats.html). #### 1.2 Repository structure #### Open Asset Import Library is implemented in C++ (but provides both a C and a C++ish interface). The directory structure is: /bin Folder for binaries, only used on Windows /code Source code /contrib Third-party libraries /doc Documentation (doxysource and pre-compiled docs) /include Public header C and C++ header files. /lib Static library location for Windows. /obj Object file location for Windows. /port Ports to other languages and scripts to maintain those. /test Unit- and regression tests, test suite of models. /tools Tools (viewer, command line `assimp`). /samples A small number of samples to illustrate possible use cases for Assimp. /workspaces Build enviroments for vc,xcode,... (deprecated, CMake has superseeded all legacy build options!) ### 2. Build the library ### Take a look into the `INSTALL` file. Or fire up CMake with the usual steps. ### 3. Where to get help ### For more information, visit [our website](http://assimp.sourceforge.net/). Or check out the `./doc`- folder, which contains the official documentation in HTML format. (CHMs for Windows are included in some release packages and should be located right here in the root folder). If the documentation doesn't solve your problems, try our forums at SF.net - [Open Discussion](http://sourceforge.net/projects/assimp/forums/forum/817653) - [General Help](http://sourceforge.net/projects/assimp/forums/forum/817654) For development stuff, there is also a mailing list, _assimp-discussions_ [(subscribe here)]( https://lists.sourceforge.net/lists/listinfo/assimp-discussions) ### 4. License ### The license of the Asset Import Library is based on the modified, __3-clause BSD__-License, which is a very liberal license. An _informal_ summary is: do whatever you want, but include Assimp's license text with your product - and don't sue us if our code doesn't work. Note that, unlike LGPLed code, you may link statically to Assimp. For the formal details, see the `LICENSE` file. ------------------------------ (This repository is a mirror of the SVN repository located [here](https://assimp.svn.sourceforge.net/svnroot/assimp). Thanks to [klickverbot](https://github.com/klickverbot) for setting this up!)assimp-3.0/obj/0000755002537200234200000000000011770676630013705 5ustar zmoelnigiemusersassimp-3.0/cmake-modules/0000755002537200234200000000000011770676625015665 5ustar zmoelnigiemusersassimp-3.0/cmake-modules/cmake_uninstall.cmake.in0000644002537200234200000000213611770142412022425 0ustar zmoelnigiemusersIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF() FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"${file}\"") IF(EXISTS "${file}") EXECUTE_PROCESS( COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}" OUTPUT_VARIABLE rm_out RESULT_VARIABLE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"${file}\"") ENDIF() ELSEIF(IS_SYMLINK "${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"${file}\"") ENDIF() ELSE() MESSAGE(STATUS "File \"${file}\" does not exist.") ENDIF() ENDFOREACH() assimp-3.0/cmake-modules/DebSourcePPA.cmake0000644002537200234200000004255411763457145021111 0ustar zmoelnigiemusers## Debian Source Package Generator # # Copyright (c) 2010 Daniel Pfeifer # Many modifications by Rosen Diankov # # Creates source debian files and manages library dependencies # # Features: # # - Automatically generates symbols and run-time dependencies from the build dependencies # - Custom copy of source directory via CPACK_DEBIAN_PACKAGE_SOURCE_COPY # - Simultaneous output of multiple debian source packages for each distribution # - Can specificy distribution-specific dependencies by suffixing DEPENDS with _${DISTRO_NAME}, for example: CPACK_DEBIAN_PACKAGE_DEPENDS_LUCID, CPACK_COMPONENT_MYCOMP0_DEPENDS_LUCID # # Usage: # # set(CPACK_DEBIAN_BUILD_DEPENDS debhelper cmake) # set(CPACK_DEBIAN_PACKAGE_PRIORITY optional) # set(CPACK_DEBIAN_PACKAGE_SECTION devel) # set(CPACK_DEBIAN_CMAKE_OPTIONS "-DMYOPTION=myvalue") # set(CPACK_DEBIAN_PACKAGE_DEPENDS mycomp0 mycomp1 some_ubuntu_package) # set(CPACK_DEBIAN_PACKAGE_DEPENDS_UBUNTU_LUCID mycomp0 mycomp1 lucid_specific_package) # set(CPACK_DEBIAN_PACKAGE_NAME mypackage) # set(CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES unnecessary_file unnecessary_dir/file0) # set(CPACK_DEBIAN_PACKAGE_SOURCE_COPY svn export --force) # if using subversion # set(CPACK_DEBIAN_DISTRIBUTION_NAME ubuntu) # set(CPACK_DEBIAN_DISTRIBUTION_RELEASES karmic lucid maverick natty) # set(CPACK_DEBIAN_CHANGELOG " * Extra change log lines") # set(CPACK_DEBIAN_PACKAGE_SUGGESTS "ipython") # set(CPACK_COMPONENT_X_RECOMMENDS "recommended-package") ## find_program(DEBUILD_EXECUTABLE debuild) find_program(DPUT_EXECUTABLE dput) if(NOT DEBUILD_EXECUTABLE OR NOT DPUT_EXECUTABLE) return() endif(NOT DEBUILD_EXECUTABLE OR NOT DPUT_EXECUTABLE) # DEBIAN/control # debian policy enforce lower case for package name # Package: (mandatory) IF(NOT CPACK_DEBIAN_PACKAGE_NAME) STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_DEBIAN_PACKAGE_NAME) ENDIF(NOT CPACK_DEBIAN_PACKAGE_NAME) # Section: (recommended) IF(NOT CPACK_DEBIAN_PACKAGE_SECTION) SET(CPACK_DEBIAN_PACKAGE_SECTION "devel") ENDIF(NOT CPACK_DEBIAN_PACKAGE_SECTION) # Priority: (recommended) IF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY) SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") ENDIF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY) file(STRINGS ${CPACK_PACKAGE_DESCRIPTION_FILE} DESC_LINES) foreach(LINE ${DESC_LINES}) set(DEB_LONG_DESCRIPTION "${DEB_LONG_DESCRIPTION} ${LINE}\n") endforeach(LINE ${DESC_LINES}) file(REMOVE_RECURSE "${CMAKE_BINARY_DIR}/Debian") file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/Debian") set(DEBIAN_SOURCE_ORIG_DIR "${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") if( CPACK_DEBIAN_PACKAGE_SOURCE_COPY ) execute_process(COMMAND ${CPACK_DEBIAN_PACKAGE_SOURCE_COPY} "${CMAKE_SOURCE_DIR}" "${DEBIAN_SOURCE_ORIG_DIR}.orig") else() execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR} "${DEBIAN_SOURCE_ORIG_DIR}.orig") execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${DEBIAN_SOURCE_ORIG_DIR}.orig/.git") execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${DEBIAN_SOURCE_ORIG_DIR}.orig/.svn") endif() # remove unnecessary folders foreach(REMOVE_DIR ${CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES}) file(REMOVE_RECURSE ${DEBIAN_SOURCE_ORIG_DIR}.orig/${REMOVE_DIR}) endforeach() # create the original source tar execute_process(COMMAND ${CMAKE_COMMAND} -E tar czf "${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz" "${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.orig" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Debian) set(DEB_SOURCE_CHANGES) foreach(RELEASE ${CPACK_DEBIAN_DISTRIBUTION_RELEASES}) set(DEBIAN_SOURCE_DIR "${DEBIAN_SOURCE_ORIG_DIR}-${CPACK_DEBIAN_DISTRIBUTION_NAME}1~${RELEASE}1") set(RELEASE_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_DISTRIBUTION_NAME}1~${RELEASE}1") string(TOUPPER ${RELEASE} RELEASE_UPPER) string(TOUPPER ${CPACK_DEBIAN_DISTRIBUTION_NAME} DISTRIBUTION_NAME_UPPER) file(MAKE_DIRECTORY ${DEBIAN_SOURCE_DIR}/debian) ############################################################################## # debian/control set(DEBIAN_CONTROL ${DEBIAN_SOURCE_DIR}/debian/control) file(WRITE ${DEBIAN_CONTROL} "Source: ${CPACK_DEBIAN_PACKAGE_NAME}\n" "Section: ${CPACK_DEBIAN_PACKAGE_SECTION}\n" "Priority: ${CPACK_DEBIAN_PACKAGE_PRIORITY}\n" "DM-Upload-Allowed: yes\n" "Maintainer: ${CPACK_PACKAGE_CONTACT}\n" "Build-Depends: " ) if( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) foreach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) else( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) if( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) else( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS}) endif( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) endif( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) file(APPEND ${DEBIAN_CONTROL} "\n" "Standards-Version: 3.8.4\n" "Homepage: ${CPACK_PACKAGE_VENDOR}\n" "\n" "Package: ${CPACK_DEBIAN_PACKAGE_NAME}\n" "Architecture: any\n" "Depends: " ) if( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) foreach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) else( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) if( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) else( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS}) endif( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) endif( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) file(APPEND ${DEBIAN_CONTROL} "\nRecommends: ") if( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) foreach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) else( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) if( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) else( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS}) endif( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) endif( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) file(APPEND ${DEBIAN_CONTROL} "\nSuggests: ") if( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) foreach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) else( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) if( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) else( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS}) file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") endforeach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS}) endif( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) endif( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) file(APPEND ${DEBIAN_CONTROL} "\n" "Description: ${CPACK_PACKAGE_DISPLAY_NAME} ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}\n" "${DEB_LONG_DESCRIPTION}" ) foreach(COMPONENT ${CPACK_COMPONENTS_ALL}) string(TOUPPER ${COMPONENT} UPPER_COMPONENT) set(DEPENDS "\${shlibs:Depends}") if( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) set(DEPENDS "${DEPENDS}, ${DEP}") endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) else( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) if( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) set(DEPENDS "${DEPENDS}, ${DEP}") endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) else( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS}) set(DEPENDS "${DEPENDS}, ${DEP}") endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS}) endif( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) endif( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) set(RECOMMENDS) if( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) set(RECOMMENDS "${RECOMMENDS} ${DEP}, ") endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) else( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) if( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) set(RECOMMENDS "${RECOMMENDS} ${DEP}, ") endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) else( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS}) set(RECOMMENDS "${RECOMMENDS} ${DEP}, ") endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS}) endif( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) endif( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) set(SUGGESTS) if( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) set(SUGGESTS "${SUGGESTS} ${DEP}, ") endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) else( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) if( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) set(SUGGESTS "${SUGGESTS} ${DEP}, ") endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) else( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS}) set(SUGGESTS "${SUGGESTS} ${DEP}, ") endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS}) endif( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) endif( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) file(APPEND ${DEBIAN_CONTROL} "\n" "Package: ${COMPONENT}\n" "Architecture: any\n" "Depends: ${DEPENDS}\n" "Recommends: ${RECOMMENDS}\n" "Suggests: ${SUGGESTS}\n" "Description: ${CPACK_PACKAGE_DISPLAY_NAME} ${CPACK_COMPONENT_${UPPER_COMPONENT}_DISPLAY_NAME}\n" "${DEB_LONG_DESCRIPTION}" " .\n" " ${CPACK_COMPONENT_${UPPER_COMPONENT}_DESCRIPTION}\n" ) endforeach(COMPONENT ${CPACK_COMPONENTS_ALL}) ############################################################################## # debian/copyright set(DEBIAN_COPYRIGHT ${DEBIAN_SOURCE_DIR}/debian/copyright) execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_RESOURCE_FILE_LICENSE} ${DEBIAN_COPYRIGHT} ) ############################################################################## # debian/rules set(DEBIAN_RULES ${DEBIAN_SOURCE_DIR}/debian/rules) file(WRITE ${DEBIAN_RULES} "#!/usr/bin/make -f\n" "\n" "BUILDDIR = build_dir\n" "\n" "build:\n" " mkdir $(BUILDDIR)\n" " cd $(BUILDDIR); cmake -DCMAKE_BUILD_TYPE=Release ${CPACK_DEBIAN_CMAKE_OPTIONS} -DCMAKE_INSTALL_PREFIX=/usr ..\n" " $(MAKE) -C $(BUILDDIR) preinstall\n" " touch build\n" "\n" "binary: binary-indep binary-arch\n" "\n" "binary-indep: build\n" "\n" "binary-arch: build\n" " cd $(BUILDDIR); cmake -DCOMPONENT=Unspecified -DCMAKE_INSTALL_PREFIX=../debian/tmp/usr -P cmake_install.cmake\n" " mkdir -p debian/tmp/DEBIAN\n" " dpkg-gensymbols -p${CPACK_DEBIAN_PACKAGE_NAME}\n" ) foreach(COMPONENT ${CPACK_COMPONENTS_ALL}) set(PATH debian/${COMPONENT}) file(APPEND ${DEBIAN_RULES} " cd $(BUILDDIR); cmake -DCOMPONENT=${COMPONENT} -DCMAKE_INSTALL_PREFIX=../${PATH}/usr -P cmake_install.cmake\n" " mkdir -p ${PATH}/DEBIAN\n" " dpkg-gensymbols -p${COMPONENT} -P${PATH}\n" ) endforeach(COMPONENT ${CPACK_COMPONENTS_ALL}) file(APPEND ${DEBIAN_RULES} " dh_shlibdeps\n" " dh_strip\n" # for reducing size " dpkg-gencontrol -p${CPACK_DEBIAN_PACKAGE_NAME}\n" " dpkg --build debian/tmp ..\n" ) foreach(COMPONENT ${CPACK_COMPONENTS_ALL}) set(PATH debian/${COMPONENT}) file(APPEND ${DEBIAN_RULES} " dpkg-gencontrol -p${COMPONENT} -P${PATH} -Tdebian/${COMPONENT}.substvars\n" " dpkg --build ${PATH} ..\n" ) endforeach(COMPONENT ${CPACK_COMPONENTS_ALL}) file(APPEND ${DEBIAN_RULES} "\n" "clean:\n" " rm -f build\n" " rm -rf $(BUILDDIR)\n" "\n" ".PHONY: binary binary-arch binary-indep clean\n" ) execute_process(COMMAND chmod +x ${DEBIAN_RULES}) ############################################################################## # debian/compat file(WRITE ${DEBIAN_SOURCE_DIR}/debian/compat "7") ############################################################################## # debian/source/format file(WRITE ${DEBIAN_SOURCE_DIR}/debian/source/format "3.0 (quilt)") ############################################################################## # debian/changelog set(DEBIAN_CHANGELOG ${DEBIAN_SOURCE_DIR}/debian/changelog) execute_process(COMMAND date -R OUTPUT_VARIABLE DATE_TIME) file(WRITE ${DEBIAN_CHANGELOG} "${CPACK_DEBIAN_PACKAGE_NAME} (${RELEASE_PACKAGE_VERSION}) ${RELEASE}; urgency=medium\n\n" " * Package built with CMake\n\n" "${CPACK_DEBIAN_CHANGELOG}" " -- ${CPACK_PACKAGE_CONTACT} ${DATE_TIME}" ) ############################################################################## # debuild -S if( DEB_SOURCE_CHANGES ) set(DEBUILD_OPTIONS "-sd") else() set(DEBUILD_OPTIONS "-sa") endif() set(SOURCE_CHANGES_FILE "${CPACK_DEBIAN_PACKAGE_NAME}_${RELEASE_PACKAGE_VERSION}_source.changes") set(DEB_SOURCE_CHANGES ${DEB_SOURCE_CHANGES} "${SOURCE_CHANGES_FILE}") add_custom_command(OUTPUT "${SOURCE_CHANGES_FILE}" COMMAND ${DEBUILD_EXECUTABLE} -S ${DEBUILD_OPTIONS} WORKING_DIRECTORY ${DEBIAN_SOURCE_DIR}) endforeach(RELEASE ${CPACK_DEBIAN_DISTRIBUTION_RELEASES}) ############################################################################## # dput ppa:your-lp-id/ppa add_custom_target(dput ${DPUT_EXECUTABLE} ${DPUT_HOST} ${DEB_SOURCE_CHANGES} DEPENDS ${DEB_SOURCE_CHANGES} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Debian) assimp-3.0/assimp.pc.in0000644002537200234200000000062211770665021015350 0ustar zmoelnigiemusersprefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=@CMAKE_INSTALL_PREFIX@/@BIN_INSTALL_DIR@ libdir=@CMAKE_INSTALL_PREFIX@/@LIB_INSTALL_DIR@ includedir=@CMAKE_INSTALL_PREFIX@/@INCLUDE_INSTALL_DIR@/assimp Name: @CMAKE_PROJECT_NAME@ Description: Import various well-known 3D model formats in an uniform manner. Version: @PROJECT_VERSION@ Libs: -L${libdir} -lassimp@ASSIMP_LIBRARY_SUFFIX@ Cflags: -I${includedir} assimp-3.0/bin/0000755002537200234200000000000011770676611013702 5ustar zmoelnigiemusersassimp-3.0/bin/mingw/0000755002537200234200000000000011770676611015023 5ustar zmoelnigiemusersassimp-3.0/bin/gcc/0000755002537200234200000000000011770676611014436 5ustar zmoelnigiemusersassimp-3.0/code/0000755002537200234200000000000011770676630014045 5ustar zmoelnigiemusersassimp-3.0/code/BlenderDNA.h0000644002537200234200000006273011712653266016120 0ustar zmoelnigiemusers/* Open Asset Import Library (assimp) ---------------------------------------------------------------------- Copyright (c) 2006-2012, assimp team All rights reserved. Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the assimp team, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of the assimp team. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ /** @file BlenderDNA.h * @brief Blender `DNA` (file format specification embedded in * blend file itself) loader. */ #ifndef INCLUDED_AI_BLEND_DNA_H #define INCLUDED_AI_BLEND_DNA_H #include "BaseImporter.h" #include "TinyFormatter.h" // enable verbose log output. really verbose, so be careful. #ifdef _DEBUG # define ASSIMP_BUILD_BLENDER_DEBUG #endif // #define ASSIMP_BUILD_BLENDER_NO_STATS namespace Assimp { template class StreamReader; typedef StreamReader StreamReaderAny; namespace Blender { class FileDatabase; struct FileBlockHead; template