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");
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.
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("Number of nodes per tooth: "+x_coord_finished.length); 26 println("Number of nodes for the whole gear: "+rotated_x.length); }
Komponenten ID der Getriebeeinheit | |
Komponenten ID des Stirnrads das exportiert werden soll | |
Komponenten ID der dem Rad zugehörigen Stufe | |
Pfad zum speichern der .dxf Datei vom Nutzer via Dialog abfragen und in der Variable path speichern. | |
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. | |
Geometrieberechnung für die Stirnradstufe durchführen. | |
Funktion drawGear() ausführen | |
Funktionsdeklaration der drawGear() Funktion. Die Funktion hat die Parameter Zahnrad ID und den Ausgabepfad. | |
Erstellt ein neues DXF-Objekt mit dem Namen des Zahnrads. | |
Setzt die Linienstärke für das DXF-Objekt auf 1.0 | |
Liest das Array mit den x-Koordinaten der Zahnkontur ein und speichert sie in der Variablen x_coord_finished. | |
Liest das Array mit den y-Koordinaten der Zahnkontur ein und speichert sie in der Variablen y_coord_finished. | |
Zähnezahl des Zahnrades in der Variablen nbr_teeth speichern. | |
Winkelinkrement berechnen und in der Variablen angle_inc speichern. | |
Leeres Array für die x-Koordinaten deklarieren. | |
Leeres Array für die y-Koordinaten deklarieren. | |
Ä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. | |
Winkel in Radiant umrechnen. | |
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. | |
Jede x-Koordinate im Array x_coord_finished wird um den Winkel gedreht und der Arrayvariable rotated_x via .push angehängt. | |
Jede y-Koordinate im Array y_coord_finished wird um den Winkel gedreht und der Arrayvariable rotated_y via .push angehängt. | |
Polygonzug auf dem DXF-Objekt zeichnen. | |
Namen des Stirnrades an die bereits bestehende Variable path anhängen und in der neuen Variable final_path speichern. | |
.dxf-Datei exportieren | |
Anzahl der Knoten pro Zahn auf dem Scripting-Monitor ausgeben. | |
Anzahl der Knoten für das gesamte Zahnrad ausgeben. |
Verzahnungsstempel als .dxf exportieren
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); });