litelsousa Posté(e) le 29 juin 2021 Posté(e) le 29 juin 2021 Bonjour, Est-il possible de mettre un champ dans une ligne de repère pour mettre le texte provenant d'un autre fichier? Je vous remercie de votre aide. Citer
didier Posté(e) le 29 juin 2021 Posté(e) le 29 juin 2021 Bonjour @litelsousa Désolé je n'ai pas compris la question. Du moins je n'en vois pas les tenants et aboutissants. On pourrait avoir un exemple de dessin avec une idée de la provenance du renseignement à insérer ? Amicalement Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD
litelsousa Posté(e) le 29 juin 2021 Auteur Posté(e) le 29 juin 2021 Re, J'ai un fichier où se trouve divers informations (fichier A). Sur d'autres fichiers, il me faut récupérer ces informations afin que les modifications apportée sur le fichier A soient également modifiées dans mes lignes de repères dans les autres fichiers (B, C, D...). J'espère que je suis plus compréhensible. Dessin1.dwg Citer
Luna Posté(e) le 29 juin 2021 Posté(e) le 29 juin 2021 Coucou, S'il s'agit uniquement de savoir s'il existe une valeur de champ permettant de récupérer la propriété d'un sous-objet d'une Xref, alors je dirais que non. En effet si l'on prend le champ nommé "Objet" (car il s'agit du seul permettant de faire cela) et que l'on clique sur le sous-objet dont on veut récupérer les infos, les propriétés sont celles de la référence externe uniquement. AutoCAD n'est pas capable de récupérer les propriétés d'un sous-objet (même problématique en soit qu'avec les références de blocs où l'on ne peut pas récupérer la propriété d'un sous-objet), uniquement de l'objet directement sélectionné. Autrement-dit, si je devais traduire sous forme d'AutoLISP, le champ nommé "Objet" utilise la fonction (entsel) pour récupérer la liste des propriétés de l'objet sélectionné, et non (nentsel), qui serait la fonction dont tu as besoin. Donc nativement parlant, la réponse est non, reste à déterminer si cela est possible par de la programmation. Mais pour cela, il nous faudrait plus de détails, comme par exemple : - Les informations sont-elles uniquement sous format de texte ? - Combien de champs doivent-être créés par fichier environ ? - ... Mais la première question qui me vient c'est "Existerait-il pas une alternative au problème ?", comme par exemple copier les informations en dur dans le fichier (via la commande _NCOPY) ou bien créer une liaison de données via un fichier Excel et ensuite récupérer les infos du tableau, ... ? Bref en fonction de la demande il peut y avoir plusieurs solutions, en identifiant correctement les contraintes (trop contraintes peuvent aussi entraîner à "pas de solutions !"). Bisous, Luna Citer
litelsousa Posté(e) le 29 juin 2021 Auteur Posté(e) le 29 juin 2021 il y a 14 minutes, Luna a dit : S'il s'agit uniquement de savoir s'il existe une valeur de champ permettant de récupérer la propriété d'un sous-objet d'une Xref, alors je dirais que non Eh bien c'est exactement ça. il y a 14 minutes, Luna a dit : Mais pour cela, il nous faudrait plus de détails C'est aussi mon soucis, les infos m'arrivent à tous petits pas… il y en a toujours des nouvelles. Je te remercie, je ferais ça autrement. Citer
didier Posté(e) le 29 juin 2021 Posté(e) le 29 juin 2021 Bonjour @Luna Ce que tu as écrit correspond tout à fait à la réponse que je m'apprêtais à envoyer. Reste à savoir si @litelsousa pense "programmation" ou pas (s'il n'est pas sur LT...) Attendons qu'il réponde... Amicalement Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD
litelsousa Posté(e) le 29 juin 2021 Auteur Posté(e) le 29 juin 2021 Alors non, je ne suis pas sur LT. Il me serait aussi tout à fait possible de partir d'une base excel avec les valeurs à mettre. je vais faire un modèle pour avoir quelque chose sous la main. Mais je ne sais pas si il serait judicieux que j'attende un peu, je ne voudrais pas que vous fassiez des choses inutiles... je reçois très souvent des nouvelles données Citer
litelsousa Posté(e) le 29 juin 2021 Auteur Posté(e) le 29 juin 2021 Tableau.xlsxDessin1.dwg Je mettrais donc le contenu de la colonne “valeur” dans les champs de mes ligne de repère. Citer
Curlygoth Posté(e) le 29 juin 2021 Posté(e) le 29 juin 2021 En VBA, je pense pouvoir le faire 😉 je laisse Didier s'occuper de toi et si besoin je reste dispo. Citer Mon site Web (en cours de construction) : Site DA-CODE de @didier
(gile) Posté(e) le 29 juin 2021 Posté(e) le 29 juin 2021 Il y a 6 heures, litelsousa a dit : Est-il possible de mettre un champ dans une ligne de repère pour mettre le texte provenant d'un autre fichier? Coller un texte provenant d'un fichier en xref dans une ligne de repère est possible et relativement facile avec un peu de programmation. Maintenir un lien dynamique (comme le fait un champ) entre le texte source et la ligne repère, c'est une autre paire de manches... Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 29 juin 2021 Posté(e) le 29 juin 2021 Un petit exemple en LISP (defun c:NREP (/ txt src str) (and (setq txt (car (nentsel "\nSélectionnez le texte source : "))) (setq src (cdr (assoc 0 (entget txt)))) (wcmatch src "*TEXT,ATT*") (setq str (getpropertyvalue txt (if (= src "MTEXT") "Contents" "TextString" ) ) ) (command "_mleader" "_options" "_content" "_mtext" "_max" 2 "_exit" pause pause str) ) (princ) ) Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
litelsousa Posté(e) le 1 juillet 2021 Auteur Posté(e) le 1 juillet 2021 Bonjour, Un peu en retard, absent hier... C'est un très bon début, par contre ça me met une nouvelle ligne de repère qui ne se met pas à jour quand je change le texte sur mon Xref. Un deuxième petit soucis, je ne peu prendre qu'un texte par sélection, mais il m'arrive d'avoir plusieurs champs dans un repère. Le 29/06/2021 à 18:11, (gile) a dit : Maintenir un lien dynamique (comme le fait un champ) entre le texte source et la ligne repère, c'est une autre paire de manches... C'est malheureusement exactement ce que je voudrais faire. Je pense que je vais partir avec toutes les planches sur le même fichier, ça me permettra d'utiliser simplement les champs de façon traditionnelle. Je vous remerci Citer
bonuscad Posté(e) le 1 juillet 2021 Posté(e) le 1 juillet 2021 Essaye peut être avec ceci, pas trop testé... (vl-load-com) (defun make_mlead (pt l_e / pt_lead d_lead o_lead arr l_str obj nw_obj) (initget 9) (setq pt_lead (getpoint pt "\nDonner l'orientation et la distance de la ligne de guidage: ") d_lead (distance pt pt_lead) o_lead (angle pt pt_lead) ptlst (append pt (polar pt o_lead d_lead)) arr (vlax-make-safearray vlax-vbdouble (cons 0 (- (length ptlst) 1))) l_str "" ) (while l_e (setq obj (vlax-ename->vla-object (car l_e)) l_str (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID obj)) ">%).TextString>%" "\\P" l_str ) l_e (cdr l_e) ) ) (vlax-safearray-fill arr ptlst) (setq nw_obj (vla-addMLeader Space (vlax-make-variant arr) 0)) (vla-put-contenttype nw_obj acMTextContent) (vla-put-textstring nw_obj (strcat "{\\fArial|b0|i0|c0|p34;" l_str "}" ) ) (vla-put-layer nw_obj (getvar "CLAYER")) (vla-put-ArrowheadSize nw_obj (* (getvar "TEXTSIZE") 0.5)) (vla-put-TextHeight nw_obj (getvar "TEXTSIZE")) (if (> (car (getvar "VIEWCTR")) (car pt_lead)) (progn (vla-SetDogLegDirection nw_obj 0 (vlax-3D-point '(-1.0 0.0 0.0))) (vla-put-TextJustify nw_obj acAttachmentPointMiddleRight) (vla-setLeaderLineVertices nw_obj 0 (vlax-make-variant arr)) ) (vla-put-TextJustify nw_obj acAttachmentPointMiddleLeft) ) (vla-update nw_obj) ) (defun c:nested_text2lead ( / htx rtx rtx0 ent lst_e AcDoc Space n ename pt) (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nDonner la hauteur du champ <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (if (not (setq rtx (getorient (getvar "VIEWCTR") "\nDonner l'orientation du champ <0.0>: "))) (setq rtx 0.0)) (setq rtx0 (+ (angle '(0 0 0) (getvar "UCSXDIR")) rtx)) (while (setq ent (car (nentsel "\nChoix d'un texte: "))) (if (member (cdr (assoc 0 (entget ent))) '("TEXT" "MTEXT" "ATTRIB")) (setq lst_e (cons ent lst_e)) ) ) (cond (lst_e (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-startundomark AcDoc) (initget 9) (setq pt (getpoint "\nPoint de départ de la ligne de rappel: ")) (make_mlead pt lst_e) (vla-regen AcDoc acactiveviewport) (vla-endundomark AcDoc) ) ) (prin1) ) Citer Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
litelsousa Posté(e) le 1 juillet 2021 Auteur Posté(e) le 1 juillet 2021 Un pas de géant!!! Le petit soucis, c'est que ça ne me met pas le texte à jour quand je le modifie dans le fichier de base. Citer
bonuscad Posté(e) le 1 juillet 2021 Posté(e) le 1 juillet 2021 Citation Le petit soucis, c'est que ça ne me met pas le texte à jour quand je le modifie dans le fichier de base. En effet, ce qui prouve que je n'avais pas trop testé...😕 Je pense que dès qu'une XRef est rechargée dans le dessin le nom de l'entité xref change et on perd les petits! Peut être qu'avec le "Handle" de l'xref on pourrait retrouvé celui-ci, mais il faudrait stocké celui-ci quelque part et écrire une procédure spéciale pour mettre à jours ces champs imbriqués. J'avoue que cela devient compliqué, le jeu en vaut-il la chandelle? Et pas sur que ça fonctionne au final. Citer Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
litelsousa Posté(e) le 1 juillet 2021 Auteur Posté(e) le 1 juillet 2021 il y a 5 minutes, bonuscad a dit : J'avoue que cela devient compliqué, le jeu en vaut-il la chandelle? En effet, si cela devient compliqué, il y a toujours la solution de mettre tous les chapitres sur le même fichiers. Citer
Messages recommandés