Aller au contenu

Compteur copie dans la ligne de commande


Nicky

Messages recommandés

Bonjour a tous,

 

J’espère que vous pourrez m'aider sur ce code qui concerne la réalisation d'un compteur placé dans la ligne de commande.

 

Soit un terrain représenté par des courbes de niveau (polylignes vertes)

et une polyligne bleue qui coupe ces courbes de niveau.

 

Je cherche a réaliser un compteur qui compte le nombre de courbe de niveau coupées par cette polyligne, puis copiées et placées dans un nouveau calque.

La boucle s’incrémente a chaque intersection de la polyligne bleue avec les courbes de niveaux (polylignes vertes).

 

Voici un extrait de mon code

(setq	CNcoupees
	(ssget	"_F"
	(list pt1 pt2)
	(list (cons 0 "LWPOLYLINE,POLYLINE")
     		(cons 8 LAY)
	)
	)
 )
 (repeat (setq in (sslength CNcoupees))
   (redraw (ssname CNcoupees (setq in (1- in))) 3)
 )


(setq n 0)

 (setq nombreCN (sslength CNcoupees))
 (while (< n nombreCN)
   (progn
     (setq poly1    (ssnamex CNcoupees n)
   	ptspoly1 (assoc 4 poly1)
   	pol     	(ssname CNcoupees n)
   	obj     	(vlax-ename->vla-object pol)
   	vlelev   (vla-get-elevation obj)
   	listalt  (append listalt (list vlelev))
   	lilispt  (list '0 '0 (nth n listalt))
   	ptlistpt (cons lilispt ptlistpt)
     )
     (command "._copytolayer" ent "" calqueAXE "0,0,0" lilispt)
     (princ)
   )
   (setq n (+ n 1))
   (princ (strcat "\rCréation de la polyligne : "
          (itoa n)
          " sur "
          (itoa nombreCN)
  	)
   )
 )

 

Mais voila ce qui s'affiche actuellement dans ma ligne de commande :

 

1 object(s) copied and placed on layer "NB_Axe-coupe-construction".

Création de la polyligne : 1 sur 91

1 object(s) copied and placed on layer "NB_Axe-coupe-construction".

Création de la polyligne : 2 sur 91

1 object(s) copied and placed on layer "NB_Axe-coupe-construction".

Création de la polyligne : 3 sur 91

1 object(s) copied and placed on layer "NB_Axe-coupe-construction".

Création de la polyligne : 4 sur 91

1 object(s) copied and placed on layer "NB_Axe-coupe-construction".

Création de la polyligne : 5 sur 91

 

 

Je souhaiterais ne pas voir apparaître la première ligne "1 object(s) copied and placed on layer "NB_Axe-coupe-construction"."

mais seulement mon code "Création de la polyligne : 1 sur 91" et que le 1 passe a 2, puis a 3, puis a 4... sans aller a la ligne a chaque polyligne crée..

 

 

Possible ?

 

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je souhaiterais ne pas voir apparaître la première ligne "1 object(s) copied and placed on layer "NB_Axe-coupe-construction"."

La ligne de code suivante devrait résoudre ton soucis

(setvar 'CMDECHO 0)

 

mais seulement mon code "Création de la polyligne : 1 sur 91" et que le 1 passe a 2, puis a 3, puis a 4... sans aller a la ligne a chaque polyligne crée..

Sur le fond, il faudra accepter de ralentir le traitement pour voir cela s'afficher à l'écran.... Est-ce vraiment une bonne chose ???

(En programmation l'implémentation d'une barre de progression, ou faire défiler un compteur est à réserver aux programmes qui "mouline" pour montrer à l'utilisateur que le traitement est en cour, et qu'il ne soit pas tenté d'appuyer sur "Echap" avant que le programme ne soit arrivé à son terme.)

 

 

Sur la forme voici les quelques lignes de codes commentés pour l'exemple et à adapter, pour faire ce que tu demandes:

(defun c:test (/ nombreCN n del)

 ;; écriture des variable en "dur" pour l'exemple
 (setq	nombreCN 91
n 1
 )

 ;; écriture de la partie constante de texte sur la ligne de commande
 (princ "\nCréation de la polyligne: ")

 (repeat nombreCN
   ;; écriture à la suite de la partie variable de texte sur la ligne de commande
   (setq del (princ (strcat (itoa n) " sur " (itoa nombreCN) "... ")))


   ;; pause pour voir la modification du texte sur la ligne de commande
   (repeat 100000)

   ;; suppression de la partie variable de texte sur la ligne de commande
   (repeat (strlen del)
     (princ (chr 8))
   )

   
   (princ)
   (setq n (1+ n))
 )

 (princ)
)

 

 

En complément dans le même esprit, si tu as les Express d'installé tu peux faire une recherche sur les fonction:

  • acet-ui-progress-done
  • acet-ui-progress-init
  • acet-ui-progress-safe

 

Tu trouvera également sur le lien qui suit un exemple intéressant de Patrick_35 sur l'emploi de ces fonctions

https://cadxp.com/topic/31891-barre-de-progression/

 

A+ VDH-Bruno

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Bonjour VDH-Bruno,

 

Tout d'abord merci pour ces explications et merci pour le code, j'ai compris la méthode. Et donc oui en effet, en rajoutant la boucle "écriture, pause, suppression...", ça ralenti le traitement.

 

A quoi correspond la valeur "100000" de la fonction repeat - (pause pour voir la modif) ?

 

Je pense que ce programme peut être utile parfois mais pas toujours en effet.

 

Lorsque j’exécute le programme sur une trentaine de courbes de niveau assez lourdes (plus de 1000 vertex), le programme rame un peu et donne envie de le quitter...

 

Merci encore

 

Nicky

Lien vers le commentaire
Partager sur d’autres sites

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é