Jak pobrać aktywną skalę arkusza?

Witam

Pomimo moich różnych poszukiwań na forum i w internecie nie mogę znaleźć tego, czego szukam... Stąd moje pytanie

Celem mojego makra jest zapisanie rysunku Solidworks w kilku formatach do archiwizacji, a w szczególności w formacie DXF do cięcia laserowego.

Aby upewnić się, że mój DXF jest dobry, chciałbym się upewnić, że skala wynosi 1:1. Jak to zrobić?

Wymyśliłem, jak zmienić skalę, ale chciałbym ostrzec użytkownika, że jego skala musi zostać zmieniona, aby uniknąć błędów.

Mówiąc dokładniej, chciałbym zrobić test w stylu: jeśli skala = 1:1 to kontynuuj lub zatrzymaj

Dziękuję za pomoc! Programowanie VBA pod solidwokami nadal nie jest zbyt czytelne...

Dobry wieczór

Zazwyczaj wyszukując swView. ScaleRatio w interfejsie API pomaga zaspokoić potrzebę.

Witam

Jeśli generujesz DXF z 3D, zawsze wychodzi on w skali 1, a jeśli wyjmiesz swój DXF z MEP , skala jest czasami pomieszana...

W przeciwnym razie mamy świetne uzupełnienie do wyprowadzania plików jako plików do cięcia laserowego:

https://www.youtube.com/watch?v=q9CZfkYpyE0

http://www.topsworks.de/en/why-topsworks/topsworks-and-solidworks/

http://solidworks.fr/sw/products/details.htm?productid=4329

2 polubienia

Witam

Oto makro, które działa płynnie. Działa w 3D i zawsze generuje DXF w skali 1:1

Używany codziennie u nas i nie ma problemu.

Klasa A++

 


saveas_dxf.swp
3 polubienia

Witam

Trzeba wtedy podnieść skalę, jeśli jest inna od 1:1, to zatrzymać się w C# wygląda to tak:

            ModelDoc2 swDoc = (ModelDoc2)Program.swapp. ActiveDoc;
            DrawingDoc swDraw;
            Arkusz swSheet;
            swDraw = ((DrawingDoc)(swDoc));
            swSheet = (Arkusz)swDraw. GetCurrentSheet();
            obiekt vSheetProps = null;
            double PaperSize = 0;
            double TemplateIn = 0;
            podwójna skala1 = 0;
            podwójna skala2 = 0;
            double FirstAngle = 0;
            podwójna szerokość = 0;
            podwójna wysokość = 0;

            vSheetProps = swSheet. GetProperties();
            double[] formatProp = (double[])vSheetProps;
            
            PaperSize = System. Matematyka. Round(formatProp[0]);
            TemplateIn = formatProp[1];
            Skala1 = formatProp[2];
            Scale2 = formatProp[3];
            FirstAngle = formatProp[4];
            szerokość = formatProp[5];
            wysokość = formatProp[6];
            
            if ((int)Scale1 != 1 | Panie przewodniczący, panie i panowie!Skala2 != 1)
            {
                wrócić;
            }

Wszystko, co pozostało do zrobienia, to przetłumaczenie go na VBA, język, którego nie opanowuję, więc pozwolę Ci to zrobić.

Pozdrowienia

Witam

 

Biorąc fragmenty odpowiedzi z każdego z Waszych komentarzy, udało mi się rozwiązać mój problem i dziękuję!

 

Odpowiednia część côde jest następująca:

Dim swApp               As Object (Obiekt Ciemny)
Przyciemnij część                jako SldWorks.ModelDoc2
Dim swView              As SldWorks.View
Dim swModExt            jako SldWorks.ModelDocExtension
Dim swPathDir           jako ciąg
Dim swPath              As String (Ciąg sygnałowy)
Dim echf                As Variant 'Waga arkuszowa będzie przechowywana w formacie ułamkowym (a:b)
Dim echV1               As Variant 'Skala widoku 1 będzie przechowywana w formacie ułamkowym (a:b)
Dim Rep                 As Variant 'Dla pamięci masowej MsgBox

Rejestracja podrzędnaDXFPDF()

Ustaw swApp = Application.SldWorks
Ustaw część = swApp.ActiveDoc


"------------ Wyszukiwanie informacji (1)
    Ustaw swModExt = Part.Extension
    Set Prop = swModExt.CustomPropertyManager("")

    Ustaw swView = Part.GetFirstView ' pierwszym widokiem jest
    echf = swView.ScaleRatio ' pobieranie skali
    Set swView = swView.GetNextView 'Przełączanie na pierwsze wejrzenie
    echV1 = swView.ScaleRatio ' Pobieranie skali
    Odzyskiwanie monet
    Ustaw swModel = swView.ReferencedDocument
    Ustaw swModExt = swModel.Extension
   
"------------ Kontrole bezpieczeństwa
    '--Sprawdzanie skali arkusza--
    Jeśli echf(0) <> "1" Lub echf(1) <> "1", to
        Rep = MsgBox("Uwaga, skala arkusza to " & echf(0) & ":" & echf(1) & vbCrLf & _
        "Czy chcesz kontynuować?", vbYesNie, "Nagrywanie PDF Dxf")
        Jeśli rep = vbNo, to wyjdź z sub
    Zakończ jeżeli:
    '--Weryfikacja skali widoku--
    Jeśli echV1(0) <> "1" Lub echV1(1) <> "1" To
        Rep = MsgBox("Uwaga, skala widoku to " & echV1(0) & ":" & echV1(1) & vbCrLf & _
        "Czy chcesz kontynuować?", vbYesNie, "Nagrywanie PDF Dxf")
        Jeśli rep = vbNo, to wyjdź z sub
    Zakończ jeżeli:

Koniec subwoofera