乐筑天下

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

[编程交流] 更换打印机

[复制链接]

4

主题

14

帖子

10

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:20:02 | 显示全部楼层 |阅读模式
我们有一组dwt,用于以不同格式绘制图形。dwt设置为使用定义的打印机打印,但现在我们有了一个新的打印机,每当我们需要打印旧图纸时,我们必须为每个布局选择新的打印机。
我试图在VBA中构建一个程序,该程序可以识别将使用旧打印机打印的dwt,然后更改其名称配置。结果是dwt正在使用新打印机打印,但布局大小已更改!
 
我知道我可以通过简单地更改dwt来更新打印机以备将来使用,但我们经常需要参考旧图纸,为每个图纸设置打印机是一项耗时的任务。
 
有什么帮助吗?
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

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

铜币
362
发表于 2022-7-5 23:23:49 | 显示全部楼层
可以编写-PLOT命令的脚本来更改打印参数。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:26:41 | 显示全部楼层
尝试以下操作(对于活动布局):
 
  1. ;; DvcName  =  Name of Plot Device
  2. (defun PutPlotDevice (DvcNme)
  3. (vl-load-com)
  4. ;; Lee Mac  ~  14.01.10
  5. (setq lay (vla-get-ActiveLayout
  6.              (vla-get-ActiveDocument
  7.                (vlax-get-acad-object))))
  8. (vla-RefreshPlotDeviceinfo lay)
  9. (if (vl-position (strcase DvcNme)
  10.        (mapcar (function strcase)
  11.          (vlax-safearray->list
  12.            (vlax-variant-value
  13.              (vla-getPlotDeviceNames lay)))))
  14.    (not (vl-catch-all-error-p
  15.           (vl-catch-all-apply
  16.             (function vla-put-configname)
  17.               (list lay DvcNme))))))
回复

使用道具 举报

0

主题

172

帖子

173

银币

限制会员

铜币
-1
发表于 2022-7-5 23:31:00 | 显示全部楼层
正如rkmcswain所说,我已经创建了一个工具栏,其中有四个不同绘图仪上不同大小的绘图按钮;这一切都是用宏而不是lisp来完成的,因此它可以与LT一起使用。(其中一组按钮必须调用服务器上打印驱动程序所在的脚本,但这不是什么大问题)。
只要点击一个按钮,就可以将正确大小的绘图发送到我想要的绘图仪,无论上一页的设置如何。
 
如果你愿意的话,我可以在明天回来工作的时候贴些例子。
回复

使用道具 举报

4

主题

14

帖子

10

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:34:52 | 显示全部楼层
谢谢你们,但我真正想要的是一个VBA例程,它可以在不激活每个布局的情况下更改所有布局打印机设置。我有数百个图纸,每个图纸有40-50个布局,如果我需要单击每个布局,我也可以只键入“plot”,更改打印机,然后单击“apply to layout”。
在这里,我粘贴了我制作的VBA程序的简化版本。它确实改变了打印机设备,但不会保持原来的纸张大小。
 
 
Dim L计为整数
Dim i为整数
作为AcadLayout的Dim lay
 
lcount=此图纸。布局。计数
 
对于i=0到(lcount-1)
 
设置lay=ThisDrawing。布局(一)
 
如果铺设。ConfigName=“旧打印机”
放置ConfigName=“新打印机”
如果结束
 
下一个i
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

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

铜币
362
发表于 2022-7-5 23:36:13 | 显示全部楼层
我不一定会使用VBA,尤其是如果你打算在将来使用它的话。VBA已经死了一段时间了,如果你换成64位,使VBA工作的模拟器(或任何你想叫它的东西)也会带来严重的性能损失。
 
从Lee的lisp代码开始,用循环将其包装以在所有视口上工作,然后用循环将其包装以在所有图形上工作(使用ObjectDBX)-允许您使用一个命令修改无限数量的图形。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:41:59 | 显示全部楼层
这应该适用于所有布局,有点耗时,因为RefreshPlotDeviceInfo方法需要一段时间。
 
  1. ;; DvcNme  =  Name of Plot Device
  2. (defun PutPlotDevice_AllLayouts (DvcNme)
  3. (vl-load-com)
  4. ;; Lee Mac  ~  15.01.10
  5. (vlax-for lay (vla-get-layouts
  6.                  (vla-get-ActiveDocument (vlax-get-acad-object)))
  7.    (vla-RefreshPlotDeviceInfo lay)
  8.    (if (vl-position (strcase DvcNme)
  9.          (mapcar (function strcase) (vlax-invoke lay 'GetPlotDeviceNames)))
  10.      (vla-put-configname lay DvcNme)))
  11. (princ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:42:33 | 显示全部楼层
 
ObjectDBX的速度非常快,但由于其中涉及(vla save dbx_doc),因此实现Arx代码以保持缩略图很麻烦。。
回复

使用道具 举报

4

主题

14

帖子

10

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:46:51 | 显示全部楼层
谢谢你rkmcswain,
但我所需要的只是一个暂时问题的临时解决方案。我已经在64位上工作了,我在使用VBA的时候确实遇到了一些问题,但没什么大不了的。在所有视口上工作的lisp代码?我不知道你的意思,正如我所说的,我的问题是布局纸张大小,而不是视口。我不熟悉lisp,但如果它能让我在不激活每个布局的情况下完成这项工作,我会尝试使用李·麦克的lisp。VBA死了?我不这么认为,否则这个论坛不会提到它。我正在学习Visual Basic和其他应用程序,但我知道的还不够,这就是为什么我认为一个简单的VBA例程可以解决我暂时的问题。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:49:29 | 显示全部楼层
 
布局是LISP中的视口
 
VBA肯定已经死了——或者正在朝着那个方向发展,2010年它不再是标准的,正如RKMcSwain所说,64位存在性能问题。
 
我上面的代码将为所有布局设置打印设备(不激活它们)-您可以在脚本中使用它来迭代图形,也可以在ObjectDBX中使用它。
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:02 , Processed in 0.605994 second(s), 72 queries .

© 2020-2025 乐筑天下

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