CadXP: Rotation de N Blocs en fonction d une Valeur d Attribut - CadXP

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Rotation de N Blocs en fonction d une Valeur d Attribut

#1 L'utilisateur est en ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 213
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 03 novembre 2020 - 10:46

Hello

J ai cherche dans mes 3001 routines et A PRIORI je n ai pas en stock !

Donc si qq'un a la routine, SVP je suis preneur !

---- Description de la routine ----

1) Question "Nom de l Attribut ? (Defaut = ROTATION) "
2) Selection AutoCAD classique ...
3) Ne retenir que les Blocs Statiques OU Dynamiques
4) On boucle sur TOUS les Blocs
5) Si Attribut ROTATION present !
6) ALORS Changement de la rotation du Bloc concerne
en fonction de la valeur numerique de l attribut
( si valeur DEBILE alors ZERO ! Tant pis !! )
( La valeur peut etre en degres ou grades )
( SVP Programmer comme si c etait en DEGRES ! )
Si Grade je pourrais modifier la ligne de Lisp concernee ...
7) On boucle sur le (4) ...
8) A la fin si possible: signaler le nombre de blocs traites !

Je peux le faire par une requete de MAP/CIVIL !
Mais tout le monde n'a pas MAP/CIVIL !!

Merci d'avance, LA SANTE, Bye, lecrabe
... Deja 1 mois de retraite ...
Autodesk Expert Elite Team
0

#2 L'utilisateur est hors-ligne   Curlygoth 

  • ceinture verte
  • Groupe : Membres
  • Messages : 90
  • Inscrit(e) : 09-mai 19
  • LocationJuste devant toi

Posté 03 novembre 2020 - 10:54

VBA interdit ?
Je dessine sur Autocad depuis mes 16 ans, je fais tout avec 2D/3D etc...
Et maintennant ? Ben, je ne dessine quasiment plus...
Je programme pour que mon ordinateur travail à ma place
Et je créé des outils pour gérer planning, mail auto, rapport issu du dessin et j'en passe.
(Uniquement en VBA et VB.net / Sql)

Mon site Web (en cours de construction) : Site
0

#3 L'utilisateur est en ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 213
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 03 novembre 2020 - 11:04

Hello

Desole mais je desire du Lisp ou VLisp !

Neanmoins MERCI, LA SANTE, Bye, lecrabe
Autodesk Expert Elite Team
0

#4 L'utilisateur est hors-ligne   Luna 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 137
  • Inscrit(e) : 27-février 20

Posté 03 novembre 2020 - 11:15

Coucou,

Juste une précision, lorsque tu demandes

Citation

3) Ne retenir que les Blocs Statiques OU Dynamiques
cela signifie-t-il que le programme ne doit boucler que sur des blocs statiques ou bien que sur les blocs dynamiques en fonction d'un choix utilisateur ou bien c'est uniquement pour dire que l'ensemble des références de blocs doivent être prises en compte (dynamique et statique pris en compte ensemble) ?

Autrement, je pourrais te fournir une solution dans la journée :3

Bisous,
Luna
0

#5 L'utilisateur est en ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 213
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 03 novembre 2020 - 11:24

Hello

Cela signifie que la routine doit traiter l attribut VOULU (si present bien sur !)
sur TOUS les Blocs selectionnes ! ... qu ils soient statiques ou dynamiques ...

En fait il s agit de modifier le assoc 50 (= Rotation du Bloc en Radian)
en fonction de la valeur de l attribut choisi ...

MERCI d'avance, LA SANTE, Bye, lecrabe
Autodesk Expert Elite Team
0

#6 L'utilisateur est hors-ligne   Luna 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 137
  • Inscrit(e) : 27-février 20

Posté 03 novembre 2020 - 12:56

Coucou,

Cela te convient-il ?
(defun c:ATTROT (/ ang-conv remove-double jsel i e name tag rot n lst)

		; Supprime les doublons au sein d'une liste spécifiée en argument :
	;--- La fonction (Remove-Double) possède 1 argument
	;--- lst1 correspond à la liste devant être évaluée pour la suppression des doublons

	;--- Renvoie la liste modifiée sans ses doublons
	(defun Remove-Double (lst1 / lst2)

		(while (car lst1)
			(setq Lst2 (cons (car lst1) lst2)
			      Lst1 (vl-remove (car lst1) lst1)
			)
		)
		(reverse lst2)

	)

		; Permet de convertir les unités angulaires :
	;--- La fonction (ang-conv) possède 3 arguments
	;--- a correspond à l'angle que l'on souhaite convertir
	;--- from correspond à l'unité angulaire de départ
	;	0 - Degree
	;	3 - Radian
	;	2 - Grade
	;--- to correspond à l'unité angulaire d'arrivée
	;	0 - Degree
	;	3 - Radian
	;	2 - Grade

	;--- Renvoie l'angle converti sous format numérique
	(defun ang-conv (a from to /)

		(cond
			((and (= from 0) (= to 0))
				(/ (* a 180.0) 180.0)
			)
			((and (= from 0) (= to 3))
				(/ (* a pi) 180.0)
			)
			((and (= from 0) (= to 2))
				(/ (* a 200.0) 180.0)
			)
			((and (= from 3) (= to 0))
				(/ (* a 180.0) pi)
			)
			((and (= from 3) (= to 3))
				(/ (* a pi) pi)
			)
			((and (= from 3) (= to 2))
				(/ (* a 200.0) pi)
			)
			((and (= from 2) (= to 0))
				(/ (* a 180.0) 200.0)
			)
			((and (= from 2) (= to 3))
				(/ (* a pi) 200.0)
			)
			((and (= from 2) (= to 2))
				(/ (* a 200.0) 200.0)
			)
		)

	)

	(if (or (setq jsel (ssget '((0 . "INSERT"))))      ; si pré-sélection ou sélection manuelle
                (setq jsel (ssget "_X" '((0 . "INSERT")))) ; si pas de sélection manuelle, alors prise en compte de la totalité des blocs
            )
		(progn
			(setq n 0
			      i (sslength jsel)
			      e i
			)
			(if (= (setq tag (getstring "Veuillez spécifier le nom d'attribut pour la rotation <\"ROTATION\"> : ")) "")
				(setq tag "ROTATION")
			)
			(repeat i
				(setq name (ssname jsel (setq i (1- i))))
				(if (and (null (vl-catch-all-error-p (setq rot (vl-catch-all-apply 'getpropertyvalue (list name tag)))))
					 (setq rot (ang-conv (atof rot) (getvar "AUNITS") 3))
					 (entmod (subst (cons 50 rot) (assoc 50 (entget name)) (entget name)))
				    )
					(setq n (1+ n)
					      lst (cons (getpropertyvalue name "BlockTableRecord/Name") lst)
					)
					(ssdel name jsel)
				)
			)
			(sssetfirst nil jsel)
			(foreach name (setq lst (vl-sort (remove-double lst) '<))
				(command "_ATTSYNC" "N" name)
			)
			(setq lst (apply 'strcat (mapcar '(lambda (str) (strcat "\n  - " str)) lst)))
			(alert (strcat "\nUn total de "
					(itoa n)
					" / "
					(itoa e)
					" bloc(s) ont été redéfinis."
					"\nVoici la liste des blocs ayant un attribut nommé \""
					tag
				       "\" : "
					lst
				)
			)
			(prompt (strcat "\nUn total de "
					(itoa n)
					" / "
					(itoa e)
					" bloc(s) ont été redéfinis."
					"\nVoici la liste des blocs ayant un attribut nommé \""
					tag
				       "\" : "
					lst
				)
			)					
		)
		(prompt (strcat "\nAucun bloc présent dans ce fichier..."))
	)
	(princ)

)


Bisous, Luna

Ce message a été modifié par lecrabe - 18 novembre 2020 - 16:18 .

0

#7 L'utilisateur est en ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 213
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 03 novembre 2020 - 13:36

Hello Luna

MERCI cela semble Tip-Top !

OK sur Blocs classiques ... A tester sur Blocs dynamiques !? ... MAIS j ai confiance !!

Que La Sante, Le Bonheur, La Volupte, La Prosperite, etc, te submergent !!

LA SANTE, Bye, lecrabe
Autodesk Expert Elite Team
0

#8 L'utilisateur est hors-ligne   Luna 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 137
  • Inscrit(e) : 27-février 20

Posté 03 novembre 2020 - 13:55

Coucou,

Petite mise à jour par rapport à ton point n°1, ce qui permet de prendre en compte la pré-sélection et la sélection manuelle (en cas de sélection vide pour la pré-sélection ou la sélection manuelle, l'effectue sur l'ensemble des blocs du dessin).
Après s'il faut supprimer le (ssget "_X") c'est tout à fait possible aussi.
Normalement, il ne devrait pas y avoir de soucis pour les blocs dynamiques puisqu'on ne s'intéresse qu'à leur attribut donc il n'y a pas de filtre statique/dynamique.

Faudra juste faire attention à la version de l'AutoCAD en raison de la fonction (getpropertyvalue) qui a été ajoutée assez récemment :3

Bisous, Luna
0

#9 L'utilisateur est en ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 213
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 03 novembre 2020 - 14:02

Hello

En fait j avais deja supprime le "_X" sur le ssget !

Sinon SVP ces 2 lignes nouvelles/modifiees >>>
(if (or (setq jsel (ssget '((0 . "INSERT")))) ; si pré-sélection ou sélection manuelle
(setq jsel (ssget "_X" '((0 . "INSERT")))) ; si pas de sélection manuelle, alors prise en compte de la totalité des blocs
<<< sont elles bien les 2 SEULES Modifs que tu as faites ??

(getpropertyvalue) & (setpropertyvalue) ont ete ajoutes a la version 2012 (Pour la version Mac en fait !)

ENCORE MERCI, LA SANTE, Bye, lecrabe
Autodesk Expert Elite Team
0

#10 L'utilisateur est hors-ligne   Luna 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 137
  • Inscrit(e) : 27-février 20

Posté 03 novembre 2020 - 14:57

Voir le messagelecrabe, le 03 novembre 2020 - 14:02 , dit :

Hello

En fait j avais deja supprime le "_X" sur le ssget !

Sinon SVP ces 2 lignes nouvelles/modifiees >>>
(if (or (setq jsel (ssget '((0 . "INSERT")))) ; si pré-sélection ou sélection manuelle
(setq jsel (ssget "_X" '((0 . "INSERT")))) ; si pas de sélection manuelle, alors prise en compte de la totalité des blocs
<<< sont elles bien les 2 SEULES Modifs que tu as faites ??

(getpropertyvalue) & (setpropertyvalue) ont ete ajoutes a la version 2012 (Pour la version Mac en fait !)

ENCORE MERCI, LA SANTE, Bye, lecrabe

Vouih je n'ai rien modifié d'autre :3

Bisous, Luna
0

#11 L'utilisateur est en ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 213
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 18 novembre 2020 - 15:24

Hello Luna

Encore MERCI pour ta routine precedente !

SVP serait il possible d avoir la MEME routine
pour forcer la couleur des blocs en fonction du contenu d un attribut !

Si Valeur = ZERO (ou mauvaise valeur alpha) ---> ZERO : DuBloc
1-255 --> Forcer avec la couleur 1-255
Si >= 256 --> 256 : DuCalque

Donc modifier le code DXF 62 (Me semble t-il) ... ou en VLisp : vla-put-color ...

MERCI d'avance, LA SANTE, Bye, lecrabe
... Deja 49 jours de retraite ...
Autodesk Expert Elite Team
0

#12 L'utilisateur est hors-ligne   Luna 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 137
  • Inscrit(e) : 27-février 20

Posté 18 novembre 2020 - 16:22

Coucou !

Vouih pas de soucis :3
(defun c:ATTCOL (/ remove-double jsel i e name tag color n lst)

                ; Supprime les doublons au sein d'une liste spécifiée en argument :
        ;--- La fonction (Remove-Double) possède 1 argument
        ;--- lst1 correspond à la liste devant être évaluée pour la suppression des doublons

        ;--- Renvoie la liste modifiée sans ses doublons
        (defun Remove-Double (lst1 / lst2)

                (while (car lst1)
                        (setq Lst2 (cons (car lst1) lst2)
                              Lst1 (vl-remove (car lst1) lst1)
                        )
                )
                (reverse lst2)

        )

        (if (or (setq jsel (ssget '((0 . "INSERT"))))      ; si pré-sélection ou sélection manuelle
                (setq jsel (ssget "_X" '((0 . "INSERT")))) ; si pas de sélection manuelle, alors prise en compte de la totalité des blocs
            )
                (progn
                        (setq n 0
                              i (sslength jsel)
                              e i
                        )
                        (if (= (setq tag (getstring "Veuillez spécifier le nom d'attribut pour la couleur <\"COLOR\"> : ")) "")
                                (setq tag "COLOR")
                        )
                        (repeat i
                                (setq name (ssname jsel (setq i (1- i))))
                                (if (and (null (vl-catch-all-error-p (setq color (vl-catch-all-apply 'getpropertyvalue (list name tag)))))
                                         (cond
					 	((assoc 62 (entget name))
							(entmod (subst (cons 62 (atoi color)) (assoc 62 (entget name)) (entget name)))
						)
						((not (assoc 62 (entget name)))
							(entmod (append (entget name) (list (cons 62 (atoi color)))))
						)
					)
                                    )
                                        (setq n (1+ n)
                                              lst (cons (getpropertyvalue name "BlockTableRecord/Name") lst)
                                        )
                                        (ssdel name jsel)
                                )
                        )
                        (sssetfirst nil jsel)
                        (setq lst (apply 'strcat (mapcar '(lambda (str) (strcat "\n  - " str)) (vl-sort (remove-double lst) '<))))
                        (alert (strcat "\nUn total de "
                                        (itoa n)
                                        " / "
                                        (itoa e)
                                        " bloc(s) ont été redéfinis."
                                        "\nVoici la liste des blocs ayant un attribut nommé \""
                                        tag
                                       "\" : "
                                        lst
                                )
                        )
                        (prompt (strcat "\nUn total de "
                                        (itoa n)
                                        " / "
                                        (itoa e)
                                        " bloc(s) ont été redéfinis."
                                        "\nVoici la liste des blocs ayant un attribut nommé \""
                                        tag
                                       "\" : "
                                        lst
                                )
                        )                                       
                )
                (prompt (strcat "\nAucun bloc présent dans ce fichier..."))
        )
        (princ)

)


Non testé en revanche...
Et je ne sais pas si tu possèdes un attribut particulier pour cette information (= nom d'étiquette par défaut ?) donc j'ai pris "COLOR" par défaut. Et j'ai supposé que la valeur présente dans l'attribut correspond aux valeurs comprises entre 0-256 comme précisé.

Bisous,
Luna

Ce message a été modifié par Luna - 18 novembre 2020 - 17:43 .

0

#13 L'utilisateur est en ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 213
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 18 novembre 2020 - 16:27

Hello

SNIFF ca ne marche pas !

Commande: ATTCOULBLOC
Sélectionner des objets: Spécifiez le coin opposé: 3 trouvé(s)
Sélectionner des objets:
Veuillez specifier le nom d'attribut pour la couleur <"COLOR"> : TAMPON_Z
; erreur: type d'argument incorrect: fixnump: "1"
Commande:

LA SANTE, Bye, lecrabe
Autodesk Expert Elite Team
0

#14 L'utilisateur est hors-ligne   Luna 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 137
  • Inscrit(e) : 27-février 20

Posté 18 novembre 2020 - 17:44

Oh pardon, petite erreur de grammaire ^^"

Corrigé normalement (jusqu'au prochain problème) :3

Bisous
Luna
0

#15 L'utilisateur est en ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 213
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 18 novembre 2020 - 18:17

Hello

MERCI c Tip-Top !

Bonne Soiree, LA SANTE, Bye, lecrabe
Autodesk Expert Elite Team
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)