嘿伙计们,
我们在办公室使用ProSteel和ACAD。在切换到ProSteel(来自另一家商店的详细包装)之前,我们非常喜欢的一个老套路是“边缘复制”套路。
这是一个非常简单的例程,代码如下:
- (defun c:ee ()
- (setq OROSMODE (getvar "OSMODE"))
- (setvar "osmode" 512)
- (setq P1 (getpoint "\n Select edge to be copied:"))
- (command "solidedit" "edge" "copy" P1 "" P1 P1 "" "")
- (setvar "osmode" OROSMODE)
- )
它在ACAD实体(拾取时)的边缘创建直线/圆弧/圆/样条曲线。
我想做的是,它具有与ProSteel元素相同的功能。
我的想法是让例程检测选定边缘的元素的名称,如果元素是ACAD实体,则按常规进行。但是,如果该元素是ProSteel元素,则必须首先将其转换为ACAD实体。
我有以下代码,它在ProSteel元素上执行任务:
- (defun c:ep ()
- (SETVAR "CMDECHO" 0)
- (setq OROSMODE (getvar "OSMODE"))
- (setq ORPICKSTYLE (getvar "pickstyle"))
- (setvar "pickstyle" 0)
- (setvar "osmode" 512)
- (setq P1 (getpoint "\n Select edge to be copied:"))
- (setq epPSss (ssget P1))
- (command "copybase" "0,0,0" epPSss "" "pasteclip" "0,0,0")
- (command "draworder" "L" "" "front")
- (command "PS_CREATE_ACIS" "L" "" "N" "N" "Y" "Y")
- (command "chprop" "l" "" "c" "11" "")
- (setq epACss (ssget "L"))
- (command "solidedit" "edge" "copy" P1 "" P1 P1 "" "")
- (command "chprop" "l" "" "c" "7" "")
- (command "erase" epacss "")
- (setvar "osmode" OROSMODE)
- (setvar "pickstyle" ORPICKSTYLE)
- (princ)
- )
但是我想让例程确定元素类型,然后继续执行适合元素类型的例程。
例如:
- (defun c:eeTEST ()
- (SETVAR "CMDECHO" 0)
- (setq OROSMODE (getvar "OSMODE"))
- (setq ORPICKSTYLE (getvar "pickstyle"))
- (setvar "pickstyle" 0)
- (setvar "osmode" 512)
- (setq P1 (getpoint "\n Select edge to be copied:"))
- (setq epPSss (ssget P1))
- [color="red"](cond
- (= epPSss <PROSTEEL ELEMENT>)
- (command "copybase" "0,0,0" epPSss "" "pasteclip" "0,0,0")
- (command "draworder" "L" "" "front")
- (command "PS_CREATE_ACIS" "L" "" "N" "N" "Y" "Y")
- (command "chprop" "l" "" "c" "11" "")
- (setq epACss (ssget "L"))
- (command "solidedit" "edge" "copy" P1 "" P1 P1 "" "")
- (command "chprop" "l" "" "c" "7" "")
- (command "erase" epacss "")
- (= epPSss <ACAD SOLID>)
- (command "solidedit" "edge" "copy" P1 "" P1 P1 "" "")
- )[/color]
- (setvar "osmode" OROSMODE)
- (setvar "pickstyle" ORPICKSTYLE)
- (princ)
- )
所有(我认为)ProSteel元素的名称都以“KS_”(例如KS_形状、KS_板等)开头。那么,例程是否有可能根据元素的名称识别元素类型,但仅使用前3个字符来识别ProSteel形状?否则我可以做如下事情:
- '((-4 . "<OR")(0 . "KS_SHAPE,KS_PLATE,KS_BOLT,KS_BENDSHAPE,KS_ARCSHAPE,KS_ARCPLATE,KSBENDPLATE,KS_VOLBODY"))
有关更多详细信息,请查看帮助中的WCMATCH函数-因为过滤器可能使用相同的规则。 |