15 #ifndef __GUI_DetailLook__
16 #define __GUI_DetailLook__
57 class gui_GeoInstanceInfo;
74 const char *detail_name = NULL,
75 SetDetailMode
mode = REFERENCE_DETAIL);
85 if (myRefCount.relaxedLoad() == 0)
89 virtual const char *className()
const;
95 const char *
getName()
const {
return myDetailName; }
96 void setName(
const char *
name);
104 OP_Node *getShopsRelativeTo()
const;
105 int getVisualizedNodeId()
const;
118 bool show_selections,
130 void updateForRender(
135 const char *view_name,
141 virtual void cleanupAfterRender(
RE_Render *
r);
149 { myMatUpdatePending =
up; }
151 {
return myMatUpdatePending; }
157 void reactivateRetired();
163 void getGeometryRenders(
167 void setSingleGeometryRender(
OP_Node *node);
168 void resetGeometryRender();
174 void clearSelectData();
175 bool hasSelectData()
const;
182 virtual bool isPickable()
const;
187 int & )
const {
return false; }
195 {
return drawLit() && !isWireframeOnly(); }
201 bool hasTransparency()
const;
204 bool hasReflectiveMaterial()
const;
212 virtual int getNumDetailHandles()
const;
215 virtual void appendDOPDataName(
UT_String &str,
int i,
216 bool descriptive)
const;
217 virtual const SIM_Data *getDOPData(
int i)
const;
218 virtual const SIM_RootData *getDOPRootData(
int i)
const;
219 virtual bool getIsDetailTempSelected(
int i)
const;
221 virtual UT_Vector4F getDetailPosition(
int i)
const;
228 void signalNodeSelectionChanged(
int i)
const;
230 virtual void setTempComponentSelection(
234 virtual void releaseAllTempComponentSelections();
237 { myEnableDOPDisplay =
enable; }
239 {
return myEnableDOPDisplay; }
241 { myIsChosenDopnet = ischosen; }
243 {
return myIsChosenDopnet; }
245 bool hasUserSelection()
const;
247 void setLightArray(
RE_Light *lights[],
int nLights = 0);
251 void enableAllLights();
257 {
return myEnabledLights; }
259 static RE_Light *getGlobalHeadlight();
261 void setUseWireColor(
int c);
262 void setWireColor(
const UT_Color &clr);
267 {
return myWireColor; }
272 { myXform = mat; myXformDirty =
true; }
278 void setAllowShadingOpenCurves(
bool val);
280 {
return myFlag.shade_open_curves; }
282 void setDisplayAsSubdiv(
bool val);
289 if(!myFlag.overrideDisplay)
291 if(myFlag.display != display)
292 myDisplaySetDirty=
true;
293 myFlag.display = display;
300 { myFlag.shouldPick = picking; }
305 if(myFlag.templated!=templated)
306 myDisplaySetDirty=
true;
307 myFlag.templated = templated;
310 {
if(myFlag.footprinted!=footprint)
311 myDisplaySetDirty=
true;
312 myFlag.footprinted = footprint; }
314 { myDisplaySetDirty |= (myFlag.highlighted != highlight);
315 myFlag.highlighted = highlight; }
317 { myFlag.xray = xray; }
319 {
if(myFlag.targetoutput !=target_output)
320 myDisplaySetDirty=
true;
321 myFlag.targetoutput = target_output; }
322 void setCurrentOutput(
bool current_output);
323 void setDrawLit(
int onoff);
324 void setDrawCookComponentSelection(
bool enable);
326 void setSecondarySelection(
int onoff);
327 void setObjSelection(
bool obj_sel);
328 void setObjCurrent(
bool obj_current);
329 void setObjSelectionHint(
bool obj_sel_hint);
330 virtual void setObjGhost(
bool obj_ghost,
OP_Node *for_node);
332 { myFlag.wireframeOnly = wireframe_only; }
335 if(myFlag.active_model != active_model)
337 myDisplaySetDirty =
true;
338 myFlag.active_model = active_model;
345 static void setUVObject(
OP_Node *
object);
346 bool isUVObject()
const;
348 void setOnionSkinning(
int onion_skin_state);
358 { myFlag.use_frustum_culling = frust_cull; }
360 {
return myFlag.use_frustum_culling && !myFlag.onion_skin
361 && !myLastPointInstanceState &&
362 getUsesGeoRenderInstancing(); }
364 virtual void applyBundleToDisplayedObjects(
OP_Bundle *bdl,
int object_vis_change_count);
370 myFlag.prevDisplay = myFlag.display;
371 myFlag.display = onoff;
372 myFlag.overrideDisplay =
true;
377 myFlag.display = myFlag.prevDisplay;
378 myFlag.overrideDisplay =
false;
382 bool isDetailDisplayOn()
const;
392 virtual bool isXray()
const {
return myFlag.xray || myFlag.geoxray || myIsXRay; }
395 virtual bool isGuide()
const {
return false; }
396 virtual bool useWireColor(
int node_id)
const {
return myFlag.usewireclr; }
397 bool drawLit()
const {
return myFlag.drawLit; }
400 {
return myFlag.drawCookComponentSelection; }
412 {
return myInstanceUseTransform; }
415 {
return myFlag.needsAlphaPass; }
417 { myFlag.needsAlphaPass = e; }
427 if(myFlag.forceHidden != on)
429 myDisplaySetDirty=
true;
430 myFlag.forceHidden = on;
437 return myFlag.forceAsUVObject;
441 myFlag.forceAsUVObject = on;
447 if(myFlag.castShadows != on)
449 myDisplaySetDirty=
true;
450 myFlag.castShadows = on;
459 int showGroupColorVersion()
const;
460 void setShowGroupColorVersion(
int version);
464 int use_vertex)
const;
469 void invalidateBBox();
474 { myViewportMask =
mask; }
476 {
return myViewportMask; }
479 bool shownInViewport(
int viewport_id)
const;
480 void showInViewport(
int viewport_id);
481 void showInAllViewports();
484 int serial,
int serial2,
int id)
492 if(!myDisplaySetDirty)
494 return privGetDisplaySetType();
498 {
return privGetDisplaySetType(); }
505 static void renderQueuedObjectAxes(
RE_Render *
r,
517 ourChosenDopnetPathLen = ourChosenDopnetPath.length();
521 ourChosenDopnetPath = 0;
522 ourChosenDopnetPathLen = 0;
527 return (
const char *) ourChosenDopnetPath;
532 if( ourChosenDopnetPathLen > 0 &&
533 !strncmp(ourChosenDopnetPath, path, ourChosenDopnetPathLen) &&
534 (path[ourChosenDopnetPathLen] ==
':' ||
535 path[ourChosenDopnetPathLen] ==
'\0') )
547 { myObjectLOD =
lod; }
549 void useObjectMaterials(
bool use_obj_mat);
553 { myFlag.showMaterials = show; }
555 {
return myFlag.showMaterials; }
557 virtual bool isTimeDependent(
fpreal t);
558 bool areInstancesTimeDependent(
fpreal t);
563 static void setActiveViewport(
const char *
name,
int id);
565 static const char *getActiveViewport();
567 static int getActiveViewportId();
569 static const char *getActiveViewportMatString();
572 static void visibleViewportTypes(
bool view_3d,
bool view_2d);
573 static bool hasVisible3D();
574 static bool hasVisibleUV();
578 static int64 visibleUVAttribSerial();
580 enum { VIEW_3D = 0x1, VIEW_2D = 0x2 };
581 static void visibleViewportBoundaries(
584 UT_Array<std::pair<UT_StringHolder,int> > &uvs);
585 static bool hasVisibleBoundaries();
586 static bool visible3DBoundary();
590 &visibleUVBoundaries();
593 {
return myActiveVisualizers; }
595 {
return myActiveVisualizers.entries(); }
597 { myActiveVisualizers.append(vis_id);
598 myCollectVisPrimitives.append(0); }
601 myActiveVisualizers.clear();
602 myCollectVisPrimitives.clear();
605 {
return myCollectVisPrimitives(i); }
607 { myCollectVisPrimitives(i) = prim; }
610 void checkForErrors();
614 { myRedrawValue = redraw; }
616 {
if(myRedrawValue) myRedrawValue->changed(NULL); }
620 myFlag.visualizerCheck =
true;
621 myFlag.needVisualizerSetup =
false;
625 myFlag.visualizerCheck =
false;
626 myFlag.needVisualizerSetup = setup;
630 return (myFlag.needVisualizerSetup ||
631 myFlag.visualizerCheck);
646 if (!record_viewport && !record_memory)
673 void cacheNodePtrs();
676 void initInstanceTable();
686 void finalizeInstanceTable();
690 bool createObjectInstance(
const char *instance_path,
693 gui_Instance &instance,
698 void removeDeletedGeos();
709 bool show_selections,
733 bool setupPointInstancing(
bool show_selections,
740 void updateInstancingStatus();
744 void freeCachedDetails();
745 void freeDeletedCachedDetails();
747 int getNumOnionSkins()
const;
754 void clearOnionSkins();
756 class GUI_DetailLookFlags
759 GUI_DetailLookFlags()
772 targetoutput =
false;
773 currentoutput =
false;
776 drawCookComponentSelection =
true;
777 needsAlphaPass =
false;
779 secondarySelection =
false;
780 objSelection =
false;
782 objSelectionHint =
false;
784 wireframeOnly =
false;
786 prevShouldPick =
true;
787 overrideDisplay =
false;
788 displayAsSubdiv =
false;
789 shaders_used =
false;
790 active_model =
false;
791 being_deleted =
false;
792 shade_open_curves =
false;
794 onion_skin_deform =
false;
795 use_frustum_culling =
true;
796 errorsChecked =
false;
797 visualizerCheck =
false;
798 needVisualizerSetup =
true;
800 forceAsUVObject =
false;
801 showMaterials =
true;
823 drawCookComponentSelection:1,
826 secondarySelection:1,
842 use_frustum_culling:1,
845 needVisualizerSetup:1,
851 GUI_DetailLookFlags myFlag;
855 int myShowGroupColorVersion;
878 unsigned int myViewportMask;
879 bool myEnableDOPDisplay;
880 bool myIsChosenDopnet;
881 bool myNullDetailFlag;
883 bool myInitializedFlag;
884 bool myCopyDetailFlag;
887 mutable bool myDisplaySetDirty;
890 fpreal myPrevInstanceFract;
891 int myPrevInstanceLimit;
892 int myInstanceFractSerial;
893 int64 myPointInstanceVersion;
894 int myInstanceXformVersion;
896 int myInstanceObjectID;
897 bool myHasInstancing;
898 bool myHasPointInstancing;
899 bool myInstanceUseTransform;
900 bool myHasTransparentPrimitives;
901 bool myLastPointInstanceState;
902 bool myHasInstanceFile;
907 int64 myOpErrorPosted;
918 bool myCachingDetails;
920 int64 myCacheSopSerial;
922 bool myHasUnlitGeometry;
924 bool myUpdatePending;
925 bool myMatUpdatePending;
927 exint myVisUpdateTime;
930 exint myVisUpdateVersion;
938 myCollectVisPrimitives;
945 class gui_OnionSkinDetail
949 : myDetail(dh), myRender(NULL), myUsedFlag(true)
951 myDetail.addPreserveRequest();
953 ~gui_OnionSkinDetail();
959 typedef std::pair<exint,int64> gui_OnionSkinId;
961 gui_OnionSkins myOnionSkins;
963 class gui_OnionSkinLayer
967 : myDetailID(id), myTime(t), myRender(NULL),
968 myTransform(mat), myIsPreFrame(pre) {}
970 gui_OnionSkinId myDetailID;
978 class CachedDetailPos {
992 void computePosition(
const GU_Detail *detail)
1006 return myCacheCount == p.myCacheCount
1007 && myUniqueId == p.myUniqueId;
1023 static int ourChosenDopnetPathLen;
1024 static bool ourPickDisplayListUsedFlag;
1036 return myNullDetailFlag ? 0 : 1;
1043 return myCachedObject;
1086 #if UT_ASSERT_LEVEL > 2
static const char * getActiveViewportMatString()
static bool matchesChosenDopnetPath(const char *path)
virtual bool getUsesGeoRenderInstancing() const
int64 getNodeErrorID() const
void setTemplate(bool templated)
virtual const PXL_Raster * getImage(RE_Render *)
const UT_ValArray< RE_Light * > & getLights() const
void setPivot(const UT_Vector3F &pivot)
bool usesFrustumCulling() const
void materialUpdatePending(bool up)
OP_Node * getObject() const
int getVersion(int version)
void setForceAsUVObject(bool on)
virtual bool isObjectList() const
bool getIsChosenDopnet() const
void setNeedsAlphaPass(bool e)
void setCollectVisPrimitive(int i, GR_Primitive *prim)
int numActiveVisualizers() const
void setSnappable(int onoff)
bool getBBox(UT_BoundingBox *bbox, const GA_PrimitiveGroup *g=nullptr) const
UT_SharedPtr< GUI_GUSelectionProxy > GUI_GUSelectionProxyHandle
void setShowMaterials(bool show)
bool hasInstanceFile() const
bool useInstancerObjTransform() const
void setXform(const UT_Matrix4D &mat)
bool isPointInstanced() const
bool forceAsUVObject() const
void setFootprint(bool footprint)
bool isDetailDisplayOn() const
bool isSymbolicGeometry() const
UT_IntrusivePtr< GUI_DetailLook > GUI_DetailLookPtr
GLsizei const GLchar *const * path
GA_API const UT_StringHolder rot
A collection of vertex arrays defining a geometry object. This class acts as a wrapper around multipl...
void setRedrawValue(UI_Value *redraw)
constexpr SYS_FORCE_INLINE T & z() noexcept
void setViewSerialNum(int num, int num_2d, int id)
void setForceHidden(bool on)
bool isInitialized() const
bool isFootprinted() const
bool isObjCurrent() const
bool isDrawableLook() const
GLuint const GLchar * name
virtual bool needsOverlayRender()
#define OP_INVALID_NODE_ID
OP_Network * getCreator() const
bool isWireframeOnly() const
GUI_DisplaySetType
Context specific display options for geometry states.
int getVisualizedNodeId() const
void needVisualizerSetup(bool setup)
virtual void setDisplaySavingPrevValue(int onoff)
virtual bool useWireColor(int node_id) const
IFDmantra you can see code vm_image_mplay_direction endcode When SOHO starts a render
void setHighlight(bool highlight)
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
void setIsDrawableLook(bool dr)
bool getEnableDOPDisplay() const
void setViewportMask(unsigned mask)
#define UT_ASSERT_MSG(ZZ,...)
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
UT_Matrix4D getXform() const
const char * getFullPath(UT_String &str) const
void setPicking(bool picking)
virtual bool isGuide() const
void setGeometry(bool enable)
UT_Array< GUI_GeoRender * > myStashedGeoRenderShared
bool isSecondarySelection() const
void setCastShadows(bool on)
UT_Vector3T< T > center() const
bool showMaterials() const
bool isUpdatePending() const
const GR_CommonDispOption & common() const
static const UT_Matrix4T< fpreal > & getIdentityMatrix()
bool isMaterialUpdatePending() const
void setObjectLOD(GEO_ViewportLOD lod)
virtual bool isDopGuide() const
UT_Array< GUI_SetupResult > myOnionSkinSetupResults
void setRender(bool render)
RE_Light * getLight(int i) const
bool isHighlighted() const
virtual void resetOverrideUsingSavedValue()
virtual bool hasPickPriority() const
virtual UT_Color getWireColor(int id) const
bool isOnionSkinning() const
virtual int getNumDetailHandles() const
void setTargetOutput(bool target_output)
UT_Map< int, UT_Array< GUI_GroupDataHandle > > mySelectData
UT_SharedPtr< GU_Selection > GU_SelectionHandle
void setEnableDOPDisplay(bool enable)
bool isActiveModel() const
exint getUniqueId() const
GT_API const UT_StringHolder version
virtual bool isXray() const
GUI_DisplaySetType getDisplaySetType() const
UT_Array< GUI_GeoRender * > myGeoRender
GLfloat GLfloat GLfloat GLfloat h
static void setGlobalViewSerial(GUI_DisplayOption &disp, int serial, int serial2, int id)
GR_Primitive * getCollectVisPrimitive(int i)
virtual void setDetailDisplay(bool display)
unsigned int getViewportMask() const
void setActiveModel(bool active_model)
OP_Node * getShopsRelativeTo() const
UT_Vector4T< fpreal32 > UT_Vector4F
void clearActiveVisualizers()
GA_API const UT_StringHolder up
bool needsAlphaPass() const
GEO_ViewportLOD getObjectLOD() const
GUI_API size_t format(char *buffer, size_t buffer_size, const GUI_DetailLook &v)
GA_GroupType
An ordinal enum for the different types of groups in GA.
bool isTargetOutput() const
void setXRayOverride(bool xray)
bool isObjSelectionHint() const
int64 getMetaCacheCount() const
int64 getPrimDecorMask() const
void resetVisualizerCheck()
GA_API const UT_StringHolder pivot
const UT_ValArray< RE_Light * > & getEnabledLights() const
bool drawCookComponentSelection() const
void updatePending(bool up)
static OP_Node * lookupNode(int unique_id, bool include_proxy=false)
void setIsChosenDopnet(bool ischosen)
bool runVisualizerSetup() const
static void setGlobalChosenDopnet(OP_Node *dopnet)
void useFrustumCulling(bool frust_cull)
std::pair< GUI_GeoRender *, bool > gui_CachedInstGeo
bool isOnionSkinDeformation() const
const UT_IntArray & getActiveVisualizers() const
const char * getName() const
PerfMonAutoMatEvent(const GUI_DetailLook &look)
UT_Array< GUI_GeoRender * > myOnionSkinRenders
bool isObjSelection() const
constexpr SYS_FORCE_INLINE T & y() noexcept
static const char * getGlobalChosenDopnetPath()
void setWireframeOnly(bool wireframe_only)
virtual bool getPickPriority(const GR_PickRecord &pick, int &) const
void setShowAxes(bool show_axes)
bool isCurrentOutput() const
UT_Array< GUI_SetupResult > mySetupResults
void appendActiveVisualizer(int vis_id)
GUI_DisplaySetType updateDisplaySetType()
constexpr SYS_FORCE_INLINE T & x() noexcept
bool shadeOpenCurves() const