找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 554|回复: 1

[求助] [求助]:大家帮看看~~LSP加载成功后输入命令提示错误

[复制链接]
发表于 2006-8-14 10:13:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
W,R 命令能用,就是 A命令提示说参数错误

  1. (defun myerr(s)
  2.   (close f)
  3.   (setvar "osmode" os)
  4.   (setq *error* oerr)
  5.   (princ)
  6. )

  7. (defun c:out (/ a1 a2 b1 b2 b3 y3
  8.                s os sl tname te
  9.               typ x1 x2 y1 y2 fn bt texted)
  10.   (setq oerr *error* *error* myerr)
  11.   (setq os (getvar "osmode"))
  12.   (setvar "cmdecho" 0)
  13.   (setvar "osmode" 0)

  14.   (prompt "\n请选择工件:")
  15.   (setq s (ssget))
  16.   (setq texted 0)
  17.   (if (= s nil) (exit))

  18. ;find the minx, miny, maxy, miny3
  19.   (setq minx 1e300 miny 1e300 miny3 1e300 maxy -1e300)
  20.   (setq sl (sslength s))
  21. ;将直线放到选择几集LINES,以备后用。
  22.   (setq lines (ssadd))
  23.   (setq tname (ssname s (setq sl (1- sl))))
  24.   (while (/= tname nil)
  25.     (setq te (entget tname))
  26.     (setq typ (cdr(assoc 0 te)))
  27.     (if (= typ "LINE")
  28.       (progn
  29.         (ssadd tname lines)
  30.         (setq x1 (car(cdr(assoc 10 te))) x2 (car(cdr(assoc 11 te))))
  31.         (setq y1 (cadr(cdr(assoc 10 te))) y2 (cadr(cdr(assoc 11 te))))
  32.         (setq minx (min minx x1 x2))
  33.         (setq miny (min miny y1 y2))
  34.         (setq maxy (max maxy y1 y2))
  35.       )
  36.       (if (and (/= typ "CIRCLE") (/= typ "INSERT") (/= typ "TEXT"))
  37.        ;erase other objects
  38.         (entdel tname)
  39.       )
  40.     )
  41.     (setq tname (ssname s (setq sl (1- sl))))
  42.   ) ;end while

  43.   (if (or (= minx 1e300) (= miny 1e300) (= maxy -1e300))
  44.     (progn
  45.       (prompt "所选工件轮廓线有错误.")
  46.       (exit)
  47.   ))

  48.   (if (> (- maxy miny) yy)
  49.     (progn
  50.       (prompt "工件Y轴尺寸超出行程, 请重新选择X轴。")
  51.       (exit)
  52.     )
  53.   )
  54. ;从左(MINX)到右,搜索挡板与工件任意边线的交点
  55.   (setq dbx minx ok 0)
  56.   (while (= ok 0)
  57.     (setq sl (sslength lines))
  58.     (setq tname (ssname lines (setq sl (1- sl))))
  59.     (setq db1 (list dbx miny) db2 (list dbx (+ miny ll) ))
  60.     (while (/= tname nil)
  61.       (setq te (entget tname))
  62.       (setq typ (cdr(assoc 0 te)))
  63.       (setq lp1 (cdr (assoc 10 te)) lp2 (cdr (assoc 11 te)) )
  64.       (setq inp (inters db1 db2 lp1 lp2))
  65.       (if (/= nil inp ) (setq ok 1 dbxc (- dbx 0.5)))
  66.       (setq tname (ssname lines (setq sl (1- sl))))
  67.     );while
  68.     (setq dbx (+ dbx 1.0)) ;步距1
  69.   );while
  70.   (if (= ok 1)
  71.     (setq home (list dbxc miny)) ;原点
  72.     (exit)
  73.   )
  74.   ;(command "line" home "@0,100" "")

  75. ;再此循环
  76. ;判断各孔最小边距是否超出范围,及X负坐标是否合法
  77.   (setq sl (sslength s))
  78.   (setq tname (ssname s (setq sl (1- sl))))
  79.   (while (/= tname nil)
  80.     (setq te (entget tname))
  81.     (setq typ (cdr(assoc 0 te)))
  82.     (if (= typ "CIRCLE")
  83.       (setq rad (read (rtos (cdr(assoc 40 te)) 2 2)))
  84.    
  85.       (if (= typ "INSERT")
  86.         (progn
  87.           (setq bt (strcase(substr (cdr(assoc 2 te)) 1 1) ))
  88.           (setq mn (assoc bt mjb))
  89.           (if (/= mn nil)
  90.             (setq rad (read (rtos (cadr mn) 2 2)))
  91.             (exit)
  92.           )
  93.         ) ;progn
  94.       ) ;if =INSERT
  95.     ) ;if =CIRCLE
  96.     (if (or (= typ "CIRCLE") (= typ "INSERT"))
  97.     (progn
  98.       (setq y (- (cadr(cdr(assoc 10 te))) (cadr home)))
  99.       (if (or (and (<= rad 9)  (< y 24.9))
  100.               (and (>= rad 11) (< y 29.9))  )
  101.         (progn
  102.           (prompt "冲孔距离X轴太近,请重新选择X轴。")
  103.           (exit)
  104.         )
  105.       );if
  106.     ));progn if

  107.     (setq tname (ssname s (setq sl (1- sl))))
  108.   ) ;while

  109.   ;output the lines and the circles AND BLOCKS
  110.   (setq fn (getfiled "请输入程序名" "c:/XBJ/prj/XXX.WKF" "wkf" 1))
  111.   (setq f (open fn "w"))
  112. ;先输出LINEs
  113.   (setq sl (sslength s))
  114.   (setq tname (ssname s (setq sl (1- sl))))
  115.   (while (/= tname nil)
  116.     (setq te (entget tname))
  117.     (setq typ (cdr(assoc 0 te)))
  118.     (if (= typ "LINE")
  119.       (progn (print 'L f)
  120.         (princ (rtos (- (car(cdr(assoc 10 te))) (car home)) 2 2) f)
  121.         (princ (chr 32) f)
  122.         (princ (rtos (- (cadr(cdr(assoc 10 te))) (cadr home)) 2 2) f)
  123.         (princ (chr 32) f)
  124.         (princ (rtos (- (car(cdr(assoc 11 te))) (car home)) 2 2) f)
  125.         (princ (chr 32) f)
  126.         (princ (rtos (- (cadr(cdr(assoc 11 te))) (cadr home)) 2 2)  f)
  127.       )
  128.     ) ;LINE
  129.     (setq tname (ssname s (setq sl (1- sl))))
  130.   ) ;end while

  131. ;再输出CIRCLES OR BLOCKS
  132.   (setq sl (sslength s))
  133.   (setq tname (ssname s (setq sl (1- sl))))
  134.   (while (/= tname nil)
  135.     (setq te (entget tname))
  136.     (setq typ (cdr(assoc 0 te)))
  137.     (if (= typ "CIRCLE")
  138.       (progn
  139.         (print 'C f)
  140.         (princ (rtos (- (car(cdr(assoc 10 te))) (car home)) 2 2) f)
  141.         (princ (chr 32) f)
  142.         (princ (rtos (- (cadr(cdr(assoc 10 te))) (cadr home)) 2 2) f)
  143.         (princ (chr 32) f)
  144.         (princ (rtos (cdr(assoc 40 te)) 2 2)  f)
  145.       )
  146.       (if (= typ "INSERT")
  147.         (progn
  148.           (setq bt (strcase(substr (cdr(assoc 2 te)) 1 1) ))
  149.           (if (= bt "Z")
  150.             (print 'D f)
  151.             (print 'C f)
  152.           )
  153.           (setq mn (assoc bt mjb))
  154.           (princ (rtos (- (car(cdr(assoc 10 te))) (car home)) 2 2) f)
  155.           (princ (chr 32) f)
  156.           (princ (rtos (- (cadr(cdr(assoc 10 te))) (cadr home)) 2 2) f)
  157.           (princ (chr 32) f)
  158.           (princ (rtos (cadr mn) 2 2)  f)
  159.         );progn
  160.       );if INSERT
  161.     );if CIRCLE
  162.     (setq tname (ssname s (setq sl (1- sl))))
  163.   ) ;while

  164. ;最后输出TEXT
  165.   (setq sl (sslength s))
  166.   (setq tname (ssname s (setq sl (1- sl))))
  167.   (setq texted 0)
  168.   (while (and (= texted 0) (/= tname nil))
  169.     (setq te (entget tname))
  170.     (setq typ (cdr(assoc 0 te)))
  171.     (if (= typ "TEXT")
  172.       (progn
  173.         (print 't f)
  174.         (princ (rtos (- (car(cdr(assoc 10 te))) (car home)) 2 2) f)
  175.         (princ (chr 32) f)
  176.         (princ (rtos (- (cadr(cdr(assoc 10 te))) (cadr home)) 2 2) f)
  177.         (princ (chr 32) f)
  178.         (prin1 (cdr(assoc 1 te)) f)
  179.         (setq texted 1)
  180.       )
  181.     ) ;TEXT
  182.     (setq tname (ssname s (setq sl (1- sl))))
  183.   ) ;end while

  184.   (close f)
  185.   (princ "OK")
  186.   (setvar "osmode" os)
  187.   (setq *error* oerr)
  188.   (princ)
  189. ) ;END OF OUT FUNCTION

  190. (defun c:xx (/ e xe sp p p1 p2 ang sl tname te typ oerr)
  191.   (setq oerr *error* *error* myerr)
  192.   (setq os (getvar "osmode"))
  193.   (setvar "cmdecho" 0)
  194.   (setvar "osmode" 0)

  195.   (prompt "\n请选择工件:")
  196.   (setq s (ssget))
  197.   (if (= s nil) (exit))
  198.   (setq sl (sslength s))
  199.   (setq tname (ssname s (setq sl (1- sl))))
  200.   (while (/= tname nil)
  201.     (setq te (entget tname))
  202.     (setq typ (cdr(assoc 0 te)))
  203.     (if (and (/= typ "LINE") (/= typ "CIRCLE") (/= typ "INSERT"))
  204.       (progn
  205.         (ssdel tname s)
  206.         (if (/= typ "TEXT") (entdel tname) )
  207.       )
  208.     )
  209.     (setq tname (ssname s (setq sl (1- sl))))
  210.   ) ;end while

  211.   (if (= 0 (sslength s)) (exit))
  212.   (setq e nil)
  213.   (while (= e nil)
  214.     (progn (setq e (entsel "\n请选择一条直线作为X轴:"))
  215.            (if (/= nil e)
  216.                (progn (setq xe (entget (car e)) sp (last e))
  217.                       (if (/= (cdr(assoc 0 xe)) "LINE") (setq e nil)))))
  218.   ) ;end while

  219.   (setq p1 (cdr(assoc 10 xe)) p2 (cdr(assoc 11 xe)))
  220.   (if (> (distance sp p1) (distance sp p2))
  221.       (setq ang (angle p1 p2))
  222.       (setq ang (angle p2 p1))
  223.   )
  224.   (setq ang (/ (* ang 180.0) 3.141592654))
  225.   (command "rotate" s "" p1 "reference" ang 0)
  226.   (initget "Yes No")
  227.   (setq ans (getkword "\n是否向上翻转?<N>"))
  228.   (if (= ans "Yes") (command "mirror" s "" p1 "@10,0" "Y"))
  229.   (prompt "\n请将工件定位:")
  230.   (command "move" s "" p1)

  231.   (setvar "osmode" os)
  232.   (setq *error* oerr)
  233.   (princ)
  234. )


  235. ; 以下是原KOL.LSP,包括函数:A--线孔, R-旋转拷贝, W-辅助轮廓

  236. ; Convert angle in degrees to radians
  237. (defun dtr (a)
  238. (* 3.1415926535897 (/ a 180.0))
  239. )
  240. (defun rtd (a)
  241. (/ (* a 180.0) 3.1415926535897)
  242. )

  243. (defun draw_holes()
  244.   (setq oosm (getvar "osmode"))
  245.   (setvar "osmode" 0)
  246.   
  247.   (setq rep bj_rep jl bj_jl)
  248.   (setq p1 (list bj_x0 bj_y0 0))
  249.   (setq bname (strcat (chr (+ 65 dia_num)) "_BLK"))
  250.   
  251.   (while (> rep 0)
  252.     (setq p2 (polar p1 (dtr bj_ang) jl))
  253.     (command "insert" bname p2 1 1 0)
  254.     (setq rep (1- rep) jl (+ jl bj_jj))
  255.   )
  256.   
  257.   (setvar "osmode" oosm)  
  258. )

  259. (defun defaults()
  260.     (if (not bj_x0) (setq bj_x0 0.0))
  261.     (if (not bj_y0) (setq bj_y0 0.0))
  262.     (if (not bj_ang) (setq bj_ang 0.0))
  263.     (if (not bj_jl) (setq bj_jl 0.0))
  264.     (if (not bj_rep) (setq bj_rep 0))
  265.     (if (not bj_jj) (setq bj_jj 0.0))

  266.     (if (not bj_hole) (setq bj_hole "1"))
  267. )

  268. (defun act()
  269.       (setq bj_hole (get_tile "kk_dia"))
  270.       (setq bj_x0 (atof (get_tile "kk_base_x")))
  271.       (setq bj_y0 (atof (get_tile "kk_base_y")))
  272.       (setq bj_ang (atof (get_tile "kk_jd")))
  273.       (setq bj_jl (atof (get_tile "kk_jl")))
  274.       (setq bj_rep (atoi (get_tile "kk_rep")))
  275.       (setq bj_jj (atof (get_tile "kk_jj")))
  276. )


  277. //对话框
  278. (defun gp_dialog (xxxx)
  279.    (setq ok 99)
  280.    (while (= ok 99 )

  281.         (if (= -1 (setq dcl_id (load_dialog "c:/xbj/kol.dcl"))) (exit))
  282.         (if (not (new_dialog "kol" dcl_id)) (exit))

  283.         (set_tile "kk_dia" bj_hole)
  284.         (set_tile "kk_base_x" (rtos bj_x0 2 2))
  285.         (set_tile "kk_base_y" (rtos bj_y0 2 2))
  286.         (set_tile "kk_jd" (rtos bj_ang 2 2))
  287.         (set_tile "kk_jl" (rtos bj_jl 2 2))
  288.         (set_tile "kk_rep" (itoa bj_rep ))
  289.         (set_tile "kk_jj" (rtos bj_jj 2 2))
  290.         (mode_tile "kk_dia" 2)
  291.         
  292.         (action_tile "sel_line" "(act)(done_dialog 66)")
  293.         (action_tile "kk_base_n" "(act)(done_dialog 99)")
  294.         (action_tile "cancel" "(act)(done_dialog 77)")
  295.         (action_tile "accept" "(act)(done_dialog 88)")

  296.         (setq ok (start_dialog))
  297.         (unload_dialog dcl_id)

  298.         (if (= ok 99) (progn
  299.           (initget 1)
  300.           (setq pick_pt (getpoint "选择基点: "))
  301.           (if pick_pt
  302.             (setq bj_x0 (car   pick_pt)
  303.                   bj_y0 (cadr  pick_pt)
  304.             )
  305.           )
  306.         ) )
  307.         (if (= ok 66)
  308.           (progn
  309.             (setq ok 99)
  310.             (initget 1)
  311.             (setq es (entsel "选择中心线: "))
  312.             (if es
  313.               (progn
  314.                  (setq sp (cadr es))
  315.                  (setq ls (entget (car es)))
  316.                  (if (= (cdr(assoc 0 ls)) "LINE") (progn
  317.                    (setq ep1 (cdr (assoc 10 ls))
  318.                          ep2 (cdr (assoc 11 ls))
  319.                    )
  320.                    (if (> (distance sp ep2) (distance sp ep1))     
  321.                       (setq bj_ang (rtd (angle ep1 ep2))   bp ep1)
  322.                       (setq bj_ang (rtd (angle ep2 ep1))   bp ep2)
  323.                    )
  324.                    (set_tile "kk_jd" (rtos bj_ang 2 2))
  325.                    (setq bj_x0 (car bp)  bj_y0 (cadr bp))
  326.                  ))
  327.               )
  328.             )
  329.           )
  330.         )
  331.         
  332.    ) // while
  333. )  //gp_dialog


  334. ; Define error handler
  335. (defun gp_err (msg)  
  336.         (setq *error* olderr)  
  337.         (if (not gperr)  
  338.                 (princ (strcat "\n参数错误: " msg))  
  339.                 (princ gperr)  
  340.         )  
  341.         (if sblip (setvar "blipmode" sblip))  
  342.         (if scmde (setvar "cmdecho" scmde))  
  343.         (princ)  
  344. )


  345. (defun C:A()   

  346.         (setq olderr *error*                          
  347.                 *error* gp_err                                
  348.                 sblip nil                                      
  349.                 scmde nil                                    
  350.                 ;gperr nil                                    
  351.         )                                               
  352.         (setq sblip (getvar "blipmode"))
  353.         (setq scmde (getvar "cmdecho"))
  354.         (setq sang (getvar "snapang"))                  
  355.         (setvar "blipmode" 0)
  356.         (setvar "cmdecho" 0)
  357.         (command "ucs" "w" )

  358.         (setq ok 0)
  359.         (defaults)

  360.         (gp_dialog 0)   
  361.         (setq dia_num (atoi bj_hole))
  362. ;在对话框中,如果选择了第6项(钻孔),则将DIA_NUM置为25,
  363. ;这样在DRAW_HOLES时会插入块Z_BLK.
  364.         (if (= dia_num 5) (setq dia_num 25))
  365.         (if (= ok 88) (draw_holes))

  366.         (setvar "blipmode" sblip)
  367.         (setvar "cmdecho" scmde)
  368.         (setvar "snapang" sang)                     
  369.         (setq *error* olderr)                        
  370.         (princ)
  371. )

  372. //旋转拷贝直线
  373. (defun c:R()
  374.     (setq oosm (getvar "osmode"))
  375.     (setq e (entsel "选择直线:"))
  376.     (setq le (car e))
  377.     (redraw le 3)
  378.     (setq bl (entget (car e)) sp (cadr e))
  379.     (setq e1 (cdr (assoc 10 bl)))
  380.     (setq e2 (cdr (assoc 11 bl)))

  381.     (if (> (distance sp e1) (distance sp e2))
  382.         (setq bp e2)
  383.         (setq bp e1)
  384.     )

  385.     (setq c 0)
  386.     (setvar "cmdecho" 0)
  387.     (setvar "osmode" 0)
  388.     (while (= c 0)
  389.         (initget 2 "B")
  390.         (setq fp1 (getangle "\nB新基点/<旋转角度>:"))
  391.         (if (= fp1 "B")
  392.             (setq bp (getpoint "\n新基点:"))
  393.             (if (= fp1 nil)
  394.                 (setq c 1)
  395.                 (progn
  396.                     (setq ra (rtd fp1))
  397.                     (command "array" e "" "p" bp 2 ra "y")
  398.                 )
  399.             )
  400.         )
  401.     )
  402.     (setvar "osmode" oosm)
  403.     (redraw le 4)
  404.     (princ)
  405. )

  406. (defun c:W()
  407.     (setq oosm (getvar "osmode"))
  408.     (setq bp (getpoint "【辅助轮廓命令】基点:"))
  409.     (setq e (entsel "基线:"))
  410.     (setq bl (entget (car e)) sp (cadr e))
  411.     (setq e1 (cdr (assoc 10 bl)))
  412.     (setq e2 (cdr (assoc 11 bl)))

  413.     (if (> (distance sp e1) (distance sp e2))
  414.       (setq ang (angle e1 e2))
  415.       (setq ang (angle e2 e1))
  416.     )

  417.     (setq a (getint "+90度侧长度a:"))
  418.     (setq b (getint "-90度侧长度b:"))
  419.     (setq c (getint "偏移c:"))

  420.     (setq p1 (polar (polar bp (+ ang 1.5708) a) ang c))
  421.     (setq p2 (polar (polar bp (- ang 1.5708) b) ang c))

  422.     (setvar "osmode" 0)

  423.     (command "line" p1 p2 "")
  424.     (setvar "osmode" oosm)
  425.     (princ)
  426. )

  427. ;THESE TWO LINES ARE FOR KK2000.LSP
  428. (setq ll 265 yy 850)
  429. (setq mjb '(("A" 7.0) ("B" 9.0) ("C" 11.0) ("D" 13.0) ("E" 15.0)("Z" 20.0)))

  430. (princ "\n装入成功.XX-X轴,OUT-输出工件,A-线孔,R-旋转拷贝,W-辅助轮廓")   
  431. (princ)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-10-18 21:10:08 | 显示全部楼层
这么长,没耐心看了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 06:14 , Processed in 0.199340 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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