Jeff_M 发表于 2006-6-14 17:18:00

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()) {

牵手春天 发表于 2006-6-14 17:44:28

我注意到问题只存在于与样条拟合的AcDb2dPolyline上,所以我将尝试在进行拆分之前将它们转换为lwpolyline。

阳泉志愿者 发表于 2006-6-14 17:56:51

是否有人实现了任何中断函数,而不使用命令中断,即使在C#或任何其他语言或方式/形式中也是如此? 或者遇到与我相同的问题?
或者通常我问这个罕见的问题?
好吧,必须多学一点。
谢谢。

叶根友 发表于 2006-6-14 18:00:31

路易斯,
我找不到这个问题在我不能在这里提到的其他地方提出..... 我也没有收到他们的回复。

紫灵梦雪 发表于 2006-6-14 18:08:39


没问题,杰夫;
我现在陷入了从 k2dCubicSplinePoly 类型的AcDb2dPolyline 到AcDbPolyline的转换中,这似乎是唯一的方法(至少从我自己的角度来看)
现在,如果你在网上搜索,关于这种方法的信息非常非常少.....
再次感谢!

kone 发表于 2006-6-14 18:13:10

我打算在adesk objectarx里问一下,看看高手们是否知道。

笔迷元老院 发表于 2006-6-15 11:54:52

我没有尝试,但你可以从这条曲线(AcDbCurve::getSpline)中获取样条并尝试使用它进行操作。

story100 发表于 2006-6-15 14:28:48

谢谢你,亚历山大
是的,我按照您的建议做了,但仍然不走运,返回了这个错误=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;

亦菲互动 发表于 2006-6-15 15:11:08

仍然无法让它工作,因为现在我有一个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;
        }
}

大学女生 发表于 2006-6-15 15:17:07

我明白了为什么……我应该更仔细地阅读帮助函数。

这将用来自pEnt指向的AcDb2dPolyline的数据填充AcDbPolyline。pEnt必须指向数据
基中ACDB2DPPolyline对象的k2dSimplePoly或k2dFitCurvePoly类型”
意味着convertFrom()不适用于K2Dcubicsplyline类型。…hmmmmm
页: [1]
查看完整版本: getSplitCurves方法