📄 geutilities.h
字号:
* Purpose:
* loop1与loop2布尔操作
* Argument:
* loop1 [in], loop1.
* loop2 [in], loop2.
* op [in], bool operation.
* retLoops [out], 返回的loops.
* Return:
* Acad::eOk, 成功,
* Acad::eInvalideInput,loop1或loop2不是一个封闭图形
* Acad::eNotHandled, 两个loop轮廓没有交点, 且bool操作对loop1没有影响
* 其他,失败, loops长度为0
*/
extern DLLIMPEXP Acad::ErrorStatus
booleanOper(const ChGeLoop2d& loop1, const ChGeLoop2d& loop2,
ChGeLoop2dArray& retLoops,AcDb::BoolOperType op);
/*
* Purpose:
* 转换3dNurb曲线为2d.
* Argument:
* crv [in], 3d nurb curve.
* crv2d [out], 2d nurb curve.
*/
extern DLLIMPEXP void
curve3dTo2d(const AcGeNurbCurve3d& crv,AcGeNurbCurve2d& crv2d);
/*
* Purpose:
* 将点数组添加到点数组的数组中.
* 当点数组的数组中某一点数组A的最后一点等于该点数组的第一点时
* 插入到点数组的数组元素A的后面,并返回其位置索引,否则返回-1,
* 数组未被插入。
* Argument:
* pntsArr [in], 点数组的数组.
* pnts [in], 点数组.
* pntsArr [out], 点数组的数组.
* Return:
* -1插入失败,否则为插入位置索引.
*/
extern DLLIMPEXP int
joinPntsArrayWithPnts(ChGePnts2dArray& pntsArr, const AcGePoint2dArray& pnts);
/*
* Purpose:
* 将点数组添加到点数组的数组中.
* 当点数组的数组中某一点数组A的最后一点等于该点数组的第一点时
* 插入到点数组的数组元素A的后面,并返回其位置索引,否则返回-1,
* 数组未被插入。
* Argument:
* pntsArr [in], 点数组的数组.
* pnts [in], 点数组.
* pntsArr [out], 点数组的数组.
* Return:
* -1插入失败,否则为插入位置索引.
*/
extern DLLIMPEXP int
joinPntsArrayWithPntsArray(ChGePnts2dArray& pntsArr, const ChGePnts2dArray& pntsArr2);
/*
* Purpose:
* 曲线2剪切曲线1,保留曲线1在曲线2某边的部分和曲线2上的某些段,
* 形成与曲线1方向一致的曲线.
* Argument:
* curve1 [in], curve1.
* curve2 [in], curve2.
* bTrimRight [in], true时保留左手边,否则保留右手边 default=true
* retCurvePntsArray [out], 曲线组的点数组的数组.
* Return:
* true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
* false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
*/
//extern DLLIMPEXP bool
//trimCurvebyCurve(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true);
/*
* Purpose:
* 用曲线2剪切曲线1,只保留曲线1上的部分.
* Argument:
* curve1pntsArr [in], curve1.
* curve2pntsArr [in], curve2.
* bTrimRight [in], true时保留左手边,否则保留右手边
* retCurvePntsArray [out], 曲线组的点数组的数组.
* Return:
* true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
* false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
*/
//extern DLLIMPEXP bool
//trimCurvebyCurve2(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true);
/*
* Purpose:
* 曲线2剪切Closed曲线1,保留曲线1在曲线2某边的部分和曲线2上的
* 某些段,形成与曲线1方向一致的首尾相连的曲线组Loop.
* 曲线2不是首尾相接
* Argument:
* curve1pntsArr [in], curve1.
* curve2pntsArr [in], curve2.
* bTrimRight [in], true时保留左手边,否则保留右手边
* bAnticlock [in], true曲线1为逆时针方向,false顺时针
* retCurvePntsArray [out], 曲线组的点数组的数组.
* Return:
* true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
* false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
*/
//extern DLLIMPEXP bool
//trimClosedCurvebyCurve(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true,bool bAnticlock=true);
/*
* Purpose:
* 曲线2剪切Closed曲线1,保留曲线1在曲线2某边的部分和曲线2上的
* 某些段,形成与曲线1方向一致的首尾相连的曲线组Loop.
* 曲线2不是首尾相接
* Argument:
* curve1pntsArr [in], curve1.
* curve2pntsArr [in], curve2.
* bTrimRight [in], true时保留左手边,否则保留右手边
* retCurvePntsArray [out], 曲线组的点数组的数组.
* Return:
* true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
* false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
*/
//extern DLLIMPEXP bool
//trimClosedCurvebyCurve3(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true);
/*
* Purpose:
* 用曲线2剪切首尾相接的曲线1,只保留曲线1上的部分.
* Argument:
* curve1 [in], curve1.
* curve2 [in], curve2.
* bTrimRight [in], true时保留左手边,否则保留右手边
* retCurvePntsArray [out], 曲线组的点数组的数组.
* Return:
* true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
* false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
*/
//extern DLLIMPEXP bool
//trimClosedCurvebyCurve2(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true);
/*
* Purpose:
* 用首尾相接的曲线2剪切首尾相接的曲线1,曲线1为逆时针或顺时针.
* 保留曲线1和曲线2上的部分,形成loop或loops.
* Argument:
* curve1pntsArr [in], curve1.
* curve2pntsArr [in], curve2.
* bTrimRight [in], true时保留左手边,否则保留右手边
* bAnticlock [in], true曲线1为逆时针方向,false顺时针
* retCurvePntsArray [out], 曲线组的点数组的数组.
* Return:
* true两者之间有交点时剪切成功, 或曲线1整个被剪切掉(此时retCurvePntsArray为空)
* false实际参数错误,或曲线1未被剪切(此时retCurvePntsArray与curve1相同)
*/
//extern DLLIMPEXP bool
//trimClosedCurvebyClosedCurve(const ChGeCurve2dPntsArray& curve1pntsArr,const ChGeCurve2dPntsArray& curve2pntsArr,ChGeCurve2dPntsArray& retCurvePntsArray,bool bTrimRight=true,bool bAnticlock=true);
/*
* Purpose:
* 多个轮廓剪切轮廓1,其他的多个轮廓没有相交和包含关系.
* 保留轮廓1和其他轮廓上的部分,形成loop或loops
* Argument:
* loop [in], 轮廓1.
* loops [in], 其他的多个轮廓.
* bTrimRight [in], true时保留左手边,否则保留右手边
* bAnticlock [in], true轮廓1为逆时针方向,false顺时针
* retCurvePntsArray [out], 曲线组的点数组的数组.
* Return:
* true轮廓1被完全剪切掉返回空或正常返回
* false输入参数错误
*/
extern DLLIMPEXP bool
trimLoopByLoops(const ChGeLoop2d& loop, const ChGeLoop2dArray& loops,ChGeLoop2dArray& retLoops,bool bAnticlock=true,bool bTrimRight=true);
/*
* Purpose:
* 从点数组的数组提取loops.
* 当p1,p2,p3,p4,p1,p5,p6,p7,p8,p5时可以提出两个LOOP.
* Argument:
* pntsArr [in], 点数组的数组.
* loops2d [out], 返回loops
* Return:
* 成功返回true,否则false
*/
extern DLLIMPEXP bool
getLoopsFromPntsArr(ChGeLoop2dArray& loops2d,const ChGeCurve2dPntsArray& pntsArr);
/*
* Purpose:
* 判断两对象所含数据是否相等(ChGeLoop2d)
* Argument:
* loop1 [in], loop1.
* loop2 [in], loop2
* Return:
* 相等true,否则false.
*/
extern DLLIMPEXP bool
isEqual(const ChGeLoop2d& loop1,const ChGeLoop2d& loop2);
/*
* Purpose:
* 判断两对象所含数据是否相等(AcGePoint2dArray)
* Argument:
* pnts1 [in], points 1.
* pnts2 [in], points 2.
* Return:
* 相等true,否则false.
*/
extern DLLIMPEXP bool
isEqual(const AcGePoint2dArray& pnts1,const AcGePoint2dArray& pnts2);
/*
* Purpose:
* 判断两对象所含数据是否相等(ChGeLoop2dArray)
* Argument:
* loops1 [in], loops 1.
* loops2 [in], loops 2.
* Return:
* 相等true,否则false.
*/
extern DLLIMPEXP bool
isEqual(const ChGeLoop2dArray& loops1,const ChGeLoop2dArray& loops2);
/*
* Purpose:
* 将曲面上点数组转换为参数数组.
* Argument:
* surf [in], 曲面.
* pnts [in], 曲面上点数组.
* params [out], 参数数组.
* Return:
* 成功true,曲面和点数组空false.
*/
extern DLLIMPEXP bool
getParamsFromPnts(const AcGeNurbSurface& surf,const AcGePoint3dArray& pnts,AcGePoint2dArray& params);
/*
* Purpose:
* 将曲面上参数数组转换为点数组.
* Argument:
* surf [in], 曲面.
* params [in], 参数数组.
* pnts [out], 曲面上点数组.
* Return:
* 成功true,曲面和参数数组空false.
*/
extern DLLIMPEXP bool
getPntsFromParams(const AcGeNurbSurface& surf,const AcGePoint2dArray& params,AcGePoint3dArray& pnts);
/*
* Purpose:
* 生成由(x1,x2)和(y1,y2)指定区域的外轮廓.
* Argument:
* intrvX [in], (x1,x2).
* intrvY [in], (y1,y2).
* loop [out], 外轮廓.
* nX [in], 轮廓x方向边分段数.
* nY [in], 轮廓y方向边分段数.
* Return:
* 成功true,输入参数错误返回false.
*/
extern DLLIMPEXP bool
getLoopFromIntervalXY(const AcGeInterval& intrvX, const AcGeInterval& intrvY,ChGeLoop2d& loop, int nX=1, int nY=1);
/*
* Purpose:
* 将曲面上点数组的数组转换为参数数组的数组.
* Argument:
* surf [in], 曲面.
* pntsArr [in], 曲面上点数组的数组.
* paramsArr [out], 参数数组的数组.
* bLoop [in[, 输入的参数数组是否构成Loop
* Return:
* 成功true,曲面或点数组的数组空false.
*/
extern DLLIMPEXP bool
getParamsArrayFromPntsArray(const AcGeNurbSurface& surf,const ChGePnts3dArray& pntsArr,ChGePnts2dArray& paramsArr, bool bLoop=false);
/*
* Purpose:
* 将曲面上参数数组的数组转换为点数组的数组.
* Argument:
* surf [in], 曲面.
* paramsArr [in], 参数数组的数组.
* pntsArr [out], 曲面上点数组的数组.
* Return:
* 成功true,曲面或参数数组的数组空false.
*/
extern DLLIMPEXP bool
getPntsArrayFromParamsArray(const AcGeNurbSurface& surf,const ChGePnts2dArray& paramsArr,ChGePnts3dArray& pntsArr);
/*
* Purpose:
* 判断点是在曲线的靠近开始端还是结尾端.
* Argument:
* curve [in], 曲线.
* dirPnt [in], 点.
* Return:
* true开始端,false结尾端.
*/
extern DLLIMPEXP bool
isHead(const AcGePoint3dArray& curve, const AcGePoint3d& dirPnt);
/*
* Purpose:
* 得到轮廓的形心和面积.
* Argument:
* loop [in], 轮廓.
* center [out], 形心.
* area [out], 面积.
* Return:
* true成功,false失败.
*/
extern DLLIMPEXP bool
evalShapeCenterAndArea(const ChGeLoop2d& loop, AcGePoint2d& center, double& area);
/*
* Purpose:
* 得到轮廓的形心和面积.
* Argument:
* vertexs [in], 轮廓顶点,按逆时针或顺时针排列.
* center [out], 形心.
* area [out], 面积.
* Return:
* true成功,false失败.
*/
extern DLLIMPEXP bool
evalShapeCenterAndArea(const AcGePoint2dArray& vertexs, AcGePoint2d& center, double& area);
/*
* Purpose:
* 图形是否以某条线为轴对称.
* Argument:
* vertexs [in], 图形顶点.
* line [in], 轴线.
* Return:
* true对称,false顶点数小于2或者不对称.
*/
extern DLLIMPEXP bool
isAxialSymmetric(const AcGePoint2dArray& vertexs, const AcGeLine2d& line);
/*
* Purpose:
* 获取曲面基面.
* Argument:
* pSurf [in], 曲面对象指针.
* baseSurf [out], 曲面基面.
* pbIsSame [out], 曲面方向是否与基面相同,if=NULL不返回.
* Return:
* eOk成功.
*/
extern DLLIMPEXP Acad::ErrorStatus
getBaseSurface(AcDbEntity* pSurf,
AcGeNurbSurface& baseSurf,
Adesk::Boolean* pbIsSame=NULL);
/*
* Purpose:
* 获取曲面基面和Loops.
* Argument:
* pSurf [in], 曲面对象指针.
* baseSurf [out], 曲面基面.
* loops [out], 曲面Loops.
* pbIsSame [out], 曲面方向是否与基面相同,if=NULL不返回.
* Return:
* eOk成功.
*/
extern DLLIMPEXP Acad::ErrorStatus
getBaseSurfaceAndLoops(AcDbEntity* pSurf,
AcGeNurbSurface& baseSurf,
ChGeLoop3dArray& loops,
Adesk::Boolean* pbIsSame=NULL);
/*
* Purpose:
* 用曲线来剪切Loop. 只适合于曲线与Loop交点数为2或没有交点的情况.
* Argument:
* loop [in], Loop.
* curve [in], 曲线点数组.
* retLoop [out], 返回得Loop.
* bTrimRight [in], 剪切方向,缺省为剪切曲线右手边.
* bAntiClock [in], Loop是否逆时针.
* Return:
* eOk成功, 部分被剪切.
* 其他, 未被剪切, 或不能处理.
*/
extern DLLIMPEXP Acad::ErrorStatus
trimLoopByCurve(const ChGeLoop2d& loop,
const ChGePnts2dArray& curve,
ChGeLoop2d& retLoop,
Adesk::Boolean bTrimRight=true,
Adesk::Boolean bAntiClock=true);
/*
* Purpose:
* 用Loop来剪切曲线. 只适合于曲线与Loop交点数小于3的情况.
* Argument:
* curve [in], 曲线点数组.
* loop [in], Loop.
* retCurve [out], 返回的曲线点.
* Return:
* eOk成功, 全部或部分被剪切.
* eNotHandled, 曲线与Loop交点数大于2,
* 或者为0时retCurve的长度不为0,即未被剪切.
*/
extern DLLIMPEXP Acad::ErrorStatus
trimCurveByLoop(const ChGePnts2dArray& curve,
const ChGeLoop2d& loop,
ChGePnts2dArray& retCurve);
#endif // GE_UTILITIES_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -