明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 司徒妙嘉

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

[复制链接]
发表于 2017-12-4 14:37:33 来自手机 | 显示全部楼层
没办法,手机发贴就这个效果
发表于 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-7 09:09:14 | 显示全部楼层
liunian0524 发表于 2017-12-5 09:21
1:高飞鸟大师有一个批量写块;;==============批量写块=================
(defun c:ww (/ *error* cmdecho  ...

第一个其实也是一个一个框选吧? 并不是把所有要框的框一下就刷刷刷的全出来吧?
发表于 2017-12-12 10:56:59 | 显示全部楼层
(defun c:wq2(/ f1 f2 f3 f4 o1 o2 ss)
  (setvar "cmdecho" 0)
  (princ "\n请选择需要导出的图元:")
  (if(setq ss(ssget))
    (progn
      (setq f1(strcat(getvar "dwgprefix"))f2(fnsplitl(getvar "dwgname"))f3(cadr f2)f4(caddr f2))
      (setq o1(mapcar 'vlax-ename->vla-object(vl-remove-if 'listp(mapcar 'cadr(ssnamex ss)))))
      (setq o2(vl-remove-if-not '(lambda(x)(wcmatch(vla-get-objectname x)"AcDbText*"))o1))
      (if o2
        (setq f2(strcat f1 f3 "_" (vla-get-textstring(car o2))f4))
        (setq f2(strcat f1 f3 "_"(substr(rtos(/ (getvar "cputicks")123456789))4)f4))
      )
      (if(findfile f2)
        (command ".wblock" f2 "y" "" (list 0 0) ss "")
        (command ".wblock" f2  "" (list 0 0) ss "")
      )
      (command ".oops")
      (princ(strcat "\n[" f2 "]零件成功导出"))
    )
  )
  (prin1)
)
发表于 2017-12-12 16:58:17 | 显示全部楼层
本帖最后由 pezyl 于 2017-12-12 17:01 编辑
xtjd 发表于 2017-12-12 10:56
(defun c:wq2(/ f1 f2 f3 f4 o1 o2 ss)
  (setvar "cmdecho" 0)
  (princ "\n请选择需要导出的图元:")

好简洁的程序,不过4个图得操作4次,能不能根据图形之间的间距来批量操作呢,当然,画图得有规则,比如文字在封闭框内等等

本帖子中包含更多资源

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

x
发表于 2017-12-12 22:31:15 | 显示全部楼层
xtjd 发表于 2017-12-12 10:56
(defun c:wq2(/ f1 f2 f3 f4 o1 o2 ss)
  (setvar "cmdecho" 0)
  (princ "\n请选择需要导出的图元:")

能不能导出后的dwg名称是属性图框里的属性值
发表于 2017-12-12 22:41:03 | 显示全部楼层
llsheng_73 发表于 2017-11-27 15:59
wblock命令输出的是DWG文件,其中图元也是一个一个的

确实比较实用,靠 以前都没发现。白玩了这么多年
发表于 2017-12-14 08:00:41 | 显示全部楼层
pezyl 发表于 2017-12-12 16:58
好简洁的程序,不过4个图得操作4次,能不能根据图形之间的间距来批量操作呢,当然,画图得有规则,比如文 ...

如果只是单一的零件外形,没有三视图,可以实现;如果零件外形带有侧视图,则排列最好遵循以零件形心
发表于 2017-12-14 08:04:54 | 显示全部楼层
zhangcan0515 发表于 2017-12-12 22:31
能不能导出后的dwg名称是属性图框里的属性值

有图框其实应该是可以框选全部,以图框为单位,导入单一零件DWG(文件名可以是属性值或程序可以获取的其它文本)
发表于 2017-12-14 10:29:27 | 显示全部楼层
公司的绘图制程,若配合程序走向效率化,那么磨合后自然会有配套规范
考量如何方便程序的后续处理,不规范则效率化会很费劲耗时...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 19:42 , Processed in 0.191828 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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