Skip to main content

FVA-Workbench KnowledgeBase

DXF Funktionen

Das Drawing Interchange File Format (DXF) ist ein Dateiformat zum Austausch von 2D-CAD-Daten. Im Scripting der FVA-Workbench stehen eine Vielzahl von Funktionen zur programmatischen Erstellung von Formen zur Verfügung. Weiterhin können Farben, Textformat und Linienstärken angepasst werden.

Die Funktionen zum Erstellen von DXF-Formen und Text werden alle auf einem DXF-Objekt ausgeführt. Es können mehrere DXF-Objekt in einem Script erstellt und in unterschiedliche Dateien exportiert werden.

Beispiel Ausgehend vom Koordinatenursprung (0, 0) ein Rechteck mit der Breite 10 und der Höhe 20 zeichnen.

let dxf = new Dxf("MyDXF");
dxf.setLineWidth(1.0);
dxf.drawRect(0, 0, 10, 20);
dxf.export("C:\\example\\drawing.dxf");
Abbildung 35. DXF-Formen und Text
DXF-Formen und Text


Nummer

Beschreibung

Funktion

1

Rechteck

dxf.drawRect(posX, posY, width, height);

2

Rechteck (gefüllt)

dxf.fillRect(posX, posY, width, height);

3

abgerundetes Rechteck

dxf.drawRoundRect(posX, posY, width, height, arcWidth, arcHeight);

4

abgerundetes Rechteck (gefüllt)

dxf.fillRoundRect(posX, posY, width, height, arcWidth, arcHeight);

5

Oval

dxf.drawOval(posX, posY, width, height);

6

Oval (gefüllt)

dxf.fillOval(posX, posY, width, height);

7

Linie

dxf.drawLine(posX1, posY1, posX2, posY2);

8

Bogen

dxf.drawArc(posX, posY, width, height, startAngle, sweepAngle);

9

Bogen (gefüllt)

dxf.fillArc(posX, posY, width, height, startAngle, sweepAngle);

10

Text

dxf.drawString(string, posX, posY);

11

Polygon

dxf.drawPolygon(ArrayPosX, ArrayPosY, numberPoints);

12

Polygon (gefüllt)

dxf.fillPolygon(ArrayPosX, ArrayPosY, numberPoints);

13

Mehrfachlinie

dxf.drawPolyLine(ArrayPosX, ArrayPosY, numberPoints);

Weitere Funktionen

Beschreibung

Funktion

RGB Farbe für Formen und Text setzen

dxf.setColor(int Red, int Green, int Blue);

Linienstärke setzen

dxf.setLineWidth(linewith);

Textgröße

dxf.setFontSize(int fontsize);

DXF-Datei herausschreiben

dxf.export(path);

Beispiele

Zahnrad als .dxf exportieren

Ein Ergebnis der FVA-Workbench Geometrieberechnung ist die Zahnkontur als Linienzug. Die Koordinaten werden getrennt für x und y in den Arrays tooth_profile_finished_x und tooth_profile_finished_y auf der Stirnradkomponente gespeichert.

Im folgenden Script soll das komplette Zahnrad als .dxf-Datei exportiert werden. Hierfür muss der Linienzug für einen Zahn entsprechend der Zähnezahl vervielfacht und jeweils um ein Winkelinkrement gedreht werden.

gear_contour.PNG

Ausgabe des Scripts

1let gearUnitID = 1;
2let gearID = 8;
3let stageID = getSubComponents(gearID, "general_stage")[0];
4let path = promptDirectory();

5setAttr("discretization_tooth_profile_contour", gearUnitID, "coarse", EDAT);
6runCalcMethod("101_MAIN_GEOMETRY", stageID);
7drawGear(gearID, path);

8function drawGear(gearID, path) {
9     let dxf = new Dxf(getCompProperty(gearID, 'NAME'));
10     dxf.setLineWidth(1.0);
11     let x_coord_finished = getAttr("tooth_profile_finished_x", gearID, RDAT);
12     let y_coord_finished = getAttr("tooth_profile_finished_y", gearID, RDAT);

13     let nbr_teeth = getAttr("number of teeth", gearID, RDAT);
14     let angle_inc = 360.0/nbr_teeth;
15     let rotated_x = [];
16     let rotated_y = [];

17     for(let angle=0; angle<=359.0; angle+=angle_inc){
18         angle_rad = angle*Math.PI/180;
19         for(let i=0; i<=x_coord_finished.length-1; i++){
20             rotated_x.push(x_coord_finished[i]*Math.cos(angle_rad) - y_coord_finished[i]*Math.sin(angle_rad));
21             rotated_y.push(x_coord_finished[i]*Math.sin(angle_rad) + y_coord_finished[i]*Math.cos(angle_rad));
             }
         }
22    dxf.drawPolygon(rotated_x, rotated_y, rotated_x.length);
23    let final_path = path+"\\"+getCompProperty(gearID,"NAME")+"_gear_contour.dxf";
24    dxf.export(final_path);
25    println(final_path);
26    println("Number of nodes per tooth: "+x_coord_finished.length);
27    println("Number of nodes for the whole gear: "+rotated_x.length);
     }

1

Komponenten ID der Getriebeeinheit

2

Komponenten ID des Stirnrads das exportiert werden soll

3

Komponenten ID der dem Rad zugehörigen Stufe

4

Pfad zum speichern der .dxf Datei vom Nutzer via Dialog abfragen und in der Variable path speichern.

5

Attribut "Diskretisierung der Zahnprofilkontur" auf grob ("coarse") setzen. Für mehr Punkte auf der Zahnkontur kann das Attribut auch auf "medium" oder "fine" gesetzt werden.

6

Geometrieberechnung für die Stirnradstufe durchführen.

7

Funktion drawGear() ausführen

8

Funktionsdeklaration der drawGear() Funktion. Die Funktion hat die Parameter Zahnrad ID und den Ausgabepfad.

9

Erstellt ein neues DXF-Objekt mit dem Namen des Zahnrads.

10

Setzt die Linienstärke für das DXF-Objekt auf 1.0

11

Liest das Array mit den x-Koordinaten der Zahnkontur ein und speichert sie in der Variablen x_coord_finished.

12

Liest das Array mit den y-Koordinaten der Zahnkontur ein und speichert sie in der Variablen y_coord_finished.

13

Zähnezahl des Zahnrades in der Variablen nbr_teeth speichern.

14

Winkelinkrement berechnen und in der Variablen angle_inc speichern.

15

Leeres Array für die x-Koordinaten deklarieren.

16

Leeres Array für die y-Koordinaten deklarieren.

17

Äußere for-Schleife, in der die Laufvariable angle bei jedem Durchlauf um angle_inc erhöht wird. Bei angle = 359 wird die Ausführung beendet.

18

Winkel in Radiant umrechnen.

19

Innere for-Schleife, in der die Laufvariable i bei jedem Durchlauf um 1 erhöht wird. Wenn i der Anzahl an Punkten im Array x_coord_finished entspricht, wird die Ausführung beendet.

20

Jede x-Koordinate im Array x_coord_finished wird um den Winkel gedreht und der Arrayvariable rotated_x via .push angehängt.

21

Jede y-Koordinate im Array y_coord_finished wird um den Winkel gedreht und der Arrayvariable rotated_y via .push angehängt.

22

Polygonzug auf dem DXF-Objekt zeichnen.

23

Namen des Stirnrades an die bereits bestehende Variable path anhängen und in der neuen Variable final_path speichern.

24

.dxf-Datei exportieren

25

Anzahl der Knoten pro Zahn auf dem Scripting-Monitor ausgeben.

26

Anzahl der Knoten für das gesamte Zahnrad ausgeben.

Verzahnungsstempel als .dxf exportieren
dxf_table.PNG

Ausgabe des Scripts

function writeTable(compID, path) {
    let dxf = new Dxf(getCompProperty(compID,'NAME'));
    let fontsize = 14;
    let lineHeight = 30;
    let start_x = 0;
    let start_y = lineHeight;
    let column_width = [340, 80, 80, 50];

    let tablewidth = column_width.reduce(function(a, b){return a + b;}, 0);
    let text_offset_x = 5;
    let text_offset_y = -5;
    
    dxf.setFontSize(fontsize);
    dxf.setLineWidth(1.0);
    dxf.drawRect(start_x, 0-lineHeight, tablewidth, start_y);
    dxf.drawString(getCompProperty(compID,'NAME'), start_x+text_offset_x, start_y+text_offset_y-lineHeight);
    let tableAttributes = [
                        "number of teeth",  
                        "normal module", 
                        "helix angle reference diameter",  
                        "normal_pressure_angle",  
                        "addendum modification coefficient",  
                        "face width",  
                        "standard pitch diameter",  
                        "tip diameter",  
                        "form diameter of addendum",                          
                        "root diameter",  
                        "form diameter of dedendum",                          
                        "resulting number of teeth for span measurement finished teeth", 
                        "span_measurement_upper_deviation",  
                        "span_measurement_lower_deviation", 
                        "iso_1328_2013_quality_grade_internal",
                        "profile_slope_deviation_acc_to_table", 
                        "helix_slope_deviation_acc_to_table", 
                        "profile_slope_deviation_acc_to_table", 
                        "single_pitch_deviation_acc_to_table",
                        "total_cumulative_pitch_deviation_acc_to_table",
                        "runout_deviation_acc_to_table"
                        ];
    let tablecontent = []; 
    for(let i=0; i<=tableAttributes.length-1; i++){    
        tablecontent[i] = [];
        tablecontent [i][0]= getAttrProperty(tableAttributes[i], compID, 'NAME'); 
        tablecontent [i][1]= getAttrProperty(tableAttributes[i], compID, 'SYMBOL');  
        tablecontent [i][2]= Math.round(getAttr(tableAttributes[i], compID, RDAT)*1e3)/1e3; 
        tablecontent [i][3]= getAttrProperty(tableAttributes[i], compID, 'UNIT_NAME'); 
    }
    for(let i=0; i<=tablecontent.length-1; i++){
        for(let j=0; j<=column_width.length-1; j++){
            dxf.drawRect(start_x, 0, column_width[j], start_y);
            dxf.drawString(tablecontent[i][j], start_x+text_offset_x, start_y+text_offset_y);
            start_x = start_x+column_width[j];
        }
        start_y = start_y+lineHeight;
        start_x = 0;
    }
    let final_path = path+"\\"+getCompProperty(compID,'NAME')+"_gear_stamp.dxf";
    dxf.export(final_path);
    println(final_path);
}
path = promptDirectory();
var compIDs = getCompByType("cylindrical_gear");
println("The following files were exported:");

compIDs.forEach(function(element){
    writeTable(element, path);
});