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 你好
-由于您只有一个动作,因此不需要在层函数中使用progn函数。
-此外,您正在检索osmode和clayer的设置,并将其重置回来,这是不需要的,因为您正在使用entmake函数,并在其中添加了层名称,尽管您将osmode设置为0值。
编辑:三次测试代码后,没有出现错误。 嘿Tharwat,
谢谢你的回复。除非你把它放在启动套件中,否则代码不会给出错误。然后重新启动autoCad。
如果在autocad打开后加载例程,代码可以正常工作。
如果我不这样做,这两条折线就不会出现。
当做 我将例程添加到启动套件中,在这里效果很好。
建议,将子功能引入主程序,并将功能名称本地化,如下所示:
这些子函数中的一个子函数可能被另一个程序使用或具有相同名称,但具有另一种类型的参数或或多或少。 我试过了,它没有返回函数定义:_Poly 正如我在上一次重播中所说,您应该将子功能引入主程序。 没关系,我没读好,呵呵!!我把子程序_poly带了进去,现在它可以工作了! 非常感谢,我的同事都在生我的气呵呵!
干杯
现在他们应该对你满意了 有希望地现在我可以了
页:
[1]
2