Makro do wybierania położenia ramki na rysunku

Cze wszystkim

Obecnie tworzę przyciski makr do wstawiania bloków w tło rysunku.

Jak na razie nic skomplikowanego, mam kod, który działa bardzo dobrze:

Ustaw swApp = _
Aplikacja.SldWorks

Ustaw część = swApp.ActiveDoc
Part.EditTemplate (Szablon części)
Part.EditSketch
Dim myBlockDefinition As Obiekt
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromFile(Nothing, "D:\_MAIA\1_MODELES\4_BLOCS-BUFFERS\Tol ISO2768 - EN22768 - mK.SLDBLK", False, 1, 0)
Part.EditSheet (Arkusz edycji)
Part.EditSketch
Koniec subwoofera

 

Mój problem dotyczy położenia bloku na rysunku, chciałbym mieć możliwość predefiniowania pozycji w moim kodzie (w X i Y).

Obecnie, gdy uruchamiam makro, blok mieści się w lewym dolnym rogu rysunku.

Próbowałem wielu rzeczy, ale bez powodzenia.

Jeśli ktoś wie coś o VBA to jestem zainteresowany ;-)

Z góry dzięki,

Pozdrowienia.

 

1 polubienie

Witam

W rzeczywistości pierwszym argumentem metody MakeSketchBlockFromFile jest pozycja!

W twoim przykładzie umieściłeś "nic", więc myślę, że domyślnie mieści się w punkcie kontrolnym twojego rysunku.

Masz więc dwa rozwiązania: zmień punkt kontrolny swoich szablonów rysunków lub zmodyfikuj to nic, aby wybrać punkt w następujący sposób:

Punkt wstawiania
Punkt wstawienia, który musi być punktem 2D o wartości z = 0,0 dla definicji bloku
 

Odpowiednia strona: 

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

3 polubienia

Przede wszystkim dziękuję za pomoc.

Nie chcę dotykać moich modeli

Nie wiem jednak, jak przepisać tę nową linię do mojego kodu.

 Do czego powróci? Gdzie powinienem go umieścić?

Czy w X i Y są współrzędne?

Z góry dziękuję

1 polubienie

Więc zanim wstawisz swój blok, będziesz musiał utworzyć i nazwać swój punkt wstawiania, którego będziesz używać zamiast swojego "nic", zobacz ten link, aby utworzyć punkt:

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

Więcej szczegółów do utworzenia punktu:

 'Utwórz nowy MathPoint na podstawie danych punktu szkicu.

    'MathP odnosi się do położenia punktu we współrzędnych szkicu

    Ustaw MathP = MathUtil.CreatePoint(Współrzędne punktu)

    'Wyświetlanie współrzędnych punktu w odniesieniu do początku układu współrzędnych szkicu

    SketchPoints = Dane 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 polubienia

Przyznaję się, że jestem zagubiony...

Oto, co zrobiłem, ale bez żadnych rezultatów:

 

Ustaw swApp = _
Aplikacja.SldWorks

Ustaw część = swApp.ActiveDoc
Part.EditTemplate (Szablon części)
Part.EditSketch

Ustaw MathP = MathUtil.CreatePoint(Współrzędne punktu)
SketchPoints = MathP.ArrayData

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


Dim myBlockDefinition As Obiekt
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromFile(Nothing, "D:\_MAIA\1_MODELES\4_BLOCS-BUFFERS\Tol ISO2768 - EN22768 - mK.SLDBLK", False, 1, 0)
Part.EditSheet (Arkusz edycji)
Part.EditSketch
Part.ClearSelection2 Prawda
Koniec subwoofera

W Twojej linii:

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

 

Nadal używasz Nothing

Jak już mówiłem, musimy zastąpić to punktem wstawiania!

A w Twojej linii:

SketchPoints = MathP.ArrayData

Nie podałeś współrzędnych.

 

Czy znasz się na programowaniu w języku vba?

1 polubienie

Być może istnieje bardziej wymowny przykład, który może Ci w tym pomóc:

'NOWE BLOKI: Utwórz definicję bloku

    Ustaw swSketchBlockDef = swSketchMgr.MakeSketchBlockFromSelected(Nothing)

    '

    ' Definiowanie punktu wstawienia

    nPt(0) = 60# / 1000#

    nPt(1) = -60# / 1000#

    nPt(2) = 0#

    vPt = nPt

    Ustaw swMathPoint = swMathUtil.CreatePoint(vPt)

    '

    ' Wstawianie wystąpienia definicji bloku

    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 polubienie

Na koniec zmieniłem punkty kotwiczenia bloków.

Merici  PL

1 polubienie