乐筑天下

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

[编程交流] 将屏幕大小sysvar强制为upd

[复制链接]

6

主题

47

帖子

36

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 11:55:59 | 显示全部楼层 |阅读模式
你好
 
我正在运行一个第三方程序,该程序通过缩放到范围,然后创建显示的DWF来发布图形。这会导致随机缩放和放置问题。为了解决这个问题,我运行了一个例程,在发布之前调整屏幕大小以固定纵横比。
 
问题是,在完全退出AutoLISP并返回命令行之前,screensize系统变量不会更新。
 
问题1。有没有办法在设置窗口后强制更新屏幕大小系统变量
 
问题2。我可以在打开图纸之前更改屏幕大小吗?我听说这在ObjDBX中是可能的,但我不确定如何实现。
 
谢谢你的帮助。
肖恩
回复

使用道具 举报

37

主题

125

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
190
发表于 2022-7-6 12:02:50 | 显示全部楼层
http://www.cadtutor.net/forum/showthread.php?t=43436
 
页面上的最后一篇文章由李·麦克发布。
 
合适选项列表
回复

使用道具 举报

6

主题

47

帖子

36

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 12:14:49 | 显示全部楼层
你好
 
感谢您的帮助,我尝试了您的解决方案,它与其他zoom和regen解决方案存在相同的问题。它们都需要重置屏幕大小系统变量,但只有完全离开AutoLISP并坐在命令提示符前,才会发生这种情况。我提供了窗口大小调整功能和一个小测试功能来突出这个问题。
 
  1. (defun ACADWindowSize (Width Height Doc_ID /)
  2. (vla-put-width Doc_ID Width);1660
  3. (vla-put-height Doc_ID Height);1059
  4. (Print)(princ "Window Set: ")
  5. ;(vla-put-windowstate Doc_ID acMax)
  6. ;(vla-put-windowstate Doc_ID acNorm)
  7. ); ACADWindowSize
  8. ;
  9. ;
  10. ;
  11. (defun test ()
  12. (setq Doc_ID (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  13. (ACADWindowSize 830 564 Doc_ID);1660 1059 +34 for Top and Bottom headers
  14. (vla-zoomextents (vlax-get-acad-object))
  15. (print)(princ (getvar "SCREENSIZE"))
  16. (print)(Prompt "Press enter to Exit. ")(print)
  17. (getpoint)
  18. )

 
如果你能想到我错过了什么,请告诉我。
 
再次感谢你的帮助,新年快乐。
肖恩
回复

使用道具 举报

6

主题

47

帖子

36

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 12:18:12 | 显示全部楼层
只是给它一个颠簸。
回复

使用道具 举报

37

主题

125

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
190
发表于 2022-7-6 12:22:52 | 显示全部楼层
如果将函数一分为二并使用vla send命令
 
例子:
 
  1. (defun t1()
  2.    (setvar "sysvarname" val)
  3.    (setq adoc (vla-get-activedocument(vlax-get-acad-object))
  4.    (vla-sendcommand  adoc "(t2)\r")
  5. )
  6. (defun t2()
  7.    Do something......
  8. )

 
这将在启动第二个lisp函数之前退出lisp函数
 
或者,使用该函数发送“setvar\rscreensize\r值”或类似内容
 
希望有帮助
奥利
回复

使用道具 举报

6

主题

47

帖子

36

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 12:33:54 | 显示全部楼层
你好
 
不幸的是,我试过了,但运气不好。Vla sendcommand类似于直线LISP中的(command),它允许您运行ACAD命令,但实际上不是命令行,您仍然在LISP中。在从vla sendcommand返回并退出T1之前,您不会退出LISP。
 
屏幕大小sysvar在那之前不会更新,不幸的是它是只读的,所以我不能只设置它。
 
也许李有一个想法,但我想我可能需要写我的第一段ARX代码来设置这个在图纸打开之前。
 
再次感谢你的帮助。
 
祝你过得愉快。
肖恩
回复

使用道具 举报

37

主题

125

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
190
发表于 2022-7-6 12:38:47 | 显示全部楼层
我测试了以下内容
我在没有vla sendcommand的情况下也尝试过同样的方法,但没有任何运气
 
不过,您需要考虑宽/高纵横比
 
没有意识到系统变量是只读的,但是vla sendcommand从调用它的函数异步运行,并且在list函数结束之前不会部署。例如
我不会容忍使用vla sendcommand功能,但这是一个合适的解决方法。在我的acad编程早期,我曾使用它在vba和autolisp之间切换:)
 
编辑:可能不需要vla regen语句。在添加vla put height之前,我试过了。你可能会逃脱以下惩罚
 
vla放置高度
vla发送命令
 
希望这有帮助
奥利
回复

使用道具 举报

6

主题

47

帖子

36

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 12:42:46 | 显示全部楼层
你好
 
这是我学到的。在激活图形上使用vla sendcommand时,在调用该命令的例程完成之前,AutoCAD不会执行该命令。
 
  1. 4

 
如果你看看发生了什么,它在执行之前一直到调用例程的末尾。接近但没有雪茄。
 
再次感谢。
肖恩
回复

使用道具 举报

37

主题

125

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
190
发表于 2022-7-6 12:52:26 | 显示全部楼层
 
我一定是误解了这个问题:
 
高度差200.0
因此,在函数之间更新了值
 
这不是你希望实现的吗?
 
话虽如此,您可能需要考虑命令控制台的高度来计算所需的更改
 
奥利
回复

使用道具 举报

6

主题

47

帖子

36

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 12:58:03 | 显示全部楼层
您好,
 
如果您运行我上次发布的内容,您会注意到(test2)是在消息之后执行的,即使它是在消息发送到命令行之前调用的。
 
这意味着,如果运行将vla命令发送到当前图形的例程,则在调用例程的其余部分完成之前,vla命令不会运行。您可以看到下面的示例,注意在vla sendcommand之前消息是如何执行的。
 
 
这可能与批处理例程的运行方式有关,它从不在处理过的图形中留下LISP。其工作原理如下:
 
*Drawing1运行批处理例程。
*批打开要处理的图形。
*S::Start-up寻找要执行的LISPs,并这样做。(我所做的一切都发生在这里。)
*S::启动结束,焦点转移回drawing1。
*图形已保存。
*下一张图纸。
 
我注意到,如果我从drawing1向工作图发送命令,则焦点会转移并与工作图保持一致。这对我的日常生活不好。
 
再次感谢,如果我有任何解决方案,我会发送给你。
肖恩
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 10:10 , Processed in 0.331635 second(s), 72 queries .

© 2020-2025 乐筑天下

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