WPerciful 发表于 2022-7-5 20:05:34

穿过a b的修剪线

我通过lisp例程替换了一系列块。但新街区比旧街区宽。因此,我编写了下面的例程来修剪延伸到块中的线。当块水平时,它间歇性工作。我还没有添加代码来修剪垂直的线条,因为我不明白为什么代码不能始终工作。代码如下,所附的图形文件中有我正在使用的块作为示例。
 
(defun trimblocklines ( ent / e d ins ero bw bh pt1 pt2 ss1 cnt sslen )
(setvar "cmdecho" 0)
(setq e ent
        d (entget e)
        ins (cdr (assoc 10 d))
        ero (* (dxf 50 d) (/ 180 pi))
        bw 0.25
        bh 0.125
        pt1 (list (- (nth 0 ins) (/ bw 2)) (- (nth 1 ins) (/ bh 2)) (nth 2 ins))
        pt2 (list (+ (nth 0 ins) (/ bw 2)) (+ (nth 1 ins) (/ bh 2)) (nth 2 ins))
        ss1 (ssget "_C" pt1 pt2 '((0 . "line")))
        cnt 0
        sslen (sslength ss1)
        ln_ents (list )
)
(command "circle" ins (list (+ (nth 0 ins) (/ bw 2)) (nth 1 ins)))
(setq cent (entlast))
(while (< cnt sslen)
        (setq ln_ents (append ln_ents (list (ssname ss1 cnt)))
                cnt (1+ cnt)
        )
)
(command "trim" cent ss1 "" (list (- (nth 0 ins) (- (/ bw 2) 0.01)) (nth 1 ins) 0.0) "")
(command "trim" cent ss1 "" (list (+ (nth 0 ins) (- (/ bw 2) 0.01)) (nth 1 ins) 0.0) "")
(entdel cent)
(setvar "cmdecho" 0)
(princ)
)
 
修剪线条。图纸
 
非常感谢。

BIGAL 发表于 2022-7-5 20:15:52

试试饼干切割机。lsp它有很多选择,而不是试图让代码工作。

JamCAD 发表于 2022-7-5 20:20:46

编辑Oops发布到错误的线程

WPerciful 发表于 2022-7-5 20:31:36

我认为extrim命令可以完成任务,但它是一个lisp,所以我不能使用它。
 
有没有办法使用vlisp使用extrim命令?
 
(defun trimblocklines ( ent / e d ins ero bw bh pt1 pt2 ss1 cnt sslen )
(setvar "cmdecho" 0)
(setq e ent
d (entget e)
ins (cdr (assoc 10 d))
ero (* (cdr (assoc 50 d))(/ 180 pi))
bw 0.25
bh 0.125
pt1 (list (- (nth 0 ins) (/ bw 2)) (- (nth 1 ins) (/ bh 2)) (nth 2 ins))
pt2 (list (+ (nth 0 ins) (/ bw 2)) (+ (nth 1 ins) (/ bh 2)) (nth 2 ins))
ss1 (ssget "_C" pt1 pt2 '((0 . "line")))
cnt 0
sslen (sslength ss1)
ln_ents (list )
)
(command "circle" ins (list (+ (nth 0 ins) (/ bw 2)) (nth 1 ins)))
(setq cent (entlast))
(while (< cnt sslen)
(setq ln_ents (append ln_ents (list (ssname ss1 cnt)))
cnt (1+ cnt)
)
)
(command "extrim" cent "" (list (- (nth 0 ins) (- (/ bw 2) 0.01)) (nth 1 ins) 0.0) "")
(entdel cent)
(setvar "cmdecho" 0)
(princ)
)
 

WPerciful 发表于 2022-7-5 20:35:22

看看我是否可以在这里修改这个例程,这是Marko Ribar的一个很棒的例程。我认为EXTRIM命令比TRIM命令工作得更好。

Lee Mac 发表于 2022-7-5 20:42:03

当从LISP程序中评估TRIM命令时,它可能非常易变——我个人建议改用BREAK命令。
 
此外,您应该知道,任何活动对象捕捉都会影响提供给命令的点-因此,您应该暂时禁用对象捕捉,或者在提供点之前提交“非”或“无”命令修改器。
 
也许我的自动断块程序可以帮助你完成这项任务。
 

WPerciful 发表于 2022-7-5 20:47:46

 
 
李,你的“自动闭塞”程序太棒了。它可以满足我的所有需要。
 
我一直在努力用新的块替换我们的许多旧块。新街区更宽。我剩下的唯一代码就是断线。我将重写我的例程以使用break命令,并在输入点之前添加“_non”命令修饰符。
一旦我有了新代码,我就会发布它。
 
谢谢你的帮助!

BIGAL 发表于 2022-7-5 20:55:56

您可以将extrim与lisp结合使用,不过在使用它时有点捉襟见肘。

(load "Extrim")
(etrim obj pt1) ; need to use etrim to pick cut obj and then a pt inside or out etc

Begde 发表于 2022-7-5 20:59:32

李,你真聪明谢谢你的帮助

Lee Mac 发表于 2022-7-5 21:11:54

 
你太好了,贝格德-谢谢
页: [1]
查看完整版本: 穿过a b的修剪线