找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1498|回复: 16

[LISP函数]:一个绘制门的lisp程序

[复制链接]
发表于 2002-11-26 15:28:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
自己编的一个绘制门的小程序。代码如下:

  1. ; Draw all size door
  2. (defun c:dd( )
  3.   (setq ds (getint "Please input door size:"))
  4.   (command "-osnap" "nea")
  5.   (setq point1 (getpoint "Pick the nearest point"))
  6.   (setq point2 (list (nth 0 point1) (+ 50 (nth 1 point1))))
  7.   (setq point3 (list (nth 0 point1) (+ (* ds 100) (nth 1 point1))))
  8.   (setq point4 (list (+ 50 (nth 0 point3)) (nth 1 point3)))
  9.   (setq point5 (list (+ (- (* ds 100) 50) (nth 0 point4))
  10.                (- (nth 1 point4) (- (* ds 100) 50))))
  11.   (setq point6 (list (nth 0 point5) (- (nth 1 point5) 50 )))
  12.   (command "-osnap" "non")
  13.   (command "pline" point1 point2 point3 point4 "arc" point5 "line" point6 "")
  14.   (setq door (ssget "L"))
  15.   (command "rectangle" point2 point4)
  16.   (ssadd (entlast) door)
  17.   (initget 1 "Rotate Mirror Quit")
  18.   (setq input (getkword "Rotate\\Mirror\\Quit:"))
  19.   (while (or (= input "Rotate")(= input "Mirror"))
  20.    (cond
  21.      ((= input "Rotate")
  22.       (command "rotate" door "" point1 pause ))
  23.      ((= input "Mirror")
  24.       (command "mirror" door "" point1 pause "y"))
  25.    )
  26.    (initget "Rotate Mirror Quit")
  27.    (setq input (getkword "Rotate\\Mirror\\Quit:")))
  28.    (command "-osnap" "end,mid,cen,nod,qua,int,per,tan")
  29. )



加载后执行dd命令,提示指定门的尺寸,如“9”、“10”等,请注意,此处输入的数值为门尺寸的1%,为的是简化录入次数。然后,提示捕捉最近的点,这里不支持其它自动捕捉方式,但设置临时捕捉有效。绘制完成后用户可以选择在插入点旋转门(选项R)、镜像门(选项M),或者直接输入“Q”退出。程序的最后设置了自动捕捉的多种方式。
本程序一次完成单扇门的绘制,方便快捷,且对各个尺寸的门通用。程序设置的门尺寸应是整数,稍加变动也可以对实数有效,但这样设置的作用不大。程序中有关闭捕捉的动作,这是因为无法控制自动捕捉打开情况下绘制门的操作。设置最近点为插入门的基点主要考虑通用性应该多一些,也可以是其它捕捉方式,这要视操作者的习惯而定。门由一段多段线与一个矩形组成,不是块对象。这是因为本程序在R14下开发的,R14不支持块内剪切,所以选择了多段线。现在到了R2002可以块内剪切了,感兴趣的朋友可以自己改一改。
如果有需要这段程序的朋友可以直接贴下去,保存为lsp文件即可使用。上传附件为绘制单门与绘制双门的源程序。如果不想提交爱心币,可以在单门程序基础上改成双门绘制的程序。
最后提示:
可以将两个程序合二为一,只是我觉得分开操作更方便些。我的程序还是比较繁琐的,绘制出来的门似乎也不特别美观,仅仅出于快速省事而言。另外,别的朋友有什么对付门的好办法,如果愿意也可以贴出来由大家共同探讨。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

发表于 2002-11-30 21:39:57 | 显示全部楼层
先把门做成块,单扇的和双扇的,
大以多少就双扇
完成你的功能,也就一两行就写的出.
用你的要累死,每次还要问宽度(用getdist就好多了)还不把最近的宽度给保留下来.
编辑还不好(不是块或组)图层也没自动
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-12-22 20:55:13 | 显示全部楼层
thanks
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-5 16:53:17 | 显示全部楼层
最初由 aeo 发布
[B]先把门做成块,单扇的和双扇的,
大以多少就双扇
完成你的功能,也就一两行就写的出.
用你的要累死,每次还要问宽度(用getdist就好多了)还不把最近的宽度给保留下来.
编辑还不好(不是块或组)图层也没自动 [/B]



请问可以说详细一点吗?
我是菜鸟,不太明白
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 943个

财富等级: 财运亨通

发表于 2003-1-5 18:45:50 | 显示全部楼层
楼上的,菜鸟要多多看书,
有点基础才能看懂
我也没看懂
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-8 19:03:26 | 显示全部楼层
这个程序有两点不足:
1。会改变系统原有的捕捉设置。
2。point1---point6应设为内部变量。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-8 22:15:33 | 显示全部楼层
最初由 haijiangl 发布
[B]这个程序有两点不足:
1。会改变系统原有的捕捉设置。
2。point1---point6应设为内部变量。 [/B]


原有捕捉设置可以在程序里面改,因为可能每个人的捕捉设置不同。有关第二个问题,能否详述利弊?谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-9 13:51:09 | 显示全部楼层
最初由 yi.gao 发布
[B]

原有捕捉设置可以在程序里面改,因为可能每个人的捕捉设置不... [/B]


不改变捕捉设置的方法:
预先读取原系统变量osmode,(setq old_osmode (getvar "osmode"))
程序结束后,恢复,(setvar "osmode" old_osmode)

内部变量与外部变量的区别在于:
内部变量在本程序结束后就自动清除,不会滞留在内存中。
外部变量在程序退出后,仍然保存在内存中,直到acad 退出。
不设置内部变量的缺点显而易见。
最大的问题是:假设你有另一个程序同样使用了point6作为变量,并且在该程序中没有重新赋值,那么point6 的值就是内存中旧的值,可能会造成程序运行混乱。

粗浅之见,多多交流!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-13 21:22:16 | 显示全部楼层
最初由 游手好闲 发布
[B]楼上的,菜鸟要多多看书,
有点基础才能看懂
我也没看懂 [/B]




收到~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-13 22:07:03 | 显示全部楼层
应将你在这个程序里定义的变量名写到(defun c:x ()后的括号里,格式是(/ 变量1 变量二 ……变量n)这样做的目的就是当程序结束后这些变量将从内存中清除。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-13 23:18:17 | 显示全部楼层
其实现在的专业软件都不再讨论如何画,而是如何建这个库,
更合理,更简洁,还可以出尽量多的信息。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-14 15:15:36 | 显示全部楼层

此程序最大的弊病。。。。

关键字的应用非常让人难受,例如:该程序要求用户输入时必须是“Rotate或 Mirror或Quit”。输成“rotate或 mirror或quit”都不行。因为下面的判断(= input "Rotate")等太严格了,在CAD2000以上,(= "ABC" "abc")返回值为NIL。按理只要求用户输入R\r\M\m\Q\q即可。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-14 16:50:18 | 显示全部楼层

Re: 此程序最大的弊病。。。。

最初由 cssanhui 发布
[B]关键字的应用非常让人难受,例如:该程序要求用户输入时必须是“Rotate或 Mirror或Quit”。输成“rotate或 mirror或quit”都不行。因为下面的判断(= input "Rotate")等太严格了,在CAD2000以上,(= "ABC" "abc")返回... [/B]


程序运行中输入的关键字仅仅是特征字符,这些关键字忽略大小写,即“r”、“m”、“q”与“R”、“M”、“Q”等效。

感谢这么多朋友提出的中肯意见、建议。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-15 10:44:48 | 显示全部楼层

SORRY

我错了,我没有用你的程序,仅靠读程序,又忽略了(initget 1 "Rotate Mirror Quit")语句。得出了错误的结论。抱歉的很。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-24 11:12:05 | 显示全部楼层
750的门画不了呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-10 00:41 , Processed in 0.435100 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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