Aenda
发表于 2014-5-13 14:51:14
gaics 发表于 2014-5-12 21:52 static/image/common/back.gif
改了什么?
跟16楼很像的 差不多,我的比他的还好点点
edata
发表于 2014-5-13 15:09:26
(defun c:q(/ p lst ss ent00 cmd_old)
(vl-load-com)
(setq lst '() cmd_old(getvar 'cmdecho) ent00(entlast))
(setvar 'cmdecho 0)
(if (setq ss(ssget '((0 . "*line,arc,ellipse,circle"))))
(progn
(command "-HATCH" "p" "ansi31" "15" "0" "s" ss "" )
(while(setq p(getpoint))(command p))
(command "")
(if (and ent00 (/= (cdr(assoc 5 (entget(entlast)))) (cdr(assoc 5 (entget ent00)))))
(progn
(vlax-put(vlax-ename->vla-object(entlast))'color 250)
(princ "ok!")
)
(princ "The hatch object creat unsuccessfully!"))
)
(progn
(command "-HATCH" "p" "ansi31" "15" "0")
(while(setq p(getpoint))(command p))
(command "")
(if (and ent00 (/= (cdr(assoc 5 (entget(entlast)))) (cdr(assoc 5 (entget ent00)))))
(progn
(vlax-put(vlax-ename->vla-object(entlast))'color 250)
(princ "ok!")
)
(princ "The hatch object creat unsuccessfully!"))
)
)
(and cmd_old (setvar 'cmdecho cmd_old))
(princ)
)
Aenda
发表于 2014-5-13 15:29:59
edata 发表于 2014-5-13 15:09 static/image/common/back.gif
,已经很完美了,。好像你这改动意义在于可以同时选对象跟点选,...某些时候是比较方便,但是某些时候又觉得有点多余,很不错,赞一个,非常感谢
Aenda
发表于 2014-5-14 10:51:01
edata 发表于 2014-5-13 15:09 static/image/common/back.gif
edata,能我帮看看我源码问题吗? 不知道为什么有时候画着画着图,捕捉自动全部关闭了 ,还有颜色也自动跳到250号色。谢谢
(defun c:Q1 (/ s1 pt oldcolor snap)
(setq oldcolor (getvar "cecolor"))
(setq snap (getvar "osmode"))
(setvar "cecolor" "250")
(setvar "osmode" 0)
(princ "\n默认<拾取点>方式按右键或空格切换到<选择对象>方式:")
(if(setq pt(getpoint"\n指定内部点"))
(progn
(command "BHATCH" "p" "ansi31" "6" "0")
(while pt(command pt)(setq pt(getpoint)))
(command ""))
(if(setq s1 (ssget))
(command "BHATCH" "p" "ansi31" "6" "0" "s" s1 "" ""))
)
(setvar "cecolor" oldcolor)
(setvar "osmode" snap)
(princ)
)
edata
发表于 2014-5-14 11:10:03
Aenda 发表于 2014-5-14 10:51 static/image/common/back.gif
edata,能我帮看看我源码问题吗? 不知道为什么有时候画着画着图,捕捉自动全部关闭了 ,还有颜色也自动 ...
因为你前面设置了当前颜色为250,捕捉关闭,
但是如果程序出现错误将不执行恢复,也就是倒数第四行和第五行没有哦执行,也就造成了当前颜色和捕捉被更改,无法复原。
你可以加入出错处理程序,可以在论坛搜到,也可以参考我最后的代码,因为我只改变了cmdecho变量,即使出错了,影响也不是很大。
Aenda
发表于 2014-5-14 11:34:47
edata 发表于 2014-5-14 11:10 static/image/common/back.gif
因为你前面设置了当前颜色为250,捕捉关闭,
但是如果程序出现错误将不执行恢复,也就是倒数第四行和第五 ...
edata, 谢谢你的热心指导,我懂了,
能在我基础上编写一个完整的吗? 我是新手不太懂,谢谢...
peraperson
发表于 2014-5-14 12:19:00
本帖最后由 peraperson 于 2014-5-14 12:23 编辑
Aenda 发表于 2014-5-14 10:51 static/image/common/back.gif
edata,能我帮看看我源码问题吗? 不知道为什么有时候画着画着图,捕捉自动全部关闭了 ,还有颜色也自动 ...
(defun c:Q1 (/ s1 pt oldcolor snap)
(dfl_var)
(setvar "cecolor" "250")
(setvar "osmode" 0)
(princ "\n默认<拾取点>方式按右键或空格切换到<选择对象>方式:")
(if(setq pt(getpoint"\n指定内部点"))
(progn
(command "BHATCH" "p" "ansi31" "6" "0")
(while pt(command pt)(setq pt(getpoint)))
(command ""))
(if(setq s1 (ssget))
(command "BHATCH" "p" "ansi31" "6" "0" "s" s1 "" ""))
)
(*error* nil)
(princ)
)
(defun dfl_var ()
(setq e_lst (mapcar (function (lambda (n) (list 'setvar n (getvar n))))
'("cecolor" "clayer""autosnap" "osmode")))
(defun *error* (msg) (mapcar 'eval e_lst))
)
Aenda
发表于 2014-5-14 13:58:28
peraperson 发表于 2014-5-14 12:19 static/image/common/back.gif
(defun c:Q1 (/ s1 pt oldcolor snap)
(dfl_var)
(setvar "cecolor" "250")
兄台,可以可行吗?
Aenda
发表于 2014-5-19 13:41:36
edata 发表于 2014-5-14 11:10 static/image/common/back.gif
因为你前面设置了当前颜色为250,捕捉关闭,
但是如果程序出现错误将不执行恢复,也就是倒数第四行和第五 ...
大神,能帮帮我优化下吗 ,楼下那个也不行耶。还是会失去捕捉。
Aenda
发表于 2014-5-19 13:42:23
peraperson 发表于 2014-5-14 12:19 static/image/common/back.gif
(defun c:Q1 (/ s1 pt oldcolor snap)
(dfl_var)
(setvar "cecolor" "250")
还是不行,捕捉还原不了