nxchenjk 发表于 2019-12-27 10:18:06

多图框打印(支持斜框)

刚写好测试量有限,不好用勿喷。
在对话框内只选择打印机、纸张和打印样式,其它自动判断
;;;***************************选择图框打印***************************
(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)
)


nxchenjk 发表于 2019-12-27 10:23:58

大至思路:将多义线图框内复制移动(1000,1000)之后旋转打印。

lxl217114 发表于 2019-12-28 12:51:28

虽然我看不懂代码(没学过);P
但是我要点赞,为探索精神

xvjiex 发表于 2020-1-13 10:12:14

感谢分享,正在学习图框打印中,很有帮助。

白色微風1991 发表于 2022-7-21 10:52:21

感謝分享,很有幫助。

技术工作室 发表于 2023-9-9 08:29:00

谢谢分享,使用正常
页: [1]
查看完整版本: 多图框打印(支持斜框)