getSplitCurves方法
我正在使用getSplitCurves()方法来破坏AcDbCurve对象,并且所有对象都工作正常,除了使用PEDIT命令转换为样条选项的折线(当您使用该选项时,它们会变成重键)当我选择该类型的对象时,我的调试解决方案崩溃,但是如果我将其转换为SPLINE,getSplitCurves()工作得很好, 我必须做些什么来避免这种情况。
我很确定我有点(用于参数),它们排序正确,等等.
BTW,即使在我读到的状态错误变量中,也返回eOk枚举....
这是我的一部分代码:
if (pts.isEmpty()) return;
es = pPoly->getSplitCurves(pts,curveSegments);
if (es != Acad::eOk) return;
AcDbObjectId curSpaceId = acdbCurDwg()->currentSpaceId();
for (int i=0; ipEnt(objId,AcDb::kForRead);
if (pEnt.openStatus() == Acad::eOk)
{
es = pPoly->intersectWith(pEnt.object(),AcDb::kOnBothOperands,ints);
if (es == Acad::eOk)
{
if (!ints.isEmpty()) {
我注意到问题只存在于与样条拟合的AcDb2dPolyline上,所以我将尝试在进行拆分之前将它们转换为lwpolyline。 是否有人实现了任何中断函数,而不使用命令中断,即使在C#或任何其他语言或方式/形式中也是如此? 或者遇到与我相同的问题?
或者通常我问这个罕见的问题?
好吧,必须多学一点。
谢谢。 路易斯,
我找不到这个问题在我不能在这里提到的其他地方提出..... 我也没有收到他们的回复。
没问题,杰夫;
我现在陷入了从 k2dCubicSplinePoly 类型的AcDb2dPolyline 到AcDbPolyline的转换中,这似乎是唯一的方法(至少从我自己的角度来看)
现在,如果你在网上搜索,关于这种方法的信息非常非常少.....
再次感谢! 我打算在adesk objectarx里问一下,看看高手们是否知道。 我没有尝试,但你可以从这条曲线(AcDbCurve::getSpline)中获取样条并尝试使用它进行操作。 谢谢你,亚历山大
是的,我按照您的建议做了,但仍然不走运,返回了这个错误=eGeneralModelingFailure:
这是代码的一部分,我在其中进行了修改。为了运行测试,我的代码中有一个switch语句。
if (pPoly->isKindOf(AcDb2dPolyline::desc()))
{
AcDb2dPolyline *tmp2dPoly = AcDb2dPolyline::cast((AcRxObject*)pPoly.object());
switch (tmp2dPoly->polyType()) {
case AcDb::k2dCubicSplinePoly:
acutPrintf(_T("\nPolylineType = k2dCubicSplinePoly"));
AcDbSpline* spline;
pPoly->getSpline(spline);
es = spline->getSplitCurves(pts,curveSegments);
if (es == Acad::eOk)
{
AcDbObjectId curSpaceId = acdbCurDwg()->currentSpaceId();
for (int i=0; i (curveSegments);
if (tmpCurve) {
AcDbBlockTableRecord *pBlkRec = NULL;
if (acdbOpenObject(pBlkRec,curSpaceId,AcDb::kForWrite) == Acad::eOk)
{
pBlkRec->appendAcDbEntity(tmpCurve);
pBlkRec->close();
tmpCurve->close();
}
}
}
curveSegments.setLogicalLength(0);
} else {
acutPrintf("\nERROR=%s", acadErrorStatusText(es));
for (int i = 0; i (curveSegments);
delete tmpCurve;
}
curveSegments.setLogicalLength(0);
}
break;
仍然无法让它工作,因为现在我有一个AcDb::k2dCubicSplinePoly
类型的折线过滤器,我已经尝试过使用转换器()方法,但正如我所说的那样没有工作......有人能告诉我我做错了什么吗?...这是我的代码的一部分,我试图获得一个临时AcDbPolyline,在我看来,代码是正确的,但正常情况下可能不是。
谢谢你。
路易斯。
if (pPoly->isKindOf(AcDb2dPolyline::desc()))
{
AcDb2dPolyline *tmp2dPoly = AcDb2dPolyline::cast((AcRxObject*)pPoly.object());
if (tmp2dPoly->polyType() == AcDb::k2dCubicSplinePoly)
{
AcDbPolyline *varPoly = new AcDbPolyline();
varPoly->convertFrom((AcDbEntity *&)tmp2dPoly,Adesk::kFalse);
acdbOpenObject(varPoly, varPoly->objectId(), AcDb::kForWrite);
if (varPoly->getSplitCurves(pts,curveSegments) == Acad::eOk)
{
AcDbObjectId curSpaceId = acdbCurDwg()->currentSpaceId();
for (int i=0; i appendAcDbEntity(pPline);
pBlkRec->close();
pPline->close();
}
}
}
varPoly->close();
delete varPoly;
}
}
我明白了为什么……我应该更仔细地阅读帮助函数。
“
这将用来自pEnt指向的AcDb2dPolyline的数据填充AcDbPolyline。pEnt必须指向数据
基中ACDB2DPPolyline对象的k2dSimplePoly或k2dFitCurvePoly类型”
意味着convertFrom()不适用于K2Dcubicsplyline类型。…hmmmmm
页:
[1]