ronjonp 发表于 2022-7-5 16:24:23

你确定你的所有图案填充都在层“08_Proposed Data”上并且所有层都已解锁吗?

K Baden 发表于 2022-7-5 16:33:16

嗯。也许是因为块内的图案填充在技术上是在bylayer上,块本身是在08_提出的数据上。也许应该在搜索要编辑的选定块时指定图层?

K Baden 发表于 2022-7-5 16:37:17

我已经在下面这段代码的最新版本中修复了背景色问题。我唯一要解决的问题是为什么它不能处理动态块。有没有其他方法可以调用块内动态的图案填充?
 
编辑
你说得对,这是因为动态块内的图案填充设置为ByBlock layer,而不是08_建议的数据。我不理解为什么/如何在块内指定图案填充层,而不是块本身。层限定符的位置在哪里,以便编辑08_提议的数据层上块内的所有阴影?
 
我认为从我的观点来看,它应该指定块所在的图层,然后指定其中的图案填充选择,然后指定实体图案填充选择。似乎图层限定符影响的是块内的图案填充,而不是整个块。有什么建议吗?
 
 
(defun c:planproposedhatch (/ doc)
(or *colorobject*
   (setq *colorobject*
   (vla-getinterfaceobject
       (vlax-get-acad-object)
       (strcat "AutoCAD.AcCmColor." (substr (getvar "acadver") 1 2))
   )
   )
)
(if
   (null (vl-catch-all-error-p (vl-catch-all-apply 'vla-setrgb (list *colorobject* 255 255 255))))
    (progn (vlax-for blk (vla-get-blocks (setq doc (vla-get-Activedocument (vlax-get-acad-object))))
      (if (= :vlax-false (vla-get-isxref blk))
        (vlax-for obj blk
          (if (and (vlax-write-enabled-p obj)
                        (= "08_Proposed Data" (vla-get-layer obj))
                   (= "AcDbHatch" (vla-get-objectname obj))
                   (= "SOLID" (strcase (vla-get-patternname obj)))   
              )
                   (progn
                     (vla-setPattern obj acHatchPatternTypePreDefined "ANSI31")
                     (vla-put-patternscale obj 12)
              (vl-catch-all-apply 'vla-put-backgroundcolor (list obj *colorobject*))
          )
        )
      )
            )
    )
    (vla-regen doc acallviewports)
    )
)
(vl-load-com)

(princ)
);defun
 
编辑2
 
我试着这样做,看看它是否只捕获块和get的layer属性,activex服务器错误“未知名称:layer”
 
(defun c:planproposedhatch (/ doc)
(or *colorobject*
   (setq *colorobject*
   (vla-getinterfaceobject
       (vlax-get-acad-object)
       (strcat "AutoCAD.AcCmColor." (substr (getvar "acadver") 1 2))
   )
   )
)
(if
   (null (vl-catch-all-error-p (vl-catch-all-apply 'vla-setrgb (list *colorobject* 255 255 255))))
    (progn
    (vlax-for blk
        (vla-get-blocks (setq doc (vla-get-Activedocument (vlax-get-acad-object))))
    (if (and (= "08_Proposed Data" (vla-get-layer blk))
          (= :vlax-false (vla-get-isxref blk))
          )
        (vlax-for obj blk
          (if (and (vlax-write-enabled-p obj)
                   (= "AcDbHatch" (vla-get-objectname obj))
                   (= "SOLID" (strcase (vla-get-patternname obj)))   
              )
                   (progn
                     (vla-setPattern obj acHatchPatternTypePreDefined "ANSI31")
                     (vla-put-patternscale obj 12)
              (vl-catch-all-apply 'vla-put-backgroundcolor (list obj *colorobject*))
          )
        )
      )
            )
    )
    (vla-regen doc acallviewports)
    )
)
(vl-load-com)

(princ)
);defun
页: 1 [2]
查看完整版本: 参数过多问题