乐筑天下

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

请陈老师或各位高手帮个忙编个程序(能实现在图低中批量代换图形的功能。)

[复制链接]

9

主题

22

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2003-4-2 00:05:00 | 显示全部楼层 |阅读模式
大家帮帮我啊,我才刚学,又不会编程。我的文件是电子线路板的打孔图文件,如何将图中的圆孔每种尺寸的都用不同的符号替换进左边的图中去,就是我图纸右边的符号,其实我用了过滤命令,可是它只能实现孔的过滤,不能进行图形的批量替换,有没有什么办法实现这个功能呢,最好是有现成的自动生成一个明细表的程序。图中文字标注是用的TT黑体。
附上图纸,
先谢谢大家啦。急等用!!

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

16

主题

909

帖子

8

银币

中流砥柱

Rank: 25

铜币
973
发表于 2003-4-2 07:45:00 | 显示全部楼层
First you have to make each symbols into blocks, ie , "hole1" as I had done in your drawing. Then you can use this tiny routine replace all the dia. 1 holes with this block.Minor change to this routine may apply to other holes.
(defun c:hole1(/ cmdold ss en CT idx)
  (setq cmdold (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (setq ss (ssget "X" '((0 . "CIRCLE")(40 . 0.5))) idx 0)
  (command "undo" "BE")
  (while (<= idx (1- (sslength ss)))
    (setq en (ssname ss idx))
    (setq CT (cdr (assoc 10 (entget en))))
    (entdel en)
    (command "-insert" "hole1" CT "" "" "")
    (setq idx (1+ idx))
  )
  (command "undo" "E")
  (setvar "CMDECHO" cmdold)
  (princ (strcat "\n" (itoa (sslength ss)) " objects replaced."))
  (princ)
)
回复

使用道具 举报

16

主题

909

帖子

8

银币

中流砥柱

Rank: 25

铜币
973
发表于 2003-4-2 07:47:00 | 显示全部楼层
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:kik0a54hfrh.dwg 
下载次数:0  文件大小:103.49 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

9

主题

22

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2003-4-3 01:21:00 | 显示全部楼层
就是比如我将1.0,1.5,2.0三种孔定义成三个函数名 1 ;2; 3
然后我再定义一个命令调用一下呢。如自定义一个allchange后可以调用1;2;3三个函数,本人是菜鸟,高手勿笑啦
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-4-3 08:56:00 | 显示全部楼层
(defun 1()
express1
)
(defun 2()
express2
)
(defun 3()
express3
);定义1、2、3函数
(defun c:allchange()
(1)
(2)
(3);调用1、2、3函数
...
)
回复

使用道具 举报

9

主题

22

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2003-4-3 18:02:00 | 显示全部楼层
再麻烦一下看看这个程序,能不能改成把里面的圆的孔径这一段(ssget "w" '((0 . "CIRCLE")(40 . 0.6)改成命令行里提示输入一个最小数和一个最大数,比如半径0.1的圆到半径为50的圆。然后在里面用循环命令调用这一个程序,直到把半径为0.1到50所有的圆都运行完毕。
  附上程序。这是由alin贴出来的程序。这个程序是把一种圆孔批量代换成块定义的内容的功能,运行到最后它会在命令行里面生成一段提示有多少个物体给代换了。我想把它这段提示直接画在图里面的一个指定位置。最好是由上到下,从大到小的一行行的表示,而且在文字前面插入一个当前代换的块名。这样就OK了。
(defun c:h5(/ cmdold ss en CT idx)
  (setq cmdold (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (setq ss (ssget "w" '((0 . "CIRCLE")(40 . 0.6))) idx 0)
  (command "undo" "BE")
  (while (<= idx (1- (sslength ss)))
    (setq en (ssname ss idx))
    (setq CT (cdr (assoc 10 (entget en))))
    (entdel en)
    (command "-insert" "h5" CT "" "" "")
    (setq idx (1+ idx))
  )
  (command "undo" "E")
  (setvar "CMDECHO" cmdold)
  (princ (strcat "\n" (itoa (sslength ss)) " objects replaced."))
  (princ)
)
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2003-4-4 12:46:00 | 显示全部楼层
;;以现有BLOCK作替换
;;BLOCK名稱為"1","2","3".........
(defun C:CH_DIA
                (/ HOLDOSMODE HOLDZIN HOLDECHO SS N DIA DIA1 CENT ENT BNAME)
  (setq HOLDECHO (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (command "_.UNDO" "_GROUP")
  (setq HOLDOSMODE (getvar "OSMODE"))
  (setq HOLDZIN (getvar "DIMZIN"))
  (setvar "DIMZIN" 8)
  (setvar "OSMODE" 0)
  (setq SS (ssget "x" '((0 . "CIRCLE"))))
  (setq N 0)
  (repeat (sslength SS)
    (setq ENT (ssname SS N))
    (setq DIA (cdr (assoc 40 (entget ENT))))
    (setq CENT (cdr (assoc 10 (entget ENT))))
    (if        (or (tblsearch "BLOCK" (setq DIA1 (rtos (* 2.0 DIA))))
            (setq DIA1 (findfile (strcat (rtos (* 2.0 DIA)) ".DWG")))
        )
      (progn
        (entdel ENT)
        (command "_.INSERT" DIA1 CENT "" "" "")
      )
    )
    (setq N (1+ N))
  )
  (setvar "OSMODE" HOLDOSMODE)
  (setvar "DIMZIN" HOLDZIN)
  (command "_.UNDO" "_END")
  (setvar "CMDECHO" HOLDECHO)
  (princ)
)
回复

使用道具 举报

9

主题

22

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2003-4-5 00:38:00 | 显示全部楼层
龙龙仔,我用了你的程序后发现只有整数孔能给代换,别的像0.1,0.2.的小孔不能代换哪,再帮我改一下吧[br]我想要改成孔的半径可以从小数后二位开始的。比如说从0.00,0.05,0.15,0.2,0.25~5之间的所有的数。好像你的那个变量N只能是整数啊。我改成小数的后就不行了
   (setq N (1+ N)) →(setq N (+ N 0.05))我这样改了后说是参数类型不对了,请帮个忙改下。
回复

使用道具 举报

26

主题

345

帖子

11

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
448
发表于 2003-4-5 15:48:00 | 显示全部楼层
(defun dcb (SEC CS1)
    (setq count 0)
    (while (< count (sslength sec))
      (setq en (ssname sec count))
      (setq p (cdr (assoc 10 (entget en))))
      (setq eli        (list (cons 0 "INSERT")
                      (cons 2 cs1)
                      (cons 8 "0")
                      (cons 10 p)
                )
      )
      (entmake eli)
      (entdel en)
      (setq count (1+ count))
    )
    (setq count        nil
          en nil
          p nil
          eli nil
    )
  )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-6 17:58 , Processed in 0.985080 second(s), 77 queries .

© 2020-2025 乐筑天下

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