几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(AutoLISP)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


回复
 
主题工具 搜索本主题 显示模式
旧 2009-04-26, 10:04 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 本人想学习这种情况是怎么写的,望会的教教我

本人想学习这种情况是怎么写的,望会的教教我
www.dimcax.com
本人想学习这种情况是怎么写的,望会的教教我
(defun c:csd(/ ss mode i lst)
(if (and (setq ss (ssget '((0 . "*polyline")))) (setq mode (getstring "\n剪掉多段线的内部(in)还是外部(qut)<i>")))
(progn
(setvar "cmdecho" 0)
(command "._undo" "be")
(command "._zoom" "o" ss "")
(setq i 0)
(repeat (sslength ss)
(if (or (= mode "") (= (strcase mode) "i"))
(progn
(setq lst (ko-get->list-offsetpline (ssname ss i) t 3))
(command "._trim" (ssname ss i) "" "f")
(foreach x lst (command "non" x))
(command (car lst) "" "")
)
(progn
(setq lst (ko-get->list-offsetpline (ssname ss i) nil 3))
(command "._trim" (ssname ss i) "" "f")
(foreach x lst (command "non" x))
(command (car lst) "" "")
)
)
(setq i (1+ i))
)
)
)
(command "._undo" "e")
(setvar "cmdecho" 1)
(princ)
)
;各位大哥,上面的程序共有两步提示,
命令: csd
选择对象: 找到 1 个
选择对象:
剪掉多段线的内部(in)还是外部(out)<i>
本人很想学习这种提示方式是怎么写的,就是想程序一运行就提示:
命令: csd
剪掉多段线的内部(in)还是外部(out)<i>选择对象:
就是上面的样子,如果选择对象后,回车就结束程序,按默认的选项i来处理程序
如果这时不选择对象,而输入o则变成这样子
剪掉多段线的内部(in)还是外部(out)<o>选择对象:
再次提示选择对象,如果回车就按o选项的来处理,
本人这样做的目的是一般用i比较多,所以想省掉一步,这样就提高效果啦,
望大哥们教教小弟,谢谢
d
;改了一下,只不过就能选择一个实体了。在网吧写的未调试。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
( c:csd( ss mode lst)
( mode "i" ss nil)
( (
( ( ( ss) ( ((assoc((car ss)))) "*polyline")) ;
( "i o")
( ss ( ( "\n剪掉多段线的内部(in)还是外部(out)<" mode ">")))
( ( ( ss "o") ( ss "i")) ( ss nil))
)
( ss nil)
)
(
( "cmdecho" 0)
( "._undo" "be")
( "._zoom" "o" ss "")
( i 0)
( ( mode "i")
(
( lst (ko-get->list-offsetpline ( ss) t 3))
( "._trim" ( ss) "" "f")
( x lst ( "non" x))
( ( lst) "" "")
)
(
( lst (ko-get->list-offsetpline ( ss) nil 3))
( "._trim" ( ss i) "" "f")
( x lst ( "non" x))
( ( lst) "" "")
)
)
)
)
( "._undo" "e")
( "cmdecho" 1)
()
)
踅摸
d
( ( ( ss ( '((0 . "*polyline"))));空选为o
( ss2 ( '((0 . "*polyline")))))
(
( ss ( k t))
( lst (ko-get->list-offsetpline ss k 3))
( "._trim" ( ( k ss ss2) i) "" "f")
( x lst ( "non" x))
( ( lst) "" "")
)
)
d
还有人帮帮我吗,上面的还有点问题呢
d
zzxx
稍稍改了一下,看看能不能达到你要求。
上面几楼的那种贴代码的方式怎么弄的?我怎么也做不出来,晕了~
(defun c:csd (/ ss mode i lst olderr oldcmd rtn pt1 pt2)
(defun myerr (s)
(command "._undo" "e")
(setq *error* olderr)
(setvar "cmdecho" oldcmd)
(prompt "*取消*")
(princ)
)
(setq oldcmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq olderr *error*
*error* myerr
)
(setq ss (ssget "i"))
(command "._undo" "be")
(if ss
(sssetfirst nil ss)
)
(setq mode (chr 73)
ss nil
)
(prompt (strcat "\n剪掉多段线的内部(in)还是外部(out)<"
mode
">选择对象: "
)
)
(setq rtn (grread nil 14 2))
(while (and (= (car rtn) 2)
(and (/= (last rtn) 79)
(/= (last rtn) 111)
(/= (last rtn) 73)
(/= (last rtn) 105)
(/= (last rtn) 13)
(/= (last rtn) 32)
)
)
(prompt "\n*无效选择*")
(prompt (strcat "\n剪掉多段线的内部(in)还是外部(out)<"
mode
">选择对象: "
)
)
(setq rtn (grread nil 14 2))
(while (and (= (car rtn) 2)
(or (= (last rtn) 79)
(= (last rtn) 111)
(= (last rtn) 73)
(= (last rtn) 105)
)
)
(if (or (= (last rtn) 73) (= (last rtn) 105))
(setq mode (chr 73))
(setq mode (chr 79))
)
(prompt (strcat "\n剪掉多段线的内部(in)还是外部(out)<"
mode
">选择对象: "
)
)
(setq rtn (grread nil 14 2))
)
)
(while (and (= (car rtn) 2)
(or (= (last rtn) 79)
(= (last rtn) 111)
(= (last rtn) 73)
(= (last rtn) 105)
)
)
(if (or (= (last rtn) 73) (= (last rtn) 105))
(setq mode (chr 73))
(setq mode (chr 79))
)
(prompt (strcat "\n剪掉多段线的内部(in)还是外部(out)<"
mode
">选择对象: "
)
)
(setq rtn (grread nil 14 2))
)
(if (or (= (car rtn) 11)
(and (= (car rtn) 2)
(or (= (last rtn) 13) (= (last rtn) 32))
)
)
(progn
(setq ss (ssget "i" '((0 . "*polyline"))))
(setq mode (chr 73))
)
)
(if (= (car rtn) 3)
(progn
(setq pt1 (last rtn))
(if (setq pt2 (getcorner pt1))
(progn
(command "._select" "_box" pt1 pt2 pause)
(setq ss (ssget "p" '((0 . "*polyline"))))
(setq mode (chr 73))
)
)
)
)
(if ss
(progn
(command "._zoom" "o" ss "")
(setq i 0)
(repeat (sslength ss)
(if (= mode "i")
(progn
(setq lst (ko-get->list-offsetpline (ssname ss i) t 3))
(command "._trim" (ssname ss i) "" "f")
(foreach x lst (command "non" x))
(command (car lst) "" "")
)
(progn
(setq lst (ko-get->list-offsetpline (ssname ss i) nil 3))
(command "._trim" (ssname ss i) "" "f")
(foreach x lst (command "non" x))
(command (car lst) "" "")
)
)
(setq i (1+ i))
)
)
)
(command "._undo" "e")
(setq *error* olderr)
(setvar "cmdecho" oldcmd)
(princ)
)
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 06:16 PM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多