乐筑天下

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

[编程交流] 如何控制OPEN命令vi

[复制链接]

91

主题

428

帖子

326

银币

后起之秀

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

铜币
474
发表于 2022-7-6 08:40:18 | 显示全部楼层 |阅读模式
嗨,球童们,
 
正如你们大多数人所知,CommandWillStart和CommandEnded是两个反应器,当一个命令调用和一个命令结束时触发。
 
我正在寻找一种方法来控制打开命令后,选择一个图形,然后才真正打开它。这个任务可能吗?
 
非常感谢您的建议和帮助。
回复

使用道具 举报

11

主题

98

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-6 08:49:30 | 显示全部楼层
您可以创建一个包含类似以下内容的函数,而不是使用“open”命令
 
  1. setq filePath (getfiled "Select file" "" "dwg" )

 
这样,您将只返回文件路径,允许您在打开文件之前执行任何操作。
 
希望这有帮助
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:03:07 | 显示全部楼层
阿汉哈-请澄清。。。我不明白在打开一幅画之前,你想对它做什么?
 
SOliver-不幸的是,GetField没有提供保存的快捷方式(标准打开对话框左侧的链接),也没有“记住”上次打开的目录(没有额外的编码,可能使用GETENV/SETENV?),这就是为什么我也使用带有标准OPEN、XATTACH等命令的reactor。但是,在较新版本的AutoCAD中,我必须修改代码以包含前置命令(INITDIA),以便强制执行某些命令的对话框版本。
回复

使用道具 举报

91

主题

428

帖子

326

银币

后起之秀

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

铜币
474
发表于 2022-7-6 09:14:09 | 显示全部楼层
 
SOliver,非常感谢您的建议,但更改OPEN命令不会影响。打开(内部ommand),因此任何调用“_.OPN”或“.OPEN”的代码都将绕过我捕获要打开的文件的方式。
回复

使用道具 举报

91

主题

428

帖子

326

银币

后起之秀

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

铜币
474
发表于 2022-7-6 09:16:40 | 显示全部楼层
 
RenderMan,我想:
1-确定图形是否为只读。
2-在某些情况下(取决于登录(用户)的名称),即使它实际上不是只读的,也可以在没有任何消息的情况下以只读方式打开它。
3-对于某些情况,请像AutoCAD一样打开它。
 
我希望它足够清楚?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:24:51 | 显示全部楼层
 
是的,这很有帮助。
 
不幸的是,考虑到您概述的条件步骤,您将不得不使用getfield选项。下面是一个小示例,它结合了Lee的_FileOpen-p函数来确定只读状态:
 
  1. (defun c:FOO  (/ _FileOpen-p _Open f)
  2. (princ "\rFOO ")
  3. (vl-load-com)
  4. (defun _FileOpen-p  (fileName / f)
  5.    ;; Lee Mac, 2011
  6.    ;; filename = filename of file to test
  7.    ;; Returns T if specified file is open
  8.    (if (setq f (open fileName "a"))
  9.      (close f)
  10.      T))
  11. (defun _Open (acApp f o)
  12.    (vla-activate (vla-open (vla-get-documents acApp) f o)))
  13. (if (setq f (getfiled "Select file" "" "dwg" )
  14.    ((lambda (acApp user / s)
  15.       (cond
  16.         ;; If user is a member, open read-only
  17.         ((vl-position user '([color=red]"user1" "user2" "user3"[/color]))
  18.          (_Open acApp f :vlax-true))
  19.         ;; If available, open normally, else open read-only
  20.         ((if (_FileOpen-p f)
  21.            (progn
  22.              (alert "File is already open. ")
  23.              (_Open acApp f :vlax-true))
  24.            (_Open acApp f :vlax-false)))))
  25.      (vlax-get-acad-object)
  26.      (getvar 'loginname)))
  27. (princ))

 
希望这有帮助!
 
**编辑-在选择位于(getvar’dwgprefix)中的图形时,还要注意GetField的行为,因为您需要使用STRCAT添加active directory。
回复

使用道具 举报

91

主题

428

帖子

326

银币

后起之秀

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

铜币
474
发表于 2022-7-6 09:39:33 | 显示全部楼层
 
非常感谢RenderMan,这真的很有帮助。
 
李,一如既往,您可以回答AutoCAD编码中的任何问题。
我非常感谢你的帮助。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:41:39 | 显示全部楼层
 
不客气。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 08:49 , Processed in 0.526289 second(s), 68 queries .

© 2020-2025 乐筑天下

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