Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

coucou

 

j'ai regardé de loin ton fichier joint

 

il y a un sac de noeud pas possible avec des defun imbriqués

revois 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

Posté(e)
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

 

./__\.
(.°=°.)
Posté(e)

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
Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité