Aller au contenu

Entity dans un Block


Messages recommandés

Bonjour a tous,

Voila je vais essayer d’être claire (ce n’est pas souvent le cas !).

Voila quand j’attache les plans en references je mets tous le contenu en Layer « 0 » et le reste en « ByLayer » pour qu’il puisse prendre les propriétés de mon layer d’accueille (jusque la je ne vous apprends rien)

Et pour me facilite la tache j’ai commencé une procédure qui (j’espérais) ferais le travail

Pour les Entity pas de problèmes

Pour les blocks simples non plus

Mais une fois qu’il y a un Block dans un autre (un Block qui en contient un autre) la ca pose problème

Je pensait y accédais par « GetSubentity » mais ca bloque pour la énième fois.

Si quelqu’un peux m’aider

Ci-dessous la procédure :

 _
   Public Sub BlockEntity()
       Dim MyDWG As Autodesk.AutoCAD.ApplicationServices.Document
       MyDWG = Application.DocumentManager.MdiActiveDocument
       Dim MyDb As Autodesk.AutoCAD.DatabaseServices.Database
       MyDb = MyDWG.Database
       Dim MySel As Autodesk.AutoCAD.EditorInput.PromptSelectionResult
       Dim MySelObj As Autodesk.AutoCAD.EditorInput.SelectedObject
       Dim FirstEnt As Autodesk.AutoCAD.DatabaseServices.Entity
       Dim Cnt As Long
       MySel = MyDWG.Editor.GetSelection()
       If IsNothing(MySel.Value) = False Then
           Using LockDoc As DocumentLock = MyDWG.LockDocument()
               Using MyTrans As Transaction = MyDb.TransactionManager.StartTransaction
                   For Cnt = 1 To MySel.Value.Count
                       MySelObj = MySel.Value.Item(Cnt - 1)
                       FirstEnt = MySelObj.ObjectId.GetObject(Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite)
                

Ici je veux accédais aux entités du block

        
 If TypeOf FirstEnt Is BlockReference Then
                           For Each Entity In MySelObj.GetSubentities
                               FirstEnt.UpgradeOpen()
                               FirstEnt.Layer = "0"
                               FirstEnt.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.ByAci, 256)
                               FirstEnt.Linetype = "byLayer"
                           Next
                          

mais ça ne fonctionne pas

                       Else
                           FirstEnt.UpgradeOpen()
                           FirstEnt.Layer = "0"
                           FirstEnt.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.ByAci, 256)
                           FirstEnt.Linetype = "byLayer"
                       End If
                   Next
                   MyTrans.Commit()
                   MyTrans.Dispose()
               End Using
           End Using
       End If
   End Sub 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Il faut bien comprendre la différence entre une définition de bloc (BlockTableRecord) et une référence de bloc (BlockReference).

 

Une définition de bloc est une collection d'entités. Par exemple, l'espace objet (ModelSpace) est un objet de type BlockTableRecord au même titre qu'une définition de bloc (quand on insère "toto.dwg" dans l'espace objet, en fait on insère le BlockTableRecord ModelSpace du fichier "toto.dwg").

 

Une référence de bloc est une insertion d'un objet BlockTableRecord dans un autre BlockTableRecord (l'espace objet, un espace papier ou une définition de bloc pour faire un bloc imbriqué).

 

On ne peut pas atteindre les composants d'une référence de bloc (excepté les attributs), à ce niveau l'entité est de type BlockReference.

 

Pour modifier les composants d'un bloc, il faut modifier les entités contenues dans la définition du bloc.

Il suffit donc de parcourir la table des blocs (BlockTable) et pour chaque BlockTableRecord le parcourir pour modifier chacun de ses composants (les blocs imbriqués sont aussi contenus dans la table des blocs et seront aussi traités).

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

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é