(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)
)
我的程序的目的是选择直线上的某一点,在该点上插入一个图块(这里为了代码在别的机器上兼容,改为写一行文字,道理是一样的),图块的角度按照直线的斜率。
当对象是直线或者多段线的情况,我已经解决了,但当对象是在块中的某一直线的话,我现在用了一个笨办法,通过再输入一个点来获得。
我希望能够减少这个多出来的输入,工作中对于大量的操作来说,每次减少一次操作是很有意义的,希望高手指正 版大,我的问题还没完全解决呢
既然是点取,用nentsel就可以了,干嘛非用ssget?
页:
1
[2]