ADN Club > ObjectARX
Разделение кривых
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
Навигация
Перейти к полной версии