Re: Объём земляных работ
1. У объектов Автокада есть метод IntersectWith. С помощью его можно найти точку пересечения одного объекта с другим. Можно воспользоваться готовой функцией VxGetInters
2. Вряд ли у твоей полилинии будут дуговые сегменты, поэтому:
- полилинию можно проеставить как набор отрезков
- В dxf представлении 3Dface (группы 10 11 12) можно взять координаты вершин.
- с помошью Autolisp функции inters найти перечение граней с полилинией.
Меня как-то просили написать программку для обрисовки 3Dface отрезками. Это как небольшой пример
(DEFUN C:3DF_convert ( / e1 int:i ed pt10 pt11 pt12 clay model-space cd1 osm ) (setvar "CMDECHO" 0) (vl-load-com) (setq model-space (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object) ) ) ) ;;; (initget "Yes No") ;;; (setq e1 (getkword "\nПерерисовать 3DFACE отрезками [Yes/No]:")) (setq e1 "YES") (if (= (strcase e1) "YES") (progn (setq PICK1 nil PICK1 (ssget "_X" '((0 . "3DFACE"))) ) (setq int:i 0) (setq clay (getvar "CLAYER")) (command "_LAYER" "_M" "3DLine" "") (setq osm (getvar "OSMODE")) (while (and PICK1 (setq e1 (ssname PICK1 int:i))) (setq ed (entget e1)) (setq pt10 (vlax-3d-point (cdr(assoc 10 ed)))) (setq pt11 (vlax-3d-point (cdr(assoc 11 ed)))) (setq pt12 (vlax-3d-point (cdr(assoc 12 ed)))) (vla-AddLine model-space pt10 pt11) (vla-AddLine model-space pt11 pt12) (vla-AddLine model-space pt12 pt10) (setq int:i (1+ int:i)) (setq cd1 (* int:i 0.001)) (if (zerop (- cd1 (fix cd1)))(progn (princ "\r")(princ int:i))) ) (setvar "OSMODE" osm) ) ) (command "_LAYER" "_M" clay "") (setq PICK1 nil) (princ) )