Vba autocad,changer la mesure d'un block dynamique

Signaler
Messages postés
13
Date d'inscription
lundi 4 décembre 2000
Statut
Membre
Dernière intervention
25 février 2012
-
Messages postés
2
Date d'inscription
dimanche 5 septembre 2010
Statut
Membre
Dernière intervention
25 mai 2011
-
bonjour,
voila,je voudrais savoir comment changer la mesure d un block dynamique.
ex:1 carre avec une distance parametree appele "distance1".

deja merci

2 réponses

Messages postés
2
Date d'inscription
dimanche 5 septembre 2010
Statut
Membre
Dernière intervention
25 mai 2011

Bonjour,

Je suis également à la recherche de cette information. Je peux accéder aux paramètre classiques en VBA avec la méthode GetAttributes, mais cette dernière ne renvoi que les paramètres statiques (rien trouvé dans le doc ou le net, aucune méthode get ne correspond). J'ai également cherché sur les poignées / paramètre linéaires, choses liées au dynamisme, sans résultat.

Une solution ?

Merci d'avance :)
Messages postés
2
Date d'inscription
dimanche 5 septembre 2010
Statut
Membre
Dernière intervention
25 mai 2011

Pour ceux qui cherchent : j'ai trouvé

Voici un code à adapter selon les besoins (mon code édite les dimensions d'une menuiserie)

Function editAcad(nomMenuiserie As String, largeurHorsTout As Double, hauteurHorsTout As Double, chantier As String)

    Dim sSMenuiserie As AcadSelectionSet
    Dim objBloc As AcadBlockReference
    Dim objAttribut
    Dim objAttributs As Variant
    Dim i As Integer
    

    Dim sSMenuiserieNom As String
    sSMenuiserieNom = nomMenuiserie
    
    'Recherché si la sélection existe
    For Each sSMenuiserie In ThisDrawing.SelectionSets
    If sSMenuiserie.Name = sSMenuiserieNom Then
        sSMenuiserie.Delete
        Exit For
    End If
    Next sSMenuiserie
    
    'Création de la selection
    Set sSMenuiserie = ThisDrawing.SelectionSets.Add(sSMenuiserieNom)
    
    
    'Selection de la Menuiserie
    sSMenuiserie.Select acSelectionSetAll
    
    'Test de la sélection
    If sSMenuiserie.Count > 0 Then
        For Each objBloc In sSMenuiserie 'Parcourir tous les blocs de la sélection
            If objBloc.IsDynamicBlock Then
                objAttributs = objBloc.GetDynamicBlockProperties 'ATTRIBUTS DYNAMIQUES DU BLOC
                'On Error Resume Next
                For i = LBound(objAttributs) To UBound(objAttributs) ' parcours des att, comme For Each, mais avec 'iterateur'
                    'MsgBox objAttributs(i).Value
                    If UCase(objAttributs(i).PropertyName) = UCase("Etat d'inversion1") Then
                        objAttributs(i).Value = 1 'index de la liste : 2eme élément de la liste : "inversé"
                    End If
                    If UCase(objAttributs(i).PropertyName) = UCase("LARGEUR_HORS_TOUT") Then
                        objAttributs(i).Value = largeurHorsTout
                    End If
                Next i 'end for
            End If
        
            If objBloc.HasAttributes Then 'vérifier si le bloc à des attributs
                objAttributs = objBloc.GetAttributes 'ATTRIBUTS NORMAUX DU BLOC
                    'MsgBox objAttributs
                    For Each objAttribut In objAttributs
                    'MsgBox objAttribut.TagString
                        If UCase("CHANTIER") = UCase(objAttribut.TagString) Then
                            MsgBox objAttribut.TagString & " = " & objAttribut.TextString
                            objAttribut.TextString = chantier
                        End If
                    Next objAttribut
                    Exit For
            End If
        Next objBloc
    End If

End Function



L'appel :
editAcad "PF_S_2VT", 1111#, 2222#, "chantier01"