Aller au contenu

[Résolu] variable dessin


Messages recommandés

Posté(e)

Bonjour,

 

Je cherche à enregistrer une variable type string dans un dessin, seulement les variables USERI1 à 5 et USERR1 à 5 ne peuvent pas recevoir de string et les USERS1 à 5 ne sont pas enregistrés une fois le dessin fermé.

 

Comment faire ?

Peut-on écrire dans "Fichier / Propriétés du dessin" Onglet "Personnaliser"

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Coucou

 

je crois que (gile) a donné une solution du côté des dictionnaires

mais c'est un peu évolué pour moi comme concept.

 

une solution à deux balles :

insérer un bloc (caché) avec comme attribut la string que tu souhaites mémoriser

tu la retrouveras à chaque ouverture et elle sera modifiable.

 

ou encore une Xdata sur un objet qui sera toujours présent dans le fichier

du genre : un point dans un endroit qui ne gêne pas le dessin.

 

amicalement

Posté(e)

merci pour cette solution elle me conviendrait dans les 3/4 des dossiers sur lesquels je travaille, mais là mes plans sont vérifiés par des macros, et les macros ne sont commodes, impossible de négocier.

 

Donc je suis preneur d'une solution plus AutoCADémique...

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

En effet, on ne voit que les dictionnaires, sortes d'extensions du dessin.

 

Ce fil va te donner des pistes.

 

Mais il y a la commande PROPDESS, dernier onglet.

 

On peut extraire ces données avec un CHAMP figurez-vous !

Et certainement aussi par programmation.

Ne serait-ce pas plus simple que les dicos, solution parfaite au demeurant ?

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Je ne comprends pas en quoi le fil peut m'aider car il ne parle que de xdata que je ne peux pas utiliser.

 

La commande PROPDESS est pratique mais en programmation comment accéder à l'onglet et à l'ajout de variable ??

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Je ne comprends pas en quoi le fil peut m'aider car il ne parle que de xdata que je ne peux pas utiliser.

Pourquoi ?

 

La commande PROPDESS est pratique mais en programmation comment accéder à l'onglet et à l'ajout de variable ??

Es-tu inscrit sur theswamp ? Il y a cela, par exemple, par ronjonp :

(if (vl-catch-all-error-p
     (vl-catch-all-apply
 'vla-getcustombykey
 (list suminfo "Job No." "123")
     )
   )
 (vla-addcustominfo suminfo "Job No." "123")
 (vla-setcustombykey suminfo "Job No." "123")
)

C'est pour écrire les DWGPROP custom, dont je parle. Il faut chercher plus loin pour les lire ! Je regarde 5 minutes.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

trouvé ici

Auteur __assume

 

(defun getCustomDwgProp (key / app counter counter2 counter3 doc dwgprops k v)
 (vl-load-com)
 (setq App (vlax-Get-Acad-Object)
 Doc (vla-Get-ActiveDocument App)
 DwgProps (vla-Get-SummaryInfo Doc)
 counter 0
 counter2 (vla-NumCustomInfo DwgProps)
 )
 (while (< counter counter2)
   (vla-GetCustomByIndex DwgProps counter 'k 'v)
   (if (eq key k)
     (setq counter3 counter)
   )
   (setq counter (+ 1 counter))
 )
 (setq k nil
 v nil
 )
 (if counter3
   (vla-GetCustomByIndex DwgProps counter3 'k 'v)
 )
 (if v
   v
   nil
 )
)

Marche bien. KEY est le titre de ta propriété.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

je suis un débutant en lisp :

 

j'ai fait un fichier .lsp que j'ai chargé dans autocad et qui contient :

 

(defun c:prde()
(getCustomDwgProp "essai")
)

(defun getCustomDwgProp (key / app counter counter2 counter3 doc dwgprops k v)
 (vl-load-com)
 (setq App (vlax-Get-Acad-Object)
        Doc (vla-Get-ActiveDocument App)
        DwgProps (vla-Get-SummaryInfo Doc)
        counter 0
        counter2 (vla-NumCustomInfo DwgProps)
 )
 (while (< counter counter2)
   (vla-GetCustomByIndex DwgProps counter 'k 'v)
   (if (eq "fsdf" k)
     (setq counter3 counter)
   )
   (setq counter (+ 1 counter))
 )
 (setq k nil
        v nil
 )
 (if counter3
   (vla-GetCustomByIndex DwgProps counter3 'k 'v)
 )
 (if v
   v
   nil
 )
)

 

et lorsque je le lance, j'ai droit à une seule réponse nil... j'ai dû oublier quelque chose.

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Autant pour moi :

(if (eq key k)

et non

(if (eq "fsdf" k) [c'était un test chez moi]

Je modifie mon message.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

désolé mais j'ai toujours la même erreur après avoir fait la modification et recharger mon lisp :

 

(defun c:prde()
(getCustomDwgProp "essai")
)

(defun getCustomDwgProp (key / app counter counter2 counter3 doc dwgprops k v)
 (vl-load-com)
 (setq App (vlax-Get-Acad-Object)
        Doc (vla-Get-ActiveDocument App)
        DwgProps (vla-Get-SummaryInfo Doc)
        counter 0
        counter2 (vla-NumCustomInfo DwgProps)
 )
 (while (< counter counter2)
   (vla-GetCustomByIndex DwgProps counter 'k 'v)
   (if (eq key k)
     (setq counter3 counter)
   )
   (setq counter (+ 1 counter))
 )
 (setq k nil
        v nil
 )
 (if counter3
   (vla-GetCustomByIndex DwgProps counter3 'k 'v)
 )
 (if v
   v
   nil
 )
)

 

ça vient de moi ?

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Bonjour,

 

Fraid proposait d'utiliser le registre Windows : cela ne semble pas correspondre à la demande puisque la variable doit être enregistrée pour chaque fichier, si j'ai bien compris. Or le registre semble être plus approprié pour enregistrer des variables communes à tous les fichiers.

 

Les xdata sont très bien également, mais sont rattachés à des objets (qui peuvent malheureusement être effacés, même si on les planque Dieu sait où).

 

Je pense que le plus simple est d'utiliser des dictionnaires via les "ldata" : en plus, c'est un concept très simple d'utilisation.

 

(vlax-ldata-put "mondico" "macle" "ceci est un texte") ;; pour enregistrer

(vlax-ldata-get "mondico" "macle") ;; pour récupérer la valeur stockée dans "macle" de "mondico"

 

sachant que la donnée stockée peut être également numérique. C'est peut être plus souple et plus simple que de passer par des propriétés de dessin, quoi qu'on ait pu en dire...

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Ben oui Vincent. On a bien les dicos.

Mais ma méthode est un peu plus pratique pour le dessin avec les CHAMPS...

 

sechanbask !

Chez moi ca marche très bien !

Sinon bascule sur l'option des dicos. Vincent a rappelé les fonctions primaires.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Mais ma méthode est un peu plus pratique pour le dessin avec les CHAMPS...

 

sans aucun doute, mais l'utilisation des champs n'était pas demandée par la question de départ et comme on peut penser, à tort, que les dictionnaires sont compliqués à utiliser, il me semblait opportun de proposer cette voie qui peut résoudre le problème en 2 lignes.

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Salut,

 

Je dirais comme zebulon, le plus simple est d'utiliser les fonctions vlax-ldata* :

(vlax-ldata-put "dictName" "keyName" value)

Crée un dictionnaire nommé "dictName" dans le quel la valeur de value est stockée dans la clé "keyName".

Pour récupérer la valeur, il suffit de faire :

(vlax-ldata-get "dictName" "keyName")

 

L'inconvénient des ldata c'est que les données ne sont accessibles qu'en LISP (ou ObjectARX).

On peut faire la même chose avec des dictionnaires traditionnels (accessible avec tous les langages), j'avais fait des routines équivalentes aux fonctions vlax-ldata* (voir ici).

 

On peut aussi attacher des xdata au calque "0".

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

Posté(e)

merci pour tout, j'ai finalement pris l'option

 

pour définir le calque :

 

(defun c:RVR()

(setq calque_rev (getstring "\nCalque à utiliser pour les nuages de révision : "))
(vlax-ldata-put "calques" "calque_nuage_rev" calque_rev)
)

 

 

l'utilisation finale :

 

(defun c:CVB()

; affiche une boite mais pour l'instant c'est tout
;(setq Id(load_dialog "RVV.dcl"))
;(new_dialog "bienvenue" Id)
;(start_dialog)

(setq courant_cvb (getvar "clayer"))
(setq accroche_cvb (getvar "osmode"))


(setvar "osmode" 0)

(command "clayer" (vlax-ldata-get "calques" "calque_nuage_rev" ))
(command "rectangle" pause pause)
(setq der_cvb (entlast) js (ssadd))
(if (= 4 (getvar "INSUNITS")) (command "NUAGEREV" "longueur" "500" "500" "objet" der_cvb "non"))
(if (= 5 (getvar "INSUNITS")) (command "NUAGEREV" "longueur" "50" "50" "objet" der_cvb  "non"))
(if (= 6 (getvar "INSUNITS")) (command "NUAGEREV" "longueur" "0.5" "0.5" "objet" der_cvb  "non"))

(setvar "osmode" accroche_cvb)
(command "clayer" courant_cvb )

)

 

Je pense que je ferais de même pour les cotations...S'il y a des améliorations surtout dans le CVB, n'hésitez pas.

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)
On peut aussi attacher des xdata au calque "0".

 

c'est rusé, je n'avais jamais pensé à cette option

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

  • 4 semaines après...
Posté(e)

Bonjour,

 

tout à fait d'accord. Je pense néanmoins que le concept des vlax-ldata relèvent du niveau débutant. Enregistrer une donnée et la récupérer, c'est quand même la base de l'informatique. C'est un concept qu'on trouve sur n'importe quelle calculatrice un peu scientifique.

Il n'en va évidemment pas de même pour les xdata ou l'accès aux propriétés du dessin qui demandent nettement plus d'expérience en lisp ou vlisp. Et copier/coller un code sans le comprendre et le maitriser un minimum et une chose que j'évite. Mais étudier un code et essayer de le comprendre permet toujours de progresser. A moins d'être un génie, c'est toujours en copiant ses maîtres qu'on avance. Alors, copions mais intelligemment. On a tous commencé comme arpette, mais un moment donné il faut passé à autre chose que de balayer l'atelier.

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

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é