paulmcz 发表于 2022-7-6 07:13:59

协会62

如何将(62.30)插入实体dxf组码定义中,其中未列出assoc 62(颜色bylayer)?我用entmod函数尝试了cons和append,但都没用。通常,我会将“subst”与“entmod”函数一起使用,但在这种情况下,我不知道该怎么做。
 
有人知道吗?
 
谢谢

David Bethel 发表于 2022-7-6 07:17:22

也许 吧:
 
(附加elst’(62.30))
 
-大卫

paulmcz 发表于 2022-7-6 07:21:11

大卫,我已经试过了。它将元素(62.30)作为组列表的第一个元素,并且不会修改实体。”entmod'返回nil。

Tharwat 发表于 2022-7-6 07:26:08

正如大卫所说。
 
例如
 

(setq s (car (entsel)))
(entmake (append (entget s) '((62 . 30))))

paulmcz 发表于 2022-7-6 07:27:45

谢谢塔瓦。但是,这会返回一个错误:
 
错误:错误的参数类型:lentyp nil

Tharwat 发表于 2022-7-6 07:31:55

这很奇怪。
 
你必须把代码添加到另一个例程中,对吗?
 
你想改变颜色的物体是什么?

paulmcz 发表于 2022-7-6 07:34:47

仅限通过ssget函数过滤的多段线。当我可以替换现有的assoc 62时,效果很好,但如果颜色是bylayer,则assoc 62不存在。所以,我需要把它放进去,给所有的多段线分配颜色30。
这是我做了一些可能违法的事情的代码。我用assoc 8代替图层,用assoc 62代替颜色。它起作用了。“entmod”重建实体,记住assoc 8并将(62.30)添加到正确的位置。但是,正如我所说,这可能是一次“非法行动”。我只是想知道其他人如何处理实体定义组代码中缺少assoc 62的问题。
 
谢谢
 
(defun c:w2 (/ c co cp ecl se sl sn ss)
(setq co 30);(getint "\n Colour number for all polylines: "))
(cond
   ((= polylinelist-pm nil)
    (setq ss                   (ssget "_X" '((0 . "LWPOLYLINE")))
   sl                   (sslength ss)
   c                   0
    )
    (repeat sl
      (setq sn        (ssname ss c)
   se        (entget sn)
   c        (1+ c)
      )
      (if (assoc 62 se)
(setq cp (cdr (assoc 62 se)))
(setq cp 256)
      )
      (setq ecl            (cons sn cp)
   polylinelist-pm(cons ecl polylinelist-pm)
      )
      (if (assoc 62 se)
(setq se (entmod (subst (cons 62 co)(assoc 62 se) se)))
(setq se (entmod (subst (cons 62 co)(assoc 8se) se)))
      )
    )
   )
   (t
    (alert
      "Polylines colour has already been changed
Run W3 to return colours to their original state"
    )
   )
)
(princ)
)

MSasu 发表于 2022-7-6 07:37:52

您是否在提示器上试用过塔瓦的代码,或者您是否将其包含在自己的代码中?在最后一种情况下,您可能希望将其发布到此处以进行进一步调试。
对Tharwat示例的一个观察是,它不会修改所选实体,而是实际创建其副本。要修改实体的特征,请使用ENTMOD而不是ENTMAKE。

Lee Mac 发表于 2022-7-6 07:41:18

考虑以下代码:
 
(defun c:w2 ( / c co e i l s )
   (if (setq co 30) ; (acad_colordlg 1 nil))
       (if polylinelist-pm
         (alert "Polylines colour has already been changed.\nRun W3 to return colours to their original state")
         (if (setq s (ssget "_X" '((0 . "LWPOLYLINE"))))
               (repeat (setq i (sslength s))
                   (setq e (ssname s (setq i (1- i)))
                         l (entget e)
                   )
                   (if (setq c (assoc 62 l))
                     (entmod (subst (cons 62 co) c l))
                     (entmod (append l (list (cons 62 co))))
                   )
                   (setq polylinelist-pm (cons (cons e (cond ((cdr c)) (256))) polylinelist-pm))
               )
               (princ "\nNo LWPolylines found in drawing.")
         )
       )
   )
   (princ)
)

paulmcz 发表于 2022-7-6 07:45:27

谢谢你,李。它工作得很好,我现在可以看到诀窍了。将多段线列表添加到(list(cons 62 co)),将(62.30)放在末尾。
太简单了!
再次感谢李和大家。
页: [1] 2
查看完整版本: 协会62