CadFrank 发表于 2022-7-5 18:30:37

Can#039;无法找到原因错误

你好
 
我在startup suite内容中加载了这个lisp例程。
 
但如果我在绘图时不重新加载它,它会给我发送一到几个参数错误。
 
我什么都试过了,却找不出问题所在。
 
需要帮助,谢谢。
 
;¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¦¦¦;
;¦¦¦                   CE PROGRAM EST CONÇU POUR DESSINER                  ¦¦¦;
;¦¦¦                      UNE BOITE AUTOUR D'UN MTEXT                        ¦¦¦;
;¦¦¦ _______________________________________________________________________ ¦¦¦;

;¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¦¦¦;
;¦¦¦                   AUTEUR : CadFrank, Copyright ® 2012                   ¦¦¦;
;¦¦¦ _______________________________________________________________________ ¦¦¦;

;¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¦¦¦;
;¦¦¦                   Ce sous-program défini les calques                  ¦¦¦;
;¦¦¦ _______________________________________________________________________ ¦¦¦;

(defun NouveauCalque (/ lay)

(if (not (tblsearch "LAYER" "-LU SYMBOLE"))

   (progn
   (command "_layer"           "_n"             "-LU SYMBOLE"
       "_C"           "90"             "-LU SYMBOLE"
       ""           ""
      )
   )


)                                        ;if

)                                        ; fin NouveauCalque

;¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¦¦¦;
;¦¦¦                        Ce sous-program défini les                     ¦¦¦;
;¦¦¦                            parametres initial                           ¦¦¦;
;¦¦¦ _______________________________________________________________________ ¦¦¦;

(defun Parametreinitial ()

(setq retour (list
                (cons "osmode" (getvar 'osmode))
                (cons "clayer" (getvar 'clayer))
            )
)
(setvar 'OSMODE 0)
   
retour ; la dernière expression est retournée par la fonction

); fin parametreinitial

;¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¦¦¦;
;¦¦¦                        Ce sous-program remet les                        ¦¦¦;
;¦¦¦                            parametres initial                           ¦¦¦;
;¦¦¦ _______________________________________________________________________ ¦¦¦;

(defun Parametrefin (retour)

(foreach p retour
   (setvar (car p) (cdr p))
)

);fin parametrefin

;¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¦¦¦;
;¦¦¦                        Ce sous-program reproduit                        ¦¦¦;
;¦¦¦                              une ligne                              ¦¦¦;
;¦¦¦ _______________________________________________________________________ ¦¦¦;

(defun _Line (pt1 pt2)
   (entmakex (list '(0 . "LINE")
                   '(8 . "-LU SYMBOLE")
                   '(62 . 61)
                   (cons 10 pt1)
                   (cons 11 pt2)
             )
   )
);fin

;¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¦¦¦;
;¦¦¦                        Ce sous-program reproduit                        ¦¦¦;
;¦¦¦                              une polyligne                              ¦¦¦;
;¦¦¦ _______________________________________________________________________ ¦¦¦;

(defun _Poly (po1 po2 po3 po4 w clr)
   (entmakex (list '(0 . "LWPOLYLINE")
                   '(100 . "AcDbEntity")
                   '(100 . "AcDbPolyline")
                   '(90 . 5)
                   '(70 . 1)
                   '(8 . "-LU SYMBOLE")
                   (cons 10 po1)
                   (cons 10 po2)
                   (cons 10 po3)
                   (cons 10 po4)
                   (cons 62 clr)
                   (cons 43 w)
             )
   )
)


;¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¦¦¦;
;¦¦¦                        PROGRAM PRINCIPAL                              ¦¦¦;
;¦¦¦ _______________________________________________________________________ ¦¦¦;

(defun c:bca (/ Entt pt ho ve ang ht p1 p2 p3 p4 p5 p6 p7 p8)
(vl-load-com)
(setq init (Parametreinitial))
(NouveauCalque)



   (if (and
    (not
      (while
        (progn (setvar 'errno 0)
             (setq Entt
                      (car (entsel "\n Sélectionner le MultiText désiré : "))
             )
             (cond
               ((= 7 (getvar 'errno))
                  (princ "\nDésolé, aucun Mtext sélectionné.")
               )
               ((eq 'ename (type Entt))
                  (if (not (eq (cdr (assoc 0 (entget Entt))) "MTEXT"))
                  (princ "\nCeci n'est pas un Mtext.")
                  )
               )
             )
        )
      )
    )
            Entt
)
   (progn
       (setq Entt (entget Entt))
;(command "Clayer"

       (setq pt (cdr (assoc 10 Entt))
      ho (cdr (assoc 42 Entt))
      ve (cdr (assoc 43 Entt))
      ang (cdr (assoc 50 Entt))
      ht (cdr (assoc 40 Entt))
)
   
       (setq p1 (polar (polar pt (+ ang pi) (* ht 0.65))
                (+ ang (/ pi 2.))
                (* ht 0.65)
                )
             p3 (polar (setq p2 (polar p1 ang (+ (* (* ht 0.65) 2.) ho)))
                     (+ ang (* pi 1.5))
                     (+ (* (* ht 0.65) 2.) ve)
                )
             p4 (polar p3 (+ ang pi) (+ (* (* ht 0.65) 2.) ho))
             p5 (polar (polar p1 (+ ang pi) (* ht 0.65))
                     (+ ang (/ pi 2.))
                     (* ht 0.65)
                     )
             p6 (polar p5 ang (+ (* (* ht 0.65) 4.) ho))
             p7 (polar p6 (+ ang (* pi 1.5)) (+ (* (* ht 0.65) 4.) ve))
             p8 (polar p7 (+ ang pi) (+ (* (* ht 0.65) 4.) ho))
      )
   
      (mapcar '_Line
                (list p5 p5 p6 p6 p7 p7 p8 p8)
                (list (polar p5 (+ ang (/ pi 2.)) ht)
                      (polar p5 (+ ang pi) ht)
                      (polar p6 (+ ang (/ pi 2.)) ht)
                      (polar p6 ang ht)
                      (polar p7 ang ht)
                      (polar p7 (+ ang (* pi 1.5)) ht)
                      (polar p8 (+ ang pi) ht)
                      (polar p8 (+ ang (* pi 1.5)) ht)
               )
            )
            (_Poly p1 p2 p3 p4 (/ ht 2.) 256)
            (_Poly p5 p6 p7 p8 0.0 61)
          )
      
   );if
(parametrefin init)
(prompt "\nMtext selectionné ! ")
(princ)

);fin

Tharwat 发表于 2022-7-5 18:40:26

你好
 
-由于您只有一个动作,因此不需要在层函数中使用progn函数。
-此外,您正在检索osmode和clayer的设置,并将其重置回来,这是不需要的,因为您正在使用entmake函数,并在其中添加了层名称,尽管您将osmode设置为0值。
 
编辑:三次测试代码后,没有出现错误。

CadFrank 发表于 2022-7-5 18:45:30

嘿Tharwat,
 
谢谢你的回复。除非你把它放在启动套件中,否则代码不会给出错误。然后重新启动autoCad。
 
如果在autocad打开后加载例程,代码可以正常工作。
 
如果我不这样做,这两条折线就不会出现。
 
当做

Tharwat 发表于 2022-7-5 18:50:27

我将例程添加到启动套件中,在这里效果很好。
 
建议,将子功能引入主程序,并将功能名称本地化,如下所示:
 
这些子函数中的一个子函数可能被另一个程序使用或具有相同名称,但具有另一种类型的参数或或多或少。

CadFrank 发表于 2022-7-5 18:57:39

我试过了,它没有返回函数定义:_Poly

Tharwat 发表于 2022-7-5 19:01:15

正如我在上一次重播中所说,您应该将子功能引入主程序。

CadFrank 发表于 2022-7-5 19:07:25

没关系,我没读好,呵呵!!我把子程序_poly带了进去,现在它可以工作了!

CadFrank 发表于 2022-7-5 19:17:04

非常感谢,我的同事都在生我的气呵呵!
 
干杯

Tharwat 发表于 2022-7-5 19:18:39

 
 
现在他们应该对你满意了

CadFrank 发表于 2022-7-5 19:24:47

有希望地现在我可以了
页: [1] 2
查看完整版本: Can#039;无法找到原因错误