MrDwgWorldGeometry.h
1 // Copyright (c) Tech Soft 3D, Inc.
2 //
3 // The information contained herein is confidential and proprietary to Tech Soft 3D, Inc.,
4 // and considered a trade secret as defined under civil and criminal statutes.
5 // Tech Soft 3D, Inc. shall pursue its civil and criminal remedies in the event of
6 // unauthorized use or misappropriation of its trade secrets. Use of this information
7 // by anyone other than authorized employees of Tech Soft 3D, Inc. is granted only under
8 // a written non-disclosure agreement, expressly prescribing the scope and manner of such use.
9 
10 #pragma once
11 
12 #include "MrDwgGeometry.h"
13 #include "MrImportDirector.h"
14 #include <acgi.h>
15 
16 struct dwg_matrix
17 {
18  dwg_matrix(float in_elements[16])
19  {
20  for (size_t i = 0; i < 16; ++i)
21  elements[i] = in_elements[i];
22  }
23 
24  float elements[16];
25 };
26 
27 class MrDwgWorldGeometry : public AcGiWorldGeometry, public MrDwgGeometry
28 {
29 public:
30  MrDwgWorldGeometry(AcDbEntity * pEnt, std::map<std::wstring, std::string> * fontmap, mTextData * mtext, HC_KEY entitySegment);
31 
32  Adesk::Boolean pushClipBoundary(AcGiClipBoundary * pBoundary);
33  void popClipBoundary();
34  void setExtents(AcGePoint3d * pNewExtents) const;
35 
36  Adesk::Boolean circle(const AcGePoint3d & center, const double radius, const AcGeVector3d & normal) const;
37  Adesk::Boolean circle(const AcGePoint3d & pt1, const AcGePoint3d & pt2, const AcGePoint3d & pt3) const;
38  Adesk::Boolean circularArc(const AcGePoint3d & center, const double radius, const AcGeVector3d & normal, const AcGeVector3d & startVector, const double sweepAngle, const AcGiArcType arcType = kAcGiArcSimple) const;
39  Adesk::Boolean circularArc(const AcGePoint3d & start, const AcGePoint3d & point, const AcGePoint3d & end, const AcGiArcType arcType = kAcGiArcSimple) const;
40  Adesk::Boolean polyline(const Adesk::UInt32 nbPoints, const AcGePoint3d * pVertexList, const AcGeVector3d * pNormal = NULL, Adesk::LongPtr lBaseSubEntMarker = -1) const;
41  Adesk::Boolean polyline(const AcGiPolyline & polyline) const;
42  Adesk::Boolean polyPolyline(Adesk::UInt32 nbPolylines, const AcGiPolyline * pPolylines) const;
43  Adesk::Boolean polygon(const Adesk::UInt32 nbPoints, const AcGePoint3d * pVertexList) const;
44  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;
45  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;
46  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;
47  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;
48  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;
49  Adesk::Boolean xline(const AcGePoint3d & one_xline_point, const AcGePoint3d & a_different_xline_point) const;
50  Adesk::Boolean ray(const AcGePoint3d & rays_starting_point, const AcGePoint3d & a_different_ray_point) const;
51  Adesk::Boolean image(const AcGiImageBGRA32 & imageSource, const AcGePoint3d & position, const AcGeVector3d & u, const AcGeVector3d & v, TransparencyMode transparencyMode = kTransparency8Bit) const;
52  Adesk::Boolean rowOfDots(int count, const AcGePoint3d & start, const AcGeVector3d & step) const;
53  Adesk::Boolean ellipticalArc(const AcGePoint3d & center, const AcGeVector3d & normal, double majorAxisLength, double minorAxisLength, double startDegreeInRads, double endDegreeInRads, double tiltDegreeInRads, AcGiArcType arcType) const;
54  Adesk::Boolean pline(const AcDbPolyline & lwBuf, Adesk::UInt32 fromIndex, Adesk::UInt32 numSegs) const;
55  Adesk::Boolean edge(const AcArray<AcGeCurve2d *> &) const;
56  Adesk::Boolean draw(AcGiDrawable *) const;
57 
58  AcGeMatrix3d pushPositionTransform(AcGiPositionTransformBehavior behavior, const AcGePoint3d & offset);
59  AcGeMatrix3d pushPositionTransform(AcGiPositionTransformBehavior behavior, const AcGePoint2d & offset);
60  AcGeMatrix3d pushScaleTransform(AcGiScaleTransformBehavior behavior, const AcGePoint3d & extents);
61  AcGeMatrix3d pushScaleTransform(AcGiScaleTransformBehavior behavior, const AcGePoint2d & extents);
62  AcGeMatrix3d pushOrientationTransform(AcGiOrientationTransformBehavior behavior);
63 
64  void getModelToWorldTransform(AcGeMatrix3d & pMatrix) const;
65  void getWorldToModelTransform(AcGeMatrix3d & pMatrix) const;
66 
67  Adesk::Boolean pushModelTransform(const AcGeVector3d & vNormal);
68  Adesk::Boolean pushModelTransform(const AcGeMatrix3d & xMat);
69  Adesk::Boolean popModelTransform();
70 
71  bool isCurrentEntityUnknown();
72  void setupMatrixSegment() const;
73  void cleanupMatrixSegment() const;
74 
75  std::map<std::wstring, std::string> * m_pFontmap;
76  AcDbEntity * m_pEnt;
77  mTextData * m_pMText;
78  HC_KEY m_entitySegment;
79  mutable bool apply_matrix;
80  std::vector<dwg_matrix> matrices;
81 };
Definition: MrDwgWorldGeometry.h:16
#define HC_KEY
Definition: MrDwgGeometry.h:21
Definition: MrDwgWorldGeometry.h:27
Definition: misc.h:29