2017-08-29 3 views
3

Wir machen den Client derzeit den Objektstatus abrufen, wenn die Seite geladen wird (wodurch die 'ausstehenden' Objekte im Modell in verschiedene Farben werden). Dann fragen wir nach Änderungen, um die Farbgebung zu aktualisieren (Erstens: Das ausstehende Objekt wird beim Laden des Viewers farbig und dann wird der Status erneut überprüft und geändert, damit Forge diese in einer anderen Farbe rendern und ihre alte Farbe/Material speichern kann. wenn die Abfrage eine Änderung erhalten, dass ein Objekt nicht mehr gefärbt werden soll, sagt er Forge wieder das alte Farbe/Material verwendenÄndern von Materialien in Forge

das Problem:. wir haben festgestellt, was das Problem ist, aber wir couldn Ich finde heraus, wie man es reparieren kann Das Problem ist, dass das Ändern von Materialien in Forge nach dem Start nicht mehr funktioniert, es funktioniert nur in den ersten ~ 3 Sekunden oder so (die Materialien wurden verwendet, um die Farben zu zeigen)

Einstellung o Verlays funktioniert auch nach den ersten ~ 3 Sekunden (zeigt Überlagerungen anstelle von Materialien, um die Farben anzuzeigen). Das wollen wir nicht erreichen. Das sieht nicht optimiert aus, weil Overlays durch alles angezeigt werden.

Die Materialien scheinen jedoch "gesperrt" zu sein, da sie nach den ersten ~ 3 Sekunden nicht mehr verändert werden können. Es scheint, als wären sie nicht aktualisiert oder etwas

In den Beispielen fanden wir, dass sie viewer.impl.invalidate (true) verwendet, um den Forge-Viewer zu aktualisieren, aber das macht nichts nach ~ 3 Sekunden.

Wir haben auch jede Kombination von viewer.impl.invalidate (true, true, true) sowie setting material.needsUpdate auf true versucht und auch versucht, die gesamte Szene neu zu rendern.

Wir haben auch gefunden: https://github.com/mrdoob/three.js/issues/790, aber wir konnten nicht einen guten Weg finden, das in Forge zu tun, wir versuchten viewer.requestSilentRender(), aber das tat auch nichts.

Wie auch immer, wir haben alles versucht, was wir uns vorstellen konnten und konnten online finden, damit die Materialien funktionieren, aber nichts machte einen Unterschied. Wir suchen jemanden, der erfahrener ist, wie Forge arbeitet, der sehen kann, was der Materialcode falsch macht.

Wie für den Inhalt, hier ist der gesamte Code müssen Sie verstehen, was geschieht: DROPBOX LINK

Und hier ist ein kleiner Teil der Datei „index.html“, die die Farbe setzt:

try 
{ 
    viewer.restoreAllColorOverlays(); //for materials instead of overlays: viewer.restoreAllColorMaterials(); 
    $.each(colors, function(color, selectionIds) 
    { 
     viewer.setColorOverlay(selectionIds, color); //for materials instead of overlays: viewer.setColorMaterial(selectionIds, color); 
    }); 
} 
catch(error) 
{ 
    console.error(error); 
} 

Antwort

0

Ich habe keine Ahnung, wie Sie Ihre App implementieren, also erzähle ich nur, was ich in Ihren Codes gefunden habe. Wenn Sie das von Ihnen angesprochene Problem lösen möchten, können Sie einen reproduzierbaren Fall in Erwägung ziehen, der Ihnen zeigt, dass ich es gerne an unser Entwicklerteam weiterleiten werde. Folgende Elemente sollten im reproduzierbaren Fall sein:

  1. Eine kurze genaue Beschreibung dessen, was Sie erreichen möchten. Das Verhalten, das Sie beobachten, im Vergleich zu dem, was Sie erwarten, und warum dies ein Problem ist.
  2. Ein vollständiges noch minimales Probenquelle Modell einen Test in.
  3. Ein vollständigen noch minimal Forge app die ausgeführt werden kann und auf Fehler mit einem einfachen Verfahren ausgeführt sein Verhalten lebt im Beispielmodell zu analysieren.
  4. Ein vollständiges, aber minimal reines three.js app, das den gewünschten Shader-Effekt ausführen und demonstrieren kann.Hinweis. Forge Viewer verwendet r71 three.js.
  5. Detaillierte Schritt-für-Schritt-Anweisungen zur Reproduktion des Problems, z. welches Element zu holen, was Befehl starten usw.

Wenn Ihr reproduzierbarer Fall hier nicht öffentlich gebucht werden kann, bitte senden Sie es an die [email protected] und sensible Daten oder Informationen entfernen, bevor Sie senden.

=== Etwas, das ich in die Codes gefunden:

fand ich hier einige falsche Typen und fehlende Aktionen in Ihrer ColorMaterial Erweiterung. Die Farbeigenschaft eines Materials sollte der Typ THREE.Color sein. Hier ist meine Änderung:

Autodesk.Viewing.Viewer3D.prototype.setColorMaterial = function(objectIds, color) 
    { 
     if(!(color instanceof THREE.Color)) throw 'Invalid argument: Color'; 

     var material = new THREE.MeshPhongMaterial 
     ({ 
      color:  color, 
      opacity: 0.8, 
      transparent: true 
     }); 

     viewer.impl.matman().addMaterial('ColorMaterial-' + new Date().getTime(), material, true); 

     // ........... 
    }; 

Sein Ergebnis ist hier: enter image description here

In ColorOverlay Erweiterung, die Art der Materialfarbe Eigenschaft auch falsch ist, sollte es eine Art von THREE.Color sein, auch. Ändern Sie es in THREE.Color sollte gut funktionieren. Darüber hinaus ist Overlay Cover für 3D-Objekte, also sollten Sie viewer.hide() mit Ihrem setColorOverlay() zusammen anrufen. Andernfalls sieht es nicht wie ein transparentes Objekt aus.

Ohne hidding 3D-Objekt der Wand: enter image description here

ausblenden 3D-Objekt der Wand: enter image description here

+0

.Hi, vielen Dank für Ihre Antwort. Wir haben die Schritte wie in Teil 2 Ihrer Antwort beschrieben durchgeführt. Leider hat es nicht dazu geführt, dass die Materialien funktionieren, aber die Overlays sehen jetzt viel besser aus. Wir wären sehr daran interessiert, unser Projekt mit [email protected] zu teilen – artobii

Verwandte Themen