# DXF-File schreiben



## gordonsky (29. Mai 2012)

Hallo an alle

ich hoffe ihr könnte mir helfen.
ich weiß nicht so recht ob das hier das richtige forum dazu ist.
aber ich bin auf der suche nach einem tool oder tips wie man mit java dxf-files erzeugen kann.

kurz zur beschreibung:
ich habe eine postgreSQL-Datenbank in dem punkte gespeichert werden.
und durch berechnungen weiterer werte sollen diese punkte mit kreisen und schraffuren in ein dxf-file exportiert werden.

ich hoffe ihr könnt mir hier helfen.

gruß
gordonsky


----------



## Spacerat (30. Mai 2012)

Ist DXF nicht dieses spezielle AutoSketch-, also ein 3D-Scene-Format? Das sind doch auch blos Textdateien. Da muss man nur wissen, wie was gespeichert wird und kann (bzw. muss XD) dann seinen eigenen Reader und/oder Writer für schreiben. Wäre dann aber weniger "XML" sondern mehr "und Co". Versuch mal daraus was zu machen. Kann sein, dass du dazu aber noch Java3D benötigst.


----------



## gordonsky (30. Mai 2012)

ja DXF ist ein ascii-basierendes austauschformat von autodesk (autocad)
wenn man weiß was wie geschrieben wird ist es wirklich kein problem. ich habe gehoft das es sowas schon als ein fertiges tool gibt...


----------



## Spacerat (1. Jun 2012)

Also wenn du meinem Link oben folgst, kommst du auf die CyberVRML97-Seite, wo du dir das Projekt samt Quelltexten runterladen kannst. In den Quelltexten dürfte dann auch der Lade- bzw. Schreibvorgang für DXF zu finden sein. Bissl Copy and Paste (wie immer ) und dann geht das. Fertige Reader bzw. Writer sind allgemein in Java eh' rar. Diese bekommt man nur Lib-Spezifisch und jeder macht's dann anders.


----------



## gordonsky (1. Jun 2012)

soweit ich jetzt da durchgestiegen bin kann CyberVRML97 dxf-files nur lesen und nicht schreiben... ???:L
und das auch nur polylines und ich benötige hauptsächlich punkte und kreise


----------



## Marco13 (1. Jun 2012)

Ja, hatte kurz eine Websuche gemacht, man findet ja schon einige Bibliotheken die mehr oder weniger DXF lesen oder schreiben können, aber die, die ich so gesehen hatte, waren entweder lange nicht gepflegt oder wurden als "buggy" bezeichnet... DAS ultimative DXF-Tool scheint es zumindest nicht zu geben. Welche der verfügbaren Libs hast du denn für dich sonst noch schon ausgeschlossen?


----------



## gordonsky (1. Jun 2012)

welche libs hast du denn so gefunden?
ich finde nur welche die als trial oder shareware angeboten werden...
ansonsten versuche ich alles damit ich meine daten als dxf exportieren kann.


----------



## Marco13 (1. Jun 2012)

Halt die Sachen, die man mit einer schnellen Websuche so findet... z.B. die auf c# - Reading .DXF files - Stack Overflow aufegelisteten...


----------



## gordonsky (2. Jun 2012)

ja klasse...
da werden aber auch nur viewer gezeigt oder sehg ich das falsch?
und wenn ich nen writer schreibe möchte muss ich ja tausende von zeilen schreiben und wissen was wo hin gehört...
und hunderte euros ausgeben wollte ich auch nicht und fertige codes zu kaufen... ;(


----------



## Marco13 (3. Jun 2012)

Ja, manchmal hat man halt Pech. Sowas wie Ycad - Java CAD library | Free Graphics software downloads at SourceForge.net behauptet, DXF schreiben zu können, aber ist wohl schon alt. Aber suchen kannst du wohl selbst. Die Bibliothek, die die Methode
[c]Magic.writeObjectAsDxf(myObject);[/c]
anbietet gibt es halt nicht.


----------



## Evil-Devil (5. Jun 2012)

Da machen sich die Firmen die Mühe eine Dokumentation zu ihren Dateiformaten zu schreiben und dann nutzt man die nicht, tzz 

Autodesc - AutoCAT DXF Reference

Damit sollte es relativ einfach sein einen individuellen Reader und Writer für deine Bedürfnisse zu schreiben.


----------



## Spacerat (5. Jun 2012)

Evil-Devil hat gesagt.:


> Damit sollte es relativ einfach sein einen individuellen Reader und Writer für deine Bedürfnisse zu schreiben.


Du weisst schon, das der TO gefragt hat, ob es so einen Reader bzw. Writer schon irgendwo gibt? Individuell ist letztendlich gar keine so gute Idee, spezielle Dateiformate sind das nämlich auch nicht, das kann man sogar deinem Link entnehmen. Jedes Dateiformat hat eine Spezifikation.
Dieses "MagicWrite" von Marco ist wohl für mich ein Wink mit dem Zaunpfahl, denn ihn habe ich bereits mit meiner Idee zugetextet, das Reader und Writer von Dateien gar nicht individuell sein müssen und es nur an einem Mechanismus fehlt, der Dateiformate verwaltet und diese bei Bedarf in eine standartisierte Form bringt. Bei vielen Dateiformaten (Bilder, Animationen, Audiodateien, Videos, Texte) ist das bereits möglich. Problematisch aber sind 3D-Objektdateien und DXF gehört nunmal zu diesen. Mir sind bislang keine weiteren Datencontainer untergekommen, die mehr unterschiedliche Spezifikationen haben als 3D-Objekte. Sogar Dateien diverser Tabellenkalkulationen oder gar XML-Dateien sind einfacher zu handhaben.


----------



## Marco13 (5. Jun 2012)

Evil-Devil hat gesagt.:


> Da machen sich die Firmen die Mühe eine Dokumentation zu ihren Dateiformaten zu schreiben und dann nutzt man die nicht, tzz
> 
> Autodesc - AutoCAT DXF Reference
> 
> Damit sollte es relativ einfach sein einen individuellen Reader und Writer für deine Bedürfnisse zu schreiben.



Ja, sooo ernst war das wohl nicht gemeint, aber ... falls doch: Der Aufwand, so einen Reader/Writer auch für vermeintlich einfache Formate zu schreiben ist enorm hoch. (Wenn man es "gut" machen will... problemspezifische, eingeschränkte Insellösungen mal außen vor gelassen)

@Spacerat: Auch wenn einige Fragen (grob: In bezug auf eine _standar*d*isierte Repräsentation_ (ImageData mit getRGBPixels()) im Vergleich zu einer bestimmten _Verarbeitbarkeit_ (Image mit paint(Graphics, Image))) noch offen sind, geht es wohl in diese Richtung


----------



## Evil-Devil (5. Jun 2012)

Spacerat hat gesagt.:


> Du weisst schon, das der TO gefragt hat, ob es so einen Reader bzw. Writer schon irgendwo gibt?


Ja das hab ich gelesen und da schon einige Links kamen dachte ich wäre ein Link zu den Specs vllt. nützlich.

Interessant wäre auch die Frage, muss es zwingend DXF sein? Denn es gibt weitaus einfachere 3D Dateiformate.


----------



## gordonsky (8. Jun 2012)

zwingend notwendig ist es nicht... man kann es auch über skripte im autocad lösen. aber über dxf-files wäre einfach schöner um die einfach öffnen zu können.


----------



## JimK (12. Jun 2012)

Also ich sitze gerade vor einem ähnlichen Problem. ;(
Ich habe eine Koordinaten .txt die wie folgt aussieht:

4510821.00;5665133.50;124.75;0;02.05.2012 14:31:31
4510818.50;5665131.00;124.74;0;02.05.2012 14:31:36
4510816.00;5665129.00;124.64;10;02.05.2012 14:31:46
...

Diese Punkte möchte ich nun als DXF-File speichern und den verschiedenen Punktarten einen Layer zuordnen. Das Schreiben des DXF-Files mit den Elementen funktioniert schonmal, aber wie bekomme ich eine Layerzuordnung hin? Oder vielleicht weiß jemand wie ich die Punkte am besten gleich mit Java in Microstation importieren kann? Bisher sehen ich leider nur eine DXF als Lösung...

Code zur DXF Erzeugung:


```
try
		{
			String line="";
			BufferedReader br = new BufferedReader(new FileReader(file));
			int hexz=0;
			PrintWriter printWriter = new PrintWriter(new FileWriter(savefile));
			
			printWriter.println("0"+"\r\n"+"SECTION"+"\r\n"+"2"+"\r\n"+"HEADER"+"\r\n"+"9"+"\r\n"+"$ACADVER"+"\r\n"+"1"+
								"\r\n"+"AC1009"+"\r\n"+"0"+"\r\n"+"ENDSEC"+"\r\n"+"0"+"\r\n"+"SECTION"+"\r\n"+"2"+"\r\n"+
								"TABLES"+"\r\n"+"0"+"\r\n"+"ENDSEC"+"\r\n"+"0"+"\r\n"+"SECTION"+"\r\n"+"2"+"\r\n"+"ENTITIES");
					
			while ((line = br.readLine()) != null) 
			{
				Messdaten a = new Messdaten(0, 0, 0, 0, null);

				StringTokenizer tok = new StringTokenizer(line, ";");
				String s1 = tok.nextToken();
				a.rw = Double.valueOf(s1);
				String s2 = tok.nextToken().trim();
				a.hw = Double.valueOf(s2);
				String s3 = tok.nextToken().trim();
				a.h = Double.valueOf(s3);
				String s4 = tok.nextToken().trim();
				a.element = Integer.valueOf(s4);
				
                                if((a.rw>=Double.valueOf(minRWjTextField.getText().trim())&&
                                    a.hw>=Double.valueOf(minHWjTextField.getText().trim()))&&
                                            (a.rw<=Double.valueOf(maxRWjTextField.getText().trim())&&
                                            a.hw<=Double.valueOf(maxHWjTextField.getText().trim())))
                                {
				hexz++;
				String hex=Integer.toHexString(hexz);
				
				printWriter.println("0"+"\r\n"+"POINT"+"\r\n"+"5"+"\r\n"+hex+"\r\n"+"8"+"\r\n"+a.element+"\r\n"
						+"10"+"\r\n"+a.rw +"\r\n"+ "20"+ "\r\n"+ a.hw +"\r\n"+"30"+ "\r\n"+a.h );
			}
                        }
			
			printWriter.println("0"+"\r\n"+"ENDSEC"+"\r\n"+"0"+"\r\n"+"EOF");
			printWriter.close();
		}
		
		catch(IOException e)
		{
			JOptionPane.showMessageDialog(null,"Es ist ein fehler aufgetreten!");
		}
```

Vielleicht hilft mein Quellcode Gordonsky ein wenig weiter...


----------



## gordonsky (14. Jun 2012)

habe soweit alles hinbekommen... punkte... kreise... text....
jetzt fehlt mir nur wie man schraffuren erzeugt... hat da zufällig jemand eine ahnung wie der dxf-quellcode aussieht wenn man eine kreisförmige schraffur erzeugen will?
ich habe hier schon überall umhergelesen aber ich werde so recht nicht daraus schlau


----------



## Spacerat (14. Jun 2012)

Ich hoffe sehr, das es anders geht. Aber ansonsten würde ich daraus lesen, dass man dafür ein rechteckiges bzw. quadratisches Muster per Musterdaten festlegen muss und dieses mit einem ouder mehreren Umgrenzungspfaden (Kreisbögen oder Polyline) umschliessen muss. Evtl. mal ein CAD-Programm (z.B. CADdy) laden welches DXF exportieren kann, darin einen Zylinder kreieren, dessen Deckel schraffieren und dann schauen, wie es dort exportiert wird.


----------

