明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 438|回复: 1

求助

[复制链接]
发表于 2023-4-3 16:35 | 显示全部楼层 |阅读模式
本帖最后由 305341043 于 2023-4-3 16:37 编辑

(defun C:C3 ()
        (defun PutAttrib (Obj ValTable / AttList)
                (setq AttList (vlax-safearray->list (vlax-variant-value (vlax-invoke-method Obj 'GetAttributes))))
                (foreach Att AttList
                        (if        (setq AttVal (assoc (vlax-get-property Att 'TagString) ValTable))
                                (vlax-put-property Att 'TextString (cadr AttVal))
                        )
                )
        )
        
        (defun GetAttrib (Obj / ValTable AttList AttCode)
                (setq ValTable '())
                (setq AttList (vlax-safearray->list (vlax-variant-value (vlax-invoke-method Obj 'GetAttributes))))
                (foreach Att AttList
                        (if        (setq AttCode (vlax-get-property Att 'TagString))
                                (setq ValTable (cons (list AttCode (vlax-get-property Att 'TextString)) ValTable))
                        )
                )
                ValTable
        )
        
        (vl-load-com)
        (setq obj (vlax-ename->vla-object (car (entsel))))
        (setq pt (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint obj))))
        (setq typ (vla-get-ObjectName obj))
        (cond
                ((= typ "AcDbText") (setq num (atoi (vla-get-TextString obj))))
                ((= typ "AcDbBlockReference") (setq num (atoi (cadar (GetAttrib obj)))))
                (t (alert "\n选择不正确!") (exit))
        )
        
        (initget "D T S")
        (setq i 1)
        (while (setq result (getpoint pt "\n请选择插入点:[或递增(D)/不变(T)/递减(S)]"))
                (cond
                        ((= result "D")(setq i 1))
                        ((= result "T")(setq i 0))
                        ((= result "S")(setq i -1))
                        ((= (type result) 'list)
                                (setq newobj (vla-Copy obj))
                                (setq num (+ num i))
                                (cond
                                        ((= typ "AcDbText") (vla-put-TextString newobj (itoa num)))
                                        ((= typ "AcDbBlockReference") (PutAttrib newobj (list (list "M" (itoa num)))))
                                )                                
                                (vla-Move newobj (vlax-3D-point pt) (vlax-3D-point result))
                                (setq pt result obj newobj)
                        )
                )
                (initget "D T S")
        )
        (princ)
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-4-3 21:03 | 显示全部楼层
不能用的那个符号是块中块.程序没获得属性
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-6-16 09:33 , Processed in 0.130164 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表