初学LSP编写的填充源码,其中有个困扰很久的问题,求指教
本帖最后由 ztosen 于 2013-7-27 22:31 编辑(Defun C:H2 (/ e e1 la ps si smx ss ssh)
(SETVAR "CMDECHO" 0)
(SETQ OLDERR *ERROR*
*ERROR* AEOERR
)
(COMMAND "undo" "group")
(prompt "\n当前样式:砌墙(ANSI31) 比例:200\n")
(initget "S F")
(setq ans (getkword "\n修改图案填充对象(S)/选择填充边界(F)/拾取填充内部点(直接回车):"))
(cond
((= ans "S")
(if (and
(princ "\n选择图案填充对象:")
(setq ss (ssget (list '(0 . "hatch"))))
)
(progn
(setq smx (sslength ss)
si 0
)
(while (< si smx)
(setq e (ssname ss si)
si (1+ si)
)
(if t
(progn
(if nil
(command ".-hatchedit" e e1 "p" "ANSI31" "100" "0")
(command ".-hatchedit" e "p" "ANSI31" "100" "0")
)
)
)
)
)
)
)
((= ans "F")
(prompt "\n选择填充边界:")
(setq ss (ssget))
(command "bhatch" "p" "ANSI31" "200" "0" "s" ss "" "")
)
(t
(prompt "\n拾取填充内部点:")
(command "bhatch" "p" "ANSI31" "200" "0")
(while (> (getvar "CMDACTIVE") 0)
(command PAUSE)
)
)
)
(SETQ *ERROR* OLDERR)
(COMMAND "_.undo" "end")
(PRINC)
)
大师们好,我想输入命令后,提示输入getkword时,直接点击鼠标就能指定内部点,而不需要回车。
(setq ans (getkword...
==>
(setq ans (getPoint ...
Cond 下 相应调整代码 ... 楼主是意思 是不是关键词的响应 -----不按空格 即刻响应?
那么建议你用grread 函数。 本帖最后由 ztosen 于 2013-7-27 22:32 编辑
Andyhon 发表于 2013-7-27 12:58 static/image/common/back.gif
(setq ans (getkword...
==>
(setq ans (getPoint ...
谢谢老大指教,原来这么简单。
为什么自己就没想到用getPoint~
(Defun C:H1 (/ e e1 la ps si smx ss ssh)
(SETVAR "CMDECHO" 0)
(SETQ OLDERR *ERROR*
*ERROR* AEOERR
)
(COMMAND "undo" "group")
(prompt "\n当前样式:实体(SOLID)\n")
(initget "S F")
(setq ans (getPoint "\n拾取填充内部点或[修改图案填充对象(F)/选择填充边界(S)]:"))
(cond
((= ans "F")
(if (and
(princ "\n选择图案填充对象:")
(setq ss (ssget (list '(0 . "hatch"))))
)
(progn
(setq smx (sslength ss)
si 0
)
(while (< si smx)
(setq e (ssname ss si)
si (1+ si)
)
(if t
(progn
(if nil
(command ".-hatchedit" e e1 "p" "solid")
(command ".-hatchedit" e "p" "solid")
)
)
)
)
)
)
)
((= ans "S")
(prompt "\n选择填充边界:")
(setq ss (ssget))
(command "bhatch" "p" "solid" "s" ss "" "")
)
(t
(if (/= ans nil)
(PROGN
(command "bhatch" ans "p" "solid")
(while (> (getvar "CMDACTIVE") 0)
(command PAUSE)
)
(PRINC)
)
)
)
)
(SETQ *ERROR* OLDERR)
(COMMAND "_.undo" "end")
(PRINC)
) ........................ 学习学习! 压缩一下(defun C:H1 (/ ans e si ss)
(setvar "CMDECHO" 0)
(setq OLDERR *ERROR*
*ERROR* AEOERR
)
(command "undo" "group")
(prompt "\n当前样式:实体(SOLID)\n")
(initget "S F")
(setq ans (getpoint "\n拾取填充内部点或[修改图案填充对象(F)/选择填充边界(S)]:"))
(cond
((= ans "F")
(if (and
(princ "\n选择图案填充对象:")
(setq ss (ssget '((0 . "HATCH"))))
)
(repeat (setq si (sslength ss))
(setq e (ssname ss (setq si (1- si))))
(command ".-hatchedit" e "p" "solid")
)
)
)
((= ans "S")
(prompt "\n选择填充边界:")
(setq ss (ssget '((0 . "ARC,CIRCLE,*LINE"))))
(command "hatch" "p" "solid" "s" ss "" "")
)
(t
(if ans (progn
(command "hatch" ans "p" "solid")
(while (> (getvar "CMDACTIVE") 0) (command PAUSE))
))
)
)
(setq *ERROR* OLDERR)
(command "_.undo" "end")
(setvar "CMDECHO" 1)
(princ)
)
求一个连续填充的lsp,就是批量输入坐标,程序按顺序一个个填充,如果有错误就跳过
页:
[1]