明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3071|回复: 10

求一个修改词典的函数(已解决)

[复制链接]
发表于 2011-12-30 14:18:18 | 显示全部楼层 |阅读模式
本帖最后由 langjs 于 2012-1-5 01:24 编辑

求助了好几天也不见动静,因此也悬赏吧,希望能得到解决。






一个问题困扰好久了,我摸索了很长时间也没成功。实在没有办法测试图纸有个标题栏信息存储在用(namedobjdict)得到的词典下面的PC_PAPER_DIC再下面的PC_PAPER_REC中,其内容如下:
PC_PAPER_REC====((-1 . <图元名: 7efc1728>) (0 . TH_PAPERRECORDER) (5 . 2A5) (102 .
{ACAD_REACTORS) (330 . <图元名: 7efc1720>) (102 . }) (330 . <图元名: 7efc1720>) (100
. TH_PaperRecorder) (70 . 800) (170 . 4) (171 . 1) (172 . 1) (173 . 1) (174 .
1) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (179 . 2) (180) (140 . 0.04) (300 .
Tydh) (301 . 国电南自) (302 . 国电南自) (303 . 国电南自) (-3 (TH_PaperRecorder (1070 . 1)
(1070 . 23) (1070 . 2) (1000 . 制图) (1070 . 3) (1000 . ) (1070 . 4) (1000 .
产品名称或材料标记) (1070 . 5) (1000 . ) (1070 . 6) (1000 . 比例) (1070 . 7) (1000 . 1:25)
(1070 . 8) (1000 . 重量) (1070 . 9) (1000 . ) (1070 . 10) (1000 . 材料) (1070 . 11)
(1000 . 304) (1070 . 12) (1000 . 零件名称) (1070 . 13) (1000 . 自制法兰) (1070 . 14)
(1000 . 标准化) (1070 . 15) (1000 . ) (1070 . 16) (1000 . 设计) (1070 . 17) (1000 .
) (1070 . 18) (1000 . 图纸张数) (1070 . 19) (1000 . 1) (1070 . 20) (1000 . 共几页)
(1070 . 21) (1000 . ) (1070 . 22) (1000 . 设备型号) (1070 . 23) (1000 . ) (1070 .
24) (1000 . 产品名称) (1070 . 25) (1000 . ) (1070 . 26) (1000 . 日期) (1070 . 27)
(1000 . ) (1070 . 28) (1000 . 图幅) (1070 . 29) (1000 . A4) (1070 . 30) (1000 .
审核) (1070 . 31) (1000 . ) (1070 . 32) (1000 . 审定) (1070 . 33) (1000 . ) (1070 .
34) (1000 . 第几页) (1070 . 35) (1000 . ) (1070 . 36) (1000 . 设备名称) (1070 . 37)
(1000 . ) (1070 . 38) (1000 . 图样代号) (1070 . 39) (1000 . XKZ25.08006) (1070 .
40) (1000 . 工艺) (1070 . 41) (1000 . ) (1070 . 42) (1000 . 图样名称) (1070 . 43)
(1000 . ) (1070 . 44) (1000 . 零件数量) (1070 . 45) (1000 . 1) (1070 . 46) (1000 .
企业名称) (1070 . 47) (1000 . ) (1070 . 48) (1070 . 4) (1070 . 49) (1070 . 0) (1070
. 50) (1070 . 0) (1070 . 51) (1070 . 2) (1070 . 52) (1070 . 2) (1070 . 53)
(1070 . 1) (1070 . 54) (1070 . 1) (1070 . 55) (1070 . 4) (1070 . 56) (1070 . 1)
(1070 . 57) (1070 . 1) (1070 . 58) (1070 . 1) (1070 . 59) (1040 . 0.04) (1070 .
60) (1000 . Tydh) (1070 . 61) (1000 . 国电南自) (1070 . 62) (1000 . 国电南自) (1070 .
63) (1000 . 国电南自))))
目前,我用如下程序可以将其读取出来(那个repeat语句觉得很别扭,却不知道其它办法怎么弄),这个功能已经成功了
;;; =============================================*
;;; 读取标题栏字典测试                           *
;;;                                              *
(defun c:ccc ( / dicts i name)
  (setq dicts (dictsearch (namedobjdict) "PC_PAPER_DIC"))
  (repeat (setq i (length dicts))
    (if (= (cdr (nth (setq i (1- i))
                   dicts
              )
          ) "PC_PAPER_REC"
       )
      (setq name (cdr (nth (1+ i) dicts)))
    )
  )
   (princ "\nPC_PAPER_REC====")
  (princ (entget name '("*")))
  (princ)
)
现在我需要一个函数,目的是替换内容并更新该词典:例如,我现在要将(1000 . 零件名称)位置后的第2个表(1000 . 自制法兰)部分替换成(1000 . 螺栓),替换后更新词典。其中“零件名称”和“螺栓” 为变量。
万分感谢!!
   

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-12-30 16:39:15 | 显示全部楼层
本帖最后由 namezg 于 2011-12-30 16:40 编辑

正在研究同一问题,第一个问题可以用member

点评

谢谢提醒,确实member比循环简单,以前没想到  发表于 2011-12-30 17:25
发表于 2011-12-30 16:45:20 | 显示全部楼层
你以前获得图幅的方法麻烦用这里的信息多好.我用的就是词典里的信息.

点评

我以前一直找不到PCCAD究竟把数据藏在什么地方,最近才找到,现在的关键是怎么才能修改它。有空多交流交流啊,我的QQ59509100  发表于 2011-12-30 17:27
 楼主| 发表于 2012-1-2 21:47:09 | 显示全部楼层
别沉呀,沉到水底就没希望了
发表于 2012-1-3 08:01:11 | 显示全部楼层
我的保存只用到1000,各项用“/”分隔


本帖子中包含更多资源

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

x
 楼主| 发表于 2012-1-4 20:23:49 | 显示全部楼层
希望早点能把问题解决
发表于 2012-1-4 21:42:44 | 显示全部楼层
很简单的,不就是修改扩展数据么,搜一下,论坛里有相关代码的,我的博客里也有扩展数据修改的程序,去找找看!
 楼主| 发表于 2012-1-4 23:00:33 | 显示全部楼层
Gu_xl 发表于 2012-1-4 21:42
很简单的,不就是修改扩展数据么,搜一下,论坛里有相关代码的,我的博客里也有扩展数据修改的程序,去找找 ...

这个好像是嵌套的,我搞不定。附着在图元上的好搞一些,这个好像不是附在图元上的。
发表于 2012-1-5 00:51:46 | 显示全部楼层
;;; ==================================================;;
;;; 读取标题栏字典测试                                ;;
;;; 修改扩展数据例子:                                      ;;
;;; ==================================================;;
(defun c:ccc (/ dicts DicObj RecObj xType xData)                         
  (setq dicts  (dictsearch (namedobjdict) "PC_PAPER_DIC"))
  (setq DicObj (vlax-ename->vla-object (cdar dicts)))
  (setq RecObj (vla-item DicObj "PC_PAPER_REC"))

  (princ "\nPC_PAPER_REC====")
  (princ (entget (vlax-vla-object->ename RecObj) '("*")))
                                                          
  (vla-getxdata RecObj "" 'xType 'xData)               
  (princ (vlax-safearray-get-element xData 24))            ;零件名称
  (princ (vlax-safearray-get-element xdata 26))             ;自制法兰

  (vlax-safearray-put-element xdata 26 (vlax-make-variant "螺丝"))
  (vla-setxdata RecObj xType xData)
  (princ)       
)

点评

非常感谢,帮了我大忙了!!  发表于 2012-1-5 01:22
发表于 2020-3-17 17:20:57 | 显示全部楼层
留个脚印 等日后学到这里好用 谢谢楼主提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 10:43 , Processed in 0.204480 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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