DCMZ 发表于 2013-4-20 13:40:59

怎么用lisp实现自动选择打印窗口


如图所示,在打印时,我想将打印范围设置为窗口,然后点击右边的“窗口”,从图纸中选择打印范围,那么我怎么通过lisp实现我想选择的2个点呢,不知道我有没有说清楚

tiyi8888@126.co 发表于 2013-4-20 14:27:40

说清楚了,没有这个必要吧

DCMZ 发表于 2013-4-20 14:36:18

tiyi8888@126.co 发表于 2013-4-20 14:27 static/image/common/back.gif
说清楚了,没有这个必要吧

是这样,图纸中有很多张连续的图,我想批量打印,请问您知道怎么写lisp吗

云中孤鹰 发表于 2013-4-20 15:40:54

用批量打印就好了

guisu771 发表于 2013-4-20 17:48:53

按我的理解,,你想全自动傻瓜式自动批量打印,,我是这样做的,仅供你参考

核心命令用-plot进入无对话框命令模式,,,

这两个窗口,必须要用一些特征,以便可以通过程序自动寻找,,我以前的做法是,图框采用特定图层,用多义线按制作,,

打印机可以用变量通过函数选定,有一个问题要注意就是纸张的配对,不同型号的打印机对应A3纸的描述是不同的,例如有的是“A3",有的是”A3(297×420mm)",有的是"A3 (297×420mm)“,,差一个字符都不行,程序会卡壳的,,解决方法,必须事先建立一个打印机纸张配对库,,让程序自动查找。

剩下来就简单了,先选择打印机,根据打印机自动选择对应的纸张配对符号,再通过查找图框的子函数,将本图符合条件的图都找出来,编入列表,包含两个角点(三个角点用于倾斜的图纸,例如道路平面图)的坐标,,,然后根据列表坐标,运行-polt命令打印,,,

-plot命令还设计到其他的一些参数设置,剩下的都比较简单了,,

DCMZ 发表于 2013-4-22 09:40:52

guisu771 发表于 2013-4-20 17:48 static/image/common/back.gif
按我的理解,,你想全自动傻瓜式自动批量打印,,我是这样做的,仅供你参考

核心命令用-plot进入无对话框 ...

你好,非常感谢你的解答。
我还是没明白,是怎么确定每张图左上角和右上角的坐标呢

iamxx 发表于 2013-4-22 16:11:18

(command "_.plot"
                     "y"
                     ""
                     (GetPrintName) ;_系统默认打印机
                     "A3"
                     "m"
                     "l"
                     "n"
                     "w"
                     "non"
                     PT0
                     "non"
                     PT1
                     (/ 1.0 SC)
                     "-4.24,-6.03"
                     "Y"
                     "ACAD"
                     "Y"
                     "A"
                     "N"
                     "N"
                     "Y"
          )
        )

pt0和pt1就是打印窗口的角点

guisu771 发表于 2013-4-23 00:44:03

DCMZ 发表于 2013-4-22 09:40 static/image/common/back.gif
你好,非常感谢你的解答。
我还是没明白,是怎么确定每张图左上角和右上角的坐标呢

这个跟图纸以及个人习惯有关,,有几种做法,可以搜索到图框角点坐标,
常用的是把图框做成一个标准块,插入到图中,,,你自己编程序搜索这个图框块,取得图块的各种属性,根据几何关系判断角点坐标。

如果你编过lisp,,,这是很简单的,,,如果没编过,,那就需要买本lisp的书,学一下,,,,

批量打印的程序并不难写,,,核心就是我说的-plot命令,,,主要的功夫就是看你,,怎么样用程序自动快速判定打印范围了

guisu771 发表于 2013-4-23 00:47:13

iamxx 发表于 2013-4-22 16:11 static/image/common/back.gif
(command "_.plot"
                     "y"
                     ""


特别注意,,”A3"对某些打印机是合适的,,某些打印机是不合适的,有可能是“A3(297×420mm)"或其他的

phoenixdjq 发表于 2013-4-23 13:13:45

(defun c:w31( / p1 p2 px n)
(setq old (getvar "osmode"))
(setvar "osmode" 1)

(command "-plot" "n" "" "上一次打印" "" "n" "y" "n")

(setq p1 (getpoint "\n 请选择第一个点:"))
(setq p2 (getpoint "\n 请选择第二个点:"))
(setq n (getint "\n 请选择连续页数:"))
(setq e (getint "\n 横向<1>纵向<2>:"))
(setvar "osmode" 0)
(if (= n nil) (setq n 1))
(repeat n
(if (= 2 e)
(command "-plot" "y" "模型" "" "A3" "M" "P" "N" "W" P1 P2 "F" "" "" "" "y""w" "N" "Y" "Y"))
;纵向
(if (= 1 e)
(command "-plot" "y" "模型" "" "A3" "M" "L" "N" "W" P1 P2 "F" "" "" "" "y""w" "N" "Y" "Y"))
;横向
(setq px (- (car p2) (car p1)))
(setq p1 (list (+ px ( car p1)) (cadr p1)))
(setq p2 (list (+ px ( car p2)) (cadr p2)))
)
(princ)
(setvar "osmode" old)
)


(defun c:w41(/ p1 p2 px n e)
(setq old (getvar "osmode"))
(setvar "osmode" 1)
(command "-plot" "n" "" "上一次打印" "" "n" "y" "n")
(setq p1 (getpoint "\n 请选择第一个点:"))
(setq p2 (getpoint "\n 请选择第二个点:"))
(setq n (getint "\n 请选择连续页数:"))
(setq e (getint "\n 横向<1>纵向<2>:"))
(setvar "osmode" 0)
(if (= n nil) (setq n 1))
(repeat n
(if (= 2 e)
(command "-plot" "y" "模型" "" "A4" "M" "P" "N" "W" P1 P2 "F" "" "" "" "y""w" "N" "Y" "Y"))
;纵向
(if (= 1 e)
(command "-plot" "y" "模型" "" "A4" "M" "L" "N" "W" P1 P2 "F" "" "" "" "y""w" "N" "Y" "Y"))
;横向
(setq px (- (car p2) (car p1)))
(setq p1 (list (+ px ( car p1)) (cadr p1)))
(setq p2 (list (+ px ( car p2)) (cadr p2)))
)
(princ)
(setvar "osmode" old)
)

;\\\\172.1.2.65\\Canon iR2200-3300 PCL6




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




(defun c:ww31( / p1 p2 px n)
(setq old (getvar "osmode"))
(setvar "osmode" 1)

(command "-plot" "n" "" "上一次打印" "" "n" "y" "n")

(setq p1 (getpoint "\n 请选择第一个点:"))
(setq p2 (getpoint "\n 请选择第二个点:"))
(setq n (getint "\n 请选择连续页数:"))
(setq e (getint "\n 横向<1>纵向<2>:"))
(setq f (getreal "\n 请输入图框间距:"))
(setvar "osmode" 0)
(if (= n nil) (setq n 1))
(repeat n
(if (= 2 e)
(command "-plot" "y" "模型" "" "A3" "M" "P" "N" "W" P1 P2 "F" "" "" "" "y""w" "N" "Y" "Y"))
;纵向
(if (= 1 e)
(command "-plot" "y" "模型" "" "A3" "M" "L" "N" "W" P1 P2 "F" "" "" "" "y""w" "N" "Y" "Y"))
;横向
(setq px (- (car p2) (car p1)))
(setq p1 (list (+ f px ( car p1)) (cadr p1)))
(setq p2 (list (+ f px ( car p2)) (cadr p2)))
)
(princ)
(setvar "osmode" old)
)







(defun c:ww41(/ p1 p2 px n e)
(setq old (getvar "osmode"))
(setvar "osmode" 1)
(command "-plot" "n" "" "上一次打印" "" "n" "y" "n")
(setq p1 (getpoint "\n 请选择第一个点:"))
(setq p2 (getpoint "\n 请选择第二个点:"))
(setq n (getint "\n 请选择连续页数:"))
(setq e (getint "\n 横向<1>纵向<2>:"))
(setq bc (getreal "\n 请输入图框间距:"))
(setvar "osmode" 0)
(if (= n nil) (setq n 1))
(repeat n
(if (= 2 e)
(command "-plot" "y" "模型" "" "A4" "M" "P" "N" "W" P1 P2 "F" "" "" "" "y""w" "N" "Y" "Y"))
;纵向
(if (= 1 e)
(command "-plot" "y" "模型" "" "A4" "M" "L" "N" "W" P1 P2 "F" "" "" "" "y""w" "N" "Y" "Y"))
;横向
(setq px (- (car p2) (car p1)))
(setq p1 (list (+ bc px ( car p1)) (cadr p1)))
(setq p2 (list (+ bc px ( car p2)) (cadr p2)))
)
(princ)
(setvar "osmode" old)
)

;\\\\172.1.2.65\\Canon iR2200-3300 PCL6




页: [1] 2
查看完整版本: 怎么用lisp实现自动选择打印窗口