我前阵子从李那里得到了这个代码,它工作得很好,但我需要做一些调整,我不知道怎么做。我可以理解代码,但修改它对我来说是一项艰巨的任务。我所需要的是:如果块名为“Block1”,将线放在“Layer1”的层上,“Block2”到“Layer2”层上。
再次感谢。
- ;;;by lee-mac ;;nearest point on a line
- (defun c:test ( / d1 d2 el en in l1 l2 p2 p3 ss )
- (if (setq ss (ssget '((0 . "INSERT,LINE"))))
- (progn
- (repeat (setq in (sslength ss))
- (setq en (ssname ss (setq in (1- in)))
- el (entget en)
- )
- (if (eq "LINE" (cdr (assoc 0 el)))
- (setq l1 (cons en l1))
- (setq l2 (cons (trans (cdr (assoc 10 el)) en 0) l2))
- )
- )
- (foreach p1 l2
- (setq p2 (vlax-curve-getclosestpointto (car l1) p1)
- d1 (distance p1 p2)
- )
- (foreach en (cdr l1)
- (setq p3 (vlax-curve-getclosestpointto en p1)
- d2 (distance p1 p3)
- )
- (if (< d2 d1) (setq d1 d2 p2 p3))
- )
- (entmake (list '(0 . "LINE") (cons 10 p1) (cons 11 p2)))
- )
- )
- )
- (princ)
- )
- (vl-load-com) (princ)
|