(defun C:ROSNAP (/ tll tlle pt1 pt2 pt3)
(graphscr)
(setq tll (entsel "Select Object: "))
(if tll (setq tlle (car tll) pt2 nil pt1 (cadr tll) nme (cdr (assoc 0 (entget tlle)))))
(cond
((= nme "LINE")(setq pt2 (osnap pt1 "midp") pt3 (osnap pt1 "endp")))
((= nme "POLYLINE")(setq pt2 (osnap pt1 "midp") pt3 (osnap pt1 "endp")))
((= nme "LWPOLYLINE")(setq pt2 (osnap pt1 "midp") pt3 (osnap pt1 "endp")))
((= nme "ARC")(setq pt2 (osnap pt1 "endp") pt3 (osnap pt1 "cen")))
)
(if pt2 (setvar "snapang" (- (angle pt2 pt3)pi)))
(princ)
)
相关代码可能会对您有所帮助:
;| FIX CROSSHAIRS - toggles snap angle between zero & horizontal in twisted views
BY: TOM BEAUFORD
BeaufordT@LeonCountyFL.gov
LEON COUNTY PUBLIC WORKS ENGINEERING SECTION
ID_SnpAng ^P(if(not C:fix)(load "fix_hair"));'fix
==================================================================|;
(defun c:fix ()
(if(= (+ (getvar "snapang")(getvar "viewtwist")) (* 2 PI))
(setvar "snapang" 0.0)
(setvar "snapang" (- (getvar "viewtwist")))
)
(princ)
)
添加新的几何中心捕捉选项可能会使LISP中使用的Osmode值无效。
他的原始代码存储了osmode和snapmode值,以在代码末尾重置它们。奇怪的是,代码从来没有修改过任何一个,所以我从发布的修改版本中删除了它们。我没有安装2016,所以我认为设置snapang值而不是命令调用可以解决问题。
不过,谢谢你的提醒,当我到2016年的时候,我将不得不检查我所有的代码以获取对osmode的引用。位代码1024已从“清除所有对象捕捉”更改为“几何中心”。目前我检查的是位码16384,以查看OSNAP是否打开,2016年我可以假设它将是32768吗?
我不能因为这个代码而受到赞扬。这是几年前写的,在我99年开始在这里工作之前。
老实说,我不确定他们是否工作过。这个Lisp程序是在我99年开始在这里工作之前很久写的。
它在2015年为一条生产线工作。LWPOLYLINE早在1997年就在r14中引入。因为它们没有在代码中解决,而且“R”捕捉选项从那时起就没有在帮助中列出,所以代码非常过时。我发布的修改后的ROSNAP是否正常?对于土木工程/测量工程,扭曲视图是常见的,因此我有一些相关的宏和例程。
是的,它有效。谢谢。这不是我真正想要的答案,因为我还有一些其他人的“命令”没有起作用。我会贴在这里,看看你们怎么想。 这里只有三个。我不想在这里停留太久。现在,如果有人想玩,我会上传整个内容。见鬼,我可能会的。再次感谢。
(defun C:SPLIT ()
(graphscr)
(setq oldsnap (getvar "osmode"))
(setq os (getvar "osmode"))
(setvar "osmode" 1536)
(setq l1 (getpoint "\nSelect line to be Split: "))
(setq l2 (getpoint "\nSelect Cutting Edge: "))
(setvar "osmode" os)
(setq pt1 (osnap l1 "mid,qui"))
(setq pt2 (osnap l1 "end,qui"))
(setq pt3 (osnap l2 "mid,qui"))
(setq pt4 (osnap l2 "end,qui"))
(setq pt5 (inters pt1 pt2 pt3 pt4 nil))
(command "BREAK" l1 "F" pt5 "@")
(setvar "osmode" oldsnap)
)
(defun C:ARROW ()
(graphscr)
(setq oldsnap (getvar "osmode"))
(setq player (getvar "clayer"))
(setq tll (entsel "Pick Point on Line Nearest End:"))
(setq pt1 (cadr tll))
(setq tlle (car tll))
(setq layn (cdr (assoc '8 (entget tlle))))
(setq pt2 (osnap pt1 "end,qui"))
(setq pt3 (osnap pt1 "nea,qui"))
(setq size (getvar "dimscale"))
(command "LAYER" "S" layn "")
(command "INSERT" "ARROWHD" pt2 size "" pt3)
(command "layer" "s" player "")
(setvar "osmode" oldsnap)
(setvar "clayer" oldlayer)
)
(defun C:AUTODIM1 ()
(graphscr)
(setq oldsnap (getvar "osmode"))
(setq oldlayer (getvar "clayer"))
(command "-layer" "s" "PR-2-NOTES" "")
(setq rnd (getvar "dimzin"))
(setq acr (getvar "luprec"))
(setq obj1 (entsel "\nSelect Line to Dimension Above: "))
(setq obj2 (car obj1))
(setq pt1 (cdr (assoc '10 (entget obj2))))
(setq pt2 (cdr (assoc '11 (entget obj2))))
(setvar "dimzin"
(setq dist (distance pt1 pt2))
(setq txt1 (rtos dist 2 acr))
(setq txt2 (strcat txt1 (chr 039)))
(setq pt3 (cadr obj1))
(setq pt4 (osnap pt3 "mid,qui"))
(setq pt5 (osnap pt3 "nea,qui"))
(setq angler (angle pt4 pt5))
(setq angled (/ (* 180 angler) pi))
(setq perpr (+ angler (/ pi 2)))
(setq centerpt (polar pt4 perpr (/ (getvar "dimscale") 16)))
(setvar "dimzin" rnd)
(command "TEXT" "C" centerpt angled txt2)
(setvar "osmode" oldsnap)
(setvar "clayer" oldlayer)
) 我的一位同事刚刚注意到,我们的代码中有“qui”。我们把它们拿出来,一切似乎都很顺利。我当然喜欢简单的修复。
osnap命令的qui或quick选项在2015年的帮助中介绍,但在2016年的帮助中没有介绍。我猜他们最后把它扔了,反正也没发现它有什么用处。
页:
1
[2]