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