乐筑天下

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

[编程交流] vla将命令发送到非活动状态

[复制链接]

55

主题

118

帖子

65

银币

后起之秀

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

铜币
273
发表于 2022-7-5 18:02:17 | 显示全部楼层 |阅读模式
如何识别非活动图形?
vla获取ActiveDocument?
 
如果是这样。。。vla sendcommand的目的是什么?
 
我想在一个非活动图形中运行lisp例程
 
对于这两种情况,正确的语法是什么?
 
我已经能够激活当前图形以外的另一个图形。甚至将屏幕更改为另一个屏幕,但我无法在最后一个屏幕上运行lisp例程,我的意思是从我调用新屏幕的那一个开始:
 
vla激活
 
提前感谢
 
斯沃戈德内
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:16:57 | 显示全部楼层
 
你好
 
您可以调用系统变量“dwgname”并将其与所需的图形名称进行比较,因此如果匹配,则它处于活动状态,否则不处于活动状态。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:21:51 | 显示全部楼层
 
要检查文档对象是否为活动图形,请执行以下操作:
  1. (= :vlax-true (vla-get-active <document-object>))
回复

使用道具 举报

55

主题

118

帖子

65

银币

后起之秀

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

铜币
273
发表于 2022-7-5 18:31:15 | 显示全部楼层
谢谢李。。。只是我不明白vla sendcommand有什么用,因为我无法在非活动图形上运行命令。。。
 
有简单的样品吗?
 
我有一幅画。。。想打开另一个
(vla打开)
 
获取所有打开的文档
(setq docs(vla get documents(vlax get acad object)))
 
第二次运行命令
(vla sencommand)
 
关闭第二个
(vla关闭)
 
回到原点
(vla项目文件0)
 
这就是它应该工作的方式吗?或者我应该停止这个过程吗。我需要坚持这个过程。
 
再次提前感谢
塞尔吉奥
回复

使用道具 举报

55

主题

118

帖子

65

银币

后起之秀

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

铜币
273
发表于 2022-7-5 18:39:22 | 显示全部楼层
更简单。。。我想在非活动图形中运行lisp例程。
 
只有这个。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:49:38 | 显示全部楼层
使用sendcommand方法将导致目标图形成为活动图形,并且由于AutoLISP只能在活动图形中运行,因此使另一个图形成为活动图形将导致停止对活动AutoLISP程序的评估。
 
某些Visual LISP ActiveX方法能够在非活动图形上操作(与您可以使用ObjectDBX在另一个图形上操作而无需在AutoCAD编辑器中打开图形的方式相同),但是,这种方法的可行性将取决于您希望使用AutoLISP程序执行的操作。
回复

使用道具 举报

55

主题

118

帖子

65

银币

后起之秀

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

铜币
273
发表于 2022-7-5 19:01:10 | 显示全部楼层
再次感谢李,
 
我会尽可能清楚地解释我的问题。
 
我有一个按每个建筑项目的视图划分的系统
 
平面布置图
_A(工作进度阶段)
_B(清洁图纸)
_C(布局、演示图\u B外部参照)
 
小节
_A(工作进度阶段)
_B(清洁图纸)
_C(布局、演示图\u B外部参照)
 
立面图
_A(工作进度阶段)
_B(清洁图纸)
_C(布局、演示图\u B外部参照)
 

 
在每个视图上从A到B的传输需要运行一些命令,这些命令基本上删除了C中所有不需要的信息。例如,不是“Help Layers”、“all Layers on”“No xref attached”,或者客户端可能需要的任何类型的过程。
 
这确保了布局始终处于上次清理的状态,并允许用户在A阶段继续工作,而不必“手动清理”图形来打印。
 
到目前为止,我已经能够成功地从每个a编写一个脚本来编写/覆盖B。我知道我有点挑剔,但这还不够。如果用户可能打开了一些图形,并在第一个图形中运行此脚本,则在脚本结束时,我无法返回到启动该过程的原始文件。
 
这是唯一公开的问题。
 
因此,我认为可以通过VLA\uAutoLISP命令来实现。
 
我重新编写了动态编写的脚本,使用vla open和vla close,我打开和关闭了来自\u A的相应的\u B,但在这两者之间,我无法在\u B内执行任何操作。这就是为什么我询问如何使用这三个autolisp命令的示例。
 
vla打开
vla发送命令
vla关闭
 
这就是问题所在,它从后面把它甩了,只是
 
从当前图形制作副本
打开副本
在上面运行一些命令
关闭副本
并激活原始图形(如果有更多打开的图形)
 
有什么建议吗?
 
再次感谢
塞尔吉奥
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:09:37 | 显示全部楼层
 
在开发批处理属性编辑器程序时,我遇到了一个相同的问题——我的解决方案是将打开的图形排除在处理之外,并通知用户这样做。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 00:03 , Processed in 1.055938 second(s), 68 queries .

© 2020-2025 乐筑天下

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