明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9958|回复: 54

[提问] 能否用lisp实现快速将选中的图元另存一个cad文件

[复制链接]
发表于 2017-11-25 15:26:58 | 显示全部楼层 |阅读模式
本帖最后由 司徒妙嘉 于 2017-11-27 09:05 编辑

如下图, N多零件, 都是平板零件, 我需要把每一个零件图形都按上面的文字另存为一个单独的cad文件. 有什么快速的好的解决方法?
目前手动从总图中一个个复制到另一个空白的文件中,然后按上面的文字为文件名另存. 另存后删除图形, 再到总图中复制下一个, 如此循环. 心累.
有没有什么跟快速的方法?

lisp语言我不懂. 但是我思路是这样的, 用lisp创建一个新的command, 从总图中选中想要的(包含文字). 然后按下这个command, 自动复制, 并识别选中图元中的唯一文字内容, 然后自动新建文件, 粘贴内容, 按识别到的文字进行另存, 并关闭文件. 需要人工操作的就是一个选择内容以及按下那个command. 有点像宏, 但是这个需要一个对选中内容中的文字内容进行一个操作.
不知道以上我的想法能不能实现? 或者里面的有什么更快的方法, 因为这些肯定都是封闭轮廓的图形, 能不能利用这一点,实现批量完成? 毕竟以上思路的cammand还得一个个的操作. 其他更高深的方法尽管提.

本帖子中包含更多资源

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

x

点评

上dwg文件测试  发表于 2017-11-26 13:10
 楼主| 发表于 2017-11-28 10:01:10 | 显示全部楼层
Kye 发表于 2017-11-27 19:21
二楼龙龙仔前辈的程序应该是可以的啊,先做个空白的模板文件,复制模板文件为新文件,然后将选择的东西复制 ...

我是看不懂, 好半天才把括号给对起来
  1. (defun C:COPY_2_OTHER_DWG (/ DOC LST N NEWDWG SS NAME)
  2.         (vl-load-com)
  3.         (if
  4.                 (and
  5.                         (setq SS (ssget (list (cons 410 (getvar "ctab")) (cons 0 (strcat "~" "VIEWPORT")))))
  6.                         (setq NAME (getfiled "Start DWG" (getvar "ACADPREFIX") "dwg" 8))
  7.                         (setq NAME (findfile NAME))
  8.                 )
  9.                 (progn
  10.                         (setq N -1 DOC (vla-get-activedocument (vlax-get-acad-object))
  11.                                 NEWDWG (vla-open (vla-get-documents (vlax-get-acad-object)) NAME)
  12.                         )
  13.                         (repeat
  14.                                 (sslength SS)
  15.                                 (setq LST
  16.                                         (cons (vlax-ename->vla-object (ssname SS (setq N (1+ N)))) LST)
  17.                                 )
  18.                         )
  19.                         (vla-copyobjects DOC
  20.                                 (vlax-safearray-fill (vlax-make-safearray vlax-vbobject (cons 0 (1- (length LST)))) LST)
  21.                                 (if
  22.                                         (equal (getvar "ctab") "Model")
  23.                                         (vla-get-modelspace NEWDWG)
  24.                                         (vla-get-paperspace NEWDWG)
  25.                                 )
  26.                         )
  27.                         (vla-saveas NEWDWG NAME acnative)
  28.                         (vla-close NEWDWG)
  29.                         (vlax-release-object DOC)
  30.                         (vlax-release-object EWDWG)
  31.                 )
  32.         )
  33.         (princ)
  34. )
发表于 2017-12-5 09:21:05 | 显示全部楼层
1:高飞鸟大师有一个批量写块;;==============批量写块=================
(defun c:ww (/ *error* cmdecho filename name path i)
  (defun *error* (s)
    (princ s)
    (setvar 'cmdecho cmdecho)
    )
  (setq cmdecho (getvar 'cmdecho))
  (setvar 'cmdecho 0)
  (cond
    ((not (setq filename (getfiled "保存文件名" "" "dwg" 1))))
    (t
     (setq name (VL-FILENAME-BASE filename)
           path (strcat (VL-STRING-RIGHT-TRIM
                          "\\"
                          (VL-FILENAME-DIRECTORY filename)
                          )
                        "\\"
                        )
           i    0
           )
     (princ "\n选择写块物体:")
     (while (setq ss (ssget))
       (command "wblock"
                (strcat path name (itoa (setq i (1+ i))) ".dwg")
                ""
                "0,0,0"
                ss
                ""
                )
       (command "oops")
       (princ "\n继续选择写块物体<右键结束>:")
       )
     )
    )
  (setvar 'cmdecho cmdecho)
  (princ)
  )
2:秋枫大侠的批量打印-分图工具



本帖子中包含更多资源

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

x
 楼主| 发表于 2017-12-1 09:32:36 | 显示全部楼层
血司 发表于 2017-11-30 08:55
(setq wz (ssget "WP" pts (list '(0 . "TEXT"))))
  1. (defun c:ftc ( tcont pt / n ent enttype)
  2.         (setq pt (ssget)
  3.                 n 0
  4.                 ent (ssname pt n)
  5.                 enttype (cdr (assoc 0 (entget ent)))
  6.         )
  7.         (while (/= enttype "TEXT")
  8.                 (setq n (1+ n))
  9.                 (setq ent (ssname pt n)
  10.                         enttype (cdr (assoc 0 (entget ent)))
  11.                 )
  12.                 ;(princ n)
  13.                 ;(princ ent)
  14.                 ;(princ enttype)
  15.                 ;(princ "\n")
  16.         )
  17.         (setq tcont (cdr (assoc 1 (entget ent))))
  18.         (command "wblock" pt (strcat "C:\Users\Onca\Desktop" tcont ".dwg")
  19. )

我取到了需要独立成图形文件(pt), 以及命名该文件的用的文件名就是框选内容中的问题内容(tcont),
我该怎么把这两个参数给到"wblock"就是上面代码最后一句.
发表于 2017-11-25 16:53:34 来自手机 | 显示全部楼层
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=34825&mobile=2
发表于 2017-11-25 18:57:41 | 显示全部楼层
...能不能实现?...


...总图中一个个复制到另一个空白的文件中...
这段改用 WBlock 能行吗?

若可行,编程不难...
欠调试用文件(Dwg),未有定论
 楼主| 发表于 2017-11-27 09:03:18 | 显示全部楼层
Andyhon 发表于 2017-11-25 18:57
...能不能实现?...

以块保存,只在后续工作的其中一种软件(最主要的)中能识别, 另外两个无法识别. 结论能不用块最好不用, 无它法那也只能接受.
测试文件已上传, dxf格式, 应该问题不大吧?
发表于 2017-11-27 09:47:50 | 显示全部楼层
不用块时则需改用 留己删它 -->另存 -->oops
这样文件通常较大
 楼主| 发表于 2017-11-27 10:45:00 | 显示全部楼层
Andyhon 发表于 2017-11-27 09:47
不用块时则需改用 留己删它 -->另存 -->oops
这样文件通常较大

目前我用的手工方法
总图复制 --> 粘贴到另一个空白空间 --> 另存 --> 删除图形   如此循环
你说的块怎么说, 请赐代码
发表于 2017-11-27 11:26:05 | 显示全部楼层
如例图若再规范些,比如文字皆在框内
应可以全自动另存

有些文字皆在框外则又得补判断式...
这部份套院长的函数会少些代码...
 楼主| 发表于 2017-11-27 12:01:02 | 显示全部楼层
Andyhon 发表于 2017-11-27 11:26
如例图若再规范些,比如文字皆在框内
应可以全自动另存

文字不在图形内毕竟还算少数, 如果我手动调整一下, 就能一下子全部另存完毕, 我就很满意啦.
院长代码是只2楼发的地址里面的代码吗? 我不是很看得懂吗, 能给我讲下基本原理吗?
另外, 如果不考虑文字, 就单纯将图形一个一个另存, 保存文件名另外以一定命名规则, 字符串拼接的方式, 要怎么实现?
发表于 2017-11-27 12:33:30 | 显示全部楼层
AutoCAD 批量打印程序的思路应可借鉴

本帖子中包含更多资源

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

x
 楼主| 发表于 2017-11-27 13:52:50 | 显示全部楼层
Andyhon 发表于 2017-11-27 12:33
AutoCAD 批量打印程序的思路应可借鉴

你这把文字弄个一个图片, 让我去哪里借鉴? 自行百度吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 19:33 , Processed in 0.183117 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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