多图框打印(支持斜框)
刚写好测试量有限,不好用勿喷。在对话框内只选择打印机、纸张和打印样式,其它自动判断
;;;***************************选择图框打印***************************
(defun c:mpt ()
(vl-load-com)
(princ "\n请选择图框:")
(setq ss0(ssget '((0 . "LWPOLYLINE") (90 . 4))))
(command "_pagesetup")
(setq acaddoc (vla-get-activedocument (vlax-get-acad-object)))
(setq clayout (vla-get-activelayout acaddoc))
(vla-refreshplotdeviceinfo clayout)
(setq printname (vla-get-configname clayout))
(setq papersize (vla-GetLocaleMediaName clayout(vla-get-CanonicalMediaName clayout)))
(setq PlotStyle (vla-get-stylesheet clayout))
;(setq currScale (vla-get-StandardScale clayout)) 获得打印例
;(setq printorta (vla-get-plotrotation clayout))
;(if(= printorta 0)(setq Rote "L")(setq Rote "P"));;纸的方向
(setq currscale(getint"\n请选择打印比例1.1:500 2.1:1000 3.1:2000 4.布满:< 4 >"))
(if (= currscale 1)(setq printscale 2))
(if (= currscale 2)(setq printscale 1))
(if (= currscale 3)(setq printscale 0.5))
(if (= currscale 4)(setq printscale "F"))
(if (= currscale nil)(setq printscale "F"))
(setq osmode_bak (getvar "osmode"));_记录捕捉
(setq clayer_bak (getvar "clayer"));_记录当前图层
(setq cecolor_bak (getvar "cecolor"));_记录当色
(setvar "osmode" 0)
(setq nn 0)
(repeat (sslength ss0)
(setq ss1 nil ss2 nil)
(setq ent0(entget (ssname ss0 nn)))
(setq point_list (mapcar 'cdr(vl-remove-if '(lambda (xy) (/= 10 (car xy))) ent0)))
(setq x->X(vl-sort point_list(function (lambda (e1 e2)(< (car e1) (car e2))))))
(setq pointMinX1(car x->X))
(setq pointMinX2(cadr x->X))
(if(< (cadr pointMinX1)(cadr pointMinX2))(setq BastPoint pointMinX1)(setq BastPoint pointMinX2))
(setq dis->DIS(vl-sort point_list(function (lambda (e1 e2)(< (distance BastPoint e1)(distance BastPoint e2))))))
(setq ShortSide(cadr dis->DIS))
(setq AcrossSide(last dis->DIS))
(setq LongSide(caddr dis->DIS))
(setq Angl1(angle BastPoint LongSide))
(setq Angl3(angle BastPoint AcrossSide))
(if(or(< angl1 0.7854)(> angl1 5.5))
(progn
(setq Angl2(- 0 (*(/ angl1 3.1415)180)))
(setq Rote "L")
)
(progn
(setq Angl2(- 90 (*(/ angl1 3.1415)180)))
(setq Rote "P")
)
)
(command "zoom" "e")
(setq ss1(ssget "cp"(list BastPoint ShortSide AcrossSide LongSide) ))
;(setq addxy(list (+(* nn 500)1000)(+(* nn 500)1000)))
(setq addxy(list 1000 1000))
(command "copy" ss1 "" "0,0"addxy )
(setq BastPoint1(mapcar '+ addxyBastPoint ))
(setq AcrossSide1(mapcar '+ addxyAcrossSide ))
(setq ShortSide1(mapcar '+ addxy ShortSide ))
(setq LongSide1(mapcar '+ addxyLongSide ))
(command "zoom" "e")
(setq ss2(ssget "cp"(list BastPoint1 ShortSide1 AcrossSide1 LongSide1)))
(command "ROTATE" ss2 "" BastPoint1 angl2)
(setq AcrossSide2(polar BastPoint1(+ angl3(*(/ angl2 180)3.14159))(distance BastPoint1 AcrossSide1)))
(command "zoom" "e")
(command "_.PLOT"
"Y" ;_是否需要详细打印配置?[是(Y)/否(N)] <否>: y
"" ;_输入布局名或 [?] <模型>:
printname ;_输入输出设备的名称或 [?]
papersize ;_输入图纸尺寸或 [?] <A3>:
"M" ;_输入图纸单位 [英寸(I)/毫米(M] <毫米>:
Rote ;_输入图形方向 [纵向(P)/横向(L)] <横向>:
"N" ;_是否反向打印?[是(Y)/否(N)] <否>:
"W" ;_输入打印区域 [显示(D)/范围(E)/图形界限(L)/视图(V)/窗口(W)] <范围>: w
BastPoint1 ;_输入窗口的左下角 <0.000000,0.000000>: 输入窗口的右上角 <0.000000,0.000000>:
AcrossSide2;_输入窗口的右上角 <0.000000,0.000000>:
printscale ;_输入打印比例 (打印的 毫米=图形单位) 或 [布满(F)] <Fit>: fit
"C" ;_输入打印偏移 (x,y) 或 [居中打印(C)] <0.00,0.00>: c
"Y" ;_是否按样式打印?[是(Y)/否(N)] <是>:
PlotStyle;_输入打印样式表名称或 [?] (输入 . 表示无) <hp5100.ctb>:
"Y" ;_是否打印线宽?[是(Y)/否(N)] <是>:
"N" ;_是否删除隐藏线?[是(Y)/否(N)] <否>:
"N" ;_是否打印到文件 [是(Y)/否(N)] <N>:
"N" ;_是否保存模型选项卡的修改.
"n" ;_是否继续打印.
)
(command "ERASE" ss2 "")
(setq nn(+ nn 1))
)
(command "zoom" "e")
(setvar "osmode" osmode_bak);_还原捕捉
(setvar "clayer" clayer_bak);_还原图层
(setvar "cecolor" cecolor_bak);_还原颜色
(princ)
)
大至思路:将多义线图框内复制移动(1000,1000)之后旋转打印。 虽然我看不懂代码(没学过);P
但是我要点赞,为探索精神 感谢分享,正在学习图框打印中,很有帮助。 感謝分享,很有幫助。 谢谢分享,使用正常
页:
[1]