sam-123 Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 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 travailPour les Entity pas de problèmesPour les blocks simples non plusMais une fois qu’il y a un Block dans un autre (un Block qui en contient un autre) la ca pose problèmeJe 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
(gile) Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant