乐筑天下

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

[编程交流] 组合两个lisp';s

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 19:40:17 | 显示全部楼层 |阅读模式
你好
我是这个论坛的新手。我已经使用lisp有一段时间了,但并不擅长编写复杂的lisp。在本例中,我想合并两个LISP。
第一个打开模板,第二个从附着到模板的图形执行查询,并在完成后取消附着文件。我想在一个命令中有这些,这样它将打开图形,执行查询,unattach,然后最大化。它们单独工作很好,但如果结合使用,将节省时间并节省用户步骤。我有一个发誓要打墙的脑袋,我不知道我错过了什么,但如果有任何困难或帮助,我将不胜感激。
 
Lisp程序1
  1. (defun c:openD_NS&PEI nil
  2. (vla-open (vla-get-documents (vlax-get-acad-object))
  3.            "V:\\symbol\\smt\\Construction_blocks\\1-01_D_SIZE_CONSTRUCTION_PACKAGE_TEMPLATE - Nova Scotia.dwg":vlax-false))

 
 
Lisp 2
  1. (defun c:executequery (/)(ade_errsetlevel 2)(ade_qryexecute) (foreach x (ade_dslist) (ade_dsdetach x))(command ".zoom" "e")))
回复

使用道具 举报

25

主题

106

帖子

85

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
121
发表于 2022-7-5 20:00:46 | 显示全部楼层
请阅读代码发布指南并编辑您的帖子,将代码包含在代码标签中。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 20:13:21 | 显示全部楼层
可能是这样的,但另存为脚本SCR脚本可以处理打开的dwg并继续运行。
 
  1. (defun c:OpenD_NS&PEI nil
  2. (vla-open (vla-get-documents (vlax-get-acad-object))
  3. "V:\\symbol\\smt\\Construction_blocks\\1-01_D_SIZE_CONSTRUCTION_PACKAGE_TEMPLATE - Nova Scotia.dwg":vlax-false)
  4. (ade_errsetlevel 2)
  5. (ade_qryexecute)
  6. (foreach x (ade_dslist) (ade_dsdetach x))(command ".zoom" "e"))
  7. )
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 20:18:38 | 显示全部楼层
我已经试过了,但没有成功。加载了模板,但停止了。
我发现以下lisp更适合打开模板:
  1. (defun c:open11x17_NS&PEI (/ cd vgad vgao vgd)
  2. (vl-load-com)
  3. (setq vgao (vlax-get-acad-object))
  4. (setq vgad (vla-get-activedocument vgao))
  5. (setq vgd (vla-get-documents vgao))
  6. (setq cd "V:/symbol/smt/Construction_blocks/1-0_11x17_SIZE_CONSTRUCTION_PACKAGE_TEMPLATE - Nova Scotia.dwg")
  7. (if
  8.    (= 0 (getvar "SDI"))
  9.    (vla-activate (vla-open vgd cd))                               ; if sdi = 0
  10.    (vla-sendcommand vgad (strcat "(command "_open")\n" cd "\n")(ade_errsetlevel 2)(ade_qryexecute) (foreach x (ade_dslist) (ade_dsdetach x))(command ".zoom" "e")); if sdi = 1
  11.    )                              ; if
  12. (princ)
  13. )

 
并且在模板打开后仍然希望它运行这个lisp
  1. (defun c:executequery (/)(ade_errsetlevel 2)(ade_qryexecute) (foreach x (ade_dslist) (ade_dsdetach x))(command ".zoom" "e")))
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 20:35:08 | 显示全部楼层
如果您希望它自动运行,那么只需将lisp添加到ACADDOC。lsp或通过Appload添加到您的历史记录中,使其自动加载。确保在defun(c:executequery)之外添加一行额外的代码,它将运行,但也允许您手动执行。
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 20:47:39 | 显示全部楼层
谢谢你的解决方案。这对我来说很有效。我把下面显示的代码放在acaddoc中,它成功了。但是,我只想分离附加到模板的特定文件。我曾尝试将路径放在lisp中(替换为x),但它没有分离路径,也没有给我带来错误或任何其他问题。如何指定特定文件。下面这行是我试过的。
  1. (ade_errsetlevel 2)(ade_qryexecute) (foreach x (ade_dslist) (ade_dsdetach C:\\Temp folder extract from spatial\\File saved from Spatial.dwg))(command ".zoom" "e")
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 01:04 , Processed in 0.492897 second(s), 64 queries .

© 2020-2025 乐筑天下

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