乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 131|回复: 9

[LISP]請教一個LISP打印程序問題!!!

[复制链接]

5

主题

25

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
56
发表于 2003-11-30 17:48:00 | 显示全部楼层 |阅读模式
我是一名繪圖員,嚐試在編制一些小程序來提高的工作效率,近日在編制一個
小程序時遇到一個問題,請各位高手指教!
我廠是個家具廠,廠裡的習慣是先在一個文件裡面畫出主三視圖,然後在同一個文件
畫出配件圖,配件已經根據名稱分好圖層,便於拷貝出來畫配件圖,配件沒有進行縮
放而是對標准圖框進行縮放來適配配件,我想編一個程序,在事先指定好打印配件文
件A4.pc3後,只需框遷圖框便可用不同的比例打印A4幅面的圖紙,可是下面的程序好
像總是出毛病,特別是(del_tempview) 函數,只要運行它,就會導致AutoCAD 2004
退出,不知何故,請各位指點一下!
(程序默認打印方向為Landscape, 默認打印類型表為monchrome,可以更改)
;c:pw3
;have a4.pc3 file
;can specify polt dirction and polt style table (acad or monchrome)                 ;
;;;;;;;;;;;;;;;;;;;
;;(get_plot_color)
(defun get_plot_color ()
  (initget "Acad Monochrome")
  (setq        plot_color
         (getkword
           "\nSpecify plot style table [Acad/Monochrome] :"
         )
  )
  (if (null plot_color)
    (setq plot_color "Monochrome")
  )
  (get_plot_set)
)
;;;;;;;;;;;;;;;;;;;;;;;;
;;(get_plot_dir)
(defun get_plot_dir ()
  (initget &quotortrait Landscape" )
  (setq        plot_dir
         (getkword
           "\nSpecify plot dirction [Portrait/Landscape] : "
         )
  )
  (if (null plot_dir)
    (setq plot_dir "Landscape")
  )
    (get_plot_set)
)
;;;;;;;;;;;;;;;;;;;;;;;;
;;(get_plot_window)
(defun get_plot_window ()
  ;;save a tmpview for plot windows
  (setq pwPT1 (getpoint "\nSpecify plot window first corner:"))
  (setq pwPT2
         (getcorner "\nSpecify plot window opposite corner:" Pwpt1)
  )
  (command "-VIEW" "Window" "tmpview" pwPT1 pwPT2)
)
;;;;;;;;;;;;;;
(defun del_tempview ()
  (command "-VIEW" "Delete" "tmpview")
)

;;;;;;;;;;;;;;;;
(defun start_plot()
(command "-plot"   "y"       "model"         "a4.pc3"  "a4"
           "Millimeters"       plot_dir         "no"           "view"    "tmpview"
           "fit"     "center"  "yes"         plot_color "yes"     ""
           ""             ""               "Y"
          )
)
;;
;;(get_plot_set)
(defun get_plot_set()
(psave)save sys var
   (Setvar "cmdecho" 0)
  (initget "c d")
  (setq        plot_set
         (getkword
           "\n Change plot setting [Dirction/depend Color]:"
         )
  )
;;;  ;
  (if (null plot_set)
    (get_plot_window)
    (start_plot)
  )
;;;  ;
  (if (= plot_set "c")
    (get_plot_color)
  )
;;;  ;
   (if (= plot_set "d")
    (get_plot_dir)
  )
  (prestore);restore sys var
  (princ)
  )
;;
(defun c:pw3 ();Specify
   (setq plot_dir "Landscape")
(setq plot_color "Monochrome")
(get_plot_set)
(get_plot_window)
  (start_plot)
;(del_tempview)
  (princ)
  )
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-12-1 08:37:00 | 显示全部楼层
程序很乱,下面这个函数未给出(这个还不重要)
(prestore)
这句话也不知道什么意思
(psave)save sys var
还有这里,如果选择了C或D,将执行(start_plot),都已经还是打印了,那后面的语句还有什么意义吗?而且你的主函数里还有打印,这样不就两次打印了。建议这里使用cond函数
  (if (null plot_set)
    (get_plot_window)
    (start_plot)
  )
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-12-1 09:27:00 | 显示全部楼层
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=11253
回复

使用道具 举报

5

主题

25

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
56
发表于 2003-12-1 09:47:00 | 显示全部楼层
不好意思,應該是 (psave);save sys var,少了一個注釋符號";"
(psave)是一個全局保存系統變量函數
(prestore)是一個全局恢復系統變量函數
下面是我以前的打印程序,只能指定打印方向,不能指定打印類型表,
因為在A4打印方式下,我經常需要更改的只有打印方向和打印類型表
我的目的是啟動命令後,直接回車後可窗選打印,或指定兩種設置,可以
直接告訴我應該怎麼實現的源碼嗎?
關於(del_tempview)函數會導致AutoCAD退出還請指教,謝謝!!!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun get_plot_window ()
  ;;save a tmpview for plot windows
  (setq pwPT1 (getpoint "\nSpecify plot window first corner:"))
  (setq pwPT2
         (getcorner "\nSpecify plot window opposite corner:" Pwpt1)
  )
  (command "-VIEW" "Window" "tmpview" pwPT1 pwPT2)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun del_tempview ()
  (command "-VIEW" "Delete" "tmpview")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:pw ()
  (psave)
  (Setvar "cmdecho" 0)
  (initget &quotortrait Landscape")
  (setq        plot_dir
         (getkword
           "\nSpecify plot dirction [Portrait/Landscape] : "
         )
  )
  (if (null plot_dir)
    (setq plot_dir "Landscape")
  )
(get_plot_window)
  (command "-plot"   "y"       "model"         "a4.pc3"  "a4"
           "Millimeters"       plot_dir         "no"           "view"    "tmpview"
           "fit"     "center"  "yes"         ""           "yes"     ""
           ""             ""               "Y"
          )
                                        ;(del_tempview)
  (prestore)
  (princ)
)
回复

使用道具 举报

37

主题

297

帖子

15

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
449
发表于 2003-12-1 10:10:00 | 显示全部楼层
试试这个,也许比你期望的更多~~~:)
使用上如有不明可以按“帮助"
这个程序是用vl的activex功能写的,与你的命令行方式完全不同。
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:55prfzqi5za.rar 
下载次数:0  文件大小:17.35 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]


0yndgqlgw4d.gif

0yndgqlgw4d.gif

回复

使用道具 举报

5

主题

25

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
56
发表于 2003-12-1 10:37:00 | 显示全部楼层
謝謝秋楓,但我由於工作原因,用的是繁體系統,不能正確顯示BatchPlot對話框,能不能給個
英文的
回复

使用道具 举报

37

主题

297

帖子

15

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
449
发表于 2003-12-1 12:38:00 | 显示全部楼层
这是源代码,你打开batchplot.dcl文件自己改改吧~~~~~
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:jce4monpquq.rar 
下载次数:0  文件大小:16.75 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2003-12-3 07:52:00 | 显示全部楼层
發現程序問題
(defun SetDefaultValues ()
    (setq
      dclvalues        (list (cons 'Frame "LzFrameRadio")
                      (cons 'BlockName (cdr (assoc 2 (tblnext "block" T))))
;;-----------------------------------------------------
;;由於圖檔中第一個圖塊為無名圖塊
;;指令: (tblnext "block" t)
;;((0 . "BLOCK") (2 . "*U3") (70 . 1) (4 . "") (10 0.0 0.0 0.0) (-2 . ))
;;由於(2 . "*U3")以至下列程序出錯
;; (defun SetDlgValues        ()
;;      (if blocklist
;;        (progn (start_list "BlockNameEdit")
;;               (foreach blockname blocklist (Add_list blockname))
;;               (end_list)
;;        )
;;     )
;;      (if (getvalue 'Blockname)
;;這裡出錯(set_tile "BlockNameEdit" (itoa (vl-position (getvalue 'Blockname) Blocklist)))
;;     )
;;-----------------------------------------------------
                  
                      (cons 'Output &quotlotRadio")
                      (cons 'FrameCount 0)
                      (cons 'PlotScale "Auto")
                      (cons 'Copies "1")
                      (cons 'LayoutPrefix "BP_")
                      (cons 'PlotFilePrefix (strcat (vl-filename-base (getvar "dwgname")) "_"))
                      (cons 'PlotFileFolder (getvar "dwgprefix"))
                      (cons 'DeletePlotFile "0")
                      (cons 'DeleteLayout "0")
                      (cons 'MSLineScale "1")
                      (cons 'SelectedFrames nil)
                )
    )
  )
由於程序使用了(vl-catch-all-apply 'SetDlgValues nil)
錯誤訊息便沒有了,這個BUG可真花了點時間!
回复

使用道具 举报

37

主题

297

帖子

15

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
449
发表于 2003-12-3 18:53:00 | 显示全部楼层

非常感谢~~~送你鲜花~
我调试程序的时候的确是去掉vl-catch-all-apply调的
加个这个是为了出错处理方便一点,可以保证出错后后面的代码仍然可以得到执行,比如(command "U" "end")之类的必须执行的代码,使用传统的方式很麻烦。
我个人很喜欢这个函数, 有点类似其它高级语言中的“异常(exception)”处理。
回复

使用道具 举报

5

主题

66

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2004-3-22 00:36:00 | 显示全部楼层
我用objectdcl也写了一个 上面的女人是把图拽进去预览的

5vp1st3loex.jpg

5vp1st3loex.jpg
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-15 12:50 , Processed in 0.713946 second(s), 78 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表