明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2097|回复: 5

[讨论] 多图框打印(支持斜框)

[复制链接]
发表于 2019-12-27 10:18 | 显示全部楼层 |阅读模式
刚写好测试量有限,不好用勿喷。
在对话框内只选择打印机、纸张和打印样式,其它自动判断
;;;***************************选择图框打印***************************
(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 '+ addxy  BastPoint ))
    (setq AcrossSide1(mapcar '+ addxy  AcrossSide ))
    (setq ShortSide1(mapcar '+ addxy   ShortSide ))
    (setq LongSide1(mapcar '+ addxy  LongSide ))
    (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)
)


"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2019-12-27 10:23 | 显示全部楼层
大至思路:将多义线图框内复制移动(1000,1000)之后旋转打印。
发表于 2019-12-28 12:51 | 显示全部楼层
虽然我看不懂代码(没学过)
但是我要点赞,为探索精神
发表于 2020-1-13 10:12 | 显示全部楼层
感谢分享,正在学习图框打印中,很有帮助。
发表于 2022-7-21 10:52 | 显示全部楼层
感謝分享,很有幫助。
发表于 2023-9-9 08:29 | 显示全部楼层
谢谢分享,使用正常
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 02:58 , Processed in 1.028243 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表