Makro zum Auswählen der Position eines Rahmens in einer Zeichnung

Hallo ihr alle

Ich erstelle gerade Makroschaltflächen, um Blöcke in den Hintergrund einer Zeichnung einzufügen.

Bisher nichts Kompliziertes, ich habe einen Code, der sehr gut funktioniert:

swApp = _ setzen
Anwendung.SldWorks

Set Part = swApp.ActiveDoc
Part.EditTemplate
Part.EditSketch
myBlockDefinition als Objekt dimmen
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromFile(Nichts, "D:\_MAIA\1_MODELES\4_BLOCS-BUFFERS\Tol ISO2768 - EN22768 - mK.SLDBLK", False, 1, 0)
Part.EditSheet
Part.EditSketch
Ende Sub

 

Mein Problem betrifft die Position des Blocks auf der Zeichnung, ich möchte in der Lage sein, eine Position in meinem Code (in X und Y) vorzudefinieren.

Wenn ich derzeit das Makro starte, passt der Block in die untere linke Ecke der Zeichnung.

Ich habe viele Dinge ausprobiert, aber ohne Erfolg.

Wenn jemand etwas über VBA weiß, bin ich interessiert ;-)

Danke im Voraus,

Herzliche Grüße.

 

1 „Gefällt mir“

Hallo

Tatsächlich ist das erste Argument Ihrer MakeSketchBlockFromFile-Methode die Position!

In Ihrem Beispiel haben Sie "nichts" eingefügt, sodass ich denke, dass es standardmäßig an den Ankerpunkt Ihrer Zeichnung passt.

Sie haben also zwei Lösungen: Ändern Sie den Ankerpunkt Ihrer Zeichnungsvorlagen oder ändern Sie dieses Nichts, um Ihren Punkt wie folgt auszuwählen:

Punkt einfügen
Einfügepunkt, bei dem es sich um einen 2D-Punkt mit z = 0,0 handeln muss, für die Blockdefinition
 

Die entsprechende Seite: 

http://help.solidworks.com/2012/English/api/sldworksapi/SolidWorks.interop.sldworks~SolidWorks.interop.sldworks.ISketchManager~MakeSketchBLockFromFile.html

3 „Gefällt mir“

Zunächst einmal vielen Dank für Ihre Hilfe.

Ich möchte meine Modelle nicht anfassen

Ich weiß jedoch nicht, wie ich diese neue Zeile in meinen Code transkribieren soll.

 Wohin wird es zurückkehren? Wo soll ich es ablegen?

Gibt es Koordinaten in X und Y?

Vielen Dank im Voraus

1 „Gefällt mir“

Bevor Sie also Ihren Block einfügen, müssen Sie Ihren Einfügepunkt erstellen und benennen, den Sie anstelle Ihres "Nichts" verwenden werden, siehe diesen Link, um den Punkt zu erstellen:

http://help.solidworks.com/2012/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IMathPoint.html

Weitere Details, um den Punkt zu erstellen:

 'Erstellen Sie den neuen MathPoint aus den Skizzenpunktdaten.

    "MathP bezieht sich auf die Punktposition in den Skizzenkoordinaten

    Set MathP = MathUtil.CreatePoint(PointCoords)

    'Zeigen Sie die Punktkoordinaten in Bezug auf den Ursprung der Skizze an

    SketchPoints = MathP.ArrayData

    MsgBox SketchPoints(0) & ", " & SketchPoints(1) & ", " & SketchPoints(2)

http://help.solidworks.com/2012/English/api/sldworksapi/Transform_Sketch_to_Model_Example_VB.htm

 

2 „Gefällt mir“

Ich gebe zu, dass ich mich verlaufen habe...

Hier ist, was ich getan habe, aber ohne Ergebnisse:

 

swApp = _ setzen
Anwendung.SldWorks

Set Part = swApp.ActiveDoc
Part.EditTemplate
Part.EditSketch

Set MathP = MathUtil.CreatePoint(PointCoords)
SketchPoints = MathP.ArrayData

    MsgBox SketchPoints(0) & "5.0" & SketchPoints(1) & "5.0" & SketchPoints(2)


myBlockDefinition als Objekt dimmen
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromFile(Nichts, "D:\_MAIA\1_MODELES\4_BLOCS-BUFFERS\Tol ISO2768 - EN22768 - mK.SLDBLK", False, 1, 0)
Part.EditSheet
Part.EditSketch
Part.ClearSelection2 Wahr
Ende Sub

In Ihrer Zeile:

Part.SketchManager.MakeSketchBlockFromFile(Nichts, "D:\_MAIA\1_MODELES\4_BLOCS-BUFFERS\Tol ISO2768 - EN22768 - mK.SLDBLK", False, 1, 0)

 

Sie verwenden immer noch Nothing

Wie ich Ihnen schon sagte, müssen wir dies durch einen Einfügepunkt ersetzen!

Und in Ihrer Zeile:

SketchPoints = MathP.ArrayData

Sie haben die Koordinaten nicht eingetragen.

 

Kennen Sie sich mit VBA-Programmierung aus?

1 „Gefällt mir“

Hier gibt es vielleicht ein aussagekräftigeres Beispiel, das Ihnen helfen kann:

'NEUE BLÖCKE: Blockdefinition erstellen

    Set swSketchBlockDef = swSketchMgr.MakeSketchBlockFromSelected(Nichts)

    "

    ' Definieren einer Einfügemarke

    nPt(0) = 60# / 1000#

    nPt(1) = -60# / 1000#

    nPt(2) = 0#

    vPt = nPt

    Set swMathPoint = swMathUtil.CreatePoint(vPt)

    "

    ' Einfügen einer Instanz der Blockdefinition

    Set swBlockInst = swSketchMgr.InsertSketchBlockInstance(swSketchBlockDef, swMathPoint, 1, 0)

http://help.solidworks.com/2013/English/api/sldworksapi/Create_Block_Definition_and_Insert_Block_Instance_Example_VB.htm

1 „Gefällt mir“

Zum Schluss habe ich noch die Ankerpunkte der Blöcke geändert.

Merici  PL

1 „Gefällt mir“

Hallo Bec2

Wie haben Sie die Verankerung dieser Systeme verändert?

Weil ich nicht allzu viel über VBA weiß und im Moment daran herumgebastelt habe, dass mein Block kommt, aber er platziert sich nicht an der richtigen Stelle.

Hallo und willkommen @sebastien_higaxo5742 .

Hier ist ein VBA-Makro, um einen Block durch Auswahl seiner Koordinatenpunkte einzufügen:

Dim swApp As Object
Dim swModel As Object
Dim swDrawing As Object
Dim swSheet As Object
Dim swBlockDef As Object
Dim swBlockIns As Object

Sub InsertBlockAtPoint()

    ' Se connecter à l'application SolidWorks
    Set swApp = Application.SldWorks

    ' Obtenir le document actif (supposé être un dessin)
    Set swModel = swApp.ActiveDoc
    If swModel Is Nothing Then
        MsgBox "Veuillez ouvrir un document de dessin."
        Exit Sub
    End If

    ' Vérifier si le document actif est un dessin
    If swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
        MsgBox "Le document actif n'est pas un dessin."
        Exit Sub
    End If

    Set swDrawing = swModel

    ' Obtenir la feuille active
    Set swSheet = swDrawing.GetCurrentSheet

    ' Spécifier le chemin vers la définition du bloc
    Dim blockPath As String
    blockPath = "C:\Chemin\Vers\Votre\Bloc.sldblk" ' Changez ceci par le chemin de votre bloc

    ' Charger la définition du bloc
    Set swBlockDef = swDrawing.LoadBlockDefinition(blockPath)

    If swBlockDef Is Nothing Then
        MsgBox "Échec du chargement de la définition du bloc."
        Exit Sub
    End If

    ' Définir les coordonnées du point d'insertion
    Dim insertPoint(2) As Double
    insertPoint(0) = 0.1 ' Coordonnée X en mètres
    insertPoint(1) = 0.1 ' Coordonnée Y en mètres
    insertPoint(2) = 0    ' Coordonnée Z (généralement 0 pour les dessins 2D)

    ' Insérer le bloc au point spécifié
    Set swBlockIns = swSheet.InsertBlock(swBlockDef, insertPoint)

    If swBlockIns Is Nothing Then
        MsgBox "Échec de l'insertion du bloc."
    Else
        MsgBox "Bloc inséré avec succès."
    End If

End Sub

Dann noch ein paar Bemerkungen für Ihre nächsten Anfragen:

Vermeiden Sie es, in Zukunft Resolute-Jobs für 2016 auszugraben... Vor allem, wenn einer der Mitwirkenden in letzter Zeit nicht veröffentlicht hat.

image

1 „Gefällt mir“