乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 32|回复: 11

[编程交流] 更改属性textstyle wit

[复制链接]

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:30:06 | 显示全部楼层 |阅读模式
大家好
 
我试图创建一个lisp例程来更改块中的属性textstyle,在同一个图形中有多个不同的块需要更改。
这也适用于许多图纸,使其符合更新的CAD标准。
附件是当前程序,但我在关联第一部分块的变量时遇到问题,因为我需要当前的文本样式和文本高度,然后才能定义新值。
我能够将ActiveX名称转换为lisp名称并设置变量“nam”,但我无法从这个“块”对象中提取任何文本变量。
下面的部分,属性定义,似乎有效。
我还附上了一个小样本的块。如果双击块并选中文本选项,则文本样式为TXT-35(TXT-18)。如果分解块,文字样式为罗马文字,具有不同的高度。
感谢您的帮助。
当做
史蒂夫
演示CBS_1。lsp
参考-1。图纸
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 17:38:58 | 显示全部楼层
Ho Corro,
 
 
我已经包括了一个文件,其中有一个a去年写的例程。它并没有很好的文档记录,但可能有一些东西你可以使用。
 
 
问题是,我是否可以编写一个应用程序,能够更改具有特定块名的列表的文本样式。也许它有用,也许它不是。。。
 
 
gr.Rlx
vth。LSP
回复

使用道具 举报

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:41:35 | 显示全部楼层
大家好
我现在有一个时间表来完成这个列表例程。
附件是我的目的,但我需要能够确定属性的当前TextStyle,然后比较它们以设置替换TextStyle。
我还附上了一个包含属性和属性定义的块的示例,我需要更改这两个块的textstyle。
同时附上了我如何将当前的文本风格与新风格进行比较的设想。
感谢您的帮助。
谢谢
哥伦比亚广播公司。lsp
参考-1。图纸
示例条件声明。txt文件
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:49:06 | 显示全部楼层
@腐蚀:
请尝试下面的代码。
注意:att.REF使用的某些文本样式与att.DEF使用的文本样式不匹配。代码并没有解决这个问题。
  1. (vl-load-com)
  2. ; Return 1 or 0 (=fail).
  3. (defun TextStyleChange (obj / hgt newStl stl)
  4. (setq hgt (vla-get-height obj))
  5. (setq stl (strcase (vla-get-stylename obj)))
  6. (if
  7.    (and
  8.      (setq newStl
  9.        (cond
  10.          ((wcmatch stl "TXT-##,TXT-#")
  11.            (strcat (substr stl 5) "-TEXT")
  12.          )
  13.          ((= stl "ROMANS")
  14.            (cond
  15.              ((vl-position hgt '(1.3 2.6 6.5 13.0 26.0 32.5 65.0 130.0))
  16.                "13-TEXT"
  17.              )
  18.              ((vl-position hgt '(1.8 3.6 9.0 18.0 36.0 45.0 90.0 180.0))
  19.                "18-TEXT"
  20.              )
  21.              ((= hgt 250.0)
  22.                "25-TEXT"
  23.              )
  24.              ((vl-position hgt '(3.5 7.0 17.5 35.0 70.0 87.5 175.0 350.0))
  25.                "35-TEXT"
  26.              )
  27.              ((vl-position hgt '(5.0 10.0 25.0 50.0 100.0 125.0 500.0)) ; Removed: 250.0.
  28.                "5-TEXT"
  29.              )
  30.              (T
  31.                "7-TEXT"
  32.              )
  33.            )
  34.          )
  35.        )
  36.      )
  37.      (tblobjname "style" newStl)
  38.    )
  39.    (progn
  40.      (vla-put-stylename obj newStl)
  41.      1
  42.    )
  43.    (progn
  44.      (princ (strcat "\nError: " newStl " not found "))
  45.      0
  46.    )
  47. )
  48. )
  49. (defun c:demo ( / doc i ss)
  50. (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  51. (vlax-for blk (vla-get-blocks doc)
  52.    (if (= :vlax-false (vla-get-isxref blk))
  53.      (vlax-for obj blk
  54.        (if (= (vla-get-objectname obj) "AcDbAttributeDefinition")
  55.          (TextStyleChange obj)
  56.        )
  57.      )
  58.    )
  59. )
  60. (if (setq ss (ssget "_X" '((0 . "INSERT") (66 . 1))))
  61.    (repeat (setq i (sslength ss))
  62.      (foreach obj (vlax-invoke (vlax-ename->vla-object (ssname ss (setq i (1- i)))) 'getattributes)
  63.        (TextStyleChange obj)
  64.      )
  65.    )
  66. )
  67. (vla-regen doc acallviewports)
  68. (princ)
  69. )
回复

使用道具 举报

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:56:53 | 显示全部楼层
嗨,罗伊
谢谢你的回复。
运行时,会出现错误“错误的参数类型:stringp nil”
变量“hgt”、“newstl”、“doc”和“obj”均为零。
有什么想法吗?
谢谢
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:59:35 | 显示全部楼层
问题是由以下线路引起的:
如果newStl为零,则(strcat)将失败。
 
修订代码:
  1. (vl-load-com)
  2. ; Returns T or nil (=fail).
  3. (defun TextStyleChange (obj / hgt newStl stl)
  4. (setq hgt (vla-get-height obj))
  5. (setq stl (strcase (vla-get-stylename obj)))
  6. (if
  7.    (and
  8.      (setq newStl
  9.        (cond
  10.          ((wcmatch stl "TXT-##,TXT-#")
  11.            (strcat (substr stl 5) "-TEXT")
  12.          )
  13.          ((= stl "ROMANS")
  14.            (cond
  15.              ((vl-position hgt '(1.3 2.6 6.5 13.0 26.0 32.5 65.0 130.0))
  16.                "13-TEXT"
  17.              )
  18.              ((vl-position hgt '(1.8 3.6 9.0 18.0 36.0 45.0 90.0 180.0))
  19.                "18-TEXT"
  20.              )
  21.              ((= hgt 250.0)
  22.                "25-TEXT"
  23.              )
  24.              ((vl-position hgt '(3.5 7.0 17.5 35.0 70.0 87.5 175.0 350.0))
  25.                "35-TEXT"
  26.              )
  27.              ((vl-position hgt '(5.0 10.0 25.0 50.0 100.0 125.0 500.0)) ; Removed: 250.0.
  28.                "5-TEXT"
  29.              )
  30.              (T
  31.                "7-TEXT"
  32.              )
  33.            )
  34.          )
  35.        )
  36.      )
  37.      (or
  38.        (tblobjname "style" newStl)
  39.        (progn
  40.          (princ (strcat "\nError: " newStl " not found "))
  41.          nil
  42.        )
  43.      )
  44.    )
  45.    (progn
  46.      (vla-put-stylename obj newStl)
  47.      T
  48.    )
  49. )
  50. )
  51. (defun c:demo ( / doc i ss)
  52. (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  53. (vlax-for blk (vla-get-blocks doc)
  54.    (if (= :vlax-false (vla-get-isxref blk))
  55.      (vlax-for obj blk
  56.        (if (= (vla-get-objectname obj) "AcDbAttributeDefinition")
  57.          (TextStyleChange obj)
  58.        )
  59.      )
  60.    )
  61. )
  62. (if (setq ss (ssget "_X" '((0 . "INSERT") (66 . 1))))
  63.    (repeat (setq i (sslength ss))
  64.      (foreach obj (vlax-invoke (vlax-ename->vla-object (ssname ss (setq i (1- i)))) 'getattributes)
  65.        (TextStyleChange obj)
  66.      )
  67.    )
  68. )
  69. (vla-regen doc acallviewports)
  70. (princ)
  71. )
回复

使用道具 举报

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:04:35 | 显示全部楼层
嗨,罗伊
工作起来很有魅力。
另一个要求刚刚提出,如果当前样式存在,例如35-TEXT,但它有罗马字体,则例程需要将其更改为ARIAL字体。
你要帮忙吗?
再次感谢
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 18:08:41 | 显示全部楼层
您可能需要更改的名称。ttf文件(“arial.ttf”)。
所有#-文本和#-文本样式都更改为Arial(但我不确定这是否是您想要的)。
  1. 3
回复

使用道具 举报

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:16:03 | 显示全部楼层
嗨,罗伊
它生成“自动化错误。文件错误”
以前从未见过。
任何想法。
再次感谢
回复

使用道具 举报

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:20:42 | 显示全部楼层
嗨,罗伊
已解决错误。
只需为arial添加文件位置。ttf文件
谢谢
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 03:05 , Processed in 0.445744 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表