本帖最后由 作者 于 2009-12-22 21:42:43 编辑
编写了一个动态绘制垂直平分线的程序,请各位朋友试用 - ;;;;动态绘制垂直平分线
- ;;;by:lihuili 2009-12-20
- ;;;Dynamic drawing a line to another line perpendicular bisector
- (defun Perp_bisector_line (/ ent en pt enname
- p1 p2 ang ptemp1 p0 pt1
- sp source ptemp ptemp1 ptemp2 ptemp3
- pt1 pt2 pt3 loop
- )
- (setvar "cmdecho" 0)
- (if (and (setq ent (car (entsel "\n选择一条直线.")))
- (= (cdr (assoc 0 (setq en (entget ent)))) "LINE")
- )
- (progn
- (redraw ent 3)
- (setq p1 (trans (cdr (assoc 10 en)) 0 1)
- p2 (trans (cdr (assoc 11 en)) 0 1)
- ang (angle p1 p2)
- )
- (setq p0 (polar p1 ang (* 0.5 (distance p1 p2)))
- lineobj (vla-addLine
- (vla-get-ModelSpace
- (vla-get-ActiveDocument (vlax-get-acad-object))
- )
- (vlax-3d-point p0)
- (vlax-3d-point p0)
- )
- )
- (setq ptemp1 (polar p0 (+ ang (* 0.5 pi)) 10))
- (prompt "\n选择另一端点位置:")
- (setq loop t
- ptemp p0
- pt1 p0
- )
- (while loop
- (setq sp (grread t))
- (setq source (car sp)
- sp (cadr sp)
- )
- (cond ((= source 5)
- (setq ptemp sp)
- (setq ptemp2 (polar sp 0 10)
- ptemp3 (polar sp (* 0.5 pi) 10)
- )
- (setq pt2 (inters p0 ptemp1 sp ptemp2 nil))
- (setq pt3 (inters p0 ptemp1 sp ptemp3 nil))
- (cond ((null pt2) (setq pt1 pt3))
- ((null pt3) (setq pt1 pt2))
- (t
- (if (< (distance sp pt2) (distance sp pt3))
- (setq pt1 pt2)
- (setq pt1 pt3)
- )
- )
- )
- (vla-put-EndPoint lineobj (vlax-3d-point pt1))
- )
- (t (setq loop nil))
- )
- )
-
- (redraw ent 4)
- )
- (prompt "\n选择的不是直线!")
- )
- (princ)
- )
- (defun c:test ()
- (vl-load-com)
- (Perp_bisector_line)
- )
|