Тема: пересечение AcDbFace и AcDbCurve

Вот точно знаю, что пересечение есть (внутри фэйса перпендикулюрно ему идет 3d полилиния). Его(пересечение) даже видно :)
intersectWith проходит нормально, вот только точек пересечения нет :cry:

И как мне это побороть?

Re: пересечение AcDbFace и AcDbCurve

И ты думаешь что пересечения должны быть? smile AcDbFace рассматривается как незаполненный контур. Т.е. пересечение только с границей. IMHO.

Re: пересечение AcDbFace и AcDbCurve

понятно :(
что ж оно все так через Ж... в автокаде работает.
я так понимаю, что сеть - это тоже только контур, и нет смысла вообще преобразовывать фэйс во что бы то ни было?
как всегда спасет только чистая математика? :):):)

(изменено: VH , 16 сентября 2009г. 09:59:32)

Re: пересечение AcDbFace и AcDbCurve

Однако объект AcDbFace может <в общем случае> быть неплоским, геометрическое ограничение - только на линейность кромок. Каким же образом определять точку пересечения AcDbCurve с неизвестно как расположенной поверхностью? По всей видимости, Autodeskи правы в непредоставлении средства нахождения таких пересечений. Сам AutoCAD произвольно делит четырехугольную Грань на две треугольных и изображает пересечение в чисто «иллюстративных» целях.

Re: пересечение AcDbFace и AcDbCurve

ну как мне это видится, то через любые три точки можно привести плоскость, а по intersectWith должна вычисляться кроме пересечений с кромками еще и пересечение с двумя плоскостями, так как точки четыре (ведь решение задачи на пересечение отрезка и плоскости не так уж и сложно сделать :):):)), но в автодеске решили что это будет сильно круто, и не стали с этим заморачиваться вообще.

PS: это я могу отнести к своему немаленькому списку глюков и недоработок ObjectARX, которые приходится дописывать за них. А через 2-3 акада они добавляют свою аналогичную возможность и тыкают носом в договор официальных разработчиков, мол убирайте, нас дублировать нельзя.

(изменено: VH , 16 сентября 2009г. 10:44:56)

Re: пересечение AcDbFace и AcDbCurve

Еще раз:
Поверхность, задаваемая четырьмя линейными кромками, в общем случае неплоская (и даже не линейчатая) - в Autodeskе это понимают (вероятно, не понимающих это туда на работу не берут).
Разумеется, «...решение задачи на пересечение отрезка и плоскости не так уж и сложно сделать...», только плоскости там вообще нет, так что это не один из «...глюков и недоработок...», а хорошее знание геометрии.
PS. Если изготовить из куска проволоки рамку с четырьмя прямолинейными частями и опустить ее в мыльный раствор, то мыльная пленка образует в рамке поверхность минимальной площади - но мы и этого предположения о виде поверхности не имеем права сделать.

Re: пересечение AcDbFace и AcDbCurve

... только плоскости там вообще нет ...

а вот тут позвольте не согласиться. у нас есть 4 точки. Еще из школы знаю :), что плоскость можно сделать по трем точкам. Зная особенность фэйса (первая плоскость: точки 1,2,3; вторая плоскость: точки 2,3,4) можно получить 2 независимые плоскости. Далее любая 3d полилиния состоит из узловых точек. Две соседние точки - отрезок.
Все исходные данные есть. Теперь после учета пересечения кромок можно еще найти точки пересечения непосредственно с плоскостями, ограниченными тремя точками. В акаде даже есть такой класс AcGeBoundedPlane. Вот только связать все до кучи у них мозгов не хватает.

По поводу PS.
Удивился сильно. И кто Вам сказал, что треугольники у фэйса выпуклые и не лежат каждый в своей плоскости. Вот если б речь шла о AcDbSurface, я б согласился.

Re: пересечение AcDbFace и AcDbCurve

Николай пишет:

Удивился сильно. И кто Вам сказал, что треугольники у фэйса выпуклые и не лежат каждый в своей плоскости. Вот если б речь шла о AcDbSurface, я б согласился.

Какие они в AutoCAD'е известно только разработчикам.

Re: пересечение AcDbFace и AcDbCurve

:) Александр, вот еще ни разу не видел фэйса, который бы обтекал угол в пространстве, не двумя плоскостями, а как-то с загзакруглением по нормали

Re: пересечение AcDbFace и AcDbCurve

> Николай
Вы исходите из неверной предпосылки, что Грань(AcDbFace), у которой четыре определяющие точки НЕ лежат в одной плоскости, состоит из (представлена) двумя «<плоскостями>-треугольниками».
Вид поверхности «внутри» Грани не определен - поэтому и средство находить точки пересечения с этой неопределенной поверхностью не предоставляется.

Re: пересечение AcDbFace и AcDbCurve

Эксперимент показал, что «в иллюстративных целях» Грань «делится» 1-2-4 и 2-3-4.

Re: пересечение AcDbFace и AcDbCurve

VH , про порядок точек я образно сказал.
а закругления на стороне смыкания граней есть?
если нет, так значит точки 1,2,4 лежат в одной плоскости, а точки 2,3,4 в другой и я все-таки прав? :):):)