shailujp 发表于 2022-7-5 23:23:50

多if#039;s,但只有2个

你好
 
我需要一些关于我正在处理的lisp的帮助。这是一个巨大的lisp的一部分,我有并希望改进和添加更多的步骤,以减少我的工作。
 
首先,我有3个if在下面
1) 第一个删除中心标记,效果良好
2) 第二种方法寻找多行文字,其样式为SLDTEXTSTYLE0,高度为0.25。这不起作用。
3) 第三个搜索截面箭头,它是实体,只要位于if#2,就可以正常工作。如果启用if#3,则它不工作。我觉得这很奇怪。此外,整个lisp在此点停止,层关闭根本不处理。
4) 另外,我想要一个if#4,它查找线宽为0.3mm的线对象。我试过使用位代码370,但它不起作用。不知道该怎么做。
 
当我看到所有这些时,可能所有这些都可以组合在1 If语句中,而不是全部3或4。请帮忙。
 

(Cond
   ( (and (= apl "G")
   (= iu 1)
   )
   (progn
      (blkrm)
      (CNVRT)
             (if (setq CENTMARK (ssget "_x" '((0 . "INSERT")(2 . "SW_CENTERMARKS*"))))
               (command "erase" CENTMARK "")
             ); end if
             (if (setq TXTSEC (ssget "_x" '((0 . "MTEXT")
                                          (7 . "SLDTEXTSTYLE0")
         (40 . ".25"))))
               (command "erase" TXTSEC "")
             ); end if
             (if (setq SECTARW (ssget "_x" '((0 . "SOLID"))))
               (command "erase" SECTARW "")
             ); end if
      (command "_.-layer" "of" "DIM1,NOTATION,CENTER,PHANTOM" "")
   );end progn
); end cond

MSasu 发表于 2022-7-5 23:30:35

您可以寻找组合过滤器:
(ssget "_X" '((-4 . "<OR")
            (-4 . "<AND")
               (0 . "INSERT")
               (2 . "SW_CENTERMARKS*")
            (-4 . "AND>")

            (-4 . "<AND")
                (0 . "MTEXT")
               (7 . "SLDTEXTSTYLE0")
            (-4 . "AND>")

            (0 . "SOLID")
             (-4 . "<OR")
            ))

shailujp 发表于 2022-7-5 23:34:20

此外,(40。“0.25”)是否正确过滤具有高度的多行文字。25?
 
如何过滤线宽为0.30mm的线?

shailujp 发表于 2022-7-5 23:36:50

我真的需要这个工作。有人能回答我的问题吗?

shailujp 发表于 2022-7-5 23:41:30

Soory Shailujp,我确实错过了你的回复。
对于多行文字高度,请注意,它必须作为实值提供,而不是作为字符串提供:

             (if
            (setq sect
               (ssget "_X" '(
                           (-4 . "<OR")

                           (-4 . "<AND")
                           (0 . "INSERT")
                           (2 . "SW_CENTERMARKS*")
                           (-4 . "AND>")

                           (-4 . "<AND")
                           (0 . "MTEXT")
                           (7 . "SLDTEXTSTYLE0")
                           (40 . "0.25")
                              (-4 . "AND>")

                           (-4 . "<AND")   
                           (0 . "SOLID")
                           (-4 . "AND>")
                           (-4 . "OR>")
                            )
               )
            )
            (command "erase" sect "")
             ); end if

当谈到实体时,是那些三维实体实体(然后使用3DSOLID作为实体名称)还是与图案填充类似的实体(由solid命令创建)?

MSasu 发表于 2022-7-5 23:46:42

MSasu成功了,
 
它删除了文本。
 
固体是箭头。
 
最后一件事,如何通过0.3mm的线宽进行过滤?
 
这是我正在做的事情的前后。
 
第一个图像是我的原始绘图,第二个是我的例程对其所做的操作。外面剩下的两行是我试图通过lisp删除的。

shailujp 发表于 2022-7-5 23:53:25

 
试试这个过滤器。
 
(40 . 0.25)

Tharwat 发表于 2022-7-5 23:57:20

 
这奏效了。
 
谢谢MSasu和Tharwat的帮助。
干杯

shailujp 发表于 2022-7-5 23:59:59

很高兴听到。

Tharwat 发表于 2022-7-6 00:03:16

很高兴你找到了解决方案,但从你的图片来看。。。。。。你就不能按图层名称过滤吗?
页: [1] 2
查看完整版本: 多if#039;s,但只有2个