乐筑天下

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

[编程交流] 不使用发布打印

[复制链接]

13

主题

48

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 07:08:45 | 显示全部楼层 |阅读模式
大家好,
 
刚刚制作完一个lisp,在所有打开的图纸上找到一个标题栏,并在上面插入一个工程师标志。在使用64位系统时,长话短说的ObjectIDtoobject命令有点奇怪,它让我有点困惑(在32位切换到64位系统访问冲突时工作得很好),但多亏了李·Mac和他以前的一个线程,它才得以工作。
 
无论如何,回到我手边的问题,如果我能在每一页上都放上徽标,我应该能够打印、放大、清除、审核和关闭每一张图纸,而不会出现任何问题。嗯,我开始处理打印部分,从我可以看出这应该可以100%工作,但当它打开下一个图形打印时,它冻结了,我收到了一个致命的错误。
 
  1. (defun C:SPC (/)
  2. (vl-load-com)
  3. (setvar 'backgroundplot 0)
  4. (vlax-for dwg (vla-get-documents (vlax-get-acad-object))
  5.    (setq plotcons (vla-get-PlotConfigurations dwg))
  6.    (setq plotcon (vl-catch-all-apply 'vla-Item (list plotcons "PDF-Fit")))
  7.    (if (/= (type plotcon) 'VLA-OBJECT)
  8.      (if (= (getvar "TILEMODE") 0)
  9. (setq plotcon (vla-Add plotcons "PDF-Fit" :vlax-false))
  10. (setq plotcon (vla-Add plotcons "PDF-Fit" :vlax-true))
  11. )
  12.      )
  13.    (vla-RefreshPlotDeviceInfo plotcon)
  14.    (vla-put-ConfigName plotcon "Adobe PDF")
  15.    (vla-put-CanonicalMediaName plotcon "Ledger")
  16.    (vla-put-PaperUnits plotcon acInches)
  17.    (if (= (getvar "TILEMODE") 0)
  18.      (progn
  19. (vla-put-PlotType plotcon acLayout)
  20. (vla-put-UseStandardScale plotcon :vlax-true)
  21. (vla-put-StandardScale plotcon ac1_1)
  22. )
  23.      (progn
  24. (vla-put-PlotType plotcon acExtents)
  25. (vla-put-UseStandardScale plotcon :vlax-true)
  26. (vla-put-StandardScale plotcon acScaleToFit)
  27. (vla-put-CenterPlot plotcon :vlax-true)
  28. )
  29.      )
  30.    (vla-put-PlotHidden plotcon :vlax-false)
  31.    (vla-put-PlotRotation plotcon ac0degrees)
  32.    (vla-put-PlotViewportBorders plotcon :vlax-false)
  33.    (vla-put-PlotViewportsFirst plotcon :vlax-true)
  34.    (vla-put-PlotWithLineweights plotcon :vlax-true)
  35.    (vla-put-ScaleLineweights plotcon :vlax-true)
  36.    (vla-put-PlotWithPlotStyles plotcon :vlax-true)
  37.    (vla-put-ShowPlotStyles plotcon :vlax-true)
  38.    (if (= (getvar "PSTYLEMODE") 0)
  39.      (vla-put-StyleSheet plotcon "grayscale.stb")
  40.      (vla-put-StyleSheet plotcon "grayscale.ctb")
  41.      )
  42.    (vla-plottodevice (vla-get-plot dwg))
  43.    )
  44. )

 
如果你们能帮我解决这个问题,那就太好了。我会使用publish,但我希望对这个lisp做更多的事情。(例如,搜索标题栏,找到块属性中的比例并打印到该比例)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:16:07 | 显示全部楼层
据我所知,您在文档集合中可能对非活动文档对象执行的操作上受到很大限制;因此,我倾向于尽可能避免这种方法。
 
我在过去编写了许多“批量打印”应用程序,并始终使用一种技术,将Visual LISP打印函数从程序写入支持路径中的AutoLISP文件,然后从程序构建和运行脚本文件。然后,脚本将打开要打印的每个图形,加载并运行Visual LISP打印功能,然后关闭图形。
 
因此,您可以利用脚本的批处理能力,仍然可以利用AutoLISP和Visual LISP提供的强大和错误捕获功能对每个图形执行必要的操作。
回复

使用道具 举报

13

主题

48

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 07:24:19 | 显示全部楼层
哎呀,李,你为什么要这样粉碎我的希望。我希望你会是一个有答案的人,通常所有的图纸已经打开(做更正和代码审查)。我想我现在可以取消打印功能了。执行所有其他步骤关闭图形。并根据需要重新打开打印。我只是觉得按照上面的方式做会更容易/更快。这么简单的方法就够了
 
它似乎想这么做,但它只是突然退出。你知道为什么AutoCAD会让它看起来像是可以工作的东西,然后突然它就不工作了吗?
 
而且,如果我强制将要打印的DWG变为活动状态,您认为这会有帮助吗?或者这会引起更多的问题吗?如果我没记错的话,VLISP面向Dwg级脚本(与整个AutoCAD环境相反)。这让我更想知道,如果他们不让你充分利用它,为什么他们会(vla get documents(vla get acad object))呢。我的意思是,对于简单的块插入Lisp和BOM块计数等小事情,它确实很有用。这似乎是对潜力的浪费。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:31:11 | 显示全部楼层
仅供参考:缩放方法也仅适用于活动文档,因为它们来自应用程序对象,不依赖于文档。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:37:31 | 显示全部楼层
像Lee一样,只需将auto plot lisp设置为defun,首先通过autoload加载,然后将其作为主脚本中的一行,我将拥有所有不同的任务,因为单个defun使其更易于调试和控制。
 
不过,您可能为我提供了2013年一个绘图问题的线索,其中自动绘图不进行文本填充。
 
您是否需要一个关于属性的lisp示例,该示例将与muli布局打印结合使用?一个简单的例子
 
  1. (setq newstr ""
  2. newstr2 "")
  3. (setq ss1 (car (entsel)))  ; pick a block
  4. (foreach att (vlax-invoke (vlax-ename->vla-object SS1) 'getattributes)
  5.        (setq newstr (strcat newstr "," (vla-get-textstring att )))
  6.        (setq newstr2 (strcat newstr2 "," (vla-get-tagstring att)))
  7. )
  8. (princ newstr)
  9. (princ newstr2)
回复

使用道具 举报

13

主题

48

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 07:44:25 | 显示全部楼层
比加尔,
 
不确定我们在这里谈论的是不是同一件事。当您谈到多布局打印时,您是否认为图纸空间选项卡位于同一dwg文件上?
 
如果是这样的话,我用下面的方法来实现这一点。
 
  1. (Defun C:PDF (/ PSpaces Center Center2 PlotList PlotTabs)
  2. (vl-load-com)
  3. (setvar "FILEDIA" 0)
  4. (setvar "CMDDIA" 0)
  5. (setq PSpaces (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))))
  6. (setq Center 0)
  7. (setq Center2 0)
  8. (repeat (vla-get-count PSpaces)
  9.    (setq PlotList (cons (setq Center (1+ Center)) PlotList))
  10.    )
  11. (vlax-for PlotTab PSpaces
  12.    (setq PlotList (subst (vla-get-name PlotTab)(vla-get-taborder PlotTab)PlotList))
  13.    )
  14. (setq PlotList (reverse PlotList))
  15. (while (/= Center2 (1- Center))
  16.    (setq PlotTabs (nth Center2 PlotList))
  17.    (command "-PLOT" "y" PlotTabs "Adobe PDF" "Ledger" "Inches" "Landscape" "No" "Extents" "1:1" "Center" "Yes" "acad.ctb" "Yes" "No" "No" "No" "No" "Yes" "Yes")
  18.    (setq Center2 (1+ Center2))
  19.    )
  20. (setvar "FILEDIA" 1)
  21. (setvar "CMDDIA" 1)
  22. (princ)
  23. )

 
也不太清楚李在说什么。我的lisps自动加载到每个图形中。我的工作地点让我整天换到不同的电脑上工作。所以,我设置了一个闪存驱动器,我有一个加载lisp,所以只要我把我的闪存驱动器插入到电脑,它就会在我打开autocad时加载我所有的lisp。见下文:
 
  1. (vl-load-com)
  2. (progn
  3. (setq dirltr (list "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z")) ;;possible dir locations
  4. (foreach Dir dirltr
  5.    (if (or (/= (findfile (strcat Dir":\\Loader.lsp")) nil) (/= (findfile (strcat Dir":\\Loader.fas")) nil));;find flash drive dir
  6.      (setq Path Dir)
  7.      )
  8.    )
  9. (setq lload '())
  10. (foreach file (vl-directory-files (strcat Path ":\") "*.fas");;locate all fas files in main dir
  11.    (setq lload (append lload (list file)))
  12.    )
  13. (foreach file (vl-directory-files (strcat Path ":\") "*.lsp");;locate all lsp files in main dir
  14.    (setq lload (append lload (list file)))
  15.    )
  16. (Foreach lisp Lload
  17.    (if (not (or (= (strcase lisp) (strcase "Loader.lsp")) (= (strcase lisp) (strcase "Loader.fas"))))
  18.      (progn
  19. (load (strcat Path ":\" Lisp))
  20. (princ (strcat lisp "\r\n"))
  21. )
  22.      )
  23.    )
  24. )

 
它有更多的东西要更新。连接到网络并下载最新版本的lisp(如果适用)。但这对你们来说是行不通的。无论如何,这就是它的实质。
 
让我知道以上是不是你在说的,或者我是否要学习一些新的东西
 
也是BIGAL
 
当你发布上述内容时,你可能会发现这很有用。
 
  1. (defun C:BM ( / attlst ent entN Block BlName cadblk attobjlst objatt promstr attprom attname atttext attlst attr attlst2 ent2 entN2 Block2 BlName2 cadblk2 attobjlst2 objatt2 promstr2 attprom2 attname2 atttext2 attlst2 attr2 name prom text)
  2. (vl-load-com)
  3. (setq attlst nil)
  4. (setq attlst2 nil)
  5. (if (setq ent (entsel "\nSelect a block to copy attributes from: "))
  6.    (progn
  7.      (setq entN (car ent))
  8.      (setq Block (vlax-ename->vla-object entN))
  9.      (setq BlName (vla-get-name Block))
  10.      (setq cadblk (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) BlName))
  11.      (if (= (vla-get-hasattributes Block) :vlax-true)
  12. (setq attobjlst (vlax-safearray->list (variant-value (vla-getattributes Block))))
  13. )
  14.      (foreach objatt attobjlst
  15. (vlax-for promstr cadblk
  16.   (if (= (vla-get-objectname promstr) "AcDbAttributeDefinition")
  17.     (progn
  18.       (if (= (vla-get-ObjectID objatt) (vla-get-ObjectID promstr))
  19.         (progn
  20.           (setq attprom (vla-get-promptstring promstr))
  21.           )
  22.         )
  23.       )
  24.     )
  25.   )
  26. (setq attname (vla-get-tagstring objatt))
  27. (setq atttext (vla-get-textstring objatt))
  28. (setq attlst (append attlst (list (list objatt attname attprom atttext))))
  29.     )
  30.   )
  31.    (princ "..no object selected.")
  32.    )
  33. (if (setq ent2 (entsel "\nSelect a block to copy attributes to: "))
  34.    (progn
  35.      (setq entN2 (car ent2))
  36.      (setq Block2 (vlax-ename->vla-object entN2))
  37.      (setq BlName2 (vla-get-name Block2))
  38.      (setq cadblk2 (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) BlName2))
  39.      (if (= (vla-get-hasattributes Block2) :vlax-true)
  40. (setq attobjlst2 (vlax-safearray->list (variant-value (vla-getattributes Block2))))
  41. )
  42.      (foreach objatt2 attobjlst2
  43. (vlax-for promstr2 cadblk2
  44.   (if (= (vla-get-objectname promstr2) "AcDbAttributeDefinition")
  45.     (progn
  46.       (if (= (vla-get-Handle objatt2) (vla-get-Handle promstr2))
  47.         (progn
  48.           (setq attprom2 (vla-get-promptstring promstr2))
  49.           )
  50.         )
  51.       )
  52.     )
  53.   )
  54. (setq attname2 (vla-get-tagstring objatt2))
  55. (setq atttext2 (vla-get-textstring objatt2))
  56. (setq attlst2 (append attlst2 (list (list objatt2 attname2 attprom2 atttext2))))
  57.     )
  58.   )
  59.    (princ "..no object selected.")
  60.    )
  61. (foreach attr attlst
  62.    (setq name (nth 1 attr))
  63.    (setq prom (nth 2 attr))
  64.    (setq text (nth 3 attr))
  65.    (foreach attr2 attlst2
  66.      (if (and (= name (nth 1 attr2))(= prom (nth 2 attr2)))
  67. (vla-put-textstring (nth 0 attr2) text)
  68. )
  69.      )
  70.    )
  71. (princ)
  72. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:52:58 | 显示全部楼层
谢谢Cadwarrior,但是我已经有了大约6个不同的标题栏修改器,比如从第一个标题栏复制行到所有标题栏,计算页数,根据布局名称更改属性,在更改属性的基础上,细节也在VBA中完成,正如我首先在那里写的那样。目前的最后一个测试是使用每个布局选项卡的“是/否”自动增量更新修订。如果是,允许操作员首先非常快速地查看布局选项卡并输入“否”。
回复

使用道具 举报

13

主题

48

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 08:02:02 | 显示全部楼层
你知道李在说什么该怎么做吗?我根本不习惯从其他图形中控制图形,我的第二次尝试已经让我陷入了一个循环
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:02:36 | 显示全部楼层
使用脚本可以允许您修改任意多个dwg,唯一的问题(也许是一种解决方法)是您一次只能处理一个dwg,但也就是说使用。net我确信可以允许您将任何dwg制作为当前dwg,然后可能运行lisp等。这样您就不需要dwg列表,另一种方法是您可以(这里的示例)选择dwg名称,然后基本上编写一个脚本,修改所选dwg的打开和关闭。
 
帮助某人列出打开的文档,编写脚本,关闭所有运行脚本。有什么建议吗
回复

使用道具 举报

13

主题

48

帖子

35

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 08:15:01 | 显示全部楼层
任何关于从哪里开始的好参考资料。网我从没试过。我打算调查一下。但从来没有理由这么做。这是我用VLisp做的第一件事。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 15:23 , Processed in 0.443928 second(s), 72 queries .

© 2020-2025 乐筑天下

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