Тема: Пересечение линий и VBA

Как определить пересекаются ли линии или нет и найти точку пересечения

Re: Пересечение линий и VBA

Можно решить геометрическую задачу пересечения двух отрезков, проходящих через две пары точек (х1,у1), (х2,у2) и (х3,у3), (х4,у4). В результате получится два уравнения с двумя неизвестными (х и у). Потом эти уравнения решить как совместную систему. Если данная система имеет действительные корни (х=а1, у=а2), то эти (а1,а2) и будут являться координатами точки пересечения. В противном случае - эти линии параллельны. В общем виде можно написать соответствующую lisp-программу с двумя уравнениями нахождения координат а1 и а2.

Re: Пересечение линий и VBA

IntersectWith

Re: Пересечение линий и VBA

IntersectWith - это конечно хорошо и правильно. Я несколько неточно сформулировал задачу.
Необходимо найти все объекты, пересекающиеся с выбранной линией. Я использовал метод GetBoundingBox, но что-то
уж больно сложная процедурища получается. Может кто что попроще предложить может.
  И насчет решения системы  2х уравнений: его можно опять же применить к 2м обектам, а меня только один, а остальные надо найти.

Re: Пересечение линий и VBA

1) Для линии есть прямоугольник (x1,y1 - x2,y2)
2) Есть такая функция acedGetSS которая при некоторых опциях возвращает объекты внутри прямоугольника и пересекающихся с прямоугольником. Для п.1 box найди такие объекты.
3) Для каждого объекта сделай IntersectWith c линией.

Re: Пересечение линий и VBA

acedGetSS - это в ARX
поищи что-нибудь похожее в VBA.
Ищи "Selection set"

Re: Пересечение линий и VBA

Есть функции на ЛИСП (по формулам аналитической геометрии), решающие эту задачу.
Пиши

Re: Пересечение линий и VBA

Если нужен код в Lisp то есть функция :
(inters  []) 
определение точки пересечения двух отрезков, проходящих через точи t1,t2 и t3,t4. Если  нет, то точка пересечения должна быть в пределах обоих отрезков, иначе отрезки воспринимаются как бесконечные прямые
_$ (inters '(1 1) '(5 5) '(1 5) '(5 1))
(3.0 3.0)
_$
осталось только определить координаты точет на прямых :))

Re: Пересечение линий и VBA

чавойто глюкануло!!!
(inters T1 T2 T3 T4 n)
если n нет, то.....
Все описано : проекитирование в Auto Lisp основы програмирования  Кудрявцев Е.М.

Re: Пересечение линий и VBA

Для VBA не берусь подсказать, но думаю что-то похожее есть. Необходимо создать набор из примитивов, пересекающихся с данной линией ,в Лиспе (ssget "_F"...). Просмотреть каждый примитив набора и найти точку пересечения  IntersectWith  линии с каждым примитивом набора. Если примитив - линия, можно использовать и inters, но IntersectWith - более рационально.

Re: Пересечение линий и VBA

Finds the intersection of two lines

(inters pt1 pt2 pt3 pt4 [onseg])

All points are expressed in terms of the current UCS.
If all four point arguments are 3D, inters checks for 3D intersection.
If any of the points are 2D, inters projects the lines onto the current
construction plane and checks only for 2D intersection.
Arguments
  pt1    - One endpoint of the first line.
  pt2    - The other endpoint of the first line.
  pt3    - One endpoint of the second line.
  pt4    - The other endpoint of the second line.
  onseg  - If specified as nil, the lines defined by the four pt arguments
           are considered infinite in length. If the onseg argument is omitted or is not nil,
           the intersection point must lie on both lines or inters returns nil.

Return Values

If the onseg argument is present and is nil, inters returns the point where the lines intersect,
even if that point is off the end of one or both of the lines.
If the onseg argument is omitted or is not nil, the intersection point must lie on both lines or
inters returns nil. The inters function returns nil if the two lines do not intersect.

Examples
(setq a '(1.0 1.0) b '(9.0 9.0))
(setq c '(4.0 1.0) d '(4.0 2.0))

Command: (inters a b c d)
nil
Command: (inters a b c d)
nil
Command: (inters a b c d nil)
(4.0 4.0)

Re: Пересечение линий и VBA

Загляни на http://www.cad.dp.ua/stats/a_vba/