00001 // Copyright (c) 1998-2014 by Tech Soft 3D, Inc. 00002 // 00003 // The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., 00004 // and considered a trade secret as defined under civil and criminal statutes. 00005 // Tech Soft 3D, Inc. shall pursue its civil and criminal remedies in the event of 00006 // unauthorized use or misappropriation of its trade secrets. Use of this information 00007 // by anyone other than authorized employees of Tech Soft 3D, Inc. is granted only under 00008 // a written non-disclosure agreement, expressly prescribing the scope and manner of such use. 00009 00010 #pragma once 00011 00012 #include "MrDwgGeometry.h" 00013 #include "MrImportDirector.h" 00014 #include <acgi.h> 00015 00016 struct dwg_matrix 00017 { 00018 dwg_matrix(float in_elements[16]) 00019 { 00020 for (size_t i = 0; i < 16; ++i) 00021 elements[i] = in_elements[i]; 00022 } 00023 00024 float elements[16]; 00025 }; 00026 00027 class MrDwgWorldGeometry : public AcGiWorldGeometry, public MrDwgGeometry 00028 { 00029 public: 00030 MrDwgWorldGeometry(AcDbEntity * pEnt, std::map<std::wstring, std::string> * fontmap, mTextData * mtext, HC_KEY entitySegment); 00031 00032 Adesk::Boolean pushClipBoundary(AcGiClipBoundary * pBoundary); 00033 void popClipBoundary(); 00034 void setExtents(AcGePoint3d * pNewExtents) const; 00035 00036 Adesk::Boolean circle(const AcGePoint3d & center, const double radius, const AcGeVector3d & normal) const; 00037 Adesk::Boolean circle(const AcGePoint3d & pt1, const AcGePoint3d & pt2, const AcGePoint3d & pt3) const; 00038 Adesk::Boolean circularArc(const AcGePoint3d & center, const double radius, const AcGeVector3d & normal, const AcGeVector3d & startVector, const double sweepAngle, const AcGiArcType arcType = kAcGiArcSimple) const; 00039 Adesk::Boolean circularArc(const AcGePoint3d & start, const AcGePoint3d & point, const AcGePoint3d & end, const AcGiArcType arcType = kAcGiArcSimple) const; 00040 Adesk::Boolean polyline(const Adesk::UInt32 nbPoints, const AcGePoint3d * pVertexList, const AcGeVector3d * pNormal = NULL, Adesk::LongPtr lBaseSubEntMarker = -1) const; 00041 Adesk::Boolean polyline(const AcGiPolyline & polyline) const; 00042 Adesk::Boolean polyPolyline(Adesk::UInt32 nbPolylines, const AcGiPolyline * pPolylines) const; 00043 Adesk::Boolean polygon(const Adesk::UInt32 nbPoints, const AcGePoint3d * pVertexList) const; 00044 Adesk::Boolean polyPolygon(const Adesk::UInt32 numPolygonIndices, const Adesk::UInt32 * numPolygonPositions, const AcGePoint3d * polygonPositions, const Adesk::UInt32 * numPolygonPoints, const AcGePoint3d * polygonPoints, const AcCmEntityColor * outlineColors = NULL, const AcGiLineType * outlineTypes = NULL, const AcCmEntityColor * fillColors = NULL, const AcCmTransparency * fillOpacities = NULL) const; 00045 Adesk::Boolean mesh(const Adesk::UInt32 rows, const Adesk::UInt32 columns, const AcGePoint3d * pVertexList, const AcGiEdgeData * pEdgeData, const AcGiFaceData * pFaceData, const AcGiVertexData * pVertexData = NULL, const bool bAutoGenerateNormals = true) const; 00046 Adesk::Boolean shell(const Adesk::UInt32 nbVertex, const AcGePoint3d * pVertexList, const Adesk::UInt32 faceListSize, const Adesk::Int32 * pFaceList, const AcGiEdgeData * pEdgeData, const AcGiFaceData * pFaceData, const AcGiVertexData * pVertexData = NULL, const struct resbuf *pResBuf = NULL, const bool bAutoGenerateNormals = true) const; 00047 Adesk::Boolean text(const AcGePoint3d & position, const AcGeVector3d & normal, const AcGeVector3d & direction, const double height, const double width, const double oblique, const ACHAR * pMsg) const; 00048 Adesk::Boolean text(const AcGePoint3d & position, const AcGeVector3d & normal, const AcGeVector3d & direction, const ACHAR * pMsg, const Adesk::Int32 length, const Adesk::Boolean raw, const AcGiTextStyle & pTextStyle) const; 00049 Adesk::Boolean xline(const AcGePoint3d & one_xline_point, const AcGePoint3d & a_different_xline_point) const; 00050 Adesk::Boolean ray(const AcGePoint3d & rays_starting_point, const AcGePoint3d & a_different_ray_point) const; 00051 Adesk::Boolean image(const AcGiImageBGRA32 & imageSource, const AcGePoint3d & position, const AcGeVector3d & u, const AcGeVector3d & v, TransparencyMode transparencyMode = kTransparency8Bit) const; 00052 Adesk::Boolean rowOfDots(int count, const AcGePoint3d & start, const AcGeVector3d & step) const; 00053 Adesk::Boolean ellipticalArc(const AcGePoint3d & center, const AcGeVector3d & normal, double majorAxisLength, double minorAxisLength, double startDegreeInRads, double endDegreeInRads, double tiltDegreeInRads, AcGiArcType arcType) const; 00054 Adesk::Boolean pline(const AcDbPolyline & lwBuf, Adesk::UInt32 fromIndex, Adesk::UInt32 numSegs) const; 00055 Adesk::Boolean edge(const AcArray<AcGeCurve2d *> &) const; 00056 Adesk::Boolean draw(AcGiDrawable *) const; 00057 00058 AcGeMatrix3d pushPositionTransform(AcGiPositionTransformBehavior behavior, const AcGePoint3d & offset); 00059 AcGeMatrix3d pushPositionTransform(AcGiPositionTransformBehavior behavior, const AcGePoint2d & offset); 00060 AcGeMatrix3d pushScaleTransform(AcGiScaleTransformBehavior behavior, const AcGePoint3d & extents); 00061 AcGeMatrix3d pushScaleTransform(AcGiScaleTransformBehavior behavior, const AcGePoint2d & extents); 00062 AcGeMatrix3d pushOrientationTransform(AcGiOrientationTransformBehavior behavior); 00063 00064 void getModelToWorldTransform(AcGeMatrix3d & pMatrix) const; 00065 void getWorldToModelTransform(AcGeMatrix3d & pMatrix) const; 00066 00067 Adesk::Boolean pushModelTransform(const AcGeVector3d & vNormal); 00068 Adesk::Boolean pushModelTransform(const AcGeMatrix3d & xMat); 00069 Adesk::Boolean popModelTransform(); 00070 00071 bool isCurrentEntityUnknown(); 00072 void setupMatrixSegment() const; 00073 void cleanupMatrixSegment() const; 00074 00075 std::map<std::wstring, std::string> * m_pFontmap; 00076 AcDbEntity * m_pEnt; 00077 mTextData * m_pMText; 00078 HC_KEY m_entitySegment; 00079 mutable bool apply_matrix; 00080 std::vector<dwg_matrix> matrices; 00081 };