Тема: Рабочая отметка. Разница между двумя поверхностями.

Доброе время суток.
Помогите с задачкой на лиспе
Имеем две поверхности (3d face, все поверхности у меня выполнены именно такими треугольниками), одна над другой. Необходимо узнать расстояние в конкретной заданнйо точке (рабочая отметка). Тоесть алгоритм примерно следущий
1. укажите первую поверхность
2. укажите вторую поверхность
3. укажите точку
и получаем подпись рабочей отметки
для начала хотя бы так такая задачка, в перспективе можно например добавить
- отметка первой поверхности
- отметка второй воверхности
- место записи отметок
- угол отметок
- подпись всех точек на пересечении объектов
Если не сложно то помогите, в самом написании я понимаю крайне мало(
спасибо

Re: Рабочая отметка. Разница между двумя поверхностями.

Сергей К пишет:

Доброе время суток.
Помогите с задачкой на лиспе
Имеем две поверхности (3d face, все поверхности у меня выполнены именно такими треугольниками), одна над другой. Необходимо узнать расстояние в конкретной заданнйо точке (рабочая отметка). Тоесть алгоритм примерно следущий
1. укажите первую поверхность
2. укажите вторую поверхность
3. укажите точку
и получаем подпись рабочей отметки
для начала хотя бы так такая задачка, в перспективе можно например добавить
- отметка первой поверхности
- отметка второй воверхности
- место записи отметок
- угол отметок
- подпись всех точек на пересечении объектов
Если не сложно то помогите, в самом написании я понимаю крайне мало(
спасибо

Попробуй так (в мировой системе координат):

(defun C:demo  (/ coords elist en1 en2 ent1 ent2 int_point p1 p2 p3 p4 p5)
  (setq p1 (getpoint "\nPick point on the upper surface: "))
  (setq    ent1 (entsel "\nSelect a bottom surface >>")
    en1  (car ent1)
    )
  (setq    p2 (list (car p1) (cadr p1) (+ (caddr p1) 100000));<-dummy value
    )
  (setq elist (entget en1)
    )
  (setq    coords
     (vl-remove-if
       (function not)
       (mapcar (function (lambda (x)
                   (if (member (car x)
                       (list 10 11 12 13))
                 (cdr x))))
           elist
           )
       )
    )
  (setq    p3 (car coords)
    p4 (cadr coords)
    p5 (caddr coords)
    )

  (if (not cal)
    
    (arxload "geomcal.arx"))
  
  (setq int_point (cal "ilp(p1,p2,p3,p4,p5)"))
  
  ;;test:
  (command "._line" "_non" p1 "_non" int_point "")

  (princ)

  )

~'J'~

Re: Рабочая отметка. Разница между двумя поверхностями.

Спасибо, вроде как получается, строится отрезок, только надо вытащить в текст значение параметра дельта Z и добавить точку  на вершине отрезка. :)