24 #ifndef __FMMDL_BODY_H__
25 #define __FMMDL_BODY_H__
49 Body(
class BodyImpl* pImpl );
233 Profile3D& rResult,
bool bIncludeBoundary =
true )
const;
242 Profile2D* pResultExcludingCoincidingBoundary = 0,
243 Profile2D* pResultExcludingOppositeBoundary = 0,
253 Profile3D& rResult,
bool bIncludeBoundary =
true )
const;
262 bool operator == (
const Body& aBody)
const;
349 double dRadius,
double dHeight,
382 double dDepth,
double dDepthOrigin,
398 double dWidth,
double dDepth,
double dDepthOrigin,
454 static Body custom(
const std::vector<OdGePoint3d>& aVertices,
455 const std::vector<OdInt32>& aFaceData,
456 const std::vector<OdUInt32>* aEdgeFlags = 0,
457 const std::vector<OdUInt32>* aFaceFlags = 0,
458 const std::vector<OdUInt32>* aVertexFlags = 0,
480 const std::vector<OdInt32>& aFaceData,
481 const std::vector<OdUInt32>* aEdgeFlags = 0,
482 const std::vector<OdUInt32>* aFaceFlags = 0,
483 const std::vector<OdUInt32>* aVertexFlags = 0,
485 std::vector<OdUInt32>* pFaceColors = 0,
486 std::vector<OdUInt32>* pEdgeColors = 0
561 const Profile3D& rCutter,
bool bInside,
double dDepth,
590 std::vector<FacetModeler::Face*>* pNewOuter = 0,
591 std::vector<FacetModeler::Face*>* pNewInner = 0 );
621 void addFace2(
Face* pFace);
629 void deleteEdge(
Edge* pEdge,
Edge* pNewLoopStart );
633 void splitEdge(
Edge* pEdge,
Vertex* pNewVertex );
639 void collectLoopsLight(
Face* pFace );
640 Body cloneByFaceList(std::vector<Face*> aFaceList)
const;
644 const std::vector<OdInt32>& aFaceData,
646 const std::vector<OdUInt32>* aEdgeFlags = 0,
647 const std::vector<OdUInt32>* aFaceFlags = 0,
648 const std::vector<OdUInt32>* aVertexFlags = 0,
650 const std::vector<OdUInt32>* aFaceColors = 0,
651 const std::vector<OdUInt32>* aEdgeColors = 0);
655 static Body DoUnionOperation(
Body& rOperandA,
Body& rOperandB );
656 static Body DoIntersectionOperation(
Body& rOperandA,
Body& rOperandB );
657 static Body DoDifferenceOperation(
Body& rOperandA,
Body& rOperandB );
658 static Body DoXOROperation(
Body& rOperandA,
Body& rOperandB );
674 class BodyImpl* m_pImpl;
679 friend class BodyImpl;
680 friend class BodyInternalConsistencyRestorer;
FacetModeler::Vertex * getVertexList()
static Body pyramid(const Profile2D &rBase, const OdGePoint3d &ptApex, const DeviationParams &devDeviation=FMGeGbl::gDefDev)
Surface * surfaceList() const
static Body revolution(const Profile2D &base, const OdGeCircArc3d &revolutionAxisAndAngles, const DeviationParams &deviation=FMGeGbl::gDefDev, const OdGeMatrix2d *pBaseTransform=0)
void removeFace(FacetModeler::Face *pFace)
void setSurfaceCount(OdUInt32 count)
bool mergeCoincidentVertices()
OdUInt32 surfaceCount() const
void clearSurfaceTags(FacetModeler::AecTagType clearValue=0)
void setVertexCount(OdUInt32 count)
void sliceFaceDbg(const OdGePlane &rCutter, OdUInt32 faceNum)
void addSurface(Surface *pSurface)
void slice(const OdGePlane &rCutter, Profile3D &rResult, bool bIncludeBoundary=true) const
void addFace(FacetModeler::Face *pFace)
void deleteUnusedVertices()
static Body box(const OdGePoint3d &ptOrigin, const OdGeVector3d &vSizes)
Body combine(Body &rAnother)
void regeneratePairEdges()
OdUInt32 faceCount() const
static Body insideBody(const Profile2D &rBase, double dDepth, double dDepthOrigin, const DeviationParams &devDeviation=FMGeGbl::gDefDev)
void clone_impl_if_referenced()
static Body extrusion(const Profile2D &rBase, const OdGeVector3d &vDir, const DeviationParams &devDeviation=FMGeGbl::gDefDev)
FacetModeler::Face * faceList() const
FacetModeler::Vertex * addVertex(const OdGePoint3d &pt)
void transform(const OdGeMatrix3d &mMatrix)
void slice(const Contour2D &cCutLine, const OdGePlane &pProjectOn, Profile3D &rResult, bool bIncludeBoundary=true) const
OdUInt32 cachedEdgesCount() const
void slice(const OdGePlane &rCutter, Profile2D *pResultIncludingBoundary, Profile2D *pResultExcludingCoincidingBoundary=0, Profile2D *pResultExcludingOppositeBoundary=0, Profile2D *pResultExcludingBoundary=0, FaceConstPtrArray *pCoincidingFaces=0, FaceConstPtrArray *pOppositeFaces=0) const
static Body boolOper(BooleanOperation eOperation, Body &rOperandA, Body &rOperandB)
void clearEdgeTags(FacetModeler::AecTagType clearValue=0)
void clearVertexTags(FacetModeler::AecTagType clearValue=0)
static Body custom(const std::vector< OdGePoint3d > &aVertices, const std::vector< OdInt32 > &aFaceData, const std::vector< OdUInt32 > *aEdgeFlags=0, const std::vector< OdUInt32 > *aFaceFlags=0, const std::vector< OdUInt32 > *aVertexFlags=0, const SurfaceData *pSurfaceData=0)
bool checkInternalConsistence(OdString *pFirstErrorDetected=0) const
FacetModeler::Surface * getSurfaceList()
static Body cutWithExtrusion(Body &rBase, const Profile3D &rCutter, bool bInside, double dDepth, const DeviationParams &devDeviation=FMGeGbl::gDefDev)
static Body revolution(const Profile2D &rBase, double dRadius, double dHeight, const DeviationParams &devDeviation=FMGeGbl::gDefDev)
static Body cutWithInfExtrusion(Body &rBase, const Profile3D &rCutter, bool bInside, const DeviationParams &devDeviation=FMGeGbl::gDefDev)
bool hasCoincidentEdges() const
bool intersectLine(const OdGeLinearEnt3d &gLine, std::vector< OdGePoint3d > &vecPoints, bool bSortResults=false) const
bool hasCoincidentVertices() const
OdUInt32 vertexCount() const
FacetModeler::AecTagType tag() const
void mergeCoplanarEntities()
FacetModeler::Face * addFace(Surface *pSurface=0)
bool containsNonManifoldEdges() const
OdGeExtents3d interval() const
OdUInt32 countEdges() const
FacetModeler::Vertex * vertexList() const
void clearFaceTags(FacetModeler::AecTagType clearValue=0)
static Body insideFrame(const Profile2D &rBase, double dWidth, double dDepth, double dDepthOrigin, const DeviationParams &devDeviation=FMGeGbl::gDefDev)
void clearBodyTags(FacetModeler::AecTagType clearValue=0)
void deleteFace(FacetModeler::Face *pFace)
static Body customC(const std::vector< OdGePoint3d > &aVertices, const std::vector< OdInt32 > &aFaceData, const std::vector< OdUInt32 > *aEdgeFlags=0, const std::vector< OdUInt32 > *aFaceFlags=0, const std::vector< OdUInt32 > *aVertexFlags=0, const SurfaceData *pSurfaceData=0, std::vector< OdUInt32 > *pFaceColors=0, std::vector< OdUInt32 > *pEdgeColors=0)
static Body customInternal(const std::vector< OdGePoint3d > &aVertices, const std::vector< OdInt32 > &aFaceData, bool bRemoveTJ, const std::vector< OdUInt32 > *aEdgeFlags=0, const std::vector< OdUInt32 > *aFaceFlags=0, const std::vector< OdUInt32 > *aVertexFlags=0, const SurfaceData *pSurfaceData=0, const std::vector< OdUInt32 > *aFaceColors=0, const std::vector< OdUInt32 > *aEdgeColors=0)
static Body infExtrusion(const Body &rBase, const Profile3D &rCutter, const DeviationParams &devDeviation=FMGeGbl::gDefDev)
OdUInt32 getSurfaceCount()
void decomposeIntoLumps(std::vector< Body > &aLumps)
void setSurfaceList(FacetModeler::Surface *pList)
void setTag(FacetModeler::AecTagType iTag)
static Body singleFace(const Profile2D &rBase, const DeviationParams &devDeviation=FMGeGbl::gDefDev)
void splitFace(FacetModeler::Face *pFace, const OdGePlane &pPlane, std::vector< FacetModeler::Face * > *pNewOuter=0, std::vector< FacetModeler::Face * > *pNewInner=0)
static FMGEOMETRY_API_STATIC const Body kEmpty
void setVertexList(FacetModeler::Vertex *pList)
Body(class BodyImpl *pImpl)
FMGEOMETRY_API Body extrusion(const Profile2D &rBase, const OdGeMatrix3d &mBasePlane, const OdGeVector3d &vDir, const DeviationParams &devDeviation=FMGeGbl::gDefDev)
OdArray< const Face *, OdMemoryAllocator< const Face * > > FaceConstPtrArray
FMGEOMETRY_API Body revolution(const Profile2D &base, const OdGeVector3d &revAxis, const OdGePoint3d &axisPosition, double startAng, double endAng, const DeviationParams &deviation=FMGeGbl::gDefDev)
bool DAI_EXPORT operator!=(const OdDAI::OdSelect &left, const OdDAI::OdSelect &right)
OdArray< VertexSurfData * > vertexSurfData
OdArray< Surface * > surfaces
OdArray< Surface * > face2Surface
void addVertexSurfData(int nVertex, Surface *pSurf)
static FMGEOMETRY_API_STATIC DeviationParams gDefDev