Hoe haal ik de actieve schaal van een blad op?

Hallo

Ondanks mijn verschillende zoektochten op het forum en op het internet kan ik niet vinden wat ik zoek... Vandaar mijn vraag

Het doel van mijn macro is om een Solidworks-tekening in verschillende formaten op te slaan voor archivering en in het bijzonder het DXF-formaat voor lasersnijden.

Om er zeker van te zijn dat mijn DXF goed is, wil ik er zeker van zijn dat de schaal 1:1 is. Hoe doe je dat?

Ik heb ontdekt hoe ik de schaal kan veranderen, maar ik wil de gebruiker waarschuwen dat zijn schaal moet worden gewijzigd om fouten te voorkomen.

Om preciezer te zijn, zou ik een test willen doen zoals: als schaal = 1:1 dan doorgaan of stoppen

Bedankt voor je hulp! De VBA-programmering onder solidwoks is nog steeds niet erg leesbaar...

Goedenavond

Normaal gesproken door te zoeken naar swView. ScaleRatio in de API helpt het om aan de behoefte te voldoen.

Hallo

Als je de DXF uit de 3d genereert, komt het altijd uit op schaal 1 en het is als je je DXF uit de MEP haalt dat de schaal soms in de war raakt...

Anders hebben we een geweldige aanvulling om de bestanden als lasersnijbestanden uit te voeren:

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 likes

Hallo

Hier is een macro die soepel werkt. Het werkt vanuit 3D en zal altijd een DXF op schaal 1:1 uitvoeren

Elke dag gebruikt bij ons en geen probleem.

A++

 


saveas_dxf.swp
3 likes

Hallo

Je moet de schaal dan verhogen, als deze anders is dan 1:1, stop dan in C# het ziet er als volgt uit:

            ModelDoc2 swDoc = (ModelDoc2)Program.swapp. ActiveDoc;
            TekenDoc swDraw;
            Blad swSheet;
            swDraw = ((DrawingDoc)(swDoc));
            swSheet = (Blad)swDraw. GetCurrentSheet();
            object vSheetProps = null;
            dubbele papiergrootte = 0;
            dubbele TemplateIn = 0;
            dubbele Schaal1 = 0;
            dubbele Schaal2 = 0;
            dubbele FirstAngle = 0;
            dubbele breedte = 0;
            dubbele hoogte = 0;

            vSheetProps = swSheet. GetProperties();
            double[] formatProp = (double[])vSheetProps;
            
            Papierformaat = Systeem. Wiskunde. Rond(formatProp[0]);
            TemplateIn = formatProp[1];
            Schaal1 = formatProp[2];
            Schaal2 = formatProp[3];
            FirstAngle = formatProp[4];
            width = formatProp[5];
            hoogte = formatProp[6];
            
            als ((int)Schaal1 != 1 | (int)Schaal 2 != 1)
            {
                terugkeren;
            }

Het enige wat ik nog hoef te doen is het te vertalen naar VBA, een taal die ik niet beheers, dus ik laat het aan jou over.

Vriendelijke groeten

Hallo

 

Door stukjes van het antwoord uit elk van je opmerkingen te halen, ben ik erin geslaagd mijn probleem op te lossen en bedankt!

 

Het overeenkomstige deel van de côde is als volgt:

Dim swApp               als object
Dim deel                als SldWorks.ModelDoc2
Dim swView              als SldWorks.Bekijk
Dim swModExt            als SldWorks.ModelDocExtension
Dim swPathDir           als tekenreeks
Dim swPath              als snaar
Dim echf                As Variant 'De bladschaal wordt opgeslagen in breukformaat (a:b)
Dim echV1               als variant 'De schaal van weergave 1 wordt opgeslagen in breuk (a:b) formaat
Dim Rep                 als variant 'voor MsgBox opslag'

Sub RegistratieDXFPDF()

Stel swApp = Toepassing.SldWorks in
Deel instellen = swApp.ActiveDoc


"------------ het opvragen van informatie (1)
    Set swModExt = Deel.Uitbreiding
    Stel Prop in = swModExt.CustomPropertyManager("")

    Stel swView = Part.GetFirstView ' in, waarbij de eerste weergave de
    echf = swView.ScaleRatio ' schaal ophalen
    Stel swView in = swView.GetNextView 'Overschakelen naar eerste zicht
    echV1 = swView.ScaleRatio ' Schaal ophalen
    Terugwinning van munten
    Stel swModel = swView.ReferencedDocument in
    Stel swModExt = swModel.Extension in
   
"------------ Veiligheidscontroles
    '--Controle van de schaal van het vel--
    Als echf(0) <> "1" of echf(1) <> "1" dan
        Rep = MsgBox("Let op, de schaal van het blad is " & echf(0) & ":" & echf(1) & vbCrLf & _
        "Wil je doorgaan?", vbYesNo, "Dxf Pdf Recording")
        Als Rep = vbNo dan Sub afsluiten
    Einde als
    '--Verificatie van de schaal van het uitzicht--
    Als echV1(0) <> "1" of echV1(1) <> "1" dan
        Rep = MsgBox("Let op, de schaal van de weergave is " & echV1(0) & ":" & echV1(1) & vbCrLf & _
        "Wil je doorgaan?", vbYesNo, "Dxf Pdf Recording")
        Als Rep = vbNo dan Sub afsluiten
    Einde als

Einde Sub