乐筑天下

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

[编程交流] 文本到属性,然后是cre

[复制链接]

4

主题

27

帖子

23

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:38:30 | 显示全部楼层 |阅读模式
又是你好
 
我加入了李·麦克(txt2att)和塔瓦(qb)的两个很棒的剧本
但我知道这是可以优化的。。。。
 
我这样做的目的是抓取现有的文本(一个接一个),并将其转换为属性,然后转换为块。所以我问你们几个问题:
 
1) 创建属性时,我希望用户提示输入块名,其余的保持原样
 
2) 在引入块名后,它要求文本一个接一个地将每个块转换为具有相同名称但不同值的块,而文本allready具有相同的名称。这可能吗???
 
如果我不清楚,请说出来。
thx高级
 
  1. (defun c:txt2att ( / el i ss st selectionset insertionpoint number Blockname ) (vl-load-com)
  2. (if (setq ss (ssget "_:L" '((0 . "TEXT"))))
  3.    (repeat (setq i (sslength ss))
  4.      (setq el (entget (ssname ss (setq i (1- i))))
  5.            st (vl-string-translate " " "_" (cdr (assoc 1 el)))
  6.      )
  7.      (if
  8.        (entmakex
  9.          (append '((0 . "ATTDEF"))
  10.            (vl-remove-if '(lambda ( pair ) (member (car pair) '(0 100 73))) el)
  11.            (list
  12.              (cons 70  0)
  13.              (cons 74 (cdr (assoc 73 el)))
  14.              (cons  2 st)
  15.              (cons  3 st)
  16.            )
  17.          )
  18.        )
  19.        (entdel (cdr (assoc -1 el)))
  20.      )
  21.    )
  22. )
  23. (if (and (setq selectionset (ssget "_:L"))
  24.           (setq insertionpoint (getpoint "n Specify insertion point :"))
  25.      )
  26.    (progn
  27.      (setq number    1
  28.            Blockname (strcat "MyBlock" (itoa number))
  29.      )
  30.      (while (tblsearch "BLOCK" Blockname)
  31.        (setq Blockname
  32.               (strcat "MyBlock" (itoa (setq number (1+ number))))
  33.        )
  34.      )
  35.      (command "_.-Block" Blockname insertionpoint selectionset "")
  36.      (command "_.-insert" Blockname insertionpoint "" "" "")
  37.    )
  38.    (princ)
  39. )
  40. (princ)
  41. )
回复

使用道具 举报

4

主题

27

帖子

23

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:48:21 | 显示全部楼层
或者如果更简单,另一个脚本:
 
1) 提示用户选择多个文本
2) 提示输入现有块名称
3) 删除文本并在文本位置插入所选块
4) 将块的值替换为上一个文本内容。。。。
 
我的梦是不是太响了???
 
当做
回复

使用道具 举报

4

主题

27

帖子

23

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:02:27 | 显示全部楼层
至少有人能告诉我我疯了哈!哈哈
 
我的目标是用大量文本替换这些块,以便我可以计算它们。
问题是块名称重复,但有许多不同之处,因为在这种情况下,有不同类型的配电盘。
 
对不起,如果这太糟糕了
 
当做
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:12:32 | 显示全部楼层
如果你想的话,你也可以数数文本,只需做一个选择集,然后长度就是数量,你也可以做得更聪明一些,选择所有文本排序列表,然后遍历列表并比较下一个文本值,当它改变时,写出总数。
 
  1. ;This is a bit rough but a starting point
  2. (setq ss1 (ssget  (list (cons 0 "TEXT,MTEXT"))))  ;pick text
  3. (setq len (sslength ss1))
  4. ; the len is the number of text

 
让我们知道这是否是可行的方法
回复

使用道具 举报

4

主题

27

帖子

23

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:21:09 | 显示全部楼层
您好,Bigal thx获得答案
 
嗯,就是这样。我有10个图纸,其中充满了代表不同电气面板的文本片段。
前任。
201202203204,属于配电盘QPP1
201202402403404,属于配电盘QPP2
 
等等
 
正如你们想象的,这是一个有点棘手的计数,因为其中一些是平等的,但从不同的配电盘。。。
 
我想做的是使用一个预制块,名称是配电盘的名称(QPP1、QPP2、QS、QE等),并替换其中的文本:
 
1) 脚本启动并请求块名(在本例中为QPP1、QPP2、QS、QE等)
2) 用户选择现有文本(当然属于特定的配电盘)
3) 脚本读取此文本上存在的数值
4) 然后删除预先拾取的文本
5) 插入选定的块
6) 将块值更改为数值预读
 
p、 用户是我
p、 s.2对我来说,这是在使用另一个脚本或qselect来计数并逐个选择面板值之后
p、 然后留在那里,如果我改变了什么,我可以再次数数,而不是每次我想数数的时候都这么做。。。
p、 s.4我的lisp知识几乎为0
 
对不起,我不清楚。如果是这样,请说
 
当做
回复

使用道具 举报

4

主题

27

帖子

23

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:26:52 | 显示全部楼层

 
我刚刚发现了这个线程:Lisp例程在点位置插入块
 
我正试图改变10/10后的脚本(由艾伦·J·汤普森制作),以满足我的需要。
 
我理解,将行(ssget“_:L”'((0。“POINT”))更改为(ssget“_:L”'((0。“TEXT”))它要求文本,但脚本没有获得文本坐标,并离开脚本。。。你能帮助我吗?
 
顺便说一下,这个脚本已经:
 
1) 脚本启动并请求块名(在本例中为QPP1、QPP2、QS、QE等)
2) 用户选择现有文本(当然属于特定的配电盘)
3)....
4) 然后删除预先拾取的文本
5) 插入选定的块
6)....
 
但仍然忽略了:
 
3) 脚本读取此文本上存在的数值
6) 将块值更改为数值预读
 
thx高级
回复

使用道具 举报

4

主题

27

帖子

23

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:36:44 | 显示全部楼层
你好
 
我在这里也问了一个解决方案,Moshe-a给了我一个,我把l8ter换成了中间插入。
 
谢谢你们
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 08:43:18 | 显示全部楼层
在我存储的代码中,测试很少,看看这个是否有效
  1. (defun C:axbt  (/ *error* acsp adoc align attobj block_coll block_def bname bref
  2. en hgt msg name names orig pmt sset style tag txtobj txtval val)
  3. (vl-load-com)
  4. (defun *error* (msg)
  5.    (if adoc (vla-endundomark  adoc))
  6.    (if
  7.      (and msg
  8.    (not
  9.      (member
  10.        msg
  11.        '("console break"
  12.   "Function cancelled"
  13.   "quit / exit abort"
  14.   ""
  15. )
  16.      )
  17.    )
  18.      )
  19.       (princ (strcat "\nError: " msg))
  20.    )
  21.    (setvar "nomutt" 0)
  22.    
  23.    
  24.    (princ)
  25. )
  26. (or adoc
  27.     (setq adoc (vla-get-activedocument
  28.    (vlax-get-acad-object))))
  29. (or acsp
  30.     (setq acsp (if (= (getvar "CVPORT") 1)
  31.    (vla-get-paperspace
  32.      adoc)
  33.    (vla-get-modelspace
  34.      adoc)
  35.    )
  36.    )
  37.     )
  38. (setq block_coll (vla-get-blocks adoc))
  39. (vla-endundomark adoc)
  40. (vla-startundomark adoc)
  41. (while (tblsearch "BLOCK"
  42.     (setq bname (getstring T "\nEnter block name: ")))
  43.   (progn
  44.     (alert "Block already exist, input another name")
  45.     (setq msg "")
  46.     (vlax-for obj  (setq names (vlax-map-collection block_coll 'vla-get-name))
  47.       (setq name (vla-get-name obj))
  48.       (if (not (wcmatch name "`**"))
  49. (setq msg (strcat msg (vla-get-name obj) "\n"))))
  50.     (alert (strcat "Check existing blocks:\n" msg))))
  51. (setvar "nomutt" 0)
  52. (prompt
  53.   "\nSelect a single text by single pick to get properies from\n")
  54. (setvar "nomutt" 1)
  55. (while (not
  56.   (setq sset (ssget "_:S:L" (list (cons 0 "text")))))
  57.   (alert (strcat "Select text again")))
  58. (setq txtobj (vlax-ename->vla-object (ssname sset 0)))
  59. (setvar "aflags" 4)
  60. (setvar "attreq" 0)
  61. (setvar "attdia" 1)
  62. (setvar "nomutt" 0)
  63. (prompt "\nCreating block with ActiveX method\n")
  64. (setq orig (vlax-get txtobj 'insertionpoint)
  65.       pmt  "Panel type"     ; prompt
  66.       tag  "PANEL_TYPE"     ;tag
  67.       val  (vlax-get txtobj 'textstring)   ;default value
  68.       )
  69. (setq hgt   (vlax-get txtobj 'height)
  70.       style (vlax-get txtobj 'stylename)
  71.       align (vlax-get txtobj 'alignment))
  72. ;; add block definition first
  73. (setq block_def (vla-add block_coll (vlax-3d-point orig) bname))
  74. ;; change properties of the block definition
  75. (vla-put-blockscaling block_def 1)
  76. (vla-put-blockscaling block_def 1)
  77. (vla-put-units block_def 1) ; possible enums: acInsertUnitsInches, acInsertUnitsUnitless, acInsertUnitsMillimeters, acInsertUnitsMeters, etc
  78. ;; add attribute
  79. (setq attobj (vlax-invoke
  80. block_def
  81. 'addattribute
  82. hgt
  83. acattributemodepreset
  84. pmt
  85. orig
  86. tag
  87. val))
  88. ;; change properties of the attribute
  89. (vlax-put attobj 'alignment align)
  90. (vlax-put attobj 'stylename style)
  91. (vla-put-layer attobj "0")
  92. (vlax-put attobj 'color 0)
  93. (princ "\n")
  94. (if (not (tblsearch "BLOCK" bname))
  95.   (progn
  96.     (alert "Error on  creating blocks")
  97.     (exit)
  98.     (princ))
  99.   (progn
  100.     (setvar "nomutt" 0)
  101.     (prompt "\n\nSelect all texts to convert to blocks\n")
  102.     (setvar "nomutt" 1)
  103.     (if (setq tset (ssget "_:L" (list (cons 0 "text"))))
  104.       (while (setq en (ssname tset 0))
  105. (setq txtobj (vlax-ename->vla-object en))
  106. (setq xlist (cons txtobj xlist))
  107. (setq orig (vlax-get txtobj 'insertionpoint))
  108. (setq txtval (vla-get-textstring txtobj))
  109. (setq orig (vlax-get txtobj 'insertionpoint))
  110. (setq bref (vlax-invoke acsp 'insertblock orig bname 1 1 1 0))
  111. (foreach attobj  (vlax-invoke bref 'getattributes)
  112.    (if (eq tag (vla-get-tagstring attobj))
  113.      (vla-put-textstring attobj txtval)
  114.      (vla-update attobj))
  115.    )
  116. (ssdel en tset)
  117. (entdel en)
  118. )
  119.       )
  120.     (setvar "nomutt" 0)
  121.     )
  122.   )
  123. (vl-catch-all-apply
  124.   '(lambda () (vlax-release-object block_def)))
  125. (*error* nil)
  126. (princ)
  127. )   
  128. (princ "\n\t\t   Start command with: AXBT\n")
  129. (prin1)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 04:36 , Processed in 0.817755 second(s), 68 queries .

© 2020-2025 乐筑天下

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