Aller au contenu

Champ avec valeur provenant d'une Xref


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)
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.

Posté(e)

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

Posté(e)
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...

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

Posté(e)

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)
)

 

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

Posté(e)

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

Posté(e)

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)
)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)
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.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)
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.

 

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é