明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: zhuoxiaoxin

[基础] 挑战一下这个难题

  [复制链接]
 楼主| 发表于 2010-8-29 21:22:00 | 显示全部楼层
如果不带文字的块有难度,那不带文字的块不处理也行呀
发表于 2010-8-30 12:22:00 | 显示全部楼层

真的行嘛,转成属性块之后得考滤它的属性标记,提示,还有属性的值哦,看来十楼的有几分成功的把握哦,

发表于 2010-8-30 16:35:00 | 显示全部楼层

可以实现的!先提供个思路,等我有空把代码写出来在发上来!

首先找到图中所有块,逐个遍历每个块,有文字的提取出来,将块定义增加这个属性定义,属性定义的Tag value prompt都赋值为文本内容,然后删除块定义中的文字,没有文字的增加一个空白属性定义,所有块定义重定义完成后,提取图中所有的块实体,根据每个块实体的具体位置、图层等信息重新插入该块!因为块定义好后,再增加属性定义,只能对其定义之后插入的块起作用!

 楼主| 发表于 2010-8-30 21:54:00 | 显示全部楼层

13楼楼主思路清淅,分工明确,有节有序,看来离成功又近了一步,

发表于 2010-8-31 09:11:00 | 显示全部楼层
程序写好了,发上来请大家测试
  1. (defun c:tt(/ flag  blks     blk        obj   objblock   *AcDocument*
  2.        *Model-Space*     obj1       blks   Height     mode $Prompt
  3.        InsertionPoint     Tag        Value   la      color xscale
  4.        yscale  ascale     Rotaion    enlst
  5.       ) ;_ /
  6.   (princ "\n块中文字转属性的程序!编制:Gu_xl 2010年8月31日。")
  7.   (setq   *AcDocument* (vla-get-activedocument (vlax-get-acad-object))
  8.    *Model-Space* (vla-get-modelspace *AcDocument*))
  9.   (setq blks (GXL-TABLE "block"))
  10.   (foreach blk blks
  11.   (setq flag t)
  12.   (setq objblk (vla-Item (vla-get-Blocks *ACDOCUMENT*) blk))
  13.   (vlax-for obj objblk
  14.     (if (= "AcDbText" (vla-get-ObjectName obj))
  15.       (progn
  16. (setq flag nil)
  17. (setq Height (vla-get-Height obj)
  18.        mode 0
  19.        $Prompt (vla-Get-textString obj)
  20.        InsertionPoint (vla-get-InsertionPoint obj)
  21.        Tag (vla-Get-textString obj)
  22.        Value (vla-Get-textString obj)
  23.        la (vla-get-Layer obj)
  24.        color (vla-get-color obj)
  25.        Rotaion (vla-get-Rotation obj)
  26.        )
  27. (setq obj1 (vla-AddAttribute objblk  Height  Mode  $Prompt  InsertionPoint  Tag  Value))
  28. (vla-put-Layer obj1 la)
  29. (vla-put-Color obj1 color)
  30. (vla-put-Rotation obj1 Rotaion)
  31. (vla-delete obj)
  32. )
  33.       
  34.       )
  35.     )
  36.   (if flag
  37.     (vla-AddAttribute objblk 1  0  ""  (vla-get-Origin objblk)  "" ""  )
  38.     )
  39.     )
  40.   (setq ss (ssget "x" '((0 . "insert"))))
  41.   (setq n 0)
  42.   (repeat (sslength ss)
  43.     (setq en (ssname ss n))
  44.     (setq enl (member '(100 . "AcDbEntity") (setq enlst(entget en))))
  45.     (entdel en)
  46.     (setq xscale (cdr (assoc 41  enlst))
  47.    yscale (cdr (assoc 42  enlst))
  48.    zscale (cdr (assoc 43  enlst))
  49.    Rotaion (cdr (assoc 50  enlst))
  50.    blockname (cdr (assoc 2 enlst))
  51.    InsertionPoint (cdr(assoc 10 enlst))
  52.    la (cdr (assoc 8 enlst))
  53.    color (cdr (assoc 62 enlst))
  54.    )
  55.     (setq obj (vla-InsertBlock *Model-Space* (vlax-3d-point InsertionPoint) blockname  xscale yscale zscale Rotaion))
  56.     (vla-put-layer obj la)
  57.     (if color (vla-put-color obj color))
  58.     (setq n (1+ n))
  59.     )
  60.   (princ)
  61.   )
 楼主| 发表于 2010-8-31 23:04:00 | 显示全部楼层
看来Gu_xl先生程序有点眉目了,等加班回家去试试看
 楼主| 发表于 2010-9-1 12:18:00 | 显示全部楼层

根据昨天晚上与今天早上测试无法通过,出现

"块中文字转属性的程序!编制:Gu_xl 2010年8月31日。; 错误: no function definition: GXL-TABLE"

 


不解的是GXL-TABLE是那里来的呀

发表于 2010-9-2 22:14:00 | 显示全部楼层

不错这样的程序值得写,

咦,一楼的想法还真不错.确实,这样的程序值得程序员写.

因为发发给某块加上属性值也方便,,

有时发现这个块做成了一个普通块后,而后想加点注释之类的,

比如,TPN, 30A之类了,又加进去了.如果编辑块.

做到块里面,而它的属性值又是一样的,所以转成属性块后就好办了,

想要什么值就给什么值,为什么cad它自己不有这样的功能呢,

看来这是CAD公司的一大失误呀,不错,一楼真是高人,想得深,

建议CAD公司能完美这一点不足,通过程序写的话可能要写很长很长,

如果不考滤全面,就像Gu_xl 先生写的.会出错,我也Gu_xl 先生的程序了,

发表于 2010-9-5 17:12:00 | 显示全部楼层

真是遗憾,这么好的贴子没人顶.CAD这么大的缺陷没人补,楼主一份心思怕是白费了,楼主自己也不顶一顶.,难道楼主不成功便失踪了,

发表于 2010-9-5 22:46:00 | 显示全部楼层

仁兄,不要感到遗憾,Gu_xl先生的程序我也反复测试过好多次,结果跟wen1234的结果一样,是失败了,这当然不是一般的难啦,因为块的种类很多,而且做块的参数也多,有块套块,无名块,属性块呀,因为图里如果有这些块你得考滤,话他虽说普通块而已,而是含有文字与不含有文字,如果是单单把含有文字的块变成属性块.可能还行吧,不过咱不太会写程序,就不在此乱啃了,还是那句老话,看后五百年吧,

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

本版积分规则

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

GMT+8, 2024-10-2 16:22 , Processed in 0.145276 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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