ADN Club > ObjectARX

Разделение кривых

(1/4) > >>

Kruvcraft:
Есть точки пересечения с определенной линией, хочется по этой точке разрезать объект, но после добавления сегментов в базуданных происходит зависание AutoCAD. Непонятно в чем проблема. Сообщения автокад не показывает.
(pEntity может быть полилинией или кругом)

--- Код - C++ [Выбрать] ---if (line->intersectWith(pEntity, AcDb::kOnBothOperands, arrPoint) == Acad::eOk && arrPoint.length() > 0){        AcDbVoidPtrArray segments;        AcGeDoubleArray pointsDist{ 0 };        AcDbCurve* curve = AcDbCurve::cast(pEntity);        for (auto& point : arrPoint)        {                AcGePoint3d p;                curve->getClosestPointTo(point, p);                double dist{ 0 };                curve->getParamAtPoint(p, dist);                pointsDist.append(dist);                acutPrintf(_T("point dist %lf\n"), dist);        }        std::sort(pointsDist.begin(), pointsDist.end());                                        if (curve->getSplitCurves(pointsDist, segments) == Acad::eOk)        {                acutPrintf(_T("len segments %d\n"), segments.length());                for (int i{0}; i < segments.length(); i++)                {                        AcDbEntity* seg = AcDbEntity::cast(static_cast<AcDbObject*>(segments[i]));                        pBlockTableRecord->appendAcDbEntity(seg);                        seg->close();                }        }                               } 

Александр Ривилис:
А если вместо:

--- Код - C++ [Выбрать] ---AcDbEntity* seg = AcDbEntity::cast(static_cast<AcDbObject*>(segments[i]));написать:

--- Код - C++ [Выбрать] ---AcDbCurve* seg = static_cast<AcDbCurve*>(segments[i]);Ну и заодно проверяй результат:
pBlockTableRecord->appendAcDbEntity(seg);

Kruvcraft:
Простите за бесопокойство и за долгий ответ.
Проблема оказалась, что в это время я, с помощью итераторов, ходил по таблице. И получилось так, что я бесконечно добавлял объекты на черчеж.

Kruvcraft:
Еще вопрос появился.
intersectWith не выдает точки пересечения если line и pEntity находятся на разных уровнях.
При этом pEntity это AcDbLine. И Уровень у начальной точки 0.2, а у конечной 110.
Есть вариант как-то получить точки пересечения в таком случае ?

Александр Ривилис:
Используй этот перегружённый метод intersectWith: https://help.autodesk.com/view/OARX/2023/ENU/?guid=OARX-RefGuide-AcDbEntity__intersectWith_AcDbEntity__AcDb__Intersect_AcGePlane__AcGePoint3dArray__Adesk__GsMarker_Adesk__GsMarker_const

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии