Jump to content

Fehler beim CSV-Höhenfeldexport


Timba

Empfohlene Beiträge

Hallo @Neo,

jetzt muss ich mal ein kleines bisschen meckern. Nachdem ich mit deiner und Bahnlands Hilfe auf den CSV-Export aufmerksam wurde habe ich mich heute entschlossen, wegen der sehr viel besseren Genauigkeit mir ein kleines Windows-Tool zu basteln um das Gelände zu glätten. Mein Plan ist, die Datei ins Tool zu laden, dann eine horizontale, vertikale oder diagonale Linie, die durch zwei Koordinatenpunkte der Anlage definiert ist, durch das Tool glätten zu lassen. Das will ich dann Linie für Linie wiederholen bis die betreffende Fläche fertig ist. Klingt jetzt umständlicher als es ist, aber da schon vieles fertig ist und nicht angetastet werden soll, geht's nicht anders.

Nun das Ärgernis: Gerade stelle ich fest, dass die Koordinaten des Bodens  in x-Richtung von links nach rechts und in y-Richtung von unten nach oben gehen (2D-Ansicht). Die CSV-Daten hingegen gehen in x-Richtung ebenfalls von links nach rechts, aber in y-Richtung entgegengesetzt, also von oben nach unten. Warum konnte das nicht identisch sein? Gab's dafür einen Grund oder ist das versehentlich so durchgerutscht? Nun muss ich wohl die y-Koordinate bei jedem Zugriff umkehren. Oder ich schreibe die Routine zum Daten einlesen um und lasse den y-Index beim Einlesen rückwärts laufen. Weiß noch nicht was besser ist. Werde mal eine Nacht drüber schlafen. Ein Riesenproblem ist es ja zum Glück nicht, nur ein bisschen unnötige Verwirrung.

Viele Grüße
Timba

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Timba,
ich denke mal, das ist der Tatsache geschuldet, dass alles unabhängig von den maßstabsabhängigen Welt-Koordinaten des MBS gehalten wird und einfach nur eine aufwärtszählende Rasterpunkt-'Numerierung' der Bodenplatte vorgenommen wird. Also grundsätzlich bei 0|0 beginnend.
Dass dies dann halt in der linken oberen Ecke beginnt und nicht in der linken unteren - naja.
Es könnte sein, dass das eine oder andere Plugin von Easy sich darauf eingestellt hat. Eine nachträgliche Änderung - ich weiß nicht.
Wie Du schreibst, es mag verwirrend sein, aber allzu schlimm ist es nicht.

Gruß
  Andy

p.s. @Neo, ginge ein solcher Export auch mit Texturinformation - als Hexwert oder so? Dann könnte man eine Bodenplatte nämlich auch mal echt nach links und oben erweitern, indem man 'normal' erweitert und dann sowohl Höhen, als auch Texturen verschiebt. Oder man kann anhand der Höheninformationen auch mal eine Textur filtern, sodaß nichts rüberkleckst oder so. Ich weiß nicht, wie Du Texturen speicherst, kann mir aber vorstellen, dass jeder Rasterpunkt ein Datenwort enthält, dass bitweise die Info enthält, ob eine Textur einen Punkt da setzt, oder nicht. Dann wäre da extern schon einiges machbar.

Bearbeitet von Andy
Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin Andy,

schon klar, dass es irgendwo bei 0|0 beginnen muss. Dass die Bodenplatte die 0|0 Koordinate in der Mitte hat und somit negative wie positive Werte hat, was beim CSV Export nicht der Fall ist, war mir von Anfang an klar und kann ja auch leicht kompensiert werden, indem man zu den Koordinaten die halbe x- bzw. y-Länge addiert. Dann hat man alles positive Werte analog zum CSV-Plan. Es geht nur darum, dass die y-Dimension beim CSV-Export oben beginnt und bei der Anlage unten. Das muss zusätzlich kompensiert werden und geht ja auch, nur ist die unterschiedliche Behandlung aus meiner Sicht etwas sinnbefreit. Der Grund könnte sein, dass (wenn mich meine Erinnerung nicht täuscht) bei der Einführung von V5 etwas an der Winkeldrehung geändert wurde, was vorher rechtsdrehend war ist nun linksdrehend (oder andersrum). Ist ja auch egal, ich werde beim Einlesen den y-Index einfach rückwärts laufen lassen. Dann passt es wieder. Falls dann mal der Export angepasst werden sollte habe ich das auch ganz fix revidiert. Ist als kein Megaproblem. Ich hatte nur in der Nacht etwas Frust und wollte den bei euch abladen. :D Nun ist ein neuer Tag und alles wieder gut.

Gruß
Timba

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, der erste Versuch war schon erfolgversprechend. Wen es interessiert, dem mag ich gerne meine Überlegungen erläutern.

Bislang habe ich mit verschiedenen Methoden die Landschaft grob vorgeformt und dann, weil ich eher sanfte Übergänge als zerklüftete Klippen habe, in Feinarbeit krasse Höhenunterschiede abgemildert. Dazu bediente ich mich an Kameras befestigten Schiehen (an anderer Stelle nachzulesen). Diese habe ich relativ kurz gewählt, um die Hügel nicht vollständig platt zu machen, was bei längeren Schienen der Fall gewesen wäre. Als ideale Länge für mich hat sich dabei eine Distanz von 3 Rasterpunkten herausgestellt, d.h. die zwei Punkte zwischen den beiden Kameras werden durch "Gelände anpassen" angeglichen, dann wird das ganze Konstrukt um einen Rasterpunkt versetzt und wieder angeglichen. So lange bis auf der bearbeiteten Rasterlinie die Höhenpunkte schön harmonisch aussehen. Man kann sich vorstellen, dass das eine zeitraubende und nervige Tätigkeit ist. Daraus entstand der Wunsch, zwar diese Methode anzuwenden, aber eben berechnen zu lassen, was deutlich schneller gehen dürfte als die Methode mit den Schienen.

Leider bin ich kein Programmierprofi, es reicht gerade für den Hausgebrauch bei mir, daher mag es meinem Tool an Eleganz und professionellem Aussehen mangeln, aber es tut schon das, was ich wollte und kann (und wird) noch verbessert werden.

So sieht das Ding jetzt aus:

beispiel1.jpg.28a90288b64dba322d59c5d315325232.jpg

Der linke Button liest die CSV-Datei ein. Da das Tool nur für mich ist habe ich der Einfachheit halber auf den üblichen FileDialog verzichtet und Speicherort und Filename im Programm fest verdrahtet, d.h. die CSV-Datei muss immer denselben Namen tragen und im selben Ordner sein. In der letzten Zeile der Datei finden sich x- und y-Wert, die für die Dimensionierung des Arrays gebraucht werden und vom Programm in die oberen beiden Zeilen eingetragen werden. Ich gebe dann die Rastergröße ein, die benötigt wird, um Anlagenkoordinaten in entsprechende x/y-Werte der CSV-Datei zu konvertieren. Aus den x/y-Wert und Rastergröße ergibt sich die Anlagengröße, die das Tool zwar nicht braucht, aber trotzdem eingetragen wird, weil's schöner aussieht.

Dann schaue ich auf der Anlage, wo Linien geglättet werden sollen, und sehe mir in der 2D-Ansicht die Anlagenkoordinaten an. Die beiden Punkte gebe ich dann ein. Das Tool funktioniert mit horizontalen, vertikalen und auch diagonalen Linien, vorwärts oder rückwärts, alles geht. Der Button darunter setzt die Berechnung in Gang, immer von Punkt 1 (links) nach Punkt 2 (rechts). So kann ich jetzt Linie für Linie glätten. Ich kann auch eine Linie zweimal glätten lassen, umso glatter wird sie. Wenn alles fertig ist, werden die Daten mit dem rechten Button wieder in eine neue CSV-Datei geschrieben, die dann vom MBS importiert werden kann.

In der Praxis sieht das dann so aus:

beispiel2.thumb.jpg.f92ad21ae02f13fd901ab0bdc28a0803.jpg

Der schwarz markierte Bereich wurde bearbeitet. Man sieht eine deutliche Glättung ohne dass der Bergcharakter vollends verloren gegangen wäre. Man könnte jetzt gezielt in der Mitte nochmal etwas nacharbeiten. Alles in allem hatte ich mir das so vorgestellt. Wird mir schon ziemlich helfen bei der Landschaftsgestaltung.

Man könnte jetzt über die beiden Punkte auch eine ganze Fläche definieren statt nur eine einzige Linie. Aber dann gingen nur Rechtecke und keine unregelmäßigen Flächen. Das mag in manchen Fällen ausreichen, mir genügt es definitiv nicht. Hier würde Andys Anregung - sofern überhaupt umsetzbar - nützen. Denn wenn man auch Texturen exportieren könnte, dann könnte man eine Fläche wie z.B. hier gezeigt schwarz einkreisen und das Programm kann selbständig die erforderlichen Rasterpunkte ermitteln.

Aber für den Moment reicht es mir so wie es ist und ich hatte Spaß, nach langer Zeit mal wieder ein kleines Tool zu schreiben.

Gruß
Timba

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Timba,

Am 22.2.2020 um 23:50 schrieb Timba:

Warum konnte das nicht identisch sein?

dieser Teil des Codes ist schon sehr sehr alt, solche Zusammenhänge habe ich damals nicht berücksichtigt. Es wird eine Zeit kommen, da wird auch die Bodenplatten auf den neuesten Stand gebracht, und dann werden solche Unstimmigkeiten auch korrigiert.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ein Textur-Import/Export ist sicherlich machbar, hat bei mir aber keine hohe Priorität, da solche Operationen nativ im Studio bereitstehen müssen, damit es auch etwas bringt. Die wenigsten Leute wollen mit CSVs arbeiten, um ihr Gelände zu gestalten.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 11 Monate später...

Habe aktuell noch eine Methode getestet, um mit einem externen Tool eine Landschaft zu formen bzw. zu glätten,
kann man nämlich auch in Blender machen, kurz beschrieben:

In Blender passendes Grid-Objekt anlegen,
Displacement Modifier hinzu,
Textur dazu, Höhenmap-Datei auswählen (ohne Interpolation),
z-Achse skalieren, Modifier anwenden, dann:
Fläche beliebig bearbeiten, sehr gut sind die Sculpt Tools geeignet,
dann in den Material-Nodes die z-Werte separieren und per Shader auf einen Material-Knoten geben,
und schließlich die so erzeugte Texturen "baken" (linear, nicht sRGB) und das Image als neue Höhen-Map abspeichern.

Einige Schritte, geht dann aber flüssig von der Hand.
An einigen Punkten können gegenüber dem Original Differenzen von 1..3 mm auftreten, ev. bekommt man das auch noch besser hin.

Bei Interesse kann ich den Ablauf auch genauer darstellen.

Gruß Eggu

Blender-Screenshot-Sculpting.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...