Semuserable 发表于 2022-7-6 08:46:45

[AutoCad 2008 AutoLisp]Printi

大家好!
 
如您所见,我一直在使用AutoCad 2008。问题是在哪里可以找到有关在AutoLisp中为AutoCad打印API的信息?
 
我想要实现的是:
 
例如,我用多段线画了一个三角形。
然后我在那个三角形周围画一个A4框架。
最后一步是我选择画框,里面的所有画(以及A4画框本身)都进入我的打印机。
我的眼睛上出现了一个在A4框架中画得很漂亮的三角形。
 
谢谢你的进步!

Lee Mac 发表于 2022-7-6 08:53:50

使用Visual LISP IDE(VLIDE)帮助文档研究以下内容:
 
使用vla get plot检索plot对象,该对象具有以下属性和方法,我已经突出显示了与您相关的属性和方法:
 
方法
显示绘图预览
绘图仪
绘图文件
SetLayoutsToPlot设置布局
启动BatchMode
 
属性
应用
静音模式
副本数
批次绘图进度

Semuserable 发表于 2022-7-6 08:59:18

李·麦克,
感谢您的快速回复。首先,我对Activex对象模型完全陌生,如果你们不介意的话,我有一些问题想问你们。
 
1、我找到了获取plot对象的方法
接下来,如果我正确理解了这个概念,现在我可以尝试使用“PlotToDevice”方法打印空白列表。所以我写了以下内容
(vla-PlotToDevice plot)但是:返回vlax false(通过我的打印机打开的方式)。请你解释一下我做错了什么?我错过了什么?
 
2.如何区分vla、vlax、vlr前缀?它们通常是什么意思?
 
谢谢

Lee Mac 发表于 2022-7-6 09:03:49

 
假设已为您尝试打印的布局正确设置打印配置;您需要设置要打印的区域。
 
下面是一个快速示例:
 
如果您使用自己的PC3打印配置,则可以删除为布局设置打印属性的许多表达式,因为您只需将其提供给PlotToDevice方法。
 
我已设置示例来绘制当前布局、打印范围、居中打印、缩放以适应。
 
您需要更改打印设备的名称(以红色突出显示以满足您的要求),或者如果已经为布局设置了绘图仪,则需要删除此行。
 
(defun c:test ( / acapp acdoc aclay acplt )

   (setq acapp (vlax-get-acad-object)
         acdoc (vla-get-activedocument acapp)
         acplt (vla-get-plot acdoc)
         aclay (vla-get-activelayout acdoc)
   )
   (vla-zoomextents acapp)
   (vla-refreshplotdeviceinfo aclay)

   (vla-put-configname aclay "YourPlotDevice")
   
   (vla-put-plottype aclay acExtents)
   (vla-put-centerplot aclay :vlax-true)
   (vla-put-standardscale aclay acscaletofit)
   (vla-put-PlotRotation aclay (if (LM:Landscape-p) ac90degrees ac0degrees))
   
   (vla-put-numberofcopies acplt 1)
   (vla-setlayoutstoplot acplt
       (vlax-make-variant
         (vlax-safearray-fill
               (vlax-make-safearray vlax-vbstring '(0 . 0)) (list (vla-get-name aclay))
         )
       )
   )
   (eq :vlax-true (vla-plottodevice acplt))
)
(vl-load-com) (princ)

(defun LM:Landscape-p nil
   (< 1.0 (apply '/ (mapcar '- (getvar 'EXTMAX) (getvar 'EXTMIN) '(0. 0.))))
)
 
弗拉-*
 
ActiveX属性和方法的类型库前缀。
 
vl-*/vlax-*
 
Visual LISP函数与ActiveX无关,是旧“Vital LISP”的一部分。
 
vlr-*
 
反应堆功能(类似于VBA事件)。

Semuserable 发表于 2022-7-6 09:09:45

李,谢谢!
 
它起作用了。现在我必须理解所有这些可怕的Activex函数。顺便问一下,“LM:”前缀是什么意思?使用“/”符号并在函数的参数列表中写入所有局部变量是否至关重要?当设置局部变量的值时,我可以避免它们吗?例如,我可以这样做吗
3
我这样问是因为它们都能工作。有什么问题?

Lee Mac 发表于 2022-7-6 09:13:55

 
这是我的作者前缀-“LM”=“Lee Mac”。它对函数的操作方式没有影响,因为“LM:example”只是另一个符号。“C:”前缀是唯一具有使命令在命令行中可用的效果的前缀。
 
在共享开源代码时,作者前缀很有用,因为除其他原因外,它更容易跟踪函数的源代码。
 
 
是的,非常重要-为了理解为什么,请阅读我在这里关于这个主题的教程。

Semuserable 发表于 2022-7-6 09:17:58

很棒的图坦卡门。非常感谢。

alanjt 发表于 2022-7-6 09:22:09

..........

Lee Mac 发表于 2022-7-6 09:31:12

 
干杯!

Semuserable 发表于 2022-7-6 09:32:23

如何更改“Plot…”中的刻度测量值(从英寸到毫米)使用AutoLisp的窗口?我需要能够将代码中的“比例”设置为1:1毫米(不是英寸)。例如
它将比例设置为1:1英寸。我想用同样的代码,但用毫米。是否有更改测量值的命令?
 
谢谢
页: [1] 2
查看完整版本: [AutoCad 2008 AutoLisp]Printi