非常感谢oyxx1023 ,这个也是我一直想要的,在工作中确实很好用,我在你的基础上补上了画中心线的功能,画中心线的代码也是移植论坛上的一个LSP代码中的一部分,我只是将两者有机结合,希望能与LZ分享。 (defun c:test() (setvar "osmode" 0) (command "layer" "set" 1 "") (if (setq ent (car (entsel "\nselect object:"))) (progn (setq obj (vlax-ename->vla-object ent)) (vla-GetBoundingBox obj 'pta 'ptb) (vl-cmdf ".rectangle" (vlax-safearray->list pta) (vlax-safearray->list ptb) ) ) ) (vl-load-com) (setq ent0 (entlast)) (setq ent1 (entget ent0)) (setq name (cdr (assoc 0 ent1))) (setq os (getvar "osmode")) (setq cmd (getvar "CMDECHO")) (setvar "cmdecho" 0) (setvar "OSMODE" 0) ;;;所选物体是矩形 (setq obj (vlax-Ename->Vla-Object ent0)) (setq point (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates obj)) ) ) (if (= (length point) 8) (progn
(setq p1 (list (nth 0 point) (nth 1 point)) p2 (list (nth 2 point) (nth 3 point)) p3 (list (nth 4 point) (nth 5 point)) p4 (list (nth 6 point) (nth 7 point)) ) (setq center-point (mapcar '(lambda (a b) (/ (+ a b) 2)) p1 p3 ) ang1 (angle p1 p2) ang2 (angle p1 p4) d1 (distance p1 p2) d2 (distance p1 p4) ) (setq point10 (polar center-point ang1 (+ (* d1 0.5) 5.0)) point11 (polar center-point (+ ang1 pi) (+ (* d1 0.5) 5.0) ) point20 (polar center-point ang2 (+ (* d2 0.5) 5.0)) point21 (polar center-point (+ ang2 pi) (+ (* d2 0.5) 5.0) ) ) (command "LINE" point10 point11 "") (command "LINE" point20 point21 "") ) )
(setvar "OSMODE" os) (setvar "cmdecho" cmd) (princ) )
|