Aller au contenu

pti coup de main svp


Messages recommandés

Posté(e)

j'ai retouché un lisp qui donnait la somme des longueurs de polylignes par calque pour qu'il me donne les surfaces..

 

ça marche ... voila le résulta de la sortie...

Commande: sfr

 

Choix des objets: Spécifiez le coin opposé: 6 trouvé(s)

 

Choix des objets:

 

Le dessin contient : 6 polylignes fermées

P1603.089 Calque : -see RH texte

P2603.089 Calque : -see RH eu

P3603.089 Calque : -see RH eu

P4603.089 Calque : -SEE RH AEP

P5603.089 Calque : -SEE RH AEP

P6603.089 Calque : -SEE RH AEP

SURFACE totale sur le calque -SEE RH AEP : 1809.266

SURFACE totale sur le calque -see RH eu : 1206.177

SURFACE totale sur le calque -see RH texte : 603.089

SURFACE totale dans le dessin = 3618.531

 

je voudrai supprimer la sortie des lignes P1.... pour avoir juste les surfaces totale par calque... et là, je perd mon latin ... quand je met en commentaire le princ incriminé, il me dit au formatage dans l'éditeur :

 

; erreur: nombre d'arguments trop important: (IF (SETQ SS ( ... )) (PROGN ( ... ) ( ... ) ( ... ) ... ) (MAPCAR ( ... ) LST) ... )

; erreur: parenthèse fermante supplémentaire en entrée

 

pourtant je ne fait que sortir (setq n (1+ n)) qui me parrait etre indispenssable...

 

 

((defun	c:sfr (/ ss tot nb n surf obj lst lay l_lay)

  (vl-load-com)

  (if (setq ss (ssget '((0 . "LWPOLYLINE") (-4 . "&") (70 . 1))))
    (progn
      (setq nb	 (sslength ss)
     n	 0
     tot 0.0
      )

      (princ
 (strcat "\n\nLe dessin contient : "
	 (itoa nb)
	 " polylignes fermées"
 )
      )

      (repeat nb
 (setq obj  (vlax-ename->vla-object (ssname ss n))
       surf (vla-get-area obj)
       tot  (+ tot surf)
       lay  (vla-get-Layer obj)
 )

 
 (setq n (1+ n))


				;	 (princ	(strcat	"\nP"
				;			(itoa (setq n (1+ n)))
				;			(rtos surf)
				;			"\tCalque : "
				;			lay
				;		)

      )
      (if (setq l_lay (assoc lay lst))
 (setq lst (subst (cons lay (+ surf (cdr l_lay))) l_lay lst))
 (setq lst (cons (cons lay surf) lst))
      )
    )


    (mapcar '(lambda (x)
	(princ (strcat "\nSURFACE totale sur le calque "
		       (car x)
		       " : "
		       (rtos (cdr x))
	       )
	)
      )
     lst
    )
    (princ
      (strcat "\nSURFACE totale dans le dessin = " (rtos tot))
    )
    (textscr)
  )
  (princ "\nLe dessin ne contient pas de polylignes.")
)
 (princ)
)
)  

 

 

en retrait les lignes que je veux commenter, et juste au dessus l'incrémentation incriminée...

 

 

merci... de me donner qqs explication... comme dit la chanson... ça m'énerve...

 

Posté(e)

Je recommande fortement l'utilisation de l'éditeur Visual LISP (VLIDE) qui est bien plus qu'un éditeur de texte amélioré.

Pour l'appariement des parenthèses, il suffit de double cliquer avant une parenthèse ouvrante ou après une parenthèse fermante pour sélectionner toute l'expression.

Il est intégré à AutoCAD, permet l'évaluation directe d'expression, et fournit de nombreuses fonction de débogage.

 

; erreur: nombre d'arguments trop important: (IF (SETQ SS ( ... )) (PROGN ( ... ) ( ... ) ( ... ) ... ) (MAPCAR ( ... ) LST) ... )

 

Une expression if n'accepte que 2 ou 3 arguments : une expression condition, une seule expression "alors" et optionnellement une seule expression "sinon".

Dans ton code, il y a 4 expressions après la conditionnelle (ce qu fait 5 arguments en tout) :

 

(if (setq ss ...) 
 (progn 
   (setq ...)
   (princ ....)
   (repeat ...)
   (setq ...) 
 ) ;_ fin de progn
 (mapcar ...)
 (princ ...)
 (textscr)
) ;_fin de if

 

alors qu'il me semble que tu veux faire :

 

(if (setq ss ...) 
 (progn 
   (setq ...)
   (princ ....)
   (repeat ...)
   (setq ...)
   (mapcar ...)
   (princ ...)
   (textscr)
 ) ;_fin de progn
 (princ ...)
) ;_fin de if

 

Je pense que c'est quand tu as commenté l'expression (princ (strcat ...)) que tu as oublié une parenthèse fermante.

 

; erreur: parenthèse fermante supplémentaire en entrée

 

Il y en a déjà une ouvrante de trop au début du code ((defun ... , ensuite l'erreur cité ci dessus et pour finir une parenthèse fermante de trop à la fin (princ)))

 

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

yes je me sert de l'éditeur d'autocad.. il est trés bien...

 

mais je ne peux pas dire que je crée ces codes.. je récupère des bouts à droite et à gauche et fait des copier coller... en fait juste j'apprends à lire le lisp...

 

mais malgré l'identification, j'ai du mal a suivre les parenthèses...

 

au passage... si je veux insérer une tabulation pour mieux présenter la sortie.. comment je peux faire?

je trouve rien sur la mise en forme dans l'aide...

 

edit.......................

 

j'ai trouvé c'est \t

 

mais bon... c pas géant le résultat...

 

 

 

La sélection contient : 303 lignes ou polylignes

Longueur totale sur le calque -see vo Cloture : 1520

Longueur totale sur le calque -see vo BB enrobé : 2360

Longueur totale sur le calque -see vo BB coloré : 1960

Longueur totale sur le calque -see vo P2 : 1580

Longueur totale sur le calque -see vo T2 : 1200

Longueur totale sur le calque -see vo talus : 600

Longueur totale dans le dessin = 9220

 

Commande:

 

 

grrrr l'éditeur du forum bouffe les espaces...

 

[Edité le 16/9/2009 par x_all]

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é