明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2617|回复: 8

[基础] 請教一個trim指令的問題

[复制链接]
发表于 2010-11-15 21:37:00 | 显示全部楼层 |阅读模式
這一段程式的作圖過程是這樣
1.畫一矩形
2.在矩形中心畫一圓(與短邊相切)
3.畫對角線
4.修剪圖元

它在修剪圖元的時候,是用(list en1 p1)去決定要修剪的部份
我不太明白這段程式是如何利用list  去決定要修剪的線段
還請高手為小弟解釋一下。

(command "trim" en3 "" (list en1 p1) (list en1 p3) (list en2 p2) (list en2 p4) "")



Uploaded with ImageShack.us
(defun C:2061()  (command " medium="medium" FONT: separate; BORDER-COLLAPSE: TEXT-INDENT: TEXT-TRANSFORM: WIDOWS:>;;求p2 p4   dist(ww/hh)   判斷最小值
  (setq en1 (entlast))  (command " medium="medium" FONT: separate; BORDER-COLLAPSE: TEXT-INDENT: TEXT-TRANSFORM: WIDOWS: ??)  (setq en2 (entlast))  (setq cenpt (inters p1 p3 p2 p4))   
  1. (defun C:2061()
  2.   (command "RECTANG")
  3.   (setq p1(getpoint))
  4.   (command p1)
  5.   (setq p3(getpoint))
  6.   (command p3)
  7. ;;畫矩形
  8.   (setq p2 (list (car p3) (cadr p1)))
  9.   (setq p4 (list (car p1) (cadr p3)))
  10.   (setq ww (distance p1 p2))
  11.   (setq hh (distance p1 p4))
  12.   (setq rdist (min ww hh))
  13. ;;求p2 p4   dist(ww/hh)   判斷最小值
  14.   (command "line" p1 p3 "")
  15.   (setq en1 (entlast))
  16.   (command "line" p2 p4 "")
  17.   (setq en2 (entlast))
  18.   (setq cenpt (inters p1 p3 p2 p4))
  19.   (print cenpt)
  20.   (command "circle" cenpt (* 0.5 rdist))
  21.   (setq en3 (entlast))
  22.   (command "trim" en3 "" (list en1 p1) (list en1 p3) (list en2 p2) (list en2 p4) "")
  23.   ;;畫對角線、中心圓   修剪圖元(trim 結束時 加迴車)
  24. )
发表于 2010-11-15 22:33:00 | 显示全部楼层
這樣作個比較或許能看出個名堂來
  1. (defun C:2061()
  2. ;; (command "RECTANG")
  3.   (setq p1 (getpoint "\nSpecify first corner point: "))
  4.   (setq p3 (getcorner p1 "\nSpecify other corner point: "))
  5.   (setq p2 (list (car p3) (cadr p1)))
  6.   (setq p4 (list (car p1) (cadr p3)))
  7.   (setq ww (distance p1 p2))
  8.   (setq hh (distance p1 p4))
  9.   (setq rdist (min ww hh))
  10. ;;求p2 p4   dist(ww/hh)   判斷最小值
  11.   (command "line" p1 p3 "")
  12.   (setq en1 (entlast))
  13.   (command "line" p2 p4 "")
  14.   (setq en2 (entlast))
  15.   (setq cenpt (inters p1 p3 p2 p4))
  16.   (print cenpt)
  17.   (command "circle" cenpt (* 0.5 rdist))
  18.   (setq en3 (entlast))
  19.   (command "trim" en3 "" p1 p3 p2 p4 "")
  20.   ;;畫對角線、中心圓   修剪圖元(trim 結束時 加迴車)
  21.   (command "RECTANG" p1 p3)   ;;畫矩形
  22. )
p.s. 程序未對鎖點(捕捉)作處理......
 楼主| 发表于 2010-11-16 10:40:00 | 显示全部楼层
本帖最后由 作者 于 2010-11-16 11:02:33 编辑

(command "trim" en3 "" p1 p3 p2 p4 "")

 

 

原本trim的是選指要修剪的線段,這段程式是選擇"點"

原因是因為選點的時候會剛好同時選到線段嗎??

 

如果今天是要換成修剪成圓內的線段又該如何寫程式呢??

Uploaded with ImageShack.us

发表于 2010-11-16 11:08:00 | 显示全部楼层

(command "trim" en3 "" p1 p3 p2 p4 "")

修剪成圓內的線段===>

(command "trim" en3 "" cenpt cenpt "")

 楼主| 发表于 2010-11-16 11:31:00 | 显示全部楼层

嗯嗯,剛剛測試了一下,圓內的線段都被修剪了

運作原理是因為剛好線段通過中心點、端點 嗎???

 

 

這兩種方式都可以達到一樣的效果,他們的差別在哪裡啊??

(command "trim" en3 "" p1 p3 p2 p4 "")

(command "trim" en3 "" (list en1 p1) (list en1 p3) (list en2 p2) (list en2 p4) "")

 

 

发表于 2010-11-16 12:16:00 | 显示全部楼层

一般trim,extend,break等命令接受的数据结构是一个表,就是用list组成的实体名和一个点组成的表。相当于entsel的返回值。

而实际在直接使用命令时,用户是用鼠标选择实体来实现命令所需要的动作。所以可以只用点来响应命令。

如果只用点响应命令,如果点附近没有实体,命令就不会正确运行。

 楼主| 发表于 2010-11-16 12:45:00 | 显示全部楼层

恩,謝謝你的解釋

 楼主| 发表于 2010-11-16 18:11:00 | 显示全部楼层

如果用lisp畫出了這樣的一個圖形

之後又想要使用trim把矩形外的直線修掉,那該如何寫呢

 

這樣的圖形,其線段就沒有通過點了。

 

Uploaded with ImageShack.us

发表于 2011-11-21 18:57:02 来自手机 | 显示全部楼层
学习了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-14 17:10 , Processed in 0.173352 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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