实现智能剪切的lisp程序« CAD家园

该程序实现的功能如图中所示,只要选择矩形,便可将穿过矩形的直线剪切(以前是一条一条的选择),由于水平有限,程序的语句可能太繁琐,但功能对我面言很实用(以前我下载了一个,但效果不好,连矩形外也剪掉了),
请各位高手优化!
源程序如下:

标签: , ,

11 条评论 发表在“实现智能剪切的lisp程序”上

  1. 你的程序在实际使用中,有时将矩形的边或矩形外的线剪切掉了,我的程序参照你的程序重新编了一下,不好意思,借用了你的思路.(朋友多,互相学习)
    有些语句实际上重复了,昨天我又改了下,源程序如下:
    (defun c:mytrim
    (/ rect e0 e1 pt x ptx pty l1 i p1 p2 p1x p1y point count)
    (setar “osmode” 0)
    (setq l1 nil)
    (setq i 0)
    (setq rect (car (entsel “n请选择需剪切的矩形:”)))
    (setq e0 (entget rect))
    (while (setq x (nth i e0))
    (if(= (car x) 10)
    (progn
    (setq ptx (nth 1 x))
    (setq pty (nth 2 x))
    (setq x (list ptx pty))
    (setq l1 (cons x l1))
    )
    )
    (setq i (1+ i))
    )
    (reerse l1)
    (setq p1 (car l1))
    (setq p1x (nth 0 p1))
    (setq p1y (nth 1 p1))
    (setq count 0)
    (repeat 3
    (setq count (+ count 1))
    (setq pt (nth count l1))
    (setq ptx (nth 0 pt))
    (setq pty (nth 1 pt))
    (setq point (mapcar ‘+ p1 pt))
    (setq point (mapcar ‘/ point ‘(2.0 2.0 2.0)))
    (if
    (and (/= (nth 0 point) p1x)
    (/= (nth 0 point) ptx)
    (/= (nth 1 point) p1y)
    (/= (nth 1 point) pty)
    )
    (setq p point)
    )
    )
    (setq l1 nil)
    (command “offset” 5 rect p “”)
    (setq e0 (entlast))
    (setq e1 (entget e0))
    (princ e1)
    (setq i 0)
    (while (setq x (nth i e1))
    (if(= (car x) 10)
    (progn
    (setq ptx (nth 1 x))
    (setq pty (nth 2 x))
    (setq x (list ptx pty))
    (setq l1 (cons x l1))
    )
    )
    (setq i (1+ i))
    )
    (reerse l1)
    (setq p1 (car l1))
    (setq p2 p1)
    (command “erase” e0 “”)
    (setq count 0)
    (repeat 3
    (setq count (+ count 1))
    (setq pt (nth count l1))
    (command “trim” rect “” “f” p1 pt “” “”)
    (setq p1 pt)
    )
    (command “trim” rect “” “f” p1 p2 “” “”)
    (setar “osmode” 687)
    )

郑重声明:资讯 【实现智能剪切的lisp程序« CAD家园】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——