明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 893|回复: 20

[讨论] 期待通过lisp把字体‘standard’另存为名的操作

[复制链接]
发表于 2024-7-27 00:18:11 | 显示全部楼层 |阅读模式
本帖最后由 寒潮大冬瓜 于 2024-7-27 00:29 编辑

能顺利用代码实现全选0图层图元移动到新图层,可惜还没找到能通过lisp把字体‘standard’另存为名的操作!
http://bbs.mjtd.com/forum.php?mo ... 8144&fromuid=418631
主要是想完全修改名称,明显用andyding于2023-7-4 16:10编辑的代码还是有‘standard’字体未能实现另存名的。

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-7-27 17:17:28 | 显示全部楼层

(defun c:tt1  nil
  (vl-load-com)
(setq myacad (vlax-get-acad-object))                       ;获取AutoCAD应用程序对象
(setq mydoc (vla-get-activedocument myacad))               ;获取活动文档对象
  
  (setq dbx (vl-catch-all-apply 'vla-getinterfaceobject (list myacad (if (< (setq vrs (atoi (getvar 'acadver))) 16) "objectdbx.axdbdocument" (strcat "objectdbx.axdbdocument." (itoa vrs))))))

  (setq old "你") ;已有的样式名
  (setq new "我") ;新增的样式名
  (setq pattern (strcat old "," old "$*"))
  (setq lst '() lst2 '())
  
  (vlax-for o doc_dims (and (wcmatch (vla-get-name o) pattern) (setq lst (cons o lst))))

  (vlax-invoke mydoc 'copyobjects lst (vla-get-dimstyles dbx))
  (foreach n (mapcar 'vla-get-name lst) (setq lst2 (cons (vla-item (vla-get-dimstyles mydoc) n) lst2)))

  (foreach o lst (vla-put-name o (vl-string-subst new old (vla-get-name o)))) ;当前样式改名
  
  (vlax-invoke dbx 'copyobjects lst2 (vla-get-dimstyles mydoc)) ;复制回当前
  (princ)
  )

点评

很棒!  发表于 2024-7-30 23:51

评分

参与人数 1明经币 +1 收起 理由
寒潮大冬瓜 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2024-7-28 12:24:53 | 显示全部楼层
本帖最后由 bonny 于 2024-7-28 12:28 编辑

所谓另存,只是主观感受的描述,实际上就是新建一个样式,继承了各种属性(名字除外,句柄啥的其它的自动会修正的)
  • (entmakex(subst (cons 2 "波多菠萝蜜") (cons 2 "Standard") (entget (tblobjname "STYLE" "Standard"))))

点评

很透彻!  发表于 2024-7-29 20:49
果然悟透了  发表于 2024-7-29 14:09

评分

参与人数 1明经币 +1 收起 理由
寒潮大冬瓜 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-7-29 20:46:00 | 显示全部楼层
本帖最后由 寒潮大冬瓜 于 2024-7-29 20:47 编辑
自贡黄明儒 发表于 2024-7-29 14:13
来一个VBA AI写的"新建文字样式"

感谢黄大侠指导!
;sxxg1属性块参数修改黄明儒大侠收集函数
(DEFUN C:sxxg1()
        ;(setq CSNewwenziName2024(getstring(strcat "\n请输入拟修改的属性块内参数名:<修正号>")))
        ;(setq NewwenziName2024(getstring(strcat "\n请输入拟修改的属性块内参数名:<A>")))
        ;(princ "\n请选择要改变的图元文字样式名2024年04月29日22时07分10秒")
        (MJ-ChangeAttribute (list (car (entsel)) '("修正号" . "")))
                ;(MJ-ChangeAttribute (list (car (entsel)) '(CSNewwenziName2024 . NewwenziName2024)))
                        ;(MJ-ChangeAttribute (list (car (entsel)) '(CSNewwenziName2024  NewwenziName2024)))
        (princ))
;;30.5 [功能] 更改块多个属性
;; 示例: (MJ-ChangeAttribute (list ename '("MJ-Attribute" . "NewValue")))
;; 示例 (MJ-ChangeAttribute (list (car (entsel)) '("设计" . "NewValue")))
(defun MJ-ChangeAttribute (lst / item atts)
  (vl-load-com)
  (if (safearray-value
                                (setq atts
                                        (vlax-variant-value
                                                (vla-getattributes (vlax-ename->vla-object (car lst)))
                                        )
                                )
      )
    (progn
      (foreach item (cdr lst)
                                (mapcar
                                        '(lambda (x)
                                                 (if
                                                         (= (strcase (car item)) (strcase (vla-get-tagstring x)))
                                                         (vla-put-textstring x (cdr item))
                                                 )
                                         )
                                        (vlax-safearray->list atts)
                                )
      )
      (vla-update (vlax-ename->vla-object (car lst)))
    )
  )
)

这个我想实现参数化,似乎还差大侠指导一下
发表于 2024-7-27 00:50:33 | 显示全部楼层
(command "-RENAME" "D" "Standard" "NewDimstyle")
发表于 2024-7-27 09:06:45 | 显示全部楼层
下载试用一下,谢谢分享
 楼主| 发表于 2024-7-27 10:36:08 | 显示全部楼层
hi7720 发表于 2024-7-27 00:50
(command "-RENAME" "D" "Standard" "NewDimstyle")

感谢指导!我试了似乎没能实现……
发表于 2024-7-27 13:43:48 | 显示全部楼层
标注样式“Standard”和文字样式“Standard” 不能删除和改名的,和图层"0" 一个道理
 楼主| 发表于 2024-7-27 15:59:31 | 显示全部楼层
pzweng 发表于 2024-7-27 13:43
标注样式“Standard”和文字样式“Standard” 不能删除和改名的,和图层"0" 一个道理

感谢大侠指导!我就是想通过lisp代码来实现,0图层就是通过‘YESE2024移动0图层图元到指定图层.lsp’实现了,特意在这里期待大侠出手指导实现
发表于 2024-7-27 16:13:59 | 显示全部楼层
寒潮大冬瓜 发表于 2024-7-27 15:59
感谢大侠指导!我就是想通过lisp代码来实现,0图层就是通过‘YESE2024移动0图层图元到指定图层.lsp’实现 ...

将0图层上的图元移到其它层? LAYTRANS 这个命令知道吗?
 楼主| 发表于 2024-7-27 16:27:02 | 显示全部楼层
pzweng 发表于 2024-7-27 16:13
将0图层上的图元移到其它层? LAYTRANS 这个命令知道吗?

我是菜鸟!感谢指导!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 12:53 , Processed in 0.183569 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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