|
|
|
```C++
|
|
|
|
/**
|
|
|
|
* @brief 带洞截面沿路径拉伸
|
|
|
|
* @note :
|
|
|
|
* @param : 截面必须共面,数组首个元素必须为外包,其余元素为内部洞;拉伸路径可以闭合
|
|
|
|
* @return:
|
|
|
|
* @author: csl
|
|
|
|
* @date : [11/7/2022]
|
|
|
|
*/
|
|
|
|
virtual CPmSolid * extrudeAlongPath(const CArray<PmDbPolyline *> & polys,
|
|
|
|
PmDbPolyline * path) override;
|
|
|
|
```
|
|
|
|
```C++
|
|
|
|
/**
|
|
|
|
* @brief 带洞截面拉伸
|
|
|
|
* @note :
|
|
|
|
* @param : 数组首个元素必须为外包,其余元素为内部洞
|
|
|
|
* @return:
|
|
|
|
* @author: csl
|
|
|
|
* @date : [11/7/2022]
|
|
|
|
*/
|
|
|
|
virtual CPmSolid * extrude(const CArray<PmDbPolyline *> & polys,
|
|
|
|
const PMSoft::CPMGePoint3D &fixedPt, // ?
|
|
|
|
const PMSoft::CPMGeVector3D &plgNormal,
|
|
|
|
const PMSoft::CPMGeVector3D &extusionVector, // ? 没有路径吗
|
|
|
|
double scaleFactor = 1.0,
|
|
|
|
double twistAngle = 0.0) override;
|
|
|
|
```
|
|
|
|
|
|
|
|
```C++
|
|
|
|
/**
|
|
|
|
* @brief 多段拉伸生成完整体(适用构造柱马牙槎)
|
|
|
|
* @note : 只在自主布尔中实现,ACIS未实现
|
|
|
|
* @param : polys为各段拉伸的起始截面,vctsExtru为每段拉伸的拉伸向量
|
|
|
|
* 截面与向量的数量应该相同,且至少为2个
|
|
|
|
* @return:
|
|
|
|
* @author: csl
|
|
|
|
* @date : [9/25/2023]
|
|
|
|
*/
|
|
|
|
virtual CPmSolid * extrudeStepByStep(const CArray<PmDbPolyline *> & polys, const CArray<PMSoft::CPMGeVector3D> & vctsExtru) override;
|
|
|
|
```
|
|
|
|
|
|
|
|
```C++
|
|
|
|
/**
|
|
|
|
* @param axis_start axis start position.
|
|
|
|
* @param axis_end axis end position.
|
|
|
|
* @param start_dir vector from axis_start to helix star
|
|
|
|
* @param radius radius of helix.
|
|
|
|
* @param pith distance between threads along axis.
|
|
|
|
* @param handiness
|
|
|
|
*/
|
|
|
|
virtual CPmSolid * createHelix(const PMSoft::CPMGePoint3DArray &pt3d,
|
|
|
|
const PmGeDoubleArray bulges,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_start,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_end,
|
|
|
|
const PMSoft::CPMGeVector3D &start_dir,
|
|
|
|
BOOL handiness,
|
|
|
|
double radius,
|
|
|
|
double pitch);
|
|
|
|
|
|
|
|
virtual CPmSolid * createHelix(const PMSoft::CPMGePoint3DArray &pt3d,
|
|
|
|
const PmGeDoubleArray bulges,
|
|
|
|
const PMSoft::CPMGeVector3D &FaceNormal,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_start,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_end,
|
|
|
|
const PMSoft::CPMGeVector3D &start_dir,
|
|
|
|
BOOL handiness,
|
|
|
|
double radius,
|
|
|
|
double pitch,
|
|
|
|
BOOL bIsFace = FALSE);
|
|
|
|
|
|
|
|
virtual CPmSolid * create_face_helix(const PMSoft::CPMGePoint3DArray &pt3d,
|
|
|
|
const PmGeDoubleArray bulges,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_start,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_end,
|
|
|
|
const PMSoft::CPMGeVector3D &start_dir,
|
|
|
|
BOOL handiness,
|
|
|
|
double radius,
|
|
|
|
double pitch);
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 螺旋路径拉伸
|
|
|
|
```C++
|
|
|
|
virtual CPmSolid * createHelix(const PMSoft::CPMGePoint3DArray &pt3d,
|
|
|
|
const PmGeDoubleArray bulges,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_start,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_end,
|
|
|
|
const PMSoft::CPMGeVector3D &start_dir,
|
|
|
|
BOOL handiness,
|
|
|
|
double radius,
|
|
|
|
double pitch);
|
|
|
|
|
|
|
|
virtual CPmSolid * createHelix(const PMSoft::CPMGePoint3DArray &pt3d,
|
|
|
|
const PmGeDoubleArray bulges,
|
|
|
|
const PMSoft::CPMGeVector3D &FaceNormal,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_start,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_end,
|
|
|
|
const PMSoft::CPMGeVector3D &start_dir,
|
|
|
|
BOOL handiness,
|
|
|
|
double radius,
|
|
|
|
double pitch,
|
|
|
|
BOOL bIsFace = FALSE);
|
|
|
|
|
|
|
|
virtual CPmSolid * create_face_helix(const PMSoft::CPMGePoint3DArray &pt3d,
|
|
|
|
const PmGeDoubleArray bulges,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_start,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_end,
|
|
|
|
const PMSoft::CPMGeVector3D &start_dir,
|
|
|
|
BOOL handiness,
|
|
|
|
double radius,
|
|
|
|
double pitch);
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 两截面蒙皮(生成台体)
|
|
|
|
virtual CPmSolid * create_by_faces_to_skin(PmDbPolyline * pStartPoly, PmDbPolyline * pEndPoly, PMSoft::CPMGeVector3D normal/*,BOOL bIsFace*/) override;
|
|
|
|
|
|
|
|
// 多截面蒙皮(截面的边均为线段)
|
|
|
|
virtual CPmSolid * create_by_faces_to_skin(const CArray<PMSoft::CPMGePoint3DArray, PMSoft::CPMGePoint3DArray&> &jmsPts3d, BOOL bIsFace) override;
|
|
|
|
|
|
|
|
// 多截面蒙皮(截面的边可能存在凸度)
|
|
|
|
virtual CPmSolid * create_by_faces_to_skin(const CArray<PMSoft::CPMGePoint3DArray, PMSoft::CPMGePoint3DArray&> &jmPt3d, const CArray<PmGeDoubleArray, PmGeDoubleArray&> &jmbulge,
|
|
|
|
CArray<PMSoft::CPMGeVector3D, PMSoft::CPMGeVector3D&> &normalArr, const PMSoft::CPMGePoint3DArray &pathPt3d, BOOL bIsFace) override;
|
|
|
|
|
|
|
|
CPmSolid * create_by_faces_to_skin(const CArray<PMSoft::CPMGePoint3DArray, PMSoft::CPMGePoint3DArray&> &jmsPts3d, const CArray<PmGeDoubleArray, PmGeDoubleArray&> &jmsBulges,
|
|
|
|
const CArray<PMSoft::CPMGeVector3D, PMSoft::CPMGeVector3D&> &normalArr, BOOL bIsFace);
|
|
|
|
|
|
|
|
virtual CPmSolid * createHelix(const PMSoft::CPMGePoint3DArray &pt3d,
|
|
|
|
const PmGeDoubleArray bulges,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_start,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_end,
|
|
|
|
const PMSoft::CPMGeVector3D &start_dir,
|
|
|
|
BOOL handiness,
|
|
|
|
double radius,
|
|
|
|
double pitch);
|
|
|
|
virtual CPmSolid * createHelix(const PMSoft::CPMGePoint3DArray &pt3d,
|
|
|
|
const PmGeDoubleArray bulges,
|
|
|
|
const PMSoft::CPMGeVector3D &FaceNormal,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_start,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_end,
|
|
|
|
const PMSoft::CPMGeVector3D &start_dir,
|
|
|
|
BOOL handiness,
|
|
|
|
double radius,
|
|
|
|
double pitch,
|
|
|
|
BOOL bIsFace = FALSE);
|
|
|
|
|
|
|
|
virtual CPmSolid * create_face_helix(const PMSoft::CPMGePoint3DArray &pt3d,
|
|
|
|
const PmGeDoubleArray bulges,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_start,
|
|
|
|
const PMSoft::CPMGePoint3D &axis_end,
|
|
|
|
const PMSoft::CPMGeVector3D &start_dir,
|
|
|
|
BOOL handiness,
|
|
|
|
double radius,
|
|
|
|
double pitch);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 截面绕轴旋转生成体
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @note :
|
|
|
|
* @param : 截面、基点、轴向量、旋转角度
|
|
|
|
* @return:
|
|
|
|
* @author: csl
|
|
|
|
* @date : [11/7/2022]
|
|
|
|
*/
|
|
|
|
virtual CPmSolid * createSolidByFaceAroundAxis(const PMSoft::CPMGePoint3DArray &pt3d, const PmGeDoubleArray &bulges, const PMSoft::CPMGeVector3D &plgNormal,
|
|
|
|
const PMSoft::CPMGePoint3D &apex, const PMSoft::CPMGeVector3D &axis,
|
|
|
|
double angle) override;
|
|
|
|
|
|
|
|
virtual CPmSolid * createSphereFace(const PMSoft::CPMGePoint3D& p, double radius);
|
|
|
|
|
|
|
|
virtual CPmSolid * create_face_cylinder_cone(const PMSoft::CPMGePoint3D& axisStart, const PMSoft::CPMGePoint3D& axisEnd, double radius1, double radius2, double start = 0, double end = 360);
|
|
|
|
|
|
|
|
virtual CPmSolid * extrudeAdvance(PmDbPolyline * pExtrudePoly,
|
|
|
|
const PMSoft::CPMGePoint3D &fixedPt,
|
|
|
|
const PMSoft::CPMGeVector3D &plgNormal,
|
|
|
|
const PMSoft::CPMGeVector3D &extusionVector,
|
|
|
|
double scaleFactor,
|
|
|
|
double twistAngle);
|
|
|
|
|
|
|
|
virtual CPmSolid * extrudeAlongPath(const PMSoft::CPMGePoint3DArray &pt3d,
|
|
|
|
const PmGeDoubleArray &bulge,
|
|
|
|
PMSoft::CPMGeVector3D normal,
|
|
|
|
PmDbPolyline * path,
|
|
|
|
BOOL IsInteset = FALSE) override;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 带洞截面沿路径拉伸
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @note :
|
|
|
|
* @param : 截面必须共面,数组首个元素必须为外包,其余元素为内部洞;拉伸路径可以闭合
|
|
|
|
* @return:
|
|
|
|
* @author: csl
|
|
|
|
* @date : [11/7/2022]
|
|
|
|
*/
|
|
|
|
virtual CPmSolid * extrudeAlongPath(const CArray<PmDbPolyline *> & polys,
|
|
|
|
PmDbPolyline * path) override;
|
|
|
|
|
|
|
|
virtual BOOL GetExtents(const CPmSolid *pEntity, PmExtents& extents);
|
|
|
|
|
|
|
|
virtual InterferenceType checkInterferenceType(const CPmSolid* Ent,const CPmSolid* otherEnt,double dTol = 0.01);
|
|
|
|
|
|
|
|
virtual CPmSolid * extrude(const PMSoft::CPMGePoint3DArray &pt3d, const PmGeDoubleArray &bulge, const PMSoft::CPMGePoint3D &fixedPt, const PMSoft::CPMGeVector3D &plgNormal, const PMSoft::CPMGeVector3D &extusionVector, double scaleFactor, double twistAngle) override;
|
|
|
|
CPmSolid * extrude(const PMSoft::CPMGePoint3DArray & pt3d, const PmGeDoubleArray & bulge, const PMSoft::CPMGePoint3D &fixedPt, const PMSoft::CPMGeVector3D &extusionVector);
|
|
|
|
|
|
|
|
virtual CPmSolid * extrude(PmDbPolyline * pExtrudePoly,
|
|
|
|
const PMSoft::CPMGePoint3D &fixedPt,
|
|
|
|
const PMSoft::CPMGeVector3D &plgNormal,
|
|
|
|
const PMSoft::CPMGeVector3D &extusionVector,
|
|
|
|
double scaleFactor,
|
|
|
|
double twistAngle);
|
|
|
|
|
|
|
|
// (新弧形) 面拉伸为柱类体测试接口
|
|
|
|
PMSoft::PMBoolean3d::CCylinderLikeBody * extrudeCylinderBodyTest(const PMSoft::OdexBase2d::PmDbPLine& plSection, const PMSoft::CPMGeVector3D& vecExtru);
|
|
|
|
PMSoft::PMBoolean3d::CCylinderLikeBody * extrudeCylinderBodyTest(const PMSoft::CPMGePoint3DArray& pts, const PMSoft::PmGeDoubleArray& bulges, const PMSoft::CPMGeVector3D& vecNormal, const PMSoft::CPMGeVector3D& vecExtru);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 带洞截面拉伸
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @note :
|
|
|
|
* @param : 数组首个元素必须为外包,其余元素为内部洞
|
|
|
|
* @return:
|
|
|
|
* @author: csl
|
|
|
|
* @date : [11/7/2022]
|
|
|
|
*/
|
|
|
|
virtual CPmSolid * extrude(const CArray<PmDbPolyline *> & polys,
|
|
|
|
const PMSoft::CPMGePoint3D &fixedPt,
|
|
|
|
const PMSoft::CPMGeVector3D &plgNormal,
|
|
|
|
const PMSoft::CPMGeVector3D &extusionVector,
|
|
|
|
double scaleFactor = 1.0,
|
|
|
|
double twistAngle = 0.0) override;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 多段拉伸生成完整体(适用构造柱马牙槎)
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @note : 只在自主布尔中实现,ACIS未实现
|
|
|
|
* @param : polys为各段拉伸的起始截面,vctsExtru为每段拉伸的拉伸向量
|
|
|
|
* 截面与向量的数量应该相同,且至少为2个
|
|
|
|
* @return:
|
|
|
|
* @author: csl
|
|
|
|
* @date : [9/25/2023]
|
|
|
|
*/
|
|
|
|
virtual CPmSolid * extrudeStepByStep(const CArray<PmDbPolyline *> & polys, const CArray<PMSoft::CPMGeVector3D> & vctsExtru) override;
|
|
|
|
|
|
|
|
|
|
|
|
virtual CPmSolid * CreateFaceBody_extrude(const PMSoft::CPMGePoint3DArray & pt3d, const PmGeDoubleArray & bugle, const PMSoft::CPMGeVector3D &plgNormal, double dLength);
|
|
|
|
|
|
|
|
virtual CPmSolid * CreateFaceBody_extrude(const PMSoft::CPMGePoint3DArray & pt3d,const PmGeDoubleArray & bugle,const PMSoft::CPMGeVector3D &plgNormal,const PMSoft::CPMGeVector3D &extrudeVec);
|
|
|
|
|
|
|
|
virtual CPmSolid * CreateFaceBody_extrude(PmDbPolyline * ply, const PMSoft::CPMGeVector3D &plgNormal, const PMSoft::CPMGeVector3D & extrudeVec);
|
|
|
|
|
|
|
|
virtual CPmSolid * CreateFaceBody(const PMSoft::CPMGePoint3DArray & pt3d,const PmGeDoubleArray & bulge,const PMSoft::CPMGeVector3D &plgNormal);
|
|
|
|
|
|
|
|
virtual CPmSolid * CreateFaceBody(const PmDbPolyline * pFacePolyLine);
|
|
|
|
//生成自身带洞的面
|
|
|
|
virtual CPmSolid * CreateFaceBody(const CArray<PmDbPolyline *> & pFacePolyLineArr) override;
|
|
|
|
|
|
|
|
virtual CPmSolid * CreateFaceBody_extrudeAlongPath(const PMSoft::CPMGePoint3DArray & pt3d,const PmGeDoubleArray &bulge,PMSoft::CPMGeVector3D normal,PmDbPolyline* path,BOOL IsInteset = FALSE) override;
|
|
|
|
|
|
|
|
virtual void getSliceFace(CPmSolid * &pEntity,const PMSoft::CPMGePoint3D & pt, const PMSoft::CPMGeVector3D & normal, double dTol);
|
|
|
|
|
|
|
|
virtual CPmSolid* CreateBodyBySliceFace(CPmSolid * pEntity,const PMSoft::CPMGePoint3D & pt, const PMSoft::CPMGeVector3D & normal, double dExtrudeDis);
|
|
|
|
|
|
|
|
virtual BOOL GetEntity_AllFaces(CPmSolid * &pEntity);// 体构件转化为面构件
|
|
|
|
/// 隐藏不需要的面(适用人防墙业务)
|
|
|
|
virtual BOOL UnHookSpecialFaces(CPmSolid *& pSolid, CArray<CGeBorder, CGeBorder&> & brds);
|
|
|
|
virtual BOOL UnHookSpecialFaces(CPmSolid *& pSolid, CArray<CGeBorder, CGeBorder&> & brds, BOOL bNeedTransf);
|
|
|
|
/// 隐藏单面(适用人防墙业务),向量即为面法向量
|
|
|
|
virtual BOOL UnHookSingleFace(CPmSolid *& pSolid, const CGeBorder & brd, const PMSoft::CPMGeVector3D & normal);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
/// 其他
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
virtual BOOL AddEntityToDbs(const CPMSolidArr & EntArr,CPM3dEntDataArr & entDataArr,CString & strACISFilePath);
|
|
|
|
|
|
|
|
BOOL RemoveVertexNotNeed(PMSoft::CPMGePoint3DArray & PtArr,PmGeDoubleArray & BulgeArr,int & iSize_Pt,int & iSize_Bulge);
|
|
|
|
|
|
|
|
/***************************************************************************************************************************************************/
|
|
|
|
virtual BOOL getCentroid(CPmSolid *pEntity, PMSoft::CPMGePoint3D ¢roid);
|
|
|
|
|
|
|
|
|
|
|
|
//describe:获取所需实体的所有符合条件面,判断条件为实体面的法向量和传入向量符合条件
|
|
|
|
//notice:bGetOrMove,获取符合条件的还是去除符合条件的;bStrict,绝对符合条件还是接近条件(e.g 绝对条件为(线/面)同向时,接近条件为锐角;绝对条件为noZ时,接近条件为非xy平面)
|
|
|
|
//return:
|
|
|
|
//
|
|
|
|
//author:csl
|
|
|
|
//date:2022/9/14
|
|
|
|
virtual BOOL GetFaceSuitVec(CPmSolid *& pSolid, FaceNormalType normalType, BOOL bGetOrMove, BOOL bStrict, const PMSoft::CPMGeVector3D & vctNormalStd, const PMSoft::CPMGeTol& tol = PMSoft::CPMGeTol::gTol) override;
|
|
|
|
|
|
|
|
// 一组实体 向 指定面进行投影
|
|
|
|
virtual CPmSolid * CreateEntShadow(const CPMSolidArr & entArr, const PMSoft::CPMGePlane & plane) override;
|
|
|
|
|
|
|
|
// 将面实体拆分,每个面作为一个Solid,放在结果数组中。!内存需要调用方管理
|
|
|
|
virtual BOOL SplitFacesSolid(const CPmSolid * pFacesSolid, CPMSolidArr & facesSplitResult) override;
|
|
|
|
|
|
|
|
// 将面Solid转化为体Solid(原始面组必须能构成单个完整体,不能多面,也不能缺面)
|
|
|
|
virtual BOOL createBodyByFaces(CPmSolid *& pSolid) override;
|