rcmob 发表于 2022-7-6 13:19:54

我试过了,但按“回车”后出现错误:“错误:没有函数定义:SSREDRAW”
 
rcmob公司

Lee Mac 发表于 2022-7-6 13:22:28

嘿伙计,
 
给你一个快速而肮脏的选择
 

(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))

chelsea1307 发表于 2022-7-6 13:25:12

在这里,它是一个有点清理去掉了名称的东西,它似乎根本没有影响它,现在的空间大小是基于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 )
)

Lee Mac 发表于 2022-7-6 13:30:22

我之前帖子的扩展版本:
 

(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 发表于 2022-7-6 13:31:14

李·麦克。。。
 
你的代码正是我需要的!
 
感谢所有帮助过我的人!
 
rcmob公司

Lee Mac 发表于 2022-7-6 13:34:23

 
 
没问题-有点得意忘形

rcmob 发表于 2022-7-6 13:38:24

好的,我已经用了几天了,效果很好,但有一个bug。。。
 
如果我尝试在圆上使用它,而不是在我选择的点上创建间隙,它实际上会留下一个选定长度的弧,并删除圆的其余部分。。。基本上,它的作用与直线上完全相反。。。
 
有什么线索吗?
 
rcmob公司

Lee Mac 发表于 2022-7-6 13:42:35

 
是的,我的函数只适用于Break命令-当在圆上使用时,它将生成一个圆弧。。。

rcmob 发表于 2022-7-6 13:45:21

我懂了。。。这就解释了。。。
 
有没有其他解决方案可以像代码在直线上一样在圆上工作?
 
rcmob公司

Lee Mac 发表于 2022-7-6 13:47:52

也许是这个代码?
 
http://www.cadtutor.net/forum/showthread.php?t=38562
页: 1 [2]
查看完整版本: 单击“打断并创建间隙”