Попытался начать реализовывать задачу, начало выглядит примерно так: (обработчика ошибок нет пока, поэтому линия должна обязательно пересекать контур)
;;;Отрисовка "невидимых" линий
(defun c:visible (/ _clist points p1 p2 i lines quantity_points len)
(setq *old_osnap* (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq pline (car (entsel "\nУкажите полилинию контура: ")))
(setq p1 (getpoint "\nНачальная точка линии"))
(setq p2 (getpoint "\nКонечная точка линии"))
(vl-cmdf "_.line" p1 p2 "")
(setq liine (entlast))
(setq points (vlax-safearray->list
(vlax-variant-value
(vla-intersectwith
(vlax-ename->vla-object liine)
(vlax-ename->vla-object pline)
acextendnone
) ;_ vla-intersectwith
) ;_ vlax-variant-value
) ;_ vlax-safearray->list
) ;_ setq
(setq len (length points))
(setq quantity_points
(/ len 3)
i 1
) ;_ setq
(while (<= i quantity_points)
(repeat 3
(setq _clist (append _clist (list (car points))))
(setq points (cdr points))
) ;_ repeat
(set (read (strcat "p_i_" (itoa i))) _clist)
(setq _clist nil)
(setq i (1+ i))
) ;_ while
(setq i 1)
(setq lines 1)
(vl-cmdf "_erase" liine "" "")
(while (<= lines (/ quantity_points 2))
(vl-cmdf "_.line"
(eval (read (strcat "p_i_" (itoa i))))
(eval (read (strcat "p_i_" (itoa (1+ i)))))
""
) ;_ vl-cmdf
(setq lines (1+ lines))
(setq i (+ 2 i))
) ;_ while
(setvar "OSMODE" *old_osnap*)
) ;_ defun
Но в результате не всегда получается то, что требуется. Можете подсказать, в какой последовательности находятся точки пересечения функцией vla-intersectwith? Существует ли в этом какая-нибудь определенная закономерность? Т.е. иногда получается в результате все правильно, а иногда последовательность нахождения точек пересечения меняется.