乐筑天下

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

[编程交流] 标记多线样式的字段

[复制链接]

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 04:35:05 | 显示全部楼层 |阅读模式
创建许多多线样式以绘制车间细节的管道。
现在我有点迷失了,哪一个是哪一个。
我认为field是我为所有使用的管道(多线样式)添加标签的解决方案。
手动可以,但我需要加快标记过程。
因为这是我第一次接触菲尔德,我又迷路了。
字段宏(?)如下所示(从字段对话框):
  1. (%<\AcObjProp Object(%<\[color=red]_ObjId 2128066088[/color]>%).StyleName \f "%tc1">%)
其中红色部分是对象ID。
尝试编写脚本,但在打开字段的对话框时停止。
有没有自动化标签的想法?
例如:
按钮(命令)
选择对象
拾取插入点
...然后转到下一个。
非常感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 04:43:20 | 显示全部楼层
我认为Field命令没有命令行版本,因此需要使用ActiveX方法创建字段。
 
下面是一个快速示例:
 
  1. (defun c:mlfield ( / dc en pt )
  2.    (while
  3.        (progn
  4.            (while
  5.                (progn (setvar 'ERRNO 0) (setq en (car (entsel "\nSelect MLine: ")))
  6.                    (cond
  7.                        (   (= 7 (getvar 'ERRNO)) (princ "\nMissed, try again."))
  8.                        (   (eq 'ENAME (type en))
  9.                            (if (not (eq "MLINE" (cdr (assoc 0 (entget en)))))
  10.                                (princ "\nPlease Select an MLine.")
  11.                            )
  12.                        )
  13.                    )
  14.                )
  15.            )
  16.            (if (and en (setq pt (getpoint "\nSpecify Point for Field: ")))
  17.                (vla-addtext
  18.                    (   (if (= 1 (getvar 'CVPORT)) vla-get-paperspace vla-get-modelspace)
  19.                        (setq dc (vla-get-activedocument (vlax-get-acad-object)))
  20.                    )
  21.                    (strcat "%<\\AcObjProp Object(%<\\_ObjId "
  22.                        (if
  23.                            (and
  24.                                (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
  25.                                (vlax-method-applicable-p (vla-get-utility dc) 'getobjectidstring)
  26.                            )
  27.                            (vla-getobjectidstring (vla-get-utility dc) (vlax-ename->vla-object en) :vlax-false)
  28.                            (itoa (vla-get-objectid (vlax-ename->vla-object en)))
  29.                        )
  30.                        ">%).StyleName \\f "%tc1">%"
  31.                    )
  32.                    (vlax-3D-point (trans pt 1 0)) (getvar 'TEXTSIZE)
  33.                )
  34.            )
  35.        )
  36.    )
  37.    (princ)
  38. )
  39. (vl-load-com) (princ)
回复

使用道具 举报

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 04:44:06 | 显示全部楼层
哇,谢谢,太快了。
我如何知道使用任何:
  1. (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))

天啊。。。
再次感谢你
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 04:49:24 | 显示全部楼层
不客气
 
 
实际上,如果您确信例程将只在64位或32位上使用(而不是在两者之间使用),那么这一部分是不必要的;因为对于32位/64位平台,获取ObjectID的方法必然不同。
 
对于32位平台,您将使用:
 
然而,这在64位环境中不起作用。即使使用替代的vla-get-objectid32也不够,因为转换为字符串将对整数施加32位限制。
 
因此,我们使用:
 
  1. (vla-getobjectidstring <Utility Object> <VLA-Object> <Hexadecimal?>)
回复

使用道具 举报

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 04:56:03 | 显示全部楼层
最重要的是:它正在发挥作用。
谢谢李的启发。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 04:58:27 | 显示全部楼层
作为我在这个帖子中发布的程序的扩展,我创建了一个“快速字段”程序。该程序将允许您为此类任务快速创建自定义字段命令。
 
我网站上的程序页面更详细地描述了该程序-请阅读,如果您在使用该程序时有任何问题,请告诉我
 
回复

使用道具 举报

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 05:05:02 | 显示全部楼层
试图重用此代码将块名称字段插入dwg屏幕
程序要求选择block并再次选择block,但什么也没有发生。
我做错了什么?
 
  1. (defun c:blf ( / dc en pt )
  2.    (while
  3.        (progn
  4.            (while
  5.                (progn (setvar 'ERRNO 0) (setq en (car (entsel "\nSelect block: ")))
  6.                    (cond
  7.                        (   (= 7 (getvar 'ERRNO)) (princ "\nMissed, try again."))
  8.                        (   (eq 'ENAME (type en))
  9.                            (if (not (eq "block" (cdr (assoc 0 (entget en)))))
  10.                                (princ "\nPlease Select an block.")
  11.                            )
  12.                        )
  13.                    )
  14.                )
  15.            )
  16.            (if (and en (setq pt (getpoint "\nSpecify Point for Field: ")))
  17.                (vla-addtext
  18.                    (   (if (= 1 (getvar 'CVPORT)) vla-get-paperspace vla-get-modelspace)
  19.                        (setq dc (vla-get-activedocument (vlax-get-acad-object)))
  20.                    )
  21.                    (strcat "%<\\AcObjProp Object(%<\\_ObjId "
  22.                        (if
  23.                            (and
  24.                                (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
  25.                                (vlax-method-applicable-p (vla-get-utility dc) 'getobjectidstring)
  26.                            )
  27.                            (vla-getobjectidstring (vla-get-utility dc) (vlax-ename->vla-object en) :vlax-false)
  28.                            (itoa (vla-get-objectid (vlax-ename->vla-object en)))
  29.                        )
  30.                                          ">%)._EffectiveName \\f "%tc4"
  31.                    )
  32.                    (vlax-3D-point (trans pt 1 0)) (getvar 'TEXTSIZE)
  33.                )
  34.            )
  35.        )
  36.    )
  37.    (princ)
  38. )
  39. (vl-load-com) (princ)
回复

使用道具 举报

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 05:07:17 | 显示全部楼层
好的,用“QuickField”解决了,但仍然想知道,上述代码(BLF)有什么问题
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 05:10:39 | 显示全部楼层
 
这:
  1. (not (eq "block" (cdr (assoc 0 (entget en)))))

应该是:
  1. (not (eq "INSERT" (cdr (assoc 0 (entget en)))))

 
这是:
  1. ">%)._EffectiveName \\f "%tc4"

应该是:
  1. ">%).EffectiveName \\f "%tc4">%"
回复

使用道具 举报

22

主题

272

帖子

254

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2022-7-6 05:16:01 | 显示全部楼层
我按照指示进行了更改(我认为是这样):
  1. (defun c:blf ( / dc en pt )
  2.    (while
  3.        (progn
  4.            (while
  5.                (progn (setvar 'ERRNO 0) (setq en (car (entsel "\nSelect block: ")))
  6.                    (cond
  7.                        (   (= 7 (getvar 'ERRNO)) (princ "\nMissed, try again."))
  8.                        (   (eq 'ENAME (type en))
  9.                            (if (not (eq "INSERT" (cdr (assoc 0 (entget en)))))
  10.                                (princ "\nPlease Select an block.")
  11.                            )
  12.                        )
  13.                    )
  14.                )
  15.            )
  16.            (if (and en (setq pt (getpoint "\nSpecify Point for Field: ")))
  17.                (vla-addtext
  18.                    (   (if (= 1 (getvar 'CVPORT)) vla-get-paperspace vla-get-modelspace)
  19.                        (setq dc (vla-get-activedocument (vlax-get-acad-object)))
  20.                    )
  21.                    (strcat "%<\\AcObjProp Object(%<\\_ObjId "
  22.                        (if
  23.                            (and
  24.                                (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
  25.                                (vlax-method-applicable-p (vla-get-utility dc) 'getobjectidstring)
  26.                            )
  27.                            (vla-getobjectidstring (vla-get-utility dc) (vlax-ename->vla-object en) :vlax-false)
  28.                            (itoa (vla-get-objectid (vlax-ename->vla-object en)))
  29.                        )
  30.                         ">%).EffectiveName \\f "%tc4">%"
  31.                    )
  32.                    (vlax-3D-point (trans pt 1 0)) (getvar 'TEXTSIZE)
  33.                )
  34.            )
  35.        )
  36.    )
  37.    (princ)
  38. )
  39. (vl-load-com) (princ)

 
并显示“参数太多”错误。我现在搞砸了什么?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:49 , Processed in 0.395600 second(s), 72 queries .

© 2020-2025 乐筑天下

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