 - (defun c:rb(/ oldos #98 btype p0 p01 p1 pt1 pt2 pt3 pt param1 param2 ent)
- (setvar "cmdecho" 0)
- (command "undo" "c" "")
- (command "undo" "be")
- (setq oldos (getvar "osmode"))
- (setvar "osmode" 512)
- (setq p0 (getpoint "\n 点取线上插入点..."))
- (setq p01 (list (+ (nth 0 p0) 10) (+ (nth 1 p0) 10)))
- (setvar "osmode" 0)
- (SETQ #98 (SSGET "c" p0 p01))
- (setq #98 (entget (ssname #98 0)))
- (SETQ btype(CDR (ASSOC 0 #98)))
- (if (= btype "LINE")
- (SETQ pt1(CDR (ASSOC 10 #98))
- pt2(CDR (ASSOC 11 #98)))
- )
- (if (= btype "LWPOLYLINE")
- (setq ent (CDR (ASSOC -1 #98))
- pt (vlax-curve-getclosestpointto ent p0)
- param1 (fix (vlax-curve-getparamatpoint ent pt))
- param2 (1+ param1)
- pt1 (vlax-curve-getpointatparam ent param1)
- pt2 (vlax-curve-getpointatparam ent param2))
- )
- (if (and (/= btype "LINE") (/= btype "LWPOLYLINE"))
- (progn
- (setvar "osmode" 512)
- (alert "对不起,请再选择所在墙面上任一点!")
- (setq pt3 (getpoint "\n 选择所在墙面上任一点..."))
- (SETQ pt1 p0
- pt2 pt3 )
- );end-progn
- )
- (setq AN (ANGLE pt2 pt1))
- (SETQ AN (ANGTOS AN 0 2))
- ;(COMMAND "INSERT" "gy" P0 "1" "1" an)
- (command "text" "s" "standard" "c" p0 400 an "123")
- (setvar "osmode" oldos)
- (command "ucs" "")
- (command "undo" "e")
- (setvar "cmdecho" 1)
- (princ)
- )
我的程序的目的是选择直线上的某一点,在该点上插入一个图块(这里为了代码在别的机器上兼容,改为写一行文字,道理是一样的),图块的角度按照直线的斜率。
当对象是直线或者多段线的情况,我已经解决了,但当对象是在块中的某一直线的话,我现在用了一个笨办法,通过再输入一个点来获得。
我希望能够减少这个多出来的输入,工作中对于大量的操作来说,每次减少一次操作是很有意义的,希望高手指正 |