Zum Inhalt springen
  • 0

C# Wpf 3D Zeichnung als Bild Datei erstellen


 Teilen

Frage

Hallo Zusammen,

ich arbeite schon seid längeren an einem Projekt, in dem erstelle ich 3D Zeichnungen mit System.Windows.Media.Media3D. Diese Zeichnung besteht aus vielen LinesVisual3D Linien, die Zusammen ein Rechteck bilden. In diesem Rechteck sind viele kleine GeometryModel3D Rechtecke die dann farbig sind. LinesVisual3D und GeometryModel3D werden in ModelVisual3D eingefügt und dann angezeigt, sodass man das Rechteck bewegen kann.

Dass zu der Hintergrund Geschichte, mein Problem das ich jetzt habe ist, dass ich nun die Zeichnung die ich erstelle als eine Bild Datei abspeichern möchte, damit auch andere Programme mit der Zeichnung etwas anfangen können. Doch ich habe im Internet noch keine Möglichkeit gefunden eine 3D Zeichnung von Media3D in eine Datei umzuwandeln. Kann mir vielleicht jemand helfen? ( Falls das jetzt verständlich war was ich geschrieben habe)

Link zu diesem Kommentar
Auf anderen Seiten teilen

11 Antworten auf diese Frage

Empfohlene Beiträge

  • 0

Was auch wohl so nicht gedacht ist. Der Media3D-Namespace beinhaltet nur Klassen und Methoden zur Darstellung von 3D-Präsentationen. Da musst du dir schon selber was einfallen lassen, wie du daraus eine Datei machst. Sprich, du musst selber einen Generator bauen, der aus deiner Darstellung eine Datei erzeugt oder wie man es eigentlich machen würde: Eine Abstraktion, aus der sowohl deine Grafik als auch die Datei erzeugt wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Du müsstest dich zuerst mal damit befassen, wie überhaupt die Dateien aufgebaut sind, die du speichern möchtest. Als Beispiel nehme ich mal dafür das SVG-Format. Im Grunde ist eine SVG-Format nichts weiter als eine XML-Struktur und eine XML-Struktur ist ein Baum.

Ein Beispiel aus Wikipedia:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
	version="1.1" baseProfile="full"
	width="700px" height="400px" viewBox="0 0 700 400">

	<!-- Anschlüsse links und rechts -->
	<line x1="0" y1="200" x2="700" y2="200" stroke="black" stroke-width="20px"/>
	<!-- Das Rechteck -->
	<rect x="100" y="100" width="500" height="200" fill="white" stroke="black" stroke-width="20px"/>
	<!-- Der Schleifer -->
	<line x1="180" y1="370" x2="500" y2="50" stroke="black" stroke-width="15px"/>
	<!-- Die Pfeilspitze -->
	<polygon points="585 0 525 25 585 50" transform="rotate(135 525 25)"/>
</svg>

Eine SVG-Datei kann dann von einem XML-Parser eingelesen werden und erzeugt daraus ein Baum.

svg
    width  = "700px"
    height = "400px"
    line
        x1     = 0
        y1     = 200
        x2     = 700
        y2     = 200
        stroke = "black"
        ...
    rect
        ...
    line
        ...
    polygon
        ...

Die GUI (z.B. der Browser) durchläuft dann diesen Baum und je nach Knotenart (line, rect, polygon, ...) erzeugt er dann die geometrische Figur. Wenn man jetzt den Baum manipuliert, indem man z.B. einen weiteren Knoten hinzufügt, dann wird der Baum wieder durchlaufen und die neue Grafik wird erzeugt. Im einfachsten Fall hast du dann für line, rect, polygon, ... einzelne Klassen:

if(knotenart == "line")
    new Line(...)
else if(knotenart == "rect")
    new Rect(...)
else if(knotenart == "polygon")
    new Polygon(...)
...

Und die Klassen rendern dir später deine Grafiken auf dem Bildschirm und aus dem Baum lässt sich dann später wieder eine SVG-Datei generieren.

Bearbeitet von Whiz-zarD
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

mfk'); DROP TABLE Users;- , daran hab ich auch gedacht, doch er bring mir immer ein Fehler Meldung und ich weis nicht woran das liegt:

Unbenannt2.PNG.203aa54476e4f1ec4693463bdcf3ec1d.PNG

Da wo es Gelb markiert ist taucht die Fehlermeldung auf. (System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."). dblLKWlänge = 13,2 ; dblLKWbreite = 2,4.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Ich bin ein wenig verwirrt: Ist myviewport3d in deinem Code ein System.Windows.Controls.Viewport3D oder ein HelixToolkit.Wpf.HelixViewport3D?

Im letzteren Fall musst du wohl nicht die Kamera einrichten, aber ein Licht solltest du hinzufügen. Zumindest ist das mein Eindruck beim Überfliegen der Beispiele.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Okay, ich habe einen Hinweis und zwar fehlt bei meinem HelixViewport3D eine Einstellung die das Bild Zeichnet. Wenn man das HelixViewport3D von der Toolbox auf das MainWindow zieht hat das HelixViewport3D Standarteinstellungen wo das Bild gezeichnet wird und ich bekomme in meiner Datei dann auch ein Bild ( Habe zum Testen einfach ein HelixViewport3D in mein MainWindow gezogen und das dann mit meiner Variabel myviewport3D gleichgesetzt und dann hats Funktioniert). Kann mir einer sagen was für eine Einstellung ich vergessen habe?

Unbenannt3.PNG.9652929c51506af340794a0461e7d9c6.PNG

Hier sind alle Einstellungen die ich gemacht habe.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

 Teilen

Fachinformatiker.de, 2022 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung