You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
13 KiB
13 KiB
/**
* @brief 带洞截面沿路径拉伸
* @note :
* @param : 截面必须共面,数组首个元素必须为外包,其余元素为内部洞;拉伸路径可以闭合
* @return:
* @author: csl
* @date : [11/7/2022]
*/
virtual CPmSolid * extrudeAlongPath(const CArray<PmDbPolyline *> & polys,
PmDbPolyline * path) override;
/**
* @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;
/**
* @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);
螺旋路径拉伸
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;