明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1310|回复: 2

ODCL奇怪的出错

[复制链接]
发表于 2013-5-5 21:46 | 显示全部楼层 |阅读模式
本帖最后由 alwtyp 于 2013-5-6 20:41 编辑

以下是我借鉴秋枫的批打程序,做的一个ODCL界面的程序。程序可以正常运行, 不过有一个奇怪的错误。
程序的要求是先取得要打印的图框(块)名称,这里选得的图框的种类,在这里不管怎么点都可以正常取得块名。
然后要选取要打印的图框,这一步也OK,可以得到提示选了多少个指定的图框。
问题来了:如果这时如何想改变图框块的名称,再回去点"取得图框名称“,程序就会出错:错误: 函数错误: "XX"。XX就是文本框里的内容.
请各位高手帮忙看看,问题出在哪里

更新一下附件
  1. ;批量打印
  2. (Defun C:bp (/)
  3.   (Vl-Load-Com)
  4.   (Setvar "Cmdecho" 0)
  5.   (Command "Opendcl")
  6.   (Setvar "Cmdecho" 1)
  7.   (Dcl_Project_Load "BPlot.Odcl");加载对话框程序
  8.   (Setq Docontinue T)
  9.   (While Docontinue
  10.     (Setq Intresult (Dcl_Form_Show Bplot_Batchplot))
  11.     (Cond
  12.      ((= Intresult 1) (Setq Docontinue Nil))
  13.      ((= Intresult 2) (Setq Docontinue Nil))
  14.      ((= Intresult 3) (FrameName))
  15.      ((= Intresult 4) (RangeNum)))  )
  16.   (Princ) )

  17. (Defun C:Bplot_BatchPlot_PickFrameName_Onclicked (/)
  18.      (Dcl_Form_Close BPlot_BatchPlot 3) )

  19. (Defun C:BPlot_BatchPlot_Range_OnClicked (/)
  20.      (Setq FrameName (Dcl_Control_Gettext BPlot_BatchPlot_FrameName))
  21.      (Dcl_Form_Close BPlot_BatchPlot 4) )

  22. ;对话框默认界面
  23. (Defun C:BPlot_BatchPlot_OnInitialize(/)
  24.   (If (/= Blockname Nil)
  25.       (Dcl_Control_Settext BPlot_BatchPlot_FrameName Blockname)
  26.       (Dcl_Control_Settext BPlot_BatchPlot_FrameName (Dcl_Control_Gettext BPlot_BatchPlot_FrameName)))
  27.   (If (= FrameNum Nil)
  28.       (Dcl_Control_Setcaption BPlot_BatchPlot_Display (Strcat "您一共选取了" (Itoa FrameNum) "个图框"))
  29.       (Dcl_Control_Setcaption BPlot_BatchPlot_Display "您未按规则选取图框"))
  30. )

  31. ;取得块名
  32. (Defun Framename (/ SS Lst Lst2 M A)
  33.   (Setq Ss (Ssget '((0 . "Insert")))
  34.   Lst Nil Lst2 Nil)
  35.   (Cond ((Not Ss) (Setq Ss Nil  Docontinue T))
  36.         ((Vl-Catch-All-Error-P Ss) (Setq Ss Nil  Docontinue Nil))  )
  37.   (Repeat (Setq M (Sslength Ss))
  38.           (Setq Lst (Cons (Cdr (Assoc 2 (Entget (Ssname Ss (Setq M (1- M)))))) Lst))  )   
  39.   (While (Setq A (Car Lst) Lst2 (Cons A Lst2) Lst (Vl-Remove A Lst)))
  40.   (Setq Blockname (Vl-String-Right-Trim "," (Apply 'Strcat (Mapcar '(Lambda (X) (Strcat X ",")) Lst2))))
  41. )

  42. (Defun RangeNum (/)
  43.   (If (Setq Block (Ssget (List '(-4 . "<and") '(0 . "Insert") (Cons 2 FrameName) '(-4 . "and>"))))
  44.       (Setq FrameNum (Sslength Block))
  45.       (Setq FrameNum Nil)) )
  46.         
  47. ;按下确定
  48. (Defun C:BPlot_BatchPlot_OK_OnClicked (/)
  49.   (Setq N 0 K 0 Oldlist Nil)
  50.   (Setq ShunXu (dcl_OptionList_GetCurSel BPlot_BatchPlot_From))
  51.   (Setq FuMian (dcl_OptionList_GetCurSel BPlot_BatchPlot_Page))
  52.   (cond ((= FuMian 0) (setq Page "A4"));决定使用多大的纸张,暂不可用
  53.         ((= FuMian 1) (setq Page "A3")))
  54.   (Dcl_Form_Close BPlot_BatchPlot 1);关闭对话框
  55.    (Repeat (Sslength Block)
  56.      (Setq Ent (Entget (Ssname Block N)))
  57.      (Setq Inspt (Cdr (Assoc 10 Ent)))
  58.      (Setq Tuyuan (Cdr (Assoc -1 Ent))
  59.      Signlist (List (Cons Tuyuan Inspt))
  60.      Oldlist (Append Oldlist Signlist))
  61.      (Setq N (1+ N))
  62.   );Repeat End
  63.   ;以下排序代码修改自秋枫BPLOT
  64.    (Cond
  65.       ((= Shunxu 0) (Setq Newlist (Vl-Sort Oldlist '(Lambda (E1 E2 / Rt X1 Y1 X2 Y2 Vs);Z形排列
  66.                                          (Setq Y1 (Caddr E1)) (Setq Y2 (Caddr E2)) (Setq X1 (Cadr E1)) (Setq X2 (Cadr E2))
  67.                  (Setq Rt (> Y1 Y2));优先Y坐标比较,大的话在前
  68.                                          (If (And (Null Rt) (= Y1 Y2));Y坐标相同时,比较x坐标,小的话在前
  69.                                    (Setq Rt (< X1 X2)) )
  70.                                          Rt))))
  71.       ((= Shunxu 1) (Setq Newlist (Vl-Sort Oldlist '(Lambda (E1 E2 / Rt X1 Y1 X2 Y2 Vs);N形排列
  72.                  (Setq Y1 (Caddr E1)) (Setq Y2 (Caddr E2)) (Setq X1 (Cadr E1)) (Setq X2 (Cadr E2))
  73.                                          (Setq Rt (< X1 X2));优先X坐标比较,小的话在前
  74.                                          (If (And (Null Rt) (= X1 X2));当X坐标相同时,比较y坐标,大的话在前
  75.                                    (Setq Rt (> Y1 Y2)) )
  76.                                          Rt)))) );Cond End 图块框的插入点坐标排序完成
  77.    (Repeat (Length Newlist)
  78. ;|STRAT|;(Vla-Getboundingbox (Vlax-Ename->Vla-Object (Cdr (Assoc -1 (Entget (Car (Nth M Newlist)))))) 'Minpoint 'Maxpoint)
  79.                 (Setq Ptmax (Trans (Vlax-Safearray->List Maxpoint) 0 1)
  80.                       Ptmin (Trans (Vlax-Safearray->List Minpoint) 0 1));|END| 此段代码为取得图框的对角点|;
  81. ;打印机不可用,用TEXT代替测试
  82.      (Vl-Cmdf ".Text" "S" "Complex" "J" "Mc" Ptmin "20" "0" (Itoa K))
  83. ;;;     (If (> (Abs (- (Car Ptmin) (Car Ptmax))) (Abs (- (Cadr Ptmin) (Cadr Ptmax))));确定横向还是纵向
  84. ;;;         (Setq Pl "L")
  85. ;;;         (Setq Pl "P"))
  86. ;;;     (Vl-Cmdf ".Plot" "Yes" "" "Default Windows SYStem Printer" Page "M" Pl "N" "W" Ptmin Ptmax "F" "" "Yes" "Monochrome.ctb" "Yes" "" "" "" "")
  87.      (Setq K (1+ K))
  88.    );Repeat End
  89.   (Dcl_Project_Unload "BPlot");释放对话框
  90. )

  91. ;按下取消
  92. (Defun C:BPlot_BatchPlot_Cancel_Onclicked (/)
  93.   (Dcl_Form_Close BPlot_BatchPlot 1);关闭对话框
  94.   (Dcl_Project_Unload "BPlot");释放对话框
  95. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2013-5-6 20:42 | 显示全部楼层
自己顶一下
 楼主| 发表于 2013-5-8 21:42 | 显示全部楼层
再顶一下,请各位高手帮忙看看。虽然可以使用,但还是不爽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 01:04 , Processed in 0.258539 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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