Aller au contenu

[Résolu] Lisp modifications d'attributs et hachures


Messages recommandés

Posté(e)

C'est que je créé un calque hachures pour mieux séparer les types d'entités.

 

L'erreur vient bien de moi...

 

De plus, pour une meilleur utilisation des polylignes, qui sont donc passées "sous" les hachures, il serais judicieux de faire un petit ordretrace à la fin de mafonc pour repasser les polylignes devant... Non ?

 

Avec un petit

(if (setq Select (ssget "_X" '((0 . "HATCH") (cons 8 (strcat Calq "_Hach"))))) ;_ Fin de setq
(command "ordretrace" Select "" "ar" "")
) ;_ Fin de if

 

Ce qui donne au total :

(defun c:Hach500 ()
 (setq old_clayer (getvar "clayer"))
 (command "-hachures" "p" "SOLID" 1.0 0 "") ;Type de hachure pour le calque qui suit
 (mafonc "01211")
 (command "-hachures" "p" "SOLID" 1.0 0 "")
 (mafonc "01232")
 (command "-hachures" "p" "SOLID" 1.0 100 "")
 (mafonc "01321")
 (command "-hachures" "p" "SOLID" 1.0 100 "")
 (mafonc "01251")
 (command "-hachures" "p" "SOLID" 1.0 100 "")
 (mafonc "01252")
 (setvar "clayer" old_clayer)
) ;_ Fin de defun
(defun mafonc (calq /)
 (setq sel (ssget "X" (list (cons 0 "LWPOLYLINE") (cons 8 calq) (cons 70 1))))
 (setq cont 0)
 (repeat (sslength sel)
   (setq entite (ssname sel cont))
   (if (not (tblsearch "layer" (strcat Calq "_Hach")))
     (command "-calque" "n" (strcat Calq "_Hach") "")
     (setvar "clayer" (strcat Calq "_Hach"))
   ) ;_ Fin de if
   (command "-hachures" "S" entite "" "")
   (setq cont (1+ cont))
 ) ;_ Fin de repeat
 (if (setq Select (ssget "_X" '((0 . "HATCH") (cons 8 (strcat Calq "_Hach"))))) ;_ Fin de setq
   (command "ordretrace" Select "" "ar" "")
 ) ;_ Fin de if
) ;_ Fin de defun

 

Amicalement...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

et HPDRAWORDER ? si le setvar suffit, on ne sait jamais.

L'aide dit que la variable n'est pas enregistrée. Même si elle l'est probablement dans les faits.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

C'est super c'est tout bon pour ces hachures ! Mes collègues sont super content :D

 

Me reste juste le problème des textes. Comment es-ce que je peux agir sur l'inclinaison ? Un bit spécifique ?

Posté(e)

J'ai peut-être trouvé un poste qui en parle ICI

 

Ce sera surement à adapter à tes besoins...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Personnellement, j'ai écris ceci mais ça ne fonctionne pas...

 

Faut dire aussi que je ne suis pas un "bon" en LiSP...

 

Si une bonne âme pouvait me filer un coup de main...

;;; ***************************************************
;;; Balaye les textes et supprime leur inclinaison 
;;; ***********************************************
(defun c:TxtInclinVersDroit (/)
 (if (setq Select (ssget "_X" '((0 . "TEXT")))) ;_ Fin de setq
   (progn (setq Select (subst '(51 . 0) '(51 . 1) Select))
          (entmod Select)
   ) ;_ Fin de progn
 ) ;_ Fin de if
 (princ)
) ;_ Fin de defun

Et AutoCAD me répond :

Commande: TXTINCLINVERSDROIT

; erreur: type d'argument incorrect: consp <Selection set: 4af>

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

(defun c:Testtext ()
 (setq n 0)
 (if (setq Select
            (ssget "_X" '((0 . "text") (8 . "NOMDUCALQUE")))
     ) ;_ Fin de setq
   (while (setq ent (ssname Select n))
     (setq elst (entget ent)
           n    (1+ n)
     ) ;_ Fin de setq
     (command "_-style" "" "" "" "" "380" "non" "non")
   ) ;_ Fin de while
 ) ;_ Fin de if
 (princ Select)
 (princ)
)

 

Je pensais a un truc comme ça mais la commande style affecte seulement le style standard et du coup ne modifie rien...

Posté(e)

Je pense que cette routine ne fonctionnera pas, car elle change les propriétés de tous les styles de textes existant mais je ne met pas à jour les textes existants.

 

En tout cas pas l'inclinaison des textes déjà existants...

 

Pour ta commande, essai ça :

(command "_-style" "StyleDeTexte" "PoliceTTFouSHX" "" "" "380" "non" "non")

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Voilà se que me dit le programme :

 

Commande: testtext

_-style Entrez le nom du style de texte ou [?] <Standard>: StyleDeTexte

Nouveau style.

Spécifiez le nom de police complet ou le nom de fichier de polices (TTF ou SHX)

<txt>: PoliceTTFouSHX

Police non disponible.

Commande: TESTTEXT Commande inconnue "TESTTEXT". Appuyez sur F1 pour obtenir

de l'aide.

Commande: TESTTEXT Commande inconnue "TESTTEXT". Appuyez sur F1 pour obtenir

de l'aide.

...

 

Il y aurait pas un moyen de changer la valeur (51 . 380) sans editer le style de texte ? Je pense donc que le Lisp que tu as proposé part dans la bonne direction. Après faut-il savoir pourquoi in ne marche pas...

 

Merci encore pour ton aide !

Posté(e)

Bon, j'ai écris ça (le midi, j'ai parfois du temps libre) pour rendre TOUS les textes "inclinés" en textes "droits" :

;;; *******************************************************
;;; Balaye les textes et supprime leur inclinaison (DenisH)
;;; *******************************************************
(defun c:TxtInclinVersDroit (/ Select ent n elst)
 (if (setq Select (ssget "_X" '((0 . "TEXT"))) ;_ Fin de ssget
     ) ;_ Fin de setq
   (progn (princ Select)
          (setq n 0)
          (while (setq ent (ssname Select n))
            (setq elst (entget ent)
                  n    (1+ n)
            ) ;_ Fin de setq
            (setq elst (subst (cons 51 0) (assoc 51 elst) elst))
            (entmod elst)
          ) ;_ Fin de while
   ) ;_ Fin de progn
   (princ ent)
 ) ;_ Fin de if
) ;_ Fin de defun

 

Mais il faudrait ne sélectionner QUE les textes inclinés (code DXF 51) et ça, je ne sais pas faire.

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Pourquoi ne pas passer par une sélection globale des textes et forcer la valeur d'inclinaison à 0 ? Par contre pour donner la valeur d'inclinaison c'est bien une valeur en radian ?

 

(* pi (/ x 180.0))

Posté(e)

Pourquoi ne pas passer par une sélection globale des textes et forcer la valeur d'inclinaison à 0 ? Par contre pour donner la valeur d'inclinaison c'est bien une valeur en radian ?

 

(* pi (/ x 180.0))

 

D'après ce que je sais, AutoCAD travail toujours en radian...

 

Ma routine fonctionne, et tu peux rajouter le calque dans la sélection...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

D'après ce que je sais, AutoCAD travail toujours en radian...

 

Ma routine fonctionne, et tu peux rajouter le calque dans la sélection...

 

Super nouvelle !! Merci à toi !

 

Dernière question :

(defun c:HACH500 ()
 (command "h1" "h2" "h3" "h4" "h5")
)

 

H1.h2,h3,h4,h5 correspondent à mon defun c: pour chaque calques... Il y aurait pas un moyen de lancer une ligne de commande contenant des fonctions crée dans le même fichier lisp ?

Posté(e)

Je pense que ça fera l'affaire, mais ce n'est juste qu'une piste...

(defun c:Hach500()
 (h1)
 (h2)
 (h3)
 ....
)

Du coup, tu pourras enlever les "c:" devant tes h1, h2, h3 pour obtenir :

(defun h1 ()
  ....
)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Voici pour l'inclinaison des textes, ça fonctionne "à peu près" chez moi.

 

J'ai quelques problème avec le code DXF 51 qui devrait être à 0 si le texte n'est pas incliné...

;;; ****************************************************
;;; Balaye les textes 'droits' et les  incline (DenisH) 
;;; ****************************************************
(defun c:TxtDroitVers80 (/ Select ent n elst)
 (if (setq Select (ssget "_X" '((0 . "TEXT"))))
   (progn
     (setq n 0)
     (while (setq ent (ssname Select n))
       (setq elst (entget ent))
       (if (/= (assoc 51 elst) 0)
         (progn (setq Incl (* pi (/ 20 200.0))); 20 = angle d'inclinaison en grades
                (setq elst (subst (cons 51 Incl) (assoc 51 elst) elst))
                (entmod elst)
         ) ;_ Fin de progn
       ) ;_ Fin de if
       (setq n (1+ n))
     ) ;_ Fin de while
   ) ;_ Fin de progn
   (princ ent)
 ) ;_ Fin de if
 (princ)
) ;_ Fin de defun

 

Amuse-toi bien... Et tiens moi au courant...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Un GRAND merci à tous le monde !!

 

J'ai exactement se que je recherchais ! Je vous donne le résultat (même si il doit pas être clean du tout à vos yeux...)

 

(defun H1 ()
 (setq n 0)
 (if (setq Select
            (ssget "_X" '((0 . "LWPOLYLINE") (8 . "01211")(70 . 1)))
     ) ;_ Fin de setq
   (while (setq ent (ssname Select n))
     (setq elst (entget ent)
           n    (1+ n)
     ) ;_ Fin de setq
     (if (not (tblsearch "layer" "01211_Hach"))
       (command "-calque" "n" "01211_Hach" "")
       (setvar "clayer" "01211_Hach")
     ) ;_ Fin de if
     (command "_-hatch" "P" "SOLID" "s" ent "" "")
   ) ;_ Fin de while
 ) ;_ Fin de if
 (princ Select)
 (princ)
)
(defun H2 ()
 (setq n 0)
 (if (setq Select
            (ssget "_X" '((0 . "LWPOLYLINE") (8 . "01321")(70 . 1)))
     ) ;_ Fin de setq
   (while (setq ent (ssname Select n))
     (setq elst (entget ent)
           n    (1+ n)
     ) ;_ Fin de setq
     (if (not (tblsearch "layer" "01321_Hach"))
       (command "-calque" "n" "01321_Hach" "")
       (setvar "clayer" "01321_Hach")
     ) ;_ Fin de if
     (command "_-hatch" "P" "SOLID" "s" ent "" "")
   ) ;_ Fin de while
 ) ;_ Fin de if
 (princ Select)
 (princ)
)
(defun H3 ()
 (setq n 0)
 (if (setq Select
            (ssget "_X" '((0 . "LWPOLYLINE") (8 . "01251")(70 . 1)))
     ) ;_ Fin de setq
   (while (setq ent (ssname Select n))
     (setq elst (entget ent)
           n    (1+ n)
     ) ;_ Fin de setq
     (if (not (tblsearch "layer" "01251_Hach"))
       (command "-calque" "n" "01251_Hach" "")
       (setvar "clayer" "01251_Hach")
     ) ;_ Fin de if
     (command "_-hatch" "P" "DOTS" 1.2 0 "s" ent "" "")
   ) ;_ Fin de while
 ) ;_ Fin de if
 (princ Select)
 (princ)
)
(defun H4 ()
 (setq n 0)
 (if (setq Select
            (ssget "_X" '((0 . "LWPOLYLINE") (8 . "01252")(70 . 1)))
     ) ;_ Fin de setq
   (while (setq ent (ssname Select n))
     (setq elst (entget ent)
           n    (1+ n)
     ) ;_ Fin de setq
     (if (not (tblsearch "layer" "01252_Hach"))
       (command "-calque" "n" "01252_Hach" "")
       (setvar "clayer" "01252_Hach")
     ) ;_ Fin de if
     (command "_-hatch" "P" "DOTS" 2.2 0 "s" ent "" "")
   ) ;_ Fin de while
 ) ;_ Fin de if
 (princ Select)
 (princ)
)
(defun H5 ()
 (setq n 0)
 (if (setq Select
            (ssget "_X" '((0 . "LWPOLYLINE") (8 . "01232")(70 . 1)))
     ) ;_ Fin de setq
   (while (setq ent (ssname Select n))
     (setq elst (entget ent)
           n    (1+ n)
     ) ;_ Fin de setq
     (if (not (tblsearch "layer" "01232_Hach"))
       (command "-calque" "n" "01232_Hach" "")
       (setvar "clayer" "01232_Hach")
     ) ;_ Fin de if
     (command "_-hatch" "P" "VIGNE" 0.5 0 "s" ent "" "")
   ) ;_ Fin de while
 ) ;_ Fin de if
 (princ Select)
 (princ)
)
(defun T1 (/ Select ent n elst)
 (if (setq Select (ssget "_X" '((0 . "TEXT")(8 . "01219"))) ;_ Fin de ssget
     ) ;_ Fin de setq
   (progn (princ Select)
          (setq n 0)
          (while (setq ent (ssname Select n))
            (setq elst (entget ent)
                  n    (1+ n)
            ) ;_ Fin de setq
            (setq elst (subst (cons 51 0.314159265) (assoc 51 elst) elst))
            (entmod elst)
          ) ;_ Fin de while
   ) ;_ Fin de progn
   (princ ent)
 ) ;_ Fin de if
) ;_ Fin de defun
(defun T2 (/ Select ent n elst)
 (if (setq Select (ssget "_X" '((0 . "TEXT")(8 . "01139"))) ;_ Fin de ssget
     ) ;_ Fin de setq
   (progn (princ Select)
          (setq n 0)
          (while (setq ent (ssname Select n))
            (setq elst (entget ent)
                  n    (1+ n)
            ) ;_ Fin de setq
            (setq elst (subst (cons 51 0.314159265) (assoc 51 elst) elst))
            (entmod elst)
          ) ;_ Fin de while
   ) ;_ Fin de progn
   (princ ent)
 ) ;_ Fin de if
) ;_ Fin de defun
(defun c:HACH500 ()
 (h1)
 (h2)
 (h3)
 (h4)
 (h5)
 (t1)
 (t2)
)

 

Par contre j'ai pas compris pourquoi je devais rentrer la valeur de 20g en radian pour obtenir une inclinaison de 380g...

 

Merci spécial à DenisH :D

Posté(e)

Si ça te convient, c'est cool... ;)

 

Mais l'autre solution (proposée à l'origine par Tramber) que je t'ai modifié au poste n°22 était vachement plus propre et t'évitais de parcourir des dizaines de lignes (plus de 130)...

 

Si tu dois changer UN seul truc, il faudra le faire autant de fois que tu as de sous-routines...

 

C'est dommage.

 

Surtout que c'est presque toujours le même code...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Tu as raison dans le sens où si tu comprends ce code, tu pourras le modifier. ;)

 

En plus, pour une fois que je peux rendre un peu à CadXP tous ce qu'il m'a donné ! !

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Moi je vois que tu n'as pas utilisé Etablir de la fonction -calques :huh:

 

Alors pour les angles, c'est simple : AutoCad travaille toujours en radian, de l'intérieur. A toi de batir une routine qui transforme en radians tes désirs selon AUNITS.

Tu verras, on s'y fait vite.

 

Bravo en tous cas.

Prochaine étape : diviser ton code par 4 en volume. En effet tes commandes H1 à 6 doivent devenir 1 seule. Très facile tu n'as que 3 paramètres :

  • nom_calque
  • nom_hach
  • ech_hach

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

(defun H1a6 (calq typh echh)
 (setq n 0)
 (if (setq Select
            (ssget "_X" (list(cons 0 "LWPOLYLINE") (cons 8 calq)(cons 70 1)))
     ) ;_ Fin de setq
   (while (setq ent (ssname Select n))
     (setq elst (entget ent)
           n    (1+ n)
     ) ;_ Fin de setq
     (command "-calque" "e" (strcat calq"_Hach") "")
     (if(= typh "SOLID")
(command "_-hatch" "P" "SOLID" "s" ent "" "")
(command "_-hatch" "P" typh echh 0 "s" ent "" ""))
   ) ;_ Fin de while
 ) ;_ Fin de if
 (princ)
)

(H1a6 "01211" "SOLID" nil)
(H1a6 "01232" "VIGNE" 0.5)

Piège du SOLID

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
  • 2 semaines après...
Posté(e)

Bonjour,

 

je revient juste vous demander une info... Je comprend pas comment revenir chercher une sélection et soumettre une ligne de commande à cette sélection...

 

; 1 - Sélection des objet du calques 01611 OK
; 2 - Modification de l'épaisseur de polyligne à 0.2 au 1:500
; 3 - Création du nouveau calque
; 4 - Déplacement des polylignes dans le nouveau calque
(defun BF1 (/ )
(setq n 0)
(if (setq Select
 (ssget "_X" '((0 . "LWPOLYLINE") (8 . "01611"))) 
  )
  (while (setq ent (ssname Select n))
     (setq elst (entget ent)
           n    (1+ n)
     ) ;_ Fin de setq
(command "pedit" "LA" 0.2 "") ; Commande ok
 )
 )
 )
(defun c:500 ()
 (BF1)
)

Posté(e)

Bonjour Glead,

 

revenir chercher une sélection

Ton jeu de sélection est enregistré sous la variable Select et donc réutilisable par simple rappel.

soumettre une ligne de commande à cette sélection...

Là, je ne te suis pas trop.

Si tu utiliser ton jeu de sélection dans une commande Autocad, voici un exemple :

(setq ss (ssget)) ;création du jeu de sélection ss
(command "_erase" ss "") ; utilisation du jeu de sélection ss dans la commande _erase

 

Olivier

Posté(e)

J'ai réussi a faire se que je voulais... merci de ton aide !

 

(defun newcalques (/ )
 (if (not (tblsearch "layer" "Bien-fond"))
   (command "-calque" "n" "Bien-fond" "")
       (setvar "clayer" "Bien-fond")
   )
 )

(defun BF1 (/ )
 (setq ss (ssget "_X" '((0 . "LWPOLYLINE") (8 . "01611")))
)
(progn
    (command "pedit" "M" ss "" "LA" 0.2 "") ; Commande ok
(command "_change" ss "" "p" "CA" "Bien-fond" "")
 (princ ss)
 (princ)
 )
 )

(defun c:500 ()
 (newcalques)
 (BF1)
)

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é