Comment récupérer l'échelle active d'une feuille?

Bonjour,

Malgrès mes différentes recherche sur le forum et sur internet je ne trouve pas ce que je veux... d'où ma question

Le but de ma macro et d'enregistrer un drawing Solidworks sous plusieurs formats pour archivage et notemment le format DXF pour la découpe laser.

Pour être sur que mon DXF soit bon j'aimerais m'assurer que l'échelle est bien à 1:1. Comment faire ?

J'ai trouvé comment changer l'échelle mais j'aimerais avertir l'utilisateur que son échelle doit-être changée pour éviter les erreurs.

Pour être plus précis, j'aimerais donc faire un test du genre : si echelle = 1:1 alors continuer sinon arrêter

Merci de votre aide ! La programmation VBA sous solidwoks n'est quand même pas très lisible...

Bonsoir,

Normalement en recherchant swView.ScaleRatio dans l'aide de l'api ça devrait répondre au besoin.

Bonjour,

si vous générez le DXF a partir de la 3d il sort toujours à l'échelle 1 est c'est si vous sortez vos DXF des MEP que l'échelle est defois foireuse...

Sinon nous on a un super complément pour sortir les fichiers en fichiers de découpe laser:

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 « J'aime »

Bonjour,

Voici une macro qui fonctionne sans probleme. Elle s'execute depuis le 3D et sortira toujours un DXF à l'echelle 1:1

Utilisée tous les jours chez nous et pas de souci.

A++

 


saveas_dxf.swp
3 « J'aime »

Bonjour,

Il faut relever l'échelle puis, si celle-ci est différente de 1:1, alors arrêter donc en C# cela donne ça :

            ModelDoc2 swDoc = (ModelDoc2)Program.swapp.ActiveDoc;
            DrawingDoc swDraw;
            Sheet swSheet;
            swDraw = ((DrawingDoc)(swDoc));
            swSheet = (Sheet)swDraw.GetCurrentSheet();
            object vSheetProps = null;
            double PaperSize = 0;
            double TemplateIn = 0;
            double Scale1 = 0;
            double Scale2 = 0;
            double FirstAngle = 0;
            double width = 0;
            double height = 0;

            vSheetProps = swSheet.GetProperties();
            double[] formatProp = (double[])vSheetProps;
            
            PaperSize = System.Math.Round(formatProp[0]);
            TemplateIn = formatProp[1];
            Scale1 = formatProp[2];
            Scale2 = formatProp[3];
            FirstAngle = formatProp[4];
            width = formatProp[5];
            height = formatProp[6];
            
            if ((int)Scale1 != 1 | (int)Scale2 != 1)
            {
                return;
            }

Reste plus qu'à traduire en VBA, langage que je ne maitrise pas, donc je te laisse le faire.

Cordialement,

Bonjour,

 

En prenant des morceaux de réponse de chacun de vos commentaires j'ai réussi à résoudre mon problème et je vous remercie !

 

La partie du côde correspondante est la suivante :

Dim swApp               As Object
Dim Part                As SldWorks.ModelDoc2
Dim swView              As SldWorks.View
Dim swModExt            As SldWorks.ModelDocExtension
Dim swPathDir           As String
Dim swPath              As String
Dim echf                As Variant 'Sera stocké l'échelle de la feuille en format fraction (a:b)
Dim echV1               As Variant 'Sera stocké l'échelle de la vue 1 en format fraction (a:b)
Dim Rep                 As Variant 'Pour le stockage des MsgBox

Sub EnregistrementDXFPDF()

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc 'associe part au document en cours


'------------ Récupération des informations (1)
    Set swModExt = Part.Extension
    Set Prop = swModExt.CustomPropertyManager("")

    Set swView = Part.GetFirstView 'la première vue étant la feuille
    echf = swView.ScaleRatio 'récupération de l'échelle
    Set swView = swView.GetNextView 'Passage à la première vue
    echV1 = swView.ScaleRatio 'récupération de l'échelle
    'récupération de la pièce
    Set swModel = swView.ReferencedDocument
    Set swModExt = swModel.Extension
   
'------------ Vérifications de sécurité
    '--Vérif. de l'échelle de la feuille--
    If echf(0) <> "1" Or echf(1) <> "1" Then
        Rep = MsgBox("Attention, l'echelle de la feuille est de " & echf(0) & ":" & echf(1) & vbCrLf & _
        "Voulez-vous continuer ?", vbYesNo, "Enregistrement Pdf Dxf")
        If Rep = vbNo Then Exit Sub
    End If
    '--Vérif. de l'échelle de la vue--
    If echV1(0) <> "1" Or echV1(1) <> "1" Then
        Rep = MsgBox("Attention, l'echelle de la vue est de " & echV1(0) & ":" & echV1(1) & vbCrLf & _
        "Voulez-vous continuer ?", vbYesNo, "Enregistrement Pdf Dxf")
        If Rep = vbNo Then Exit Sub
    End If

End Sub