Тема: Пересечение объектов в UCS и ECS
Может мне кто - нибудь объяснит как реализовать обрезание объектов подобно команде trim с опциями Project
Описание нахождения точек пересечения
UCS. Задается по умолчанию. Объекты проецируются на плоскость XY текущей ПСК. Поэтому если координаты двух линий по оси Z отличны, то одну из них можно обрезать и продолжить до другой линии, несмотря на то, что они в действительности не пересекаются.
View. Объекты проецируется параллельно текущему виду и подрезаются или продолжаются в соответствии с тем, как они выглядят на экране. Они не обязательно должны пересекаться на экране.
Я программирую на библиотеке DWGDirect, которая очень похожа на ObjectArx
Пока я хочу реализовать это только для объектов:
-линий
-дуг
-окружности
-полилинии
-эллипсы
Найти точки пересечения в 3d пространстве могу.
Посмотрев help по ObjectArx в DWGDirect примерно тоже самое
Матрица для преобразования к eye
getWorldToEyeTransform(matrixW2E)
Матрица для преобразования к ucs
AcDbUCSTableRecord *pUCS;
AcGePoint3d origin = pUCS->origin();
AcGeVector3d xDirection = pUCS->xAxis(),
yDirection = pUCS->yAxis(),
zDirection = xDirection.crossProduct(yDirection);
pUCS->close();
AcGeMatrix3d matrix;
matrix.setCoordSystem(origin, xDirection, yDirection, zDirection);
Я думаю что нужно выполнить следующую последовательноть действий для решения задачи:
1 Преобразовать объекты через ручки редактирования к одной из координатных систем например к UCS (а для View это будет ECS), то есть каждую ручку которая есть AcGePoint3d(в ObjectArx) преобразовать через transformBy(соотв матрица) к соотв системе координат. Или у сразу преобразовать AcDbEntity через transformBy(соотв матрица).
2 Преобразовать обратно фугуры из UCS или ECS в WCS.
Вопросы:
1 Как найти точки пересечения как написано в "Описание нахождения точек пересечения" средствами ObjectArx, мне нужно конечно для DWgDirect, но мне инетересно услышать идеи как это можно выполнить в ObjectArx и вообще было бы замечательно увидеть исходный код.
2 Правильно ли я описал последовательность действий для решения своей задачи?
3 Могут ли объекты лежать друг на друге но не пересекаться после преобразование в eye или ecs?