Aller au contenu

Convertir Xref en bloc Spécial


KSJ77

Messages recommandés

Bonjour,

Lorsqu'un xref est présent plusieurs fois dans l'espace objet est-il possible de convertir l'un d'entre eux en bloc

 

Je m'explique, sur un plan j'ai X chambres identiques dont chacune renvoi à un même Xref.

 

Problème, je ne trouve pas la solution pour modifier une chambre spécifique (peut-être via un lisp), sachant que je ne veux pas passer par le gestionnaire de référence car cela va me transformer toute les chambres en bloc.

 

Existe t-il un lisp inverse de "blocktoxref"?

 

Merci d'avance pour votre aide :)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Tu peux aussi renommer dans la liste des Xref ton Xref de la chambre en "chambre courante"

Ensuite tu réinsères ta chambre en xref en lui donnant un nom "chambre spécifique".

Tu as ainsi 2 instances différentes d'un même fichier en xref.

Pour finir "Casse" ton xref spécifique en l'insérant par le gestionnaire d'xref.

Tu as donc pour finir tes chambres en Xef et un bloc de chambre que tu peux modifié.

 

C'est pas les solutions qui manquent.

Autodesk Expert Elite Member

Lien vers le commentaire
Partager sur d’autres sites

Merci pour vos suggestions :)

 

J'ai quand même cherché une solution lisp et j'en ai trouvé un que j'ai légèrement modifié afin de l'adapter à mes besoins

Voici le code

(defun c:Xref2Block (/ ActDoc BlkCol LayCol Sel EntData BlkName BlkRefObj LayList NewBlk FullPath dbxApp ObjList Message NewBlkName)

(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(setq BlkCol (vla-get-Blocks ActDoc))
(setq LayCol (vla-get-Layers ActDoc))
(setq Message "\n Enter block name: ")
(if
(and
  (while
  (or
   (not NewBlkName)
   (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-Item (list BlkCol NewBlkName))))
  )
  (not (while (= (setq NewBlkName (getstring T Message)) "")))
  (setq Message "\n Block name already exist, please type another: ")
 )
 (setq Sel (entsel "\n Select Xref to turn into block: "))
 (setq EntData (entget (car Sel)))
 (= (cdr (assoc 0 EntData)) "INSERT")
 (setq BlkName (cdr (assoc 2 EntData)))
 (setq BlkRefObj (vla-item BlkCol BlkName))
 (= (vla-get-IsXref BlkRefObj) :vlax-true)
)
(progn
 (vlax-for i LayCol
  (if
   (and
    (wcmatch (setq LayName (vla-get-Name i)) (strcat BlkName "|*"))
    (= (vla-get-LayerOn i) :vlax-true)
    (= (vla-get-Freeze i) :vlax-false)
   )
   (setq LayList (cons (substr LayName (+ 2 (strlen BlkName))) LayList))
  )
 )
 (setq NewBlk (vla-Add BlkCol (vla-get-Origin BlkRefObj) (strcat NewBlkName)))
 (if (setq FullPath (findfile (vla-get-Path (vlax-ename->vla-object (car Sel)))))
  (progn
   (setq dbxApp
    (if (< (atoi (setq oVer (substr (getvar "acadver") 1 2))) 16)
     (vla-GetInterfaceObject (vlax-get-acad-object) "ObjectDBX.AxDbDocument")
     (vla-GetInterfaceObject (vlax-get-acad-object) (strcat "ObjectDBX.AxDbDocument." oVer))
    )
   )
   (vla-Open dbxApp FullPath)
   (vlax-for i (vla-get-ModelSpace dbxApp)
    (if (vl-position (vla-get-Layer i) LayList)
     (setq ObjList (cons i ObjList))
    )
   )
   (vlax-invoke dbxApp 'CopyObjects ObjList NewBlk)
   (prompt (strcat "\n New block created name \"" NewBlkName "\"."))
  )
  (progn
   (prompt "\n Can not find darwing to open.")
   (vla-Delete NewBlk)
  )
 )
 (vlax-release-object dbxApp)
 (setq dbxApp nil)
)
)
 (command "_erase" Sel "" "")
 (command "-inserer" NewBlkName (getpoint) 1 1 0 )
(princ)
)

 

Il faut maintenant que je cherche à rajouter une alerte ou un filtre car lorsque l'on sélectionne autre chose qu'une Xref cela provoque une erreur (sélection d'un bloc par exemple).

Lien vers le commentaire
Partager sur d’autres sites

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é