zjf
2023-03-06 392b76515f40376b6d36f40a114850ef63650384
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
/////////////////////////////////////////////////////////////////////////////// 
// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
// All rights reserved. 
// 
// This software and its documentation and related materials are owned by 
// the Alliance. The software may only be incorporated into application 
// programs owned by members of the Alliance, subject to a signed 
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable  
// trade secrets of the Alliance and its suppliers. The software is also 
// protected by copyright law and international treaty provisions. Application  
// programs incorporating this software must include the following statement 
// with their copyright notices:
//   
//   This application incorporates Teigha(R) software pursuant to a license 
//   agreement with Open Design Alliance.
//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
//   All rights reserved.
//
// By use of this software, its documentation or related materials, you 
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////
 
 
 
 
#ifndef _OD_DB_SUBDMESH
#define _OD_DB_SUBDMESH
 
#include "TD_PackPush.h"
 
#include "DbEntity.h"
#include "DoubleArray.h"
#include "DbSurface.h"
#include "Db3dSolid.h"
#include "CmEntityColorArray.h"
 
#include "Int32Array.h"
#include "Gi/GiGeometry.h"
 
class OdDbSurface;
class OdDb3dSolid;
 
/** \details
 This class represents SubDMesh entities in an OdDbDatabase instance.
 
 \sa
 TD_Db
 
 <group OdDb_Classes>
*/
class TOOLKIT_EXPORT OdDbSubDMesh : public OdDbEntity
{
public:
 ODDB_DECLARE_MEMBERS(OdDbSubDMesh);
 
 OdDbSubDMesh();
 
 virtual bool subWorldDraw(
   OdGiWorldDraw* pWd) const;
 
 virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
 
 virtual OdDbObjectPtr decomposeForSave(OdDb::DwgVersion ver,
   OdDbObjectId& replaceId,
   bool& exchangeXData);
 
 virtual OdResult dwgInFields(
   OdDbDwgFiler* pFiler);
 
 virtual void dwgOutFields(
   OdDbDwgFiler* pFiler) const;
 
 virtual OdResult dxfInFields(
   OdDbDxfFiler* pFiler);
 
 virtual void dxfOutFields(
   OdDbDxfFiler* pFiler) const;
 
 virtual OdResult subTransformBy(
   const OdGeMatrix3d& xfm);
 
 OdResult subGetGeomExtents(
   OdGeExtents3d& extents) const;
 
 virtual OdResult subExplode(
   OdRxObjectPtrArray& entitySet) const;
 
 OdResult setSubDMesh (const OdGePoint3dArray& vertexArray,
   const OdInt32Array& faceArray,
   OdInt32 subDLevel);
 
 OdResult setSphere (double radius,
   OdInt32 divAxis,
   OdInt32 divHeight,
   OdInt32 subDLevel);
 
 OdResult setCylinder (double majorRadius,
   double minorRadius,
   double height,
   OdInt32 divAxis,
   OdInt32 divHeight,
   OdInt32 divCap,
   OdInt32 subDLevel);
 
 OdResult setCone (double majorRadius,
   double minorRadius,
   double height,
   OdInt32 divAxis,
   OdInt32 divHeight,
   OdInt32 divCap,
   double radiusRatio,
   OdInt32 subDLevel);
 
 OdResult setTorus (double majorRadius,
   OdInt32 divSection,
   OdInt32 divSweepPath,
   double sectionRadiusRatio,
   double sectionRotate,
   OdInt32 subDLevel);
 
 OdResult setBox (double xLen,
   double yLen,
   double zLen,
   OdInt32 divX,
   OdInt32 divY,
   OdInt32 divZ,
   OdInt32 subDLevel);
 
 OdResult setWedge (double xLen,
   double yLen,
   double zLen,
   OdInt32 divLength,
   OdInt32 divWidth,
   OdInt32 divHeight,
   OdInt32 divSlope,
   OdInt32 divCap,
   OdInt32 subDLevel);
 
 OdResult setPyramid (double radius,
   double height,
   OdInt32 divLength,
   OdInt32 divHeight,
   OdInt32 divCap,
   OdInt32 nSides,
   double radiusRatio,
   OdInt32 subDLevel);
 
 OdResult subdDivideUp ();
 OdResult subdDivideDown ();
 OdResult subdRefine ();
 OdResult subdRefine (const OdDbFullSubentPathArray& subentPaths);
 OdResult subdLevel (OdInt32& result) const;
 
 OdResult splitFace (const OdDbSubentId& subentFaceId,
   const OdDbSubentId& subent0,
   const OdGePoint3d& point0,
   const OdDbSubentId& subent1,
   const OdGePoint3d& point1);
 
 OdResult extrudeFaces (const OdDbFullSubentPathArray& subentPaths,
   double length,
   const OdGeVector3d& dir,
   double taper);
 
 OdResult extrudeFaces (const OdDbFullSubentPathArray& subentPaths,
   const OdGePoint3dArray& alongPath,
   double taper);
 
 OdResult isWatertight (bool& result) const;
 
 OdResult numOfFaces (OdInt32& result) const;
 OdResult numOfSubDividedFaces (OdInt32& result) const;
 OdResult numOfSubDividedFacesAt (const OdDbFullSubentPathArray& subentPaths, OdInt32& result) const;
 OdResult numOfVertices (OdInt32& result) const;
 OdResult numOfSubDividedVertices (OdInt32& result) const;
 OdResult numOfEdges (OdInt32& result) const;
 
 OdResult getVertices (OdGePoint3dArray& vertexArray) const;
 OdResult getEdgeArray (OdInt32Array& edgeArray) const;
 OdResult getFaceArray (OdInt32Array& faceArray) const;
 OdResult getNormalArray (OdGeVector3dArray& normalArray) const;
 
 OdResult getSubDividedVertices (OdGePoint3dArray& vertexArray) const;
 OdResult getSubDividedFaceArray (OdInt32Array& faceArray) const;
 OdResult getSubDividedNormalArray(OdGeVector3dArray& normalArray) const;
 
 OdResult getVertexAt (OdInt32 nIndex, OdGePoint3d& vertex) const;
 OdResult setVertexAt (OdInt32 nIndex, const OdGePoint3d& vertex);
 OdResult getVertexAt (const OdDbSubentId& id, OdGePoint3d& vertex) const;
 OdResult setVertexAt (const OdDbSubentId& id, const OdGePoint3d& vertex);
 
 OdResult getSubDividedVertexAt (OdInt32 nIndex, OdGePoint3d& vertex) const;
 OdResult getSubDividedVertexAt (const OdDbSubentId& id, OdGePoint3d& vertex) const;
 
 OdResult setCrease (double creaseVal);
 OdResult setCrease (const OdDbFullSubentPathArray& subentPaths, double creaseVal);
 OdResult getCrease (const OdDbFullSubentPathArray& subentPaths, OdDoubleArray& result) const;
 OdResult getCrease (const OdDbSubentId& id, double& result) const;
 
 OdResult getAdjacentSubentPath (const OdDbFullSubentPath& path,
   OdDb::SubentType type,
   OdDbFullSubentPathArray& subentPaths) const;
 
 OdResult getSubentPath (OdInt32 nIndex,
   OdDb::SubentType type,
   OdDbFullSubentPathArray& subentPaths) const;
 
 OdResult convertToSurface (bool bConvertAsSmooth, const OdDbSubentId& id, OdDbSurfacePtr& pSurface) const;
 OdResult convertToSurface (bool bConvertAsSmooth, bool optimize, OdDbSurfacePtr& pSurface) const;
 OdResult convertToSolid (bool bConvertAsSmooth, bool optimize, OdDb3dSolidPtr& pSolid) const;
 
 OdResult getSubentColor (const OdDbSubentId& id, OdCmColor& color) const;
 OdResult setSubentColor (const OdDbSubentId& id, const OdCmColor& color);
 OdResult getSubentMaterial (const OdDbSubentId& id, OdDbObjectId& material) const;
 OdResult setSubentMaterial (const OdDbSubentId& id, const OdDbObjectId& material);
 OdResult getSubentMaterialMapper (const OdDbSubentId& id, OdGiMapper& mapper) const;
 OdResult setSubentMaterialMapper (const OdDbSubentId& id, const OdGiMapper& mapper);
 
 OdResult getFacePlane (const OdDbSubentId& id, OdGePlane& facePlane) const;
 
 OdResult computeVolume (double &retVolume) const;
 OdResult computeSurfaceArea (double &retSurfArea) const;
 
 
 
 OdResult getVertexNormalArray(OdGeVector3dArray& arrNorm);
 OdResult getVertexTextureArray(OdGePoint3dArray& arrPts);
 OdResult getVertexColorArray(OdCmEntityColorArray& arrColor);
 OdResult setVertexNormalArray(OdGeVector3dArray& arrNorm);
 OdResult setVertexTextureArray(OdGePoint3dArray& arrPts);
 OdResult setVertexColorArray(OdCmEntityColorArray& arrColor);
 
 OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
   OdGsMarker gsMark, 
   const OdGePoint3d& ,
   const OdGeMatrix3d& , 
   OdDbFullSubentPathArray& subentPaths, 
   const OdDbObjectIdArray* pEntAndInsertStack ) const;
 OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
   OdGsMarkerArray& gsMarkers) const;
};
 
/** \details
 This template class is a specialization of the OdSmartPtr class for OdDbSubDMesh object pointers.
*/
typedef OdSmartPtr<OdDbSubDMesh> OdDbSubDMeshPtr;
 
/** \details
  Library: TD_Db
  <group !!RECORDS_TD_APIRef>
*/
struct MeshFaceterSettings
{
  double faceterDevSurface;
  double faceterDevNormal;
  double faceterGridRatio;
  double faceterMaxEdgeLength;
  OdUInt16 faceterMaxGrid;
  OdUInt16 faceterMinUGrid;
  OdUInt16 faceterMinVGrid;
  OdInt16 faceterMeshType;
 
  MeshFaceterSettings()
    : faceterDevSurface(0.)
    , faceterDevNormal(0.)
    , faceterGridRatio(0.)
    , faceterMaxEdgeLength(0)
    , faceterMaxGrid(0)
    , faceterMinUGrid(0)
    , faceterMinVGrid(0)
    , faceterMeshType(0)  {}
};
 
typedef struct MeshFaceterSettings  OdDbFaceterSettings;
 
TOOLKIT_EXPORT OdResult oddbGetObjectMesh(OdDbObject *pObj, 
                                           const OdDbFaceterSettings *faceter,
                                           OdGePoint3dArray& vertexArray, 
                                           OdInt32Array& faceArray,
                                           OdGiFaceData*& faceData);
 
 
#include "TD_PackPop.h"
 
#endif