kisscool73 Posté(e) le 2 janvier 2007 Posté(e) le 2 janvier 2007 salut et bonne année 2007je debute en vba et deja bloquéje voudrais changer de calque un type d'entité parmis d'autre qui sont dansun block a partir d'une selection a l'ecran-mon probleme c'est que je n'arrive pas a acceder aux objet qui sont dans mon blocligne,cercle,... Sub CommandButton1_Click()Dim gui As AcadEntityDim guiBlock As AcadBlockReferenceDim gui2 As AcadEntityOn Error Resume NextThisDrawing.SelectionSets("SelectionConv").DeleteSet Sset = ThisDrawing.SelectionSets.Add("SelectionConv")Sset.SelectOnScreenFor Each gui In SsetIf gui.ObjectName = "AcDbBlockReference" ThenFor Each gui2 In guiIf gui2.ObjectName = "AcDbLine" Thengui2.Layer = "NEW CALQUE"End IfNextEnd IfNextEnd Sub
Patrick_35 Posté(e) le 2 janvier 2007 Posté(e) le 2 janvier 2007 Salut Extrait de l'aide Sub Example_GetSubEntity() ' This example prompts the user to select on object on the screen with a mouse click, ' and returns some information about the selected object. Dim Object As Object Dim PickedPoint As Variant, TransMatrix As Variant, ContextData As Variant Dim HasContextData As String On Error GoTo NOT_ENTITY TRYAGAIN: MsgBox "Use the mouse to click on an object in the current drawing after dismissing this dialog box." ' Get information about selected object ThisDrawing.Utility.GetSubEntity Object, PickedPoint, TransMatrix, ContextData ' Process and display selected object properties HasContextData = IIf(VarType(ContextData) = vbEmpty, " does not ", " does ") MsgBox "The object you chose was an: " & TypeName(Object) & vbCrLf & _ "Your point of selection was: " & PickedPoint(0) & ", " & _ PickedPoint(1) & ", " & _ PickedPoint(2) & vbCrLf & _ "This object" & HasContextData & "have nested objects." Exit Sub NOT_ENTITY: ' If you click on empty space or do not select an entity, ' this error will be generated If MsgBox("You have not selected an object. Click OK to try again.", _ vbOKCancel & vbInformation) = vbOK Then Resume TRYAGAIN End IfEnd Sub @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
kisscool73 Posté(e) le 2 janvier 2007 Auteur Posté(e) le 2 janvier 2007 merci ca m'aide un peumais ca marche pasce que je voudrais c'est lister toutes les entitées d'un blocen le selectionnant puis changer de calque tel ou tel type d'entitée
Patrick_35 Posté(e) le 2 janvier 2007 Posté(e) le 2 janvier 2007 SalutJe peux te pondre un lisp/vlisp pour ça mais pas un vba ;)Regarde du cote de la table AcadBlocks. En la parcourant, tu retrouveras les entités qui composent un bloc @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
kisscool73 Posté(e) le 2 janvier 2007 Auteur Posté(e) le 2 janvier 2007 je ne connait pas le lisp/vlispmais balance qu'en memeje jetterai un coup d'oeil
Patrick_35 Posté(e) le 2 janvier 2007 Posté(e) le 2 janvier 2007 Voila, voila (setq bls (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))) ; Je pointe sur la table des blocs (setq bl (vla-item bls "Un_bloc")) ; Je pointe sur le bloc "Un_bloc" de la table (vlax-for ent bl ; je parcours les entités qui composent le bloc (vlax-dump-object ent) ; j'affiche les caractéristiques des entitée ) (vla-get-count bl) ; histoire de donner le nombre d'entités qui composent le bloc @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
winfield Posté(e) le 3 janvier 2007 Posté(e) le 3 janvier 2007 Bonne année ! Merci Patrick_35 .........je dis ça comme ça mais bon..... Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
azrael Posté(e) le 29 janvier 2007 Posté(e) le 29 janvier 2007 salut kisscool73, As-tu trouvé une solution en VB ? Moi auss jecherche justement un moyen de remettre certains blocs en Bylayer (à l'origine) afin d'éviter de me trouver avec des layeurs qui n'existent que dans les blocs. Bon courage !
kisscool73 Posté(e) le 31 janvier 2007 Auteur Posté(e) le 31 janvier 2007 Voila la solution que j'ai trouvè Sub calques()ThisDrawing.SelectionSets("Selection1").DeleteSet Sset = ThisDrawing.SelectionSets.Add("Selection1")Sset.SelectOnScreenDim gui As AcadEntityDim guiBlock As AcadBlockDim guiname As StringDim gui2 As AcadEntityFor Each gui In SsetIf gui.ObjectName = "AcDbBlockReference" Thenguiname = gui.NameSet guiBlock = ThisDrawing.Blocks(guiname)For Each gui2 In guiBlock'dans cette selection je ne prend que les lignesIf gui2.ObjectName = "AcDbLine" Thengui2.Layer = ListBox1.Value 'ou gui2.Layer= ce qu'on veutEnd IfNextEnd IfNext voila j'esper que ca pourras t'aideret si qq1 a une autre methode?bienvenuEnd Sub
sechanbask Posté(e) le 20 mai 2007 Posté(e) le 20 mai 2007 Voir le lisp de (gile) edit_bloc... ça marche du tonnerre surtout la version 3.0. Je m'en sers pour nettoyer les plan lourds... ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
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