Bonjour Gile,
Merci de ta réponse si rapide.
Je suis tout à fait d'accord sur le fait que je n'ai pas tout à fait compris la notion de block reference et c'est d'ailleurs pour cette raison que je solicite votre aide.
J' ai lu plusieurs de vos tutoriaux et j'avoue que cela m'a permis d'avancer sur pas mal de point.
Je vais essayer de vous expliquer mon problème en français :
1 - J'ai besoin d'exploser un block qui est inséré dans mon desssin (dans mon model_space) , jusqu'ici ça va
2 - mais ce block contient plusieurs solides qui ont des layers différents et pour cela, je voudrais pouvoir leur (solides) attribuer le même layer que celui du block d'origine.
voici le code
1 -
Public Sub ExplodeBlockOfSameLayerInModelSpace()
Dim zDlg As Form_EBL = New Form_EBL()
Dim zResult As System.Windows.Forms.DialogResult = AcadAp.ShowModalDialog(zDlg)
Dim zDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim zDb As Database = zDoc.Database
Dim zEd As Editor = zDoc.Editor
If zResult = Windows.Forms.DialogResult.OK Then
Dim i As Integer = 0
Using zTrans As Transaction = zDb.TransactionManager.StartTransaction()
Dim zBlkTbl As BlockTable = zTrans.GetObject(zDb.BlockTableId, OpenMode.ForRead)
Dim zBlkTblRec As BlockTableRecord = zTrans.GetObject(zBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForRead)
Dim zBlkCl As RXClass = RXClass.GetClass(GetType(BlockReference))
For Each zBlkTblRecId As ObjectId In zBlkTblRec
Try
If zBlkTblRecId.ObjectClass = zBlkCl Then
Dim zBlkRef As BlockReference = TryCast(zTrans.GetObject(zBlkTblRecId, OpenMode.ForWrite, False), BlockReference)
If zBlkRef.Layer = zDlg.LstLayer.SelectedItem Then
zEd.WriteMessage(String.Format(vbLf + "Block : {0} -- Id : {1} -- Layer : {2}", zBlkRef.Name, zBlkTblRecId, zBlkRef.Layer))
zBlkRef.ExplodeToOwnerSpace()
zBlkRef.Erase(True)
i = i + 1
End If
End If
Catch ex As SystemException
zEd.WriteMessage(vbLf + "Problème rencontré : ", ex.Message())
End Try
Next
zEd.WriteMessage(String.Format(vbLf + "Total des blocs exploxés : {0} ", i))
zTrans.Commit()
End Using
Else
zEd.WriteMessage(vbLf + "Opération annulée par l'utulisateur.")
End If
En fait un formulaire s'affiche avec la liste de layers spécifiques de blocs que je veux exploser. Une fois les blocs explosés, je voudrais le layer des solides qui composent celui-ci soient le même que le layer du bloc.
J'ai besoin des solides pour une autre utilité.
J'espère avoir été suffisament clair dans les détails.
Merci d'avance...