pierrevigneux Posté(e) le 22 mars 2010 Posté(e) le 22 mars 2010 Bonjour à tous!J'ai une routine et je cherche à y intégrer un compteur et je n'y arrive pas.Chercher l'erreur? (defun c:compteur() (setq compteur 1) (terpri) (setq compteur ( + 1 compteur )) ) (strcat "{\\fComic Sans Ms|b0|i0|c0|p34;" "\\PCourbe = "( princ compteur) "\\PAngle = " (angtos ( / seg_len rad) ( getvar "AUNITS") 4 ) "\\PRay = " (rtos rad 2 3) "\\PTg = " (rtos (distance pt_start pt_vtx) 2 3) "\\PLc = " (rtos seg_len 2 3) "\\PFL = " (rtos (- (distance pt_cen pt_vtx) (abs rad)) 2 3) "\\PCorde = "(rtos ( distance pt_start pt_end) 2 3) "}" ) Merci! Acadnadien
(gile) Posté(e) le 22 mars 2010 Posté(e) le 22 mars 2010 Salut, Excuse moi mais je ne comprends rien à la demande. Pour que ton compteur avance il faut qu'un évènement déclenche l'incrémentation : (setq compteur (1+ compteur)) en général on utilise les compteurs dans une boucle, à chaque itération le compteur s'incrémente (setq compteur 1) (repeat 10 (princ (strcat "\nCompteur = " (itoa compteur))) (setq compteur (1+ compteur)) ) ou (setq compteur 1) (while ( (princ (strcat "\nCompteur = " (itoa compteur))) (setq compteur (1+ compteur)) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pierrevigneux Posté(e) le 22 mars 2010 Auteur Posté(e) le 22 mars 2010 J'ai essayé un autre forme de compteur que tu m'as dsuggéré. Point d'insertion des informations de l'arc?: Taille du texte <1.000>: Compteur = 2 Compteur = 3 Compteur = 4 Compteur = 5 Compteur = 6 Compteur = 7 Compteur = 8 Compteur = 9 Compteur = 1011; error: bad argument type: stringp 11 En fait ce que je veux c'est d'intégrer le résultat du compteur dans mon lsp cité plus haut "\\PCourbe = " [surligneur] ( princ compteur)[/surligneur])Si tu vois ce que je veux dire.Si je tape compteur ça me retourne 1 c'est correct, mais il ne veux pas me l'afficher?Merci de ton attention. [Edité le 22/3/2010 par pierrevigneux] Acadnadien
Carboleum Posté(e) le 22 mars 2010 Posté(e) le 22 mars 2010 En fait ce que je veux c'est d'intégrer le résultat du compteur dans mon lsp cité plus haut "\\PCourbe = " [surligneur] ( princ compteur)[/surligneur]) Remplaces princ par itoa. Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
pierrevigneux Posté(e) le 22 mars 2010 Auteur Posté(e) le 22 mars 2010 Bonsoir Carboleum Remplaces princ par itoa. Voilà ce que ça me retourne. ; error: bad argument type: numberp: nil Si tu peux trouver la faille http://dl.free.fr/qfUn7nHy2 Amicalement.Pierre Acadnadien
didier Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 coucou j'ai regardé de loin ton fichier joint il y a un sac de noeud pas possible avec des defun imbriquésrevois ton fichier en séparant correctement chaque sous-routine désolé de ne pas te répondre plus précisément mais je manque de temps pour décortiquer ton lisp. çà a l'air correct, si ce n'est l'imbrication anarchique amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Tramber Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 En fait ce que je veux c'est d'intégrer le résultat du compteur dans mon lsp cité plus haut "\\PCourbe = " ( princ compteur)Si tu vois ce que je veux dire. Alors moi je ne m'embête pas il y a : (VL-PRINC-TO-STRING 'nimportequoi) On ne devrait pas le donner à un débutant mais c'est pratique. Aucune conversion n'est jamais necessaire avec cette fonction. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Titifonky Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 Bonjour, Après avoir un peu étudié ton fichier, je n'ai pas bien compris ta demande. Tu souhaite incrémenter un compteur à chaque utilisation de la commande ? Ca bug sur la fonction vla-addMtext, il y a trop de paramètres. Le while ne sert à rien, à part obtenir une valeur de 10 à chaque appel de la fonction. (vla-addMtext Space (vlax-3d-point (trans ins_txt 1 0)) 0.0 (defun c:compteur () setq compteur 1) (while (<= compteur 10) (setq compteur (1+ compteur)) ) (strcat "{\\fComic Sans Ms|b0|i0|c0|p34;" "\\PCourbe = " (strcat "\nCompteur = " (itoa compteur)) "\\PAngle = " (angtos (/ seg_len rad) (getvar "AUNITS") 4) "\\PRay = " (rtos rad 2 3) "\\PTg = " (rtos (distance pt_start pt_vtx) 2 3) "\\PLc = " (rtos seg_len 2 3) "\\PFL = " (rtos (- (distance pt_cen pt_vtx) (abs rad)) 2 3) "\\PCorde = " (rtos (distance pt_start pt_end) 2 3) "}" ) ) Avec ce code, la variable globale COMPTEUR est incrémentée de 1 à chaque appel de la fonction (vl-load-com) (setq COMPTEUR 0) (defun grdraw-id_arc (/) (grdraw (trans pt_start 0 1) (trans pt_vtx 0 1) 1) (grdraw (trans pt_vtx 0 1) (trans pt_end 0 1) 1) (grdraw (trans pt_start 0 1) (trans pt_cen 0 1) 3) (grdraw (trans pt_cen 0 1) (trans pt_end 0 1) 3) ) (defun add_mt_arc (/ ins_txt h_t) (initget 9) (setq ins_txt (getpoint (trans pt_cen 0 1) "\nPoint d'insertion des informations de l'arc?: ")) (initget 6) (setq h_t (getdist ins_txt (strcat "\nTaille du texte <" (rtos (getvar "textsize")) ">: "))) (if (null h_t) (setq h_t (getvar "textsize")) (setvar "textsize" h_t)) (setq COMPTEUR (1+ COMPTEUR)) (vla-addMtext Space (vlax-3d-point (trans ins_txt 1 0)) 0.0 (strcat "{\\fComic Sans Ms|b0|i0|c0|p34;" "\\PCourbe = " (strcat "\nCompteur = " (itoa COMPTEUR)) "\\PAngle = " (angtos (/ seg_len rad) (getvar "AUNITS") 4) "\\PRay = " (rtos rad 2 3) "\\PTg = " (rtos (distance pt_start pt_vtx) 2 3) "\\PLc = " (rtos seg_len 2 3) "\\PFL = " (rtos (- (distance pt_cen pt_vtx) (abs rad)) 2 3) "\\PCorde = " (rtos (distance pt_start pt_end) 2 3) "}" ) ) (entmod (append (vl-remove-if (function (lambda (x) (or (member (car x) '(90 63 421 45)) (< 419 (car x) 440) ) ) ) (entget (entlast)) ) (list '(90 . 1) '(63 . 41) '(421 . 16770196) '(45 . 1.5) ) ) ) (entupd (entlast)) ) (defun c:ARTDB (/ js n AcDoc Space ename obj pr nb typ_obj oldim oldlay pt_start pt_end pt_cen rad alpha pt_vtx dist_start dist_end seg_len seg_bulge) (princ "\nSélectionner des Arcs/PolyArcs .") (setq js (ssget '((-4 . " (-4 . " (0 . "POLYLINE") (-4 . " (-4 . "&") (70 . 126) (-4 . "NOT>") (-4 . "AND>") (0 . "LWPOLYLINE,ARC") (-4 . "OR>")) ) n -1 ) (cond (js (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) nb 0 ) (cond ((null (tblsearch "LAYER" "Info ARTDB des Arcs")) (vlax-put (vla-add (vla-get-layers AcDoc) "Info ARTDB des Arcs") 'Color "1") ) ) (setq oldim (getvar "dimzin") oldlay (getvar "clayer") ) (setvar "angbase" 0) (setvar "angdir" 0) (setvar "dimzin" 0) (setvar "clayer" "Info ARTDB des Arcs") (repeat (sslength js) (setq ename (ssname js (setq n (1+ n))) obj (vlax-ename->vla-object ename) pr -1 nb 0 ) (setq typ_obj (vla-get-ObjectName obj)) (if (eq typ_obj "AcDbArc") (progn (setq pt_start (vlax-get obj 'StartPoint) pt_end (vlax-get obj 'EndPoint) pt_cen (vlax-get obj 'Center) rad (vlax-get obj 'Radius) alpha (* (vlax-get obj 'TotalAngle) 0.5) seg_len (vlax-get obj 'ArcLength) pt_vtx (polar pt_cen (+ (vlax-get obj 'StartAngle) alpha) (+ rad (* rad (1- (/ 1 (cos alpha)))))) nb (1+ nb) ) (grdraw-id_arc) (add_mt_arc) ) (repeat (fix (vlax-curve-getEndParam obj)) (setq dist_start (vlax-curve-GetDistAtParam obj (setq pr (1+ pr))) dist_end (vlax-curve-GetDistAtParam obj (1+ pr)) pt_start (vlax-curve-GetPointAtParam obj pr) pt_end (vlax-curve-GetPointAtParam obj (1+ pr)) seg_len (- dist_end dist_start) seg_bulge (vla-GetBulge obj pr) ) (if (not (zerop seg_bulge)) (progn (setq rad (/ seg_len (* 4.0 (atan seg_bulge))) alpha (+ (angle pt_start pt_end) (- (* pi 0.5) (* 2.0 (atan seg_bulge)))) pt_cen (polar pt_start alpha rad) pt_vtx (polar pt_start (- alpha (* pi 0.5)) (* rad (/ (sin (* 2.0 (atan seg_bulge))) (cos (* 2.0 (atan seg_bulge)))))) nb (1+ nb) ) (grdraw-id_arc) (add_mt_arc) ) ) ) ) ) (setvar "dimzin" oldim) (setvar "clayer" oldlay) ) ) (princ) ) www.le-metal.net, sur la métallerie
pierrevigneux Posté(e) le 23 mars 2010 Auteur Posté(e) le 23 mars 2010 C'est parfait merci Titifonky Pour finaliser il me reste à entourer tout le texte avec un rectange double ligne. Si tu as un truc pour diminuer quelque peu le fond sous le texte, J'apprécierais. Amicalement.Pierre Acadnadien
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant