本帖最后由 w245272914 于 2018-1-17 17:56 编辑
各位大神走过路过,请不要错过!!进来看一看瞧一瞧,吃不了亏上不了当,啦啦啦~~~~
不良原因:附件是lisp程序与模版DWG
该程序有一个缺点不能智能识别打印纵向或者横向的图纸
在程序中设置了 ( "p" ; 輸入圖形方向(縱向:P 橫向
)
只能縱向打印,而有些图纸是有纵向与横向的
所以:
跪求改一批量打印程序
可以帮忙优化该程序吗,那些不合理的函数,那些重复的函数,那些可以简化的函数
可以帮忙优化成更智能吗?智能打印縱向:P 橫向
,并自动保存PDF到该文件目录就更好了
war32
首先感谢这位大神帮忙修模程序,可以智能打印縱向:P 橫向
见程序源码:智能判斷模型空間橫縱_批量打印(源码共享给大家使用)
一、不过问题又来了,能在请大神帮忙实现智能打印縱向:P 橫向
(已经实现 ),并自动保存PDF到该文件目录就更好了(程序没实现)
二、可以实现多dwg自动打印PDF到工作目录(程序没实现)
lostbalance
又来感谢

~~~
不厌其烦是教导我一步步调试,太感谢了。最终程序测试OK
程序:智能判斷模型空間橫縱_批量打印(DWG To PDF.pc3)
说明:目前只适用CAD本身打印机DWG To PDF.pc3,读取模型空间中的一张张图纸,自动保存为一张张图纸到该文件目录。
顺带问题点:
我喜欢用pdfFactory Pro 打机印,打印质量好,可以用什么函数自动保存到该文件目录吗?
网友答:
注释,我以为你们可以直接看的懂。55 我们公司是台资产。所以乱码。你试着改改,不行的话,我想办法上传简体的。网友答:
你说的是合成一个PDF文件吗,那自带的那个好像是不可以吧。不过个人习惯一张图一个PDF,所以对这个就不了解了。ps,公司买了正版Adobe PDF,那个带有做合集功能,偶尔要用也没关系,哈哈。
如果用第三方那个打印机,那我改的代码就基本不能用了。command前面的都可以删了。然后后面打印到文件那个[path]恢复成["n"]。
以为是Adobe PDF打印机的示例:
1. AutoCAD的添加打印机,添加一个Adobe PDF打印机的pc3副本,然后配置这个pc3副本,自定义特性里面把查看PDF结果关闭,然后输出文件夹改为默认Documents\*.pdf。然后用自带的打印功能随便打印一张,看看出来的pdf文件名称是什么,比如["e://desktop//1model.pdf"]。
2. 用上述修改完的代码。然后在后面加上pdf改名的代码,
(vl-file-rename "e://desktop//1model.pdf" "e://desktop//new.pdf")
(vl-file-copy "e://desktop//new.pdf" "e://work//new.pdf")
(vl-file-delete "e://desktop//new.pdf")
然后如果批量的,考虑加入序号[No]之类的。
大概是这样的代码吧,我没用过,你可以测试下。
不过个人感觉兼容性比较差,至少默认的pdf文件名,中英文环境下就不一致,知道的还可以多加几组判断,不知道的就没办法了。网友答:
翻译了一下网友答:
自古帖子楼主顶~~~~~网友答:
网友答:
可以分享LISP吗? 谢谢 哥们网友答: 没有源码,你让别人怎么给你修改??网友答:
这个应该不是lisp网友答:
上面 的附件就是源码啊~~~ 有一个lisp 有一个测试文件的。网友答: 200多个查看,就是没有人大神来帮忙下 555













网友答:
注释的中文都是乱码?
各位大神走过路过,请不要错过!!进来看一看瞧一瞧,吃不了亏上不了当,啦啦啦~~~~
不良原因:附件是lisp程序与模版DWG
该程序有一个缺点不能智能识别打印纵向或者横向的图纸
在程序中设置了 ( "p" ; 輸入圖形方向(縱向:P 橫向
)只能縱向打印,而有些图纸是有纵向与横向的
所以:
跪求改一批量打印程序

可以帮忙优化该程序吗,那些不合理的函数,那些重复的函数,那些可以简化的函数

可以帮忙优化成更智能吗?智能打印縱向:P 橫向
,并自动保存PDF到该文件目录就更好了war32
首先感谢这位大神帮忙修模程序,可以智能打印縱向:P 橫向

见程序源码:智能判斷模型空間橫縱_批量打印(源码共享给大家使用)
一、不过问题又来了,能在请大神帮忙实现智能打印縱向:P 橫向
(已经实现 ),并自动保存PDF到该文件目录就更好了(程序没实现)二、可以实现多dwg自动打印PDF到工作目录(程序没实现)
lostbalance
又来感谢


~~~不厌其烦是教导我一步步调试,太感谢了。最终程序测试OK
程序:智能判斷模型空間橫縱_批量打印(DWG To PDF.pc3)
说明:目前只适用CAD本身打印机DWG To PDF.pc3,读取模型空间中的一张张图纸,自动保存为一张张图纸到该文件目录。
顺带问题点:
我喜欢用pdfFactory Pro 打机印,打印质量好,可以用什么函数自动保存到该文件目录吗?
网友答:
ygp820601 发表于 2017-12-26 10:58
注释的中文都是乱码?
注释,我以为你们可以直接看的懂。55 我们公司是台资产。所以乱码。你试着改改,不行的话,我想办法上传简体的。网友答:
w245272914 发表于 2018-1-8 08:51
哥们,你上次也说过该段代码只适用于DWG To PDF.pc3打印机,而不适用pdfFactory Pro打印机
(if ( ...
你说的是合成一个PDF文件吗,那自带的那个好像是不可以吧。不过个人习惯一张图一个PDF,所以对这个就不了解了。ps,公司买了正版Adobe PDF,那个带有做合集功能,偶尔要用也没关系,哈哈。
如果用第三方那个打印机,那我改的代码就基本不能用了。command前面的都可以删了。然后后面打印到文件那个[path]恢复成["n"]。
以为是Adobe PDF打印机的示例:
1. AutoCAD的添加打印机,添加一个Adobe PDF打印机的pc3副本,然后配置这个pc3副本,自定义特性里面把查看PDF结果关闭,然后输出文件夹改为默认Documents\*.pdf。然后用自带的打印功能随便打印一张,看看出来的pdf文件名称是什么,比如["e://desktop//1model.pdf"]。
2. 用上述修改完的代码。然后在后面加上pdf改名的代码,
(vl-file-rename "e://desktop//1model.pdf" "e://desktop//new.pdf")
(vl-file-copy "e://desktop//new.pdf" "e://work//new.pdf")
(vl-file-delete "e://desktop//new.pdf")
然后如果批量的,考虑加入序号[No]之类的。
大概是这样的代码吧,我没用过,你可以测试下。
不过个人感觉兼容性比较差,至少默认的pdf文件名,中英文环境下就不一致,知道的还可以多加几组判断,不知道的就没办法了。网友答:
ygp820601 发表于 2017-12-26 10:58
注释的中文都是乱码?

- ;;需建立打印每幅图范围多段线图框及编号,并且令其处同一图层
- ;;主程序
- (defun c:sxdy ( / cmd doc e2 el2 i i2 itm lst lst1 lst2 msg n os p1 p3 sgel ss1 ss2 tc xy)
- (defun *error* (msg)
- (setvar "cmdecho" cmd) ;_ 恢复cmdecho系统变量
- (setvar "osmode" os) ;_ 恢复osmode系统变量
- (princ "error: ")
- (princ msg) ;_ 打印错误信息
- (princ)
- )
- (setq cmd (getvar "cmdecho")) ;_ 保存系统变量cmdecho值
- (setq os (getvar "osmode"))
- (setq doc (vla-get-activedocument (vlax-get-acad-object)))
- (vla-StartUndoMark doc)
- (setvar "osmode" 0)
- (setq tc (assoc 8 (entget (car (entsel "\n 请选任选一打印序号==>> ")))))
- (command "-layer" "p" "n" (cdr tc) "")
- (print "\n 请选择需要打印的范围的图框==>>")
- ;同时获取图框选择集ss1 文字选择集ss2
- (setq ss1 nil ss2 nil)
- (if (setq ss1 (ssget (list (cons 0 "TEXT,LWPOLYLINE") tc)))
- (foreach itm (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss1)))
- (if (= (cdr (assoc 0 (entget itm))) "TEXT")
- (progn
- (or ss2 (setq ss2 (ssadd)))
- (ssadd itm ss2)
- (ssdel itm ss1)
- )
- )
- )
- )
- (setq i2 0)
- (setq lst2 nil)
- (repeat (sslength ss2)
- (setq e2 (ssname ss2 i2))
- (setq el2 (entget e2))
- (setq lst2 (append lst2 (list (list (read (cdr (assoc 1 el2))) (assoc 10 el2)))))
- (setq i2 (1+ i2))
- )
- (setq lst2 (sort lst2)) ;;已经按图框内数字1,2,3,4进行排序的表lst2 ((序号1 (10 三维点)) (序?2 (10 三号)))
- (setq lst2 (vl lst2)) ;;去掉lst2中的序号,重组序号表 lst2
- (lstlw ss1) ;; 得到图框角点坐标表lst1
- (setq n 0)
- (setq lst nil)
- (repeat (length lst2)
- (setq sgel (nth n lst2)) ;;获取单个序号坐坐标
- (setq lst (append lst (pp sgel lst1))) ;;得到对应图框坐标表
- (setq n (1+ n))
- )
- (setq i 0)
- (repeat (length lst)
- (setq xy (nth i lst))
- (setq p1 (car xy))
- (setq p3 (cadr (cdr xy)))
- (command "zoom" "w" p1 p3)
- (command "-plot" "y" ; 是否需要详细打印配置
- "模型" ; 输入布局、模型名称
- "pdfFactory Pro" ; 输入输出设备的名称 此处举例虚拟打印机 pdfFactory Pro
- ; (lisp语言中的一个 \ 符号需要用 \\符号表示,即\=>\\)
- ; 例如:共享打印机 \\Adminstractor\Kyocera KM-2560 KX应该表示为\\\\Adminstractor\\Kyocera KM-2560 KX
- "A4" ; 输入图纸尺寸A4
- "m" ; 输入图纸单位(I:英寸 M:毫米)
- "p" ; 输入图形方向(纵向:P 横向:L )
- "n" ; 是否反向打印
- "w" ; 输入打印区域(显示:D范围:E图形界限:L 视图:V 窗口:W)
- p1 ; 打印图框左下角点坐标
- p3 ; 打印图框右上角点坐标
- "f" ; 输入打印比例(F:布满)
- "c" ; 输入打印偏移(居中打印:C)
- "y" ; 是否按样式打印
- "monochrome.ctb" ; 输入打印样式名称
- "y" ; 是否打印线宽
- "a" ; 输入着色打印设置置(按显示:A 线框:W
- ; 消隐:H 渲染:R)
- "n" ; 是否打印到文件
- "n" ; 是否保存页面设置的修改
- "y" ; 是否继续打印
- )
- (setq i (+ i 1))
- )
- (setvar "cmdecho" cmd) ;_ 恢复cmdecho系统变量
- (setvar "osmode" os) ;_ 恢复osmode系统变量
- (vla-EndUndoMark doc)
- (vlax-release-object doc)
- (princ)
- )
-
- ;获取图框集合多段点表总表
- (defun lstlw (ss)
- (setq i1 0)
- (setq lst1 nil)
- (repeat (sslength ss)
- (setq e1 (ssname ss i1))
- (setq el1 (LWPL e1))
- (setq lst1 (append lst1 (list el1)))
- (setq i1 (1+ i1))
- )
- )
- ;获取多段线点表函数
- (defun LWPL (x /)
- (vl-remove-if
- 'not
- (mapcar
- '(lambda (x)
- (if (= (car x) 10)
- (append (cdr x) '(0))
- )
- )
- (entget x)
- )
- )
- )
- ;;?((1 (10 1117.07 581.131 0.0)) (2 (10 1693.6 596.47 0.0)))中的序号1 2去掉
- (defun vl (lst)
- (mapcar '(lambda (x)
- (cdr (car (cdr x)))
- )
- lst
- )
- )
- ;;提取出对应单个图框的坐标表
- (defun pp (pt lst)
- (vl-remove-if
- 'not
- (mapcar
- '(lambda (x)
- (if (= T (isPtinPM pt x))
- x
- )
- )
- lst
- )
- )
- )
- ;;根据文字内容进行表排序
- (defun sort (LST / REC)
- (defun REC (A B)
- ;;递归
- (cond ((equal (car A) (car B) 1E-4)
- (REC (cdr A) (cdr B))
- )
- (T (< (car A) (car B)))
- )
- )
- (vl-sort LST '(lambda (P1 P2) (REC P1 P2)))
- )
- ;;eg:((1 (10 1117.07 581.131 0.0)) (2 (10 1693.6 596.47 0.0)) (3 (10 2284.33 603.215 0.0)))
- ;;;******************************************************************************
- ;;; No.51 判断点是否在多边形内(狂刀程序)
- ;;;xPt是要判断的点坐标(x y z ), Points是多边形顶点列表((x1 y1 z1) (x2 y2 z2)...)
- ;;;******************************************************************************
- (defun isPtinPM (xPt Points)
- (equal
- PI
- (abs
- (apply
- '+
- (mapcar '(lambda (x y) (rem (- (angle xPt x) (angle xPt y)) PI))
- (reverse (cdr (reverse (cons (last Points) Points))))
- Points
- )
- )
- )
- 1e-6
- ) ;end_equal
- ) ;end_defun
-
翻译了一下网友答:
自古帖子楼主顶~~~~~网友答:
网友答:
水吉空 发表于 2017-12-22 18:07
可以分享LISP吗? 谢谢 哥们网友答: 没有源码,你让别人怎么给你修改??网友答:
水吉空 发表于 2017-12-22 18:07
这个应该不是lisp网友答:
hnzkhyyl 发表于 2017-12-22 23:15
没有源码,你让别人怎么给你修改??
上面 的附件就是源码啊~~~ 有一个lisp 有一个测试文件的。网友答: 200多个查看,就是没有人大神来帮忙下 555














网友答:
注释的中文都是乱码?