明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2225|回复: 8

[讨论]请高人帮忙改进这个关于TRIM命令的LSP程序!谢谢!

[复制链接]
发表于 2007-10-13 09:27:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2007-10-13 19:48:52 编辑

;;;;by lijiao
(defun c:ff (/ PT0 PTLIST PTLIST0 ss CMDECHO OSMODE)
  (setq cmdecho (getvar "cmdecho")
 osmode (getvar "osmode")
  )
(setvar "osmode" 0)
  (while (and (setq ptlist0 (getpoint_list))
       (> (length ptlist0) 1)
  )
    (setvar "cmdecho" 0)
   
    (setq pt0  (car ptlist0)
   ptlist (cdr ptlist0)
    )
    (command "trim" "")
    (foreach pt ptlist
      (command "f" pt0 pt "")
      (setq pt0 pt)
    )
    (command "")
    (if (setq ss (ssget "f" ptlist0))
      (command "erase" ss "")
    )
    (setvar "osmode" osmode)
    (setvar "cmdecho" cmdecho)
  )
  (princ)
)
(defun getpoint_list ( / DIS OUT PT)
  (setq pt (getpoint "\n开始:"))
  (princ "\n按任意键结束:")
  (if (= (type pt) 'LIST)
    (progn
      (setq out (list pt)
     dis (* 0.01 (getvar "viewsize")))
      (while (= 5 (car (setq pt (grread t 4 0))))
 (setq pt (cadr pt))
         (if (> (distance pt (car out)) dis)
    (progn
      (grdraw pt (car out) 1)
      (setq out (cons pt out))
      )
    )
 )
      )
    )
  (redraw)
  (reverse out)
  )

 这个程序是我前些时间在我们明经坛子找到的!在实际应用中,发现在它有一个不完善的地方!,就是在剪切XLINE时,如果旁边有其它的线!它就只能剪切框选的部分!被其它线阻隔到的地方就有残留!如下图1.2!

各位高手看能不能改进一下,如图3.4中的样子!在我们发出TRIM命令后,只要我们想要的图形A,B,C,D任意对角两点框选一下,就能得到一个我想要的矩形或者其它的图形!而且不管有没有其它的线阻隔就能干净彻底的剪掉多余的线条!

另:我在试用这个程序时,发现剪切完后,我的CAD的对象捕捉全被取消掉了!要用到对象捕捉时又要一个个的去勾选,很是麻烦!

这个是一个老问题了!我只是把它拿出来讨论一下!希望兄弟们不要骂我!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2007-10-13 10:34:00 | 显示全部楼层

今天是周六,是不是大家都休息了!只有我还在上班啊!苦命啊!

发表于 2007-10-13 23:43:00 | 显示全部楼层
不是不完善,那个程序就是这么设计的
 楼主| 发表于 2007-10-14 11:08:00 | 显示全部楼层

我的意思是:这个程序能不能改进成如图3.图4.所讲的那样!版主你没有明白我的意思!

 楼主| 发表于 2007-10-14 15:13:00 | 显示全部楼层
怎么没有人帮忙啊!
发表于 2007-10-14 15:22:00 | 显示全部楼层
看不明白。这是跟C#很`想啊?
发表于 2007-10-15 18:38:00 | 显示全部楼层
  1. ;;;;by lijiao --- 修改 by 狂刀.
  2. (defun c:ff (/ PT0 PTLIST PTLIST0 ss CMDECHO OSMODE)
  3.   (setq cmdecho (getvar "cmdecho")
  4. osmode (getvar "osmode")
  5.   )
  6.   (setvar "osmode" 0)
  7.   (while (and (setq p1 (getpoint "\n 第一点:"))
  8.        (setq p2(getcorner p1 "\n 第二点:"))
  9.   )
  10.     (setvar "cmdecho" 0)
  11.     (setq p3(list(car p1)(cadr p2))
  12.    p4(list(car p2)(cadr p1))
  13.     )
  14.     (while (ssget "f" (list p1 p3 p2 p4 p1))
  15.        (command "trim" "c" p1 p2 "" "f" p1 p3 p2 p4 p1 "" "")
  16.        (if (/= 0 (getvar "cmdactive"))(command ""))
  17.     )
  18.     (setvar "osmode" osmode)
  19.     (setvar "cmdecho" cmdecho)
  20.   )
  21.   (princ)
  22. )
 楼主| 发表于 2007-10-16 09:20:00 | 显示全部楼层

谢谢“狂刀无痕”,试用过后达到了小弟的要求!谢谢!

明经是个好地方!高手如云啊!是我等菜鸟的福地啊!

发表于 2015-9-8 10:50:41 | 显示全部楼层
一条直线经过很多圆,编写一段lisp命令剪切所有圆内的线段.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-16 07:10 , Processed in 0.188983 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表