rcmob公司 嘿伙计,
给你一个快速而肮脏的选择
(defun c:qBrk (/ off pt ent ang)
(vl-load-com)
(initget 7)
(setq off (getdist "\nSpecify Break Distance: "))
(while (and (setq pt (getpoint "\nSelect Point to Break: "))
(setq ent (car (nentselp pt))))
(setq ang (angle '(0 0 0)
(vlax-curve-getFirstDeriv ent
(vlax-curve-getParamatPoint ent
(setq pt (vlax-curve-getClosestPointto ent pt))))))
(command "_.break" (list ent pt) "_F" "_non"
(polar pt ang (/ off 2.)) "_non" (polar pt (+ pi ang) (/ off 2.))))
(princ))
在这里,它是一个有点清理去掉了名称的东西,它似乎根本没有影响它,现在的空间大小是基于dimscale(我想请有人纠正我,如果我错了),这是最有可能的变化,如果你有一个设定的大小,使它每次。
;; This lisp breaks a two lines which cross each other
(defun c:bc ()
(setq scl (getvar "dimscale" ))
(setq dis (* scl 0.052))
(setq lne (entsel "\nPick line to break:")) (terpri)
(setq pnt (getpoint "\nPick break point:" )) (terpri)
(setq pick (entget (car lne)))
(setq pt1 (cdr (assoc 10 pick)))
(setq pt2 (cdr (assoc 11 pick)))
(setq a (angle pt1 pt2))
(setq ang ( * a 57.3))
(setq bpt1 (polar pnt a dis))
(setq bpt2 (polar pnt (- a pi) dis))
(command "break" lne "f" bpt1 bpt2 )
) 我之前帖子的扩展版本:
(defun c:qBrk (/ *error* doc vl ov pt ent ang)
(vl-load-com)
(defun *error* (lee)
(if doc (vla-EndUndoMark doc))
(and ov (mapcar 'setvar vl ov))
(if (not (wcmatch (strcase lee) "*BREAK,*CANCEL*,*EXIT*"))
(princ (strcat "\n** Error: " lee " **")))
(princ))
(setq doc (vla-get-ActiveDocument
(vlax-get-acad-object))
vl '("CMDECHO" "OSMODE") ov (mapcar 'getvar vl))
(setvar "CMDECHO" 0)
(or *Mac (setq *Mac 10.0))
(initget 4)
(setq *Mac
(cond ((getdist
(strcat "\nSpecify Break Distance <"
(vl-princ-to-string *Mac) "> : "))) (*Mac)))
(while (and (setq pt (getpoint "\nSelect Point to Break: "))
(setq ent (car (nentselp pt))))
(cond ((vl-catch-all-error-p
(vl-catch-all-apply 'vlax-curve-getEndParam (list ent)))
(princ "\n** Cannot Break that Object **"))
(t
(vla-StartUndoMark doc)
(setq ang (angle '(0 0 0)
(vlax-curve-getFirstDeriv ent
(vlax-curve-getParamatPoint ent
(setq pt (vlax-curve-getClosestPointto ent pt))))))
(setvar "OSMODE" 0)
(command "_.break" (list ent pt) "_F"
(polar pt ang (/ *Mac 2.)) (polar pt (+ pi ang) (/ *Mac 2.)))
(vla-EndUndoMark doc))))
(mapcar 'setvar vl ov)
(princ))
李·麦克。。。
你的代码正是我需要的!
感谢所有帮助过我的人!
rcmob公司
没问题-有点得意忘形 好的,我已经用了几天了,效果很好,但有一个bug。。。
如果我尝试在圆上使用它,而不是在我选择的点上创建间隙,它实际上会留下一个选定长度的弧,并删除圆的其余部分。。。基本上,它的作用与直线上完全相反。。。
有什么线索吗?
rcmob公司
是的,我的函数只适用于Break命令-当在圆上使用时,它将生成一个圆弧。。。 我懂了。。。这就解释了。。。
有没有其他解决方案可以像代码在直线上一样在圆上工作?
rcmob公司 也许是这个代码?
http://www.cadtutor.net/forum/showthread.php?t=38562
页:
1
[2]