lingduwx 发表于 2014-3-3 16:50:03

请求高手些帮忙看看这 是怎么回事 啊?

本帖最后由 lingduwx 于 2014-3-3 16:51 编辑

以下程序是网上下载的(具体哪儿下的忘了),我加载后,输入命令后出现错误,提示是这样的(命令: ffg
; 错误: no function definition: MAI_START),不知道怎么回事,忘高手帮忙修改以下,谢谢!!!
;;;=========================================
;;功能:对系统提供的 圆角 命令的改进            
(defun c:ffg ( / old_cmd middle_point old_osmode test0 test tmp tmp2 int pt1 pt2 ss a b show_menu n mai_fillet_menuredrawmenu redrawtips)
(defun middle_point ( ent / pt )
    (setq pt (vlax-ename->vla-object ent))
    (vlax-curve-getPointAtDist pt
         (* 0.5 (vlax-curve-getDistAtParam pt (vlax-curve-getendparam pt)))
    )
)
(defun show_menu ( lst / n )
(setvar "menuecho" 2)
(mai_screen_menu "layername")
(setq n -1)
(repeat (length lst)
               (setq n (1+ n))
         (grtext n (rtos (nth n lst) 2 0))
)
(grtext)
)
      (mai_start nil)
    (setq old_osmode (getvar "osmode")
          mai_fillet_menu (list 0 50 60 90 100 120 150 180 200 250 300
                      400 500 600 700 800 900 1000 1200
                      1500 1800 2000 2100 2400 2500 2700 3000
                                          3300 3600 3900 4000 4200 4500 4800 5000 6000 7000 8000 9000 10000 12000 15000 18000 20000
                              )
         test0 t
      )
    (setvar "osmode" 0)
      (princ "\n")
    (while TEST0
      (setq a nil b nil test t n 0 redrawmenu T redrawtips T)
      (while test
            ;;显示选项当前值
                (if redrawmenu (show_menu mai_fillet_menu))
            (if redrawtips (prompt(strcat "\r选择对象或[多段线<P>/修剪<T>/不修剪<N>/<R>半径=["
                                       (rtos (getvar "FILLETRAD") 2 2)
                                          "]:"
                                       )
                        ))
            (setq tmp (grread t 4 2))
                         (if (/= (car tmp) 12) (setq n (1+ n)))
         (cond
                ((= (car tmp) 4);;按下屏幕菜单
                                 (setq ss (nth (cadr tmp) mai_fillet_menu) redrawtips T redrawmenu nil)
                                 (if ss (setvar "filletrad" ss))
                              )
                ((= (car tmp) 2);;按下键盘键
               (setq int (cadr tmp) redrawtips T redrawmenu T)
                                 (menucmd "s=toolbarc.blank")
                (cond ((or (= int 13) (= int 32));;回车或者空格键,则退出
                        (setq test nil test0 nil)
                     )
                     ((or (= (ascii "P") INT) (= (ascii "p") INT));;P选项
                     (prompt "\r                                                                                 ")
                     (if (and (setq ss (entsel " >>选择二维多段线:"))
                               (= (cdr (assoc 0 (entget (car SS)))) "LWPOLYLINE")
                        )
                        (command "_.fillet" "P" SS)
                      )
                      (setq test nil)
                     )
                     ((or (= (ascii "R") INT) (= (ascii "r") INT)) ;;R选项
                      (prompt "\r                                                                                 ")
                     (if (setq tmp2 (getdist (strcat "\r>>指定圆角半径 <" (rtos (getvar "filletrad") 2 2) ">:")))
                        (setvar "filletrad" tmp2)
                      )
                     )
                     ((or (= (ascii "T") INT) (= (ascii "t") INT));;T选项
                      (setvar "trimmode" 1)
                     )
                     ((or (= (ascii "N") INT) (= (ascii "n") INT));;n选项
                      (setvar "trimmode" 0)
                     )
               )
                )
                ((member (car TMP) (list 25 12)) (if (> n 0) (setq test nil test0 nil)));;击鼠标右键
                ((=TMP (list 11 0)) (setq test nil test0 nil));;击鼠标右键
                ((= (car tmp) 3);;击左键
               (setq pt1 (cadr tmp) redrawtips T redrawmenu T)
                                 (menucmd "s=toolbarc.blank")
               (if (setq ss (ssget pt1))
                     (setq a (list (ssname ss 0) pt1)
                           test nil
                     )
                     (if (and (setq pt2 (getcorner pt1 " >>>第二点:"))
                              (setq ss (ssget "c" pt1 pt2))
                         )
                         (progn (setq a (list (ssname ss 0) (middle_point (ssname ss 0)))
                                    test nil
                              )
                              (if (>= (sslength SS) 2)
                                    (setq B (list (ssname SS 1) (middle_point (ssname ss 1))))
                              )
                         )
                     )
               )
               ;|
                                 (if (and a (= (mai_dxf 0 (car a)) "LWPOLYLINE"))
                     (progn (setq b a a nil test nil test0 nil)
                            (command "fillet" b)
                                                    (while (not (zerop (getvar "cmdactive"))) (command pause))
                     )
               )
               ;|;
                )
                (T (setq redrawtips nil redrawmenu nil))
            ) ;_ 结束 cond
      ) ;_ 结束 while
      (if (and A
               (not (redraw (car a) 3))
               (not b)
            )
            (progn
                (setq test t redrawtips T)
                (while test
                  (if redrawtips (prompt "\r选择对象:"))
                  (setq tmp (grread t 4 2))
                  (cond
                     ((and (= (car tmp) 2)
                           (member (cadr tmp) (list 13 32));;回车或者空格键,则退出
                         )
                         (setq test0 nil test nil)
                        )
                        ((= (car tmp) 3);;击左键
                         (setq pt1 (cadr tmp) redrawtips T)
                         (if (setq ss (ssget pt1))
                           (setq b (list (ssname ss 0) pt1)
                                 test nil
                           )
                           (if (and (setq pt2 (getcorner pt1 " >>>第二点:"))
                                    (setq ss (ssget "c" pt1 pt2))
                                 )
                                 (setq b (list (ssname ss 0) (middle_point (ssname ss 0)))
                                       test nil
                                 )
                           )
                         )
                        )
                        ((member (car TMP) (list 25 12)) (setq test0 nil test nil));;击右键
                        ((=TMP (list 11 0)) (setq test nil test0 nil));;击鼠标右键
                        (T (setq redrawtips nil))
                  ) ;_结束 cond
                )
            )
      ) ;_结束 if
      (if (and a b) (command "_.fillet" a b));;圆角操作
      (if a (redraw (car a) 4))
    )
    (mai_end)
) ;_结束 defun


Gu_xl 发表于 2014-3-3 18:20:32

提示已经直白得不能再直白了!缺函数,请找原作者索要!

ZZXXQQ 发表于 2014-3-3 20:11:48

从程序中函数位置来看,mai_start与mai_end是一对函数,是对系统变量进行设置和恢复系统变量的。
可以参照论坛中有关函数自行编写。
页: [1]
查看完整版本: 请求高手些帮忙看看这 是怎么回事 啊?