龙龙仔 发表于 2002-11-18 15:32:00

程序对带有中心十字标注NEST BLOCK的颜色却有点问题!!!!請指教...

;;这是一个修改颜色的程序,
;;几乎对所有对象包括NEST BLOCK均有效
;;但它对带有中心十字标注NEST BLOCK的颜色却有点问题
;;当炸开带有中心十字标注的NEST BLOCK
;;中心十字颜色即恢覆原色
;;可有解决辨法?????


(defun C:CH_COLOR (/ QQ APP APPDOC COL)

(defun DO_1 (M)

    (vl-catch-all-apply
      (function        (lambda        ()
                  (vla-put-color M COL)
                  (vla-put-dimensionlinecolor M COL)
                  (vla-put-textcolor M COL)
                  (vla-put-extensionlinecolor M COL)
                )
      )
    )

    (if        (and (= (vla-get-objectname M) "AcDbBlockReference")
             (= (vla-get-hasattributes M) :vlax-true)
        )
      (mapcar
        '(lambda (NN)
           (vla-put-color NN COL)
       )
        (vlax-safearray->list
          (vlax-variant-value
          (vla-getattributes
              M
          )
          )
        )
      )
    )

    (if        (= (vla-get-objectname M) "AcDbBlockReference")
      (vlax-for        M1 (vla-item (vla-get-blocks APPDOC) (vla-get-name M))
        (DO_1 M1)
      )
    )

    (if        (= "DIMENSION"
           (cdr (assoc 0 (entget (vlax-vla-object->ename M))))
        )
      (vlax-for        M2
                (vla-item
                  (vla-get-blocks APPDOC)
                  (cdr (assoc 2 (entget (vlax-vla-object->ename M))))
                )
        (DO_1 M2)
      )
    )

)

(setq APP (vlax-get-acad-object))
(setq APPDOC (vla-get-activedocument APP))
(vla-startundomark APPDOC)
(setq COL (acad_colordlg 7))
(defun ACTIVE-SS ()
    (vla-get-activeselectionset APPDOC)
)
(setq QQ (ssget (list (cons 410 (getvar "ctab")))))
(setq QQ (ACTIVE-SS))
(vlax-for N QQ
    (DO_1 N)
)
(vla-update APP)
(vla-endundomark APPDOC)
(princ)
)

leeyeafu 发表于 2002-11-19 10:49:00

复龙龙仔大侠

您的程序很漂亮,至于圆心标注颜色问题并不完全是程序错误。我试过,您的程序对于图块嵌套(我不知道你说的NEST BLOCK是不是指嵌套图块)没有发现问题,而仅仅只是在处理炸开后的直径或半径的圆心标记时出现您你说的现象。
仔细阅读了您的程序和AutoCAD DXF文档,在程序中,函数DO_1确实将标注颜色更改了,但炸开后,标注成为单一对象,ACAD将从标注样式表中提取标注样式,引出线、文字等有颜色属性的子对象将使用更改后的颜色,而圆心标记我在DXF文档中未找到其颜色属性(甚至在标注样式表也未找到它,否则可以用修改标注样式表的方法解决问题),从而ACAD调用默认颜色绘制圆心标记,以致出现您所说的问题。
我对AutoCAD,尤其是VisualLISP ActiveX函数的熟悉程度和理解程度可能远不及龙龙仔大侠您,您的问题我无法提出解决方案,SRY。不过,您可试着向陈老师提出问题。也欢迎对此有兴趣的网友继续讨论。

无痕 发表于 2002-12-19 01:33:00

圆心标记不是两条垂直线么?

页: [1]
查看完整版本: 程序对带有中心十字标注NEST BLOCK的颜色却有点问题!!!!請指教...