[Projekt] Mein STL-Viewer

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2353
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Jonathan »

joah, tut ganz gut :)
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Wieder eine neue Version:

https://papas-best.com/stlviewer_en#download

Mit Bugfix und verbessertem Antialiasing.


Hintergrund und eine Empfehlung für D3D-Programmierer:

Ein User hat sich bei mir gemeldet, weil der Viewer abstürzt. Er hat mir seinen Crash Dump gesendet, und der sah erstmal recht merkwürdig aus – D3D war zu zwei Dritteln initialisiert, aber die Objekte waren total kaputt.

Das war die Folge von drei kleinen Fehlern:
  • Ich habe blind Antialiasing auf 4× gestellt. Schließlich garantiert D3D ab 10.1, dass jede GPU mindestens 4× unterstützt! Nur habe ich vor geraumer Zeit die Hardware-Anforderungen auf 10.0 gesenkt … und tadaaa, da ist Antialiasing komplett optional. Der User hatte nur 10.0.
  • Die Swap Chain ließ sich problemlos mit 4×MSAA erstellen. Der Depth Buffer jedoch nicht. (WTF?! Komischer Treiber, aber … ist halt erlaubt.)
  • Dafür hatte ich Fehlerbehandlung, aber die enthielt einen Flüchtigkeitsfehler beim Setzen eines Zeigers. Dadurch funktionierte sie nur einmal. Mein Viewer beginnt sofort beim Start in einem separaten Thread mit dem Laden von D3D, weil das so ewig lange dauert (erster Versuch, hinterlässt kaputten Zeiger) und beim Laden einer Datei dann nochmal (zweiter Versuch erwischt kaputten Zeiger). Crash.
  • Der Treiber unterstützt nur 32 MiB VRAM, obwohl D3D 10 garantierten Platz von 128 MiB pro Ressource vorschreibt. Das hat zwar nichts zum Absturz gebracht, aber es führt dazu, dass der User auch nach der Korrektur nur mini-STLs öffnen kann.

Daher meine Empfehlung an D3D-Programmierer: Sucht das höchste unterstützte Multisample-Level (ID3D11Device::CheckMultisampleQualityLevels()) und nutzt das. Dann macht Legacy-Hardware keine Probleme und neue GPUs profitieren von besserem MSAA (mittlerweile scheint jeder 8× zu unterstützen, obwohl D3D nur 4× garantiert). Das macht mein Viewer nun auch. (Ich weiß nur noch nicht, wie ich es in meinen anderen Programmen mit Coverage-Based Texture Transparency kombiniere, ohne vier verschiedene Shader zu schreiben.)

Kosten: ca. 140 B.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Willkommen zu den langweiligsten Showroom-Screenshots auf ZFX ever!

Die letzten zehn Wochen habe ich das Setup überarbeitet (mein MSI-Thread spricht Bände) um von einem WiX-basierten Setup wegzukommen und meine Setups selber zu bauen. Warum ich das wollte?
  • Bloat. Die Setups sind nun von 220 KiB auf 72 KiB geschrumpft. Für einen 60 KiB kleinen Viewer sollte die Setup-Größe überhaupt nicht dreistellig sein!
  • Mehr Anpassungsmöglichkeiten. Das erkläre ich aber in der Bilderstrecke unten.
  • Weniger Abhängigkeiten zu pflegen. Statt eines 120 MiB großen WiX-Downloads inklusive .NET-Framework habe ich jetzt 3000 Zeilen eigenen Code, die quasi das gleiche machen.
  • Build-Speed. WiX hat zehn Sekunden zum Bauen des Setups gebraucht; mein eigenes Tool ist rund hundert Mal schneller. Scheiß XML, scheiß .NET, scheiß WiX.
  • Ich wollte verdammt nochmal verstehen, wie ein Setup überhaupt funktioniert.
Das Ergebnis könnt ihr unter https://papas-best.com/stlviewer_en#download herunterladen. Ich bitte euch auch drum, das zu tun! Falls ich was verbockt habe, erreicht ihr mich ja am schnellsten :) Außerdem vertraut ihr mir und verkriecht euch nicht sofort unter ’nem Stein wenn euch SmartScreen meldet, die Datei wäre unbekannt und potentiell gefährlich.

Übrigens geht das Setup nun ohne Admin-Rechte – es sei denn, ihr habt bereits eine alte Version installiert. Dann braucht es ein Mal Admin-Rechte, um die alte Version zu aktualisieren. Bei zukünftigen Updates aber nicht mehr.


Vorher-Nachher

Erstinstallation

Das erste, was der Anwender vom Programm sieht. Früher:
setup_o.png

Oh Gott wie hässlich.
  • Die freie Spalte links ist, weil man da sein Logo platzieren soll. Ich will aber kein Logo platzieren! Und WiX unterstützt nichts anderes. Darum ist der Platz halt ungenutzt.
  • Beachtet, dass das Setup als Schriftart Tahoma nutzt und die EULA in Calibri, weil das halt die Standardschriftarten in WiX und Rich Text sind. Die Standardschriftart in Windows ist aber Segoe UI (Titelleiste!), also mischen wir da drei Schriftarten. WTF.
  • Die Knöpfe sind zu klein für den Windows-Standard. (Folge der falschen Schriftart.)
  • Der Print-Knopf verbraucht 70 KiB, weil ein WiX-Plugin dahintersteckt. Und man kriegt ihn nicht ohne riesen Aufwand weg. Kann man sich nicht ausdenken.
  • Wenn man Back nicht benutzen kann, warum ist es überhaupt da? (Protip: Weil die WiX-Programmierer faul sind.)
  • Warum eine Checkbox für Accept und ein separater Knopf zum Installieren?! Warum nicht beides auf einen Knopf?! (Machen Visual Studio & Co auch seit Jahren so.)
  • Im Header des Fortschrittsfensters habe ich mir dann ein Bisschen Branding erlaubt, aber … wenn wir mal ehrlich sind, ist das doch scheiße. Weg damit.
  • Abschlussfenster: Wieder die linke Spalte verschwendet.
  • Warum eine Checkbox, um das Programm zu starten? Warum kein Knopf? Protip: Weil WiX es nicht anders kann. Fun Fact: Es kann auch keinen transparenten Hintergrund für die Checkbox; ein Hintergrundbild könnt ihr also auch vergessen.
Jetzt:
setup_n.png
  • Endlich mal konsistente Schriftarten und ordentliches Layout. (Entspricht ungefähr dem Visual Studio- und Office-Setup.)
  • Die Großschreibung in der MIT-Lizenz könnt ihr weglassen – es geht darum, dass der Haftungsausschluss nach amerikanischem Recht direkt erkennbar sein muss. Großschreibung ist Mittel der Wahl, aber bei kurzen Lizenzen geht es auch ohne. Und jetzt passt das Ding endlich mal komplett auf den Bildschirm!
  • Ich wollte eigentlich eine Klausel hinzufügen, die militärischen Einsatz verbietet – vergessen. Nächstes Mal.
  • Die Fortschrittsleiste verdeckt teilweise den Statustext. Fiel mir ohne Schnappschuss nie auf; ich behebe das für die nächste Version.
  • Launch startet das Programm. Wer das nicht will, kann ja X benutzen. Aber ich behaupte mal, dass das Verhältnis 9:1 und die Zeitersparnis für die Masse groß ist. (Visual Studio macht’s übrigens auch so.)

Updates
Wahrscheinlich noch häufiger als Erstinstallationen sind Updates. Da habe ich früher einfach das selbe Update nochmal abgespult, inklusive EULA-Zustimmung. Hat User verwirrt, weil ich ein Update ankündige und sie eine Installation kriegen. „Muss ich die alte Version vorher deinstallieren?“ – berechtigte Frage. WiX kann zwar Upgrades erkennen, aber das war mir zu aufwändig.

Nun blende ich direkt einen Update-Bildschirm ein. Samt Changelog, damit die Nutzer nicht denken, ich würde neue Versionen nach Lust und Laune verteilen:
update_n.png



Deinstallation

Die größte Pest war bisher das Deinstallieren. WiX führt einen durch fünf(!) Fenster durch. LIEBER GOTT, LASS ES ENDLICH VORÜBER SEIN. Hat überhaupt jemals irgendjemand alle diese Textwände gelesen?!
uninstall_o.png


Jetzt geht das ruck, zuck:
uninstall_n.png
uninstall_n.png (6.6 KiB) 6865 mal betrachtet



So. Leider keine aufregenden Sachen heute, sondern nur das. Die kleinen Fehler, die mir beim Anfertigen der Screenshots aufgefallen sind, behebe ich für die nächste Version. Ich bin einfach nur froh, dass ein zehnwöchiger Alptraum zuendegeht und warte auf Feedback …


Übrigens ist nicht alles WiX’s Schuld. Die haben auch eine neue, modernere UI in ihrem Burn-Bootstrapper. Aber damit kriegt ihr Bloat im Megabyte-Bereich.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von xq »

Ich finds gut, dass du dir auch über sowas Gedanken machst. Hut ab und Daumen hoch!
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Psycho
Establishment
Beiträge: 156
Registriert: 16.09.2002, 14:23

Re: [Projekt] Mein STL-Viewer

Beitrag von Psycho »

Ich mag ja Deine Detailverliebtheit und den Verzicht auf Bloat.

Aber ein eigener Installer..uiuiui. Das Ding einmal zu schreiben, ok. Das es auf allen möglichen Systemen so funktioniert wie es soll, schwer zu testen. Und dann das Maintainen..aber wirst schon wissen, was Du machst.

In welchen Ordner installiert sich der Viewer denn, wenn es ohne Admin-Rechte geht?
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Meine MSI ist ja „nur“ die Schnittstelle zum Windows Installer-Dienst, der dann dafür sorgt, dass es auf allen möglichen Systemen so funktioniert wie es soll. Orca bietet auch eine umfassende Validierung der Pakete.

Eine Auflistung, was mit und ohne Admin-Rechte wo landet, hast du hier: https://docs.microsoft.com/en-us/window ... on-context

Du meist wohl unter Folder Redirection das ProgramFilesFolder; das liegt bei mir unter A:\Users\Krishty\AppData\Local\Programs. Darunter dann noch ein Unterordner Papa’s Best\STL Viewer. Hier übrigens schon ein Problem: Weil da kein x86 oder x64 im Namen ist, können die Installationen unterschiedlicher Plattformen in Konflikt kommen … wird aber noch behoben.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Psycho
Establishment
Beiträge: 156
Registriert: 16.09.2002, 14:23

Re: [Projekt] Mein STL-Viewer

Beitrag von Psycho »

Oh, ich verstehe. In dem Fall nehme ich jegliche Kritik zurück. ;) Gut gemacht.
Benutzeravatar
marcgfx
Establishment
Beiträge: 2050
Registriert: 18.10.2010, 23:26

Re: [Projekt] Mein STL-Viewer

Beitrag von marcgfx »

Ich finds cool Krishty. Du zeigst wie viel Potential verschwendet wird. Wie viel besser Software sein könnte. Wir bauen immer schnellere Geräte aber verschwenden diese Leistungssteigerung durch ineffizients.
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Tiles »

Schwieriges Kapitel. Denn diese Effizienz will ja auch erst mal erarbeitet sein. Und das kostet eben Manpower. Und wieso sollte man Manpower in was investieren was schon geht? Das rechnet sich für die allermeisten Entwickler nicht.
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von xq »

Tiles hat geschrieben:Schwieriges Kapitel. [...] Und wieso sollte man Manpower in was investieren was schon geht? Das rechnet sich für die allermeisten Entwickler nicht.
Ja, ich denke, das hier das Problem in "Gute Performance ist kein Qualitätsmerkmal" liegt. Mich regt das in den letzten Jahren auch auf, dass immer mehr Leute einfach "Node+Chromium" nehmen und sagen: "das ist jetzt mein framework, weil das kann ich als webprogrammierer und darum nehm ich das jetzt". Aber: ich schweife ab, das passt wie immer mehr in den jammerthread (können ja da gerne weiterdiskutieren)


Zu Krishty: Thumbs up für die ganze Sache mit MSI, der Installer läuft auch mit Wine hervorragend und schön schnell :)
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

MasterQ32 hat geschrieben:Zu Krishty: Thumbs up für die ganze Sache mit MSI, der Installer läuft auch mit Wine hervorragend und schön schnell :)
Boah vielen Dank, das beruhigt mich mega!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [Projekt] Mein STL-Viewer

Beitrag von Chromanoid »

Voll cool, ich installiere nachher mal :) schon mal daran gedacht ein package bei http://chocolatey.org bereitzustellen?
scheichs
Establishment
Beiträge: 845
Registriert: 28.07.2010, 20:18

Re: [Projekt] Mein STL-Viewer

Beitrag von scheichs »

Ja das Setup ist wirklich blitzschnell und gab keine Probleme (Win 10 x64 - October Build). Hab jetzt auch Deinen MSI-Thread gesehen. Klasse gemacht!
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Danke, danke!

Aber das Ausschlaggebende für das Setup war nicht die Leistung, sondern das Vertrauen. Ich gebe WiX ein 60 KiB großes Programm und bekomme ein 224 KiB großes Setup zurück. Warum das so groß ist und was das macht? Keine Ahnung. Da liegt auch eine DLL drin, die größer ist, als mein Viewer. Was die tut? Weiß niemand. Versucht, doch mal das herauszufinden! (WiX ist Open Source, kann doch nicht schwer sein – am Arsch.)

Und nun soll ich dieses viel zu große Paket, über das ich nichts weiß, den Usern zur Ausführung mit Admin-Rechten geben.

Niemals. Da schreibe ich doch lieber alles selber. Beim neuen Paket kann ich zu ~80 % den Zweck des Inhalts nachvollziehen, und am Rest arbeite ich noch.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Psycho
Establishment
Beiträge: 156
Registriert: 16.09.2002, 14:23

Re: [Projekt] Mein STL-Viewer

Beitrag von Psycho »

In meiner VM ist der Text leider etwas abgeschnitten und ich muss scrollen:
Win7 classic theme
Win7 classic theme
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Ja; die neue Lizenz ist länger als die alte und passt deshalb nicht mehr auf eine Bildschirmseite. Ich habe eine Ausschlussklausel für militärische Nutzung eingefügt …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Kleine Aktualisierung: https://papas-best.com/stlviewer_en#download

Im Menü kann nun zwischen metrischen Einheiten und US-Einheiten umgeschaltet werden (Kosten: rund 400 B). Inches/Feet/Miles dürften die meisten hier aber nicht interessieren :D

Dafür ist es auch das erste Update komplett ohne UAC-Prompt, und Microsoft hat endlich den SmartScreen-False-Positive entfernt. Also doppelter Sieg gegen MS.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Wieder ein Update: https://papas-best.com/stlviewer_en#download

Ab jetzt kann man den Viewer auch ohne Grafikkarte nutzen. Er schaltet dann automatisch auf WARP um. Ich hab’s auf meinem 11 Jahre alten Netbook mit integrierter D3D-9-Grafikkarte getestet.


Zu meinen Erfahrungen mit WARP: Software Rendering hat ja keinen guten Ruf, aber in meinen Thumbnail Handlern muss ich es aus Sicherheitsgründen verwenden – sonst legt man den Computer mit einer STL-Datei lahm, die aus 1000 überlappenden Dreiecken besteht …
  1. Explorer möchte eine Vorschau für die Datei haben und lädt euren Thumbnail Handler.
  2. Der Thumbail Handler braucht angesichts des riesigen Overdraws zehn Sekunden, um die Datei zu zeichnen. Passiert auch mit Monster-GPUs, sobald genügend Überlappung da ist, da die GPU dann jeden Pixel serialisieren muss.
  3. Das triggert den GPU-Timeout. Der Grafiktreiber wird zurückgesetzt. Der Bildschirm wird kurz schwarz.
  4. Die Schritte 1–3 werden drei Mal wiederholt.
  5. Bei drei Grafiktreiber-Resets innerhalb einer Minute geht Windows von einem kaputten Grafiktreiber aus und fährt die Maschine herunter – selbst, wenn ihr kein Admin seid oder wenn gerade Admin-User am Rechner angemeldet sind.
  6. Ihr könnt das als Denial-of-Service-Attacke mit Privilege Escalation fahren. Dafür braucht es nichts weiter als eine kleine Datei mit viel Overdraw (als STL 50 KiB groß) und einen 3D-Vorschau-Handler.
Um diesen Alptraum zu umgehen, bleibt nichts anderes übrig, als in Thumbnail Handlern komplett auf Hardware-Beschleunigung zu verzichten. Also bin ich auf Microsofts Software-Renderer – WARP – umgestiegen. Und es ist geil!
  • WARP ist überall verfügbar, wo D3D 11 installiert ist. Also auf Windows 7 aufwärts. Man muss nichts mitliefern – super bequem!
  • WARP lässt sich einschalten, indem man D3D11CreateDevice() den Wert D3D_DRIVER_TYPE_WARP statt D3D_DRIVER_TYPE_HARDWARE übergibt. Mehr nicht – super einfach!
  • Die Bildqualität von WARP gleicht Hardware-beschleunigter Grafik. Inklusive Antialiasing-Modi. Kein Unterschied erkennbar.
Der Knaller war, dass mein Thumbnail Handler durch WARP deutlich schneller geworden ist als mit Hardware-Beschleunigung. Der Nvidia-Treiber auf meinem Computer lädt um die 20 DLL-Dateien bei einem Arbeitssatz von 150 MiB und einem Zeitaufwand von einer halben Sekunde – ohne einen einzigen Pixel gerendert zu haben. WARP lädt eine einzige DLL und ist einfach sofort da. Obwohl das Software-Rendering deutlich langsamer ist, wurde mein Thumbnail Handler unter’m Strich merklich schneller.

… und nun nutze ich es halt auch als Fallback, wenn kein Direct3D zur Verfügung steht. Mittlere und große Dateien ruckeln zwar, aber es ist besser als nichts.

Bei der Gelegenheit möchte ich auch nochmal die Stufen der D3D11-Unterstützung erläutern:
  1. Gar kein D3D 11 – d3d11.dll wird nicht gefunden. Falls ihr statisch gelinkt habt, lädt euer Programm gar nicht erst. Das passiert auf Windows <=XP oder auf Windows Vista ohne Platform Update. Auf Windows 7 ist D3D11 immer vorhanden.
  2. D3D11, aber keine Grafikhardware – dabei wird d3d11.dll gefunden, aber D3D11CreateDevice() schlägt fehl (jedenfalls für Hardware-Beschleunigung). Passiert auf alten PCs. Dank WARP ist dieser Fall nun kein Problem mehr für meinen Viewer.
  3. D3D11 mit passender Grafikhardware, aber ohne Treiber – dabei schlagen verschiedene D3D11-Aufrufe mit DXGI_ERROR_UNSUPPORTED fehl (ich habe vergessen, welche). Passiert häufiger, als man denkt – wenn nach einem Nvidia-Treiber-Update nicht neugestartet wurde; im Safe Mode; … lässt sich ebenfalls perfekt durch WARP lösen.
  4. D3D11 mit passender Grafikhardware und passendem Treiber – der Optimalfall. Die meisten Grafikprogramme funktionieren nur in diesem Fall.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von xq »

Coole Sache mit dem Software Rendering! Diesen Wust von 150 MB Treibern finde ich mittlerweile einfach nur noch absurd. Kann man das Feature auch testen, obwohl man eine Grafikkarte verbaut hat?
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Direkt nicht – ich wollte keinen Schalter einbauen, weil den irgendein User irgendwann mal versehentlich (oder aus Unwissenheit) umlegt und sich dann ärgert, dass der Viewer irgendwie plötzlich so langsam geworden ist, aber die anderen Programme nicht – blödes Teil!

Du würdest aber, wie gesagt, sowieso keinen Unterschied sehen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Erstes Update 2019: https://papas-best.com/stlviewer_en#download

Drag’n’Drop hatte einen Fehler, durch den die Pfeiltasten nicht mehr zur nächsten/vorherigen Datei sprangen. War trivial; ist nun behoben.

Außerdem ist das Setup kleiner. Das liegt daran, dass die Berechnung des freien Speicherplatzes beim Start keinen Cancel-Knopf mehr hat – aber der war sowieso funktionsuntüchtig weil sich dieser Schritt schlicht und einfach nicht abbrechen lässt.

Und sonst arbeite ich daran, endlich auch weitere Formate neben STL unterstützen zu können.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Neue Version: https://papas-best.com/stlviewer_en#download

Ich habe in den letzten Monaten viele Units eingebaut. Das begann bei einfacher Arithmetik (prüfen, dass Additionen auch wirklich addieren und so) und förderte schon den einen oder anderen Fehler zu Tage.

Nun bin ich mit dem Testen endlich so weit, dass das Verarbeiten von STL-Dateien geprüft werden kann. Hier habe ich in wenigen Tagen ein Dutzend Fehler gefunden; überwiegend mit dem Erkennen von Farben und Maßeinheiten. Da ging es dann meist um verrutschte Leerzeichen in Strings oder vertauschte Tabelleneinträge.

Diese Tests sehen so aus:

Code: Alles auswählen

// file header copied from thingiverse 100465
constexpr Byte data[80 + 4] = { "alibre stl binary : Units=Inch                                                  " };

// expected: inform user that this is an Alibre Design STL
// not expecting any warnings about coordinate spaces because we know Alibre always writes Z-up
constexpr UInt4B expectedEvents[] = { STL::Info::flavor }; 
test_loadSTL(
    data, expectedEvents,
    Formats::CoordinateSpace3D::xRight_zUp_rightHanded,
    0.0254f, // expected unit is inches
    { 0, 0, 0, 0 }, // no color should be recognized
    "Alibre Design"
);
… und sie haben mir erlaubt, die Heuristiken für die Erkennung noch weiter zu optimieren.

————

Ich bin damit noch nicht ganz ferig, musste aber eine neue Version rausbringen, weil ein User einen kritischen Fehler bemerkt hat: Dateien mit Leerzeichen gingen nicht.

Nun ist das ein totaler Anfängerfehler und eine der am intensivsten getesteten Sachen des Programms. Der Fehler lag dann auch nicht im Viewer selber, sondern in der Registrierung in der Windows-Shell. Dort wurde die Dateiendung .stl auf folgende Weise mit dem Viewer verknüpft:

Code: Alles auswählen

HKEY_CLASSES_ROOT\.stl\
(Default) "papa.stl"

HKEY_CLASSES_ROOT\papa.stl\shell\open\command
(Default) "C:\Program Files\Papa’s Best\STL Viewer\Best STL Viewer.exe %1"
… da fehlen Leerzeichen um den Programmpfad. Aber Windows hat Heuristiken, ihn trotzdem zu finden, … warum auch immer.

Viel schlimmer ist aber, dass Anführungszeichen um den Parameter %1 fehlen, in dem der Dateipfad übergeben wird. Und die interessante Frage ist: Wie konnte das nicht sofort auffallen?!

Stellt sich heraus: Windows hat auch eine Heuristik, die in solchen Fällen automatisch auf kurze Dateinamen zurückfällt. Mir wurde der Parameter also immer im 8.3-Format à la C:\PROGR~1\STL~1.stl übergeben. Das fiel nie auf. Okaaaay. Aber wenn Windows das immer so macht, warum funktionierte es dann plötzlich nicht mehr?!

Weil Windows es eben nicht immer so macht. Es muss da irgendeine Maschinen-spezifische Einstellung geben. Ich habe hier zwei Windows-7-Systeme, beide 64-Bittig – auf einem fällt Windows automatisch auf 8.3-Namen zurück, und auf dem anderen scheißt es auf mich und übergibt die Pfade mit Leerzeichen, und da funktioniert dann nichts mehr. Das selbe mit zwei Windows-10-Systemen. WTF?!

Ich habe keine Ahnung, was dieses Fallback ein- oder ausschaltet; ich finde es ehrlich gesagt auch richtig richtig beschissen, dass das überhaupt existiert – denn so schreibt man kaputte Programme.

Ihr solltet also ein Auge drauf haben, in allen Shell-Schlüsseln richtig Anführungszeichen zu platzieren. Ihr merkt nämlich nicht zwangsläufig, wenn die falsch sind.

————

Die Verbesserung mit dem Inlining in Visual C++, die ich letzte Woche entdeckt habe, ist übrigens auch drin. Darum ist diese Version *trotz* zahlloser Bugfixes und verbesserter STL-Heuristik kleiner als die vorherige.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Mal wieder ein Update: https://papas-best.com/stlviewer_en#download

Diese Version erinnert sich beim Start daran, ob sie beim letzten Mal maximiert war. Der Vorschlag kam per Mail und kann den Workflow tatsächlich noch weiter vereinfachen :)

Außerdem ist das Laden binärer STLs nun zu über 99 % durch Tests abgedeckt; ein paar kleine Patzer, die dabei auffielen, sind behoben.

Und hier ist zum ersten Mal der Visual Studio 2019-Compiler am Werk. Das hat die Leistung minimal verbessert, obwohl ich nun um ein paar neue Compiler-Fehler herumbauen musste …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Eine neue Version wegen einem dicken Fehler und viel Frust.

https://papas-best.com/stlviewer_de

Absturz #1:

Ich bin vor einigen Monaten auf einen Absturz im Viewer gestoßen, der durch falsche Code Generation in Visual C++ 2019 ausgelöst wurde.

(Benutzt man die rechte Maustaste, um das Modell zu verschieben, stürzt der Viewer sofort ab.)

Das ist schonmal eine richtig miese Fehlerklasse, da sie sich kaum durch Unit Tests fassen lässt: Isoliert man die Funktion, verschwindet er. Startet man die Debug-Version, verschwindet er. Usw.

Also gut, üblicher Weg: Workaround eingebaut und verteilt; Fehler an Microsoft gemeldet.


Absturz #2:

Microsoft hat falsch darüber informiert, wann der Fehler korrigiert ist. Auch der Compiler-Engineer hat sich über das Feedback-System aufgeregt. Es hat mich mehrere Abende gekostet, zu bestimmen, in welcher Version von Visual Studio der Fehler endlich korrigiert ist.

Nun war er korrigiert, und ich habe meine Workarounds entfernt, das Ganze bei mir getestet, alles funktionierte. Dann eine neue Version freigegeben, und … Post von Usern bekommen, dass das Programm kracht.

Microsoft hat den Fehler zwar korrigiert, aber in Visual Studio 2019.1 Preview 3. Die Preview-Versionen installieren in andere Verzeichnisse als die finale Version – damit man sie testen kann, ohne sich die Produktivinstallation zu zerschießen. Mein Build- und Deployment-System hat natürlich … die Produktivversion des Compilers genommen, in der der Fehler noch drin war, anstelle der korrigierten Preview-Version.

Ich habe ständig die aktuelle Version meiner Programme bei mir installiert und nutze sie produktiv (dogfood). Aber in den letzten Wochen stand einfach zu viel Entwicklungsarbeit an, so dass ich den Viewer immer aus der IDE heraus benutzt habe – und dort wurde der korrigierte Preview-Compiler genutzt.


Da ist also einiges scheiße gelaufen, und deshalb waren über viele Tage zwei kaputte Builds draußen.

————

Jetzt sollte da alles im Reinen sein. Außerdem habe ich auf Anfrage eine langsame automatische Rotation eingebaut, die sich übers View-Menü aufrufen lässt.

————

Außerdem habe ich noch mehr Deployment-Kram automatisiert; Uploads auf den Webspace und so. Darüber kann ich ja irgendwann mal schreiben.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Tiles »

Mein Beileid. Und Glückwunsch zur neuen Version :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Es hat sich wieder einiges getan, vor allem in der Windows-Integration.

https://papas-best.com/stlviewer_de

Ich habe dem Viewer nun Versionsinformationen verpasst, so dass er in Task Manager & Co. mit korrekter Beschreibung auftaucht. Die Versionsinformation kommt echt an den absurdesten Stellen zum tragen.

Außerdem taucht der Viewer nun im Öffnen mit-Dialog auf. Das ist wieder so ein Höllending: Es gibt mindestens drei unterschiedliche Versionen offizieller Doku. Alle sagen was anderes und eine spricht noch von CD-ROM und Autoplay als neuer Funktionalität, dürfte also aus der Windows-2000-Ära stammen.

Ich schweife ab – Single Point of Truth scheint dieser Artikel zu sein: https://docs.microsoft.com/en-us/window ... gistration

Mit HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths\Best STL Viewer.exe und HKEY_CLASSES_ROOT\Applications\Best STL Viewer.exe\… und korrekter Versionsinformation taucht der Viewer im Öffnen mit-Dialog auf, aber nicht in den Default Programs. Die wurden aber mit einem der neuen Windows 10-Updates sowieso abgeschafft, also was soll’s.

Das in meinen Setup-Generator zu übernehmen war auch wieder die Pest, aber so ist nun alles zukunftssicher für die große kommende Version, in der mehr als STL unterstützt wird …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
udok
Beiträge: 40
Registriert: 01.02.2022, 17:34

Re: [Projekt] Mein STL-Viewer

Beitrag von udok »

Ich wollte mich für den super Thread hier bedanken!

Vor allem die vielen Praxistipps zum MS-Compiler, dem Windows Installer,
und den Problemen mit der Antivieren-SW machen den Thread richtig lesenswert.

Ich finde es super, dass der STL-Viewer gerade mal 70 kByte hat, und
dabei noch schnell und einfach zu bedienen ist.

Ich komme eher aus hardwarlastigen Gebieten (Embedded-C Entwicklung),
und habe mit Windows Grafikprogrammierung nicht viel am Hut.

Aber ich wollte schon länger mal ein relativ einfaches GUI Program entwickeln,
und wenn es die Möglichkeit gibt, den Source-Code als Lernvorlage zu bekommen,
wäre das echt genial.
(Die Sourcen müssen nicht schön oder gut dokumentiert sein, mir ist es wichtig
das die Anzahl der Codezeilen überschaubar ist).

Ich habe mich hier im Forum frisch angemeldet, und Email ist
noch nicht freigeschaltet... Emails lesen geht aber hoffentlich...

Grüße,
Udo
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Ich grabe den Thread nach einigen Jahren mal wieder aus … Ein YouTube-Kanal für Maker hat ein Video über meine STL-Tools gemacht:


Das ist schon das vierte oder fünfte Video, aber das erste mit mehr als 100 Views.

Ich hatte nichts damit zu tun, freue mich aber sehr darüber, dass meine Projekte erwähnenswert sind. Und über mehr Traffic auf meiner Seite. Und über neue Einsichten aus Kommentaren und E-Mails – bspw., dass Microsoft so etwas nun als Teil ihrer Power Toys anbietet (und das für mehr Dateiformate als nur STL). Muss ich mal ausprobieren.

Was die Entwicklung des Programms an sich betrifft: Das Feedback staut sich hier gerade, weil Real Life und Job mir gerade sehr wenig Spielraum lassen. Ich habe einen großen, großen Patch im Ofen, der leider noch nicht rund genug für ein Release ist. Vielleicht wird es dieses Jahr noch was, wenn ich meinen ganzen Resturlaub nehme …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
scheichs
Establishment
Beiträge: 845
Registriert: 28.07.2010, 20:18

Re: [Projekt] Mein STL-Viewer

Beitrag von scheichs »

Hey, Glückwunsch! Eine winzige Sache die mir aufgefallen ist... Is' beim Setup vom Viewer der Text vom Thumbnail Setup drin? Ansonsten mega, dass Du die Tools der 3D-Printer Commmunity -for free- zur Verfügung stellst und vor allem da so viel Leidenschaft reinsteckst. Dasselbe gilt übrigens auch für dein AceCombat-Projekt!
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] Mein STL-Viewer

Beitrag von Krishty »

Adleraugen! Das muss ein Schnittfehler sein. Habe die Setups gerade hier geprüft und der Titel stimmt.

Er hat mir auch gerade die Freigabe erteilt, das Video auf meiner Seite einzubinden <3
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten