15 #ifndef __GUI_DetailLook__
16 #define __GUI_DetailLook__
59 class gui_GeoInstanceInfo;
76 const char *detail_name = NULL,
77 SetDetailMode
mode = REFERENCE_DETAIL);
87 if (myRefCount.relaxedLoad() == 0)
91 virtual const char *className()
const;
96 const char *
getName()
const {
return myDetailName; }
97 void setName(
const char *
name);
105 OP_Node *getShopsRelativeTo()
const;
106 int getVisualizedNodeId()
const;
119 bool show_selections,
126 for(
auto r : mySetupResults)
140 void updateForRender(
145 const char *view_name,
151 void updateForRenderInit(
156 const char *view_name,
166 void updateForRenderParallel(
171 const char *view_name,
189 { myMatUpdatePending =
up; }
191 {
return myMatUpdatePending; }
197 void reactivateRetired();
203 void getGeometryRenders(
207 void setSingleGeometryRender(
OP_Node *node);
208 void resetGeometryRender();
214 void clearSelectData();
215 bool hasSelectData()
const;
222 virtual bool isPickable()
const;
227 int & )
const {
return false; }
235 {
return drawLit() && !isWireframeOnly(); }
241 bool hasTransparency()
const;
244 bool hasReflectiveMaterial()
const;
252 virtual int getNumDetailHandles()
const;
255 virtual void appendDOPDataName(
UT_String &str,
int i,
256 bool descriptive)
const;
257 virtual const SIM_Data *getDOPData(
int i)
const;
258 virtual const SIM_RootData *getDOPRootData(
int i)
const;
259 virtual bool getIsDetailTempSelected(
int i)
const;
261 virtual UT_Vector4F getDetailPosition(
int i)
const;
268 void signalNodeSelectionChanged(
int i)
const;
270 virtual void setTempComponentSelection(
274 virtual void releaseAllTempComponentSelections();
277 { myEnableDOPDisplay = enable; }
279 {
return myEnableDOPDisplay; }
281 { myIsChosenDopnet = ischosen; }
283 {
return myIsChosenDopnet; }
285 bool hasUserSelection()
const;
288 { myUseNewLightInterface=i;}
290 {
return myUseNewLightInterface; }
291 void addObjLight(
int obj_light_id);
292 bool hasObjLight(
int obj_light_id)
const;
293 void removeObjLight(
int obj_light_id);
294 void clearObjLights();
298 void setLightArray(
RE_Light *lights[],
int nLights = 0);
303 void enableAllLights();
309 {
return myEnabledLights; }
312 static RE_Light *getGlobalHeadlight(
bool for_solaris=
false);
313 static RE_Light *getGlobalDomelight();
315 void setUseWireColor(
int c);
316 void setWireColor(
const UT_Color &clr);
322 {
return myWireColor; }
325 {
return myOutlineColor; }
329 { myEmitColor =
color; }
335 { myXform = mat; myXformDirty =
true; }
337 {
return isObjSolo() ? (myXform*mySoloXform) :myXform; }
341 void setAllowShadingOpenCurves(
bool val);
343 {
return myFlag.shade_open_curves; }
345 void setDisplayAsSubdiv(
bool val);
352 if(!myFlag.overrideDisplay)
354 if(myFlag.display != display)
355 myDisplaySetDirty=
true;
356 myFlag.display = display;
363 { myFlag.shouldPick = picking; }
368 if(myFlag.templated!=templated)
369 myDisplaySetDirty=
true;
370 myFlag.templated = templated;
373 {
if(myFlag.footprinted!=footprint)
374 myDisplaySetDirty=
true;
375 myFlag.footprinted = footprint; }
377 { myDisplaySetDirty |= (myFlag.highlighted != highlight);
378 myFlag.highlighted = highlight; }
380 { myFlag.xray = xray; }
382 {
if(myFlag.targetoutput !=target_output)
383 myDisplaySetDirty=
true;
384 myFlag.targetoutput = target_output; }
385 void setCurrentOutput(
bool current_output);
386 void setDrawLit(
int onoff);
387 void setDrawCookComponentSelection(
bool enable);
389 void setSecondarySelection(
int onoff);
390 void setObjSelection(
bool obj_sel);
391 void setObjCurrent(
bool obj_current);
392 void setObjSelectionHint(
bool obj_sel_hint);
393 virtual void setObjGhost(
bool obj_ghost,
OP_Node *for_node);
395 bool setObjSolo(
bool solo,
const UT_Matrix4D *solo_transform=
nullptr);
400 { myFlag.wireframeOnly = wireframe_only; }
402 { myFlag.outline = outline; }
404 { myFlag.separateOutline =
b; }
406 { myFlag.beautyRender =
b; }
409 if(myFlag.active_model != active_model)
411 myDisplaySetDirty =
true;
412 myFlag.active_model = active_model;
422 static void setUVObject(
OP_Node *
object);
423 bool isUVObject()
const;
425 void setOnionSkinning(
int onion_skin_state);
435 { myFlag.use_frustum_culling = frust_cull; }
437 {
return myFlag.use_frustum_culling && !myFlag.onion_skin
438 && !myLastPointInstanceState &&
439 getUsesGeoRenderInstancing(); }
441 virtual void applyBundleToDisplayedObjects(
OP_Bundle *bdl,
int object_vis_change_count);
447 myFlag.prevDisplay = myFlag.display;
448 myFlag.display = onoff;
449 myFlag.overrideDisplay =
true;
454 myFlag.display = myFlag.prevDisplay;
455 myFlag.overrideDisplay =
false;
459 bool isDetailDisplayOn()
const;
471 virtual bool isXray()
const {
return myFlag.xray || myFlag.geoxray || myIsXRay; }
474 virtual bool isGuide()
const {
return false; }
475 virtual bool useWireColor(
int node_id)
const {
return myFlag.usewireclr; }
476 bool drawLit()
const {
return myFlag.drawLit; }
479 {
return myFlag.drawCookComponentSelection; }
499 {
return myInstanceUseTransform; }
500 OBJ_Node *getInstanceObject()
const;
503 {
return myFlag.needsAlphaPass; }
505 { myFlag.needsAlphaPass = e; }
515 if(myFlag.forceHidden != on)
517 myDisplaySetDirty=
true;
518 myFlag.forceHidden = on;
525 return myFlag.forceAsUVObject;
529 myFlag.forceAsUVObject = on;
535 if(myFlag.castShadows != on)
537 myDisplaySetDirty=
true;
538 myFlag.castShadows = on;
547 int showGroupColorVersion()
const;
548 void setShowGroupColorVersion(
int version);
552 int use_vertex)
const;
557 void invalidateBBox();
562 { myViewportMask =
mask; }
564 {
return myViewportMask; }
567 bool shownInViewport(
int viewport_id)
const;
568 void showInViewport(
int viewport_id);
569 void showInAllViewports();
572 int serial,
int serial2,
int id)
580 if(!myDisplaySetDirty)
582 return privGetDisplaySetType();
586 {
return privGetDisplaySetType(); }
606 ourChosenDopnetPath =
path;
610 ourChosenDopnetPath.clear();
615 return ourChosenDopnetPath.c_str();
620 auto len = ourChosenDopnetPath.length();
622 && !strncmp(ourChosenDopnetPath, path, len)
623 && (path[len] ==
':' || path[len] ==
'\0');
633 { myObjectLOD =
lod; }
635 void useObjectMaterials(
bool use_obj_mat);
639 { myFlag.showMaterials = show; }
641 {
return myFlag.showMaterials; }
646 { myFactoryMaterialGL = material; }
648 { myFactoryMaterial = material; }
651 {
return myFactoryMaterialGL || myFactoryMaterial; }
653 {
return myFactoryMaterialGL; }
655 {
return myFactoryMaterial; }
658 virtual bool isTimeDependent(
fpreal t);
659 bool areInstancesTimeDependent(
fpreal t);
671 static void setActiveViewport(
const char *
name,
int id);
673 static const char *getActiveViewport();
675 static int getActiveViewportId();
677 static const char *getActiveViewportMatString();
680 static void visibleViewportTypes(
bool view_3d,
bool view_2d);
681 static bool hasVisible3D();
682 static bool hasVisibleUV();
686 static int64 visibleUVAttribSerial();
688 enum { VIEW_3D = 0x1, VIEW_2D = 0x2 };
689 static void visibleViewportBoundaries(
692 UT_Array<std::pair<UT_StringHolder,int> > &uvs);
693 static bool hasVisibleBoundaries();
694 static bool visible3DBoundary();
698 &visibleUVBoundaries();
701 {
return myActiveVisualizers; }
703 {
return myActiveVisualizers.entries(); }
705 { myActiveVisualizers.append(vis_id);
706 myCollectVisPrimitives.append(0); }
709 myActiveVisualizers.clear();
710 myCollectVisPrimitives.clear();
713 {
return myCollectVisPrimitives(i); }
715 { myCollectVisPrimitives(i) = prim; }
718 void checkForErrors();
722 { myRedrawValue = redraw; }
724 {
if(myRedrawValue) myRedrawValue->changed(NULL); }
728 myFlag.visualizerCheck =
true;
729 myFlag.needVisualizerSetup =
false;
733 myFlag.visualizerCheck =
false;
734 myFlag.needVisualizerSetup = setup;
738 return (myFlag.needVisualizerSetup ||
739 myFlag.visualizerCheck);
745 {
return myContextMicroNode.get(); }
747 { myContextMicroNode = std::move(micronode); }
749 void gpuMemoryUsage(
exint &used_bytes,
750 exint &ununsed_bytes,
751 exint &pinned_bytes);
763 if (!record_viewport && !record_memory)
790 void cacheNodePtrs();
793 void initInstanceTable();
803 void finalizeInstanceTable();
807 bool createObjectInstance(
const char *instance_path,
810 gui_Instance &instance,
815 void removeDeletedGeos();
826 bool show_selections,
850 bool setupPointInstancing(
bool show_selections,
857 void updateInstancingStatus();
859 void checkGeoRenders();
862 void freeCachedDetails();
863 void freeDeletedCachedDetails();
865 int getNumOnionSkins()
const;
872 void clearOnionSkins();
874 class GUI_DetailLookFlags
877 GUI_DetailLookFlags()
890 targetoutput =
false;
891 currentoutput =
false;
894 drawCookComponentSelection =
true;
895 needsAlphaPass =
false;
897 secondarySelection =
false;
898 objSelection =
false;
900 objSelectionHint =
false;
902 wireframeOnly =
false;
904 separateOutline =
false;
907 prevShouldPick =
true;
908 overrideDisplay =
false;
909 displayAsSubdiv =
false;
910 shaders_used =
false;
911 active_model =
false;
912 being_deleted =
false;
913 shade_open_curves =
false;
915 onion_skin_deform =
false;
916 use_frustum_culling =
true;
917 errorsChecked =
false;
918 visualizerCheck =
false;
919 needVisualizerSetup =
true;
921 forceAsUVObject =
false;
922 showMaterials =
true;
927 isControlLook =
false;
928 forceTimeDep =
false;
949 drawCookComponentSelection:1,
952 secondarySelection:1,
971 use_frustum_culling:1,
974 needVisualizerSetup:1,
985 GUI_DetailLookFlags myFlag;
989 int myShowGroupColorVersion;
1007 unsigned myObjTypeMask;
1017 bool myUseNewLightInterface;
1023 unsigned int myViewportMask;
1024 bool myEnableDOPDisplay;
1025 bool myIsChosenDopnet;
1026 bool myNullDetailFlag;
1028 bool myInitializedFlag;
1029 bool myCopyDetailFlag;
1031 bool myDrawableFlag;
1033 exint myDrawableRefUniqueId;
1034 exint myDrawableRefMetaCacheCount;
1036 mutable bool myDisplaySetDirty;
1039 fpreal myPrevInstanceFract;
1040 int myPrevInstanceLimit;
1041 int myInstanceFractSerial;
1042 int64 myPointInstanceVersion;
1043 int myInstanceXformVersion;
1045 int myInstanceObjectID;
1046 bool myHasInstancing;
1047 bool myHasPointInstancing;
1048 bool myInstanceUseTransform;
1049 bool myHasTransparentPrimitives;
1050 bool myLastPointInstanceState;
1051 bool myHasInstanceFile;
1057 int64 myOpErrorPosted;
1058 int64 myLookVersion;
1068 bool myCachingDetails;
1070 int64 myCacheSopSerial;
1072 bool myHasUnlitGeometry;
1074 bool myUpdatePending;
1075 bool myMatUpdatePending;
1076 bool myThreadedUpdatePending;
1080 exint myVisUpdateTime;
1083 exint myVisUpdateVersion;
1091 myCollectVisPrimitives;
1099 class gui_OnionSkinDetail
1103 : myDetail(dh), myRender(NULL), myUsedFlag(true)
1105 myDetail.addPreserveRequest();
1107 ~gui_OnionSkinDetail();
1113 typedef std::pair<exint,int64> gui_OnionSkinId;
1115 gui_OnionSkins myOnionSkins;
1117 class gui_OnionSkinLayer
1121 : myDetailID(id), myTime(t), myRender(NULL),
1122 myTransform(mat), myIsPreFrame(pre) {}
1124 gui_OnionSkinId myDetailID;
1132 class CachedDetailPos {
1140 CachedDetailPos(
const GU_Detail *detail)
1146 void computePosition(
const GU_Detail *detail)
1160 return myCacheCount == p.myCacheCount
1161 && myUniqueId == p.myUniqueId;
1186 return myNullDetailFlag ? 0 : 1;
1193 return myCachedObject;
1234 if((myFlag.display || myFlag.objOutput) && !myFlag.objHide)
1236 #if UT_ASSERT_LEVEL > 2
1251 bool changed =
false;
1252 if(myFlag.objSolo != solo)
1255 myFlag.objSolo = solo;
1257 if(solo && solo_transform)
1258 mat = *solo_transform;
1262 if(mat != mySoloXform)
1269 myXformDirty =
true;
static const char * getActiveViewportMatString()
static bool matchesChosenDopnetPath(const char *path)
virtual bool getUsesGeoRenderInstancing() const
int64 getNodeErrorID() const
void setTemplate(bool templated)
const UT_ValArray< RE_Light * > & getLights() const
void setPivot(const UT_Vector3F &pivot)
bool usesFrustumCulling() const
void materialUpdatePending(bool up)
UT_Vector4F getEmitColor() const
OP_Node * getObject() const
bool isControlLook() const
bool getDetailDisplay() const
int getVersion(int version)
bool isSeparateOutline() const
void threadedUpdatePending(bool up)
void setForceAsUVObject(bool on)
bool getIsChosenDopnet() const
void useNewLightInterface(bool i)
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 hasFactoryMaterialOverride()
bool setObjSolo(bool solo, const UT_Matrix4D *solo_transform=nullptr)
bool hasInstanceFile() const
bool useInstancerObjTransform() const
void setXform(const UT_Matrix4D &mat)
void setFactoryMaterialOverride(GR_MaterialPtr material)
bool isPointInstanced() const
void setObjTypeMask(unsigned mask)
bool forceAsUVObject() const
void setFootprint(bool footprint)
void setOutline(bool outline)
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
UT_Vector4F getOutlineColor() const
**But if you need a result
virtual bool needsOverlayRender()
#define OP_INVALID_NODE_ID
OP_Network * getCreator() const
bool isWireframeOnly() const
GUI_DisplaySetType
Context specific display options for geometry states.
const UT_Set< int > & activeObjLights() const
Temporary container for either a RV_Render and an RE_Render.
int getVisualizedNodeId() const
void needVisualizerSetup(bool setup)
bool forceTimeDependent() const
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
bool isThreadedUpdatePending() const
RE_MaterialPtr getFactoryMaterialOverrideGL()
virtual const PXL_Raster * getImage(RE_RenderContext)
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 isBeautyRender() const
bool isSecondarySelection() const
void setCastShadows(bool on)
UT_Vector3T< T > center() const
bool showMaterials() const
void setIsControlLook(bool c)
bool isUpdatePending() const
const GR_CommonDispOption & common() const
static const UT_Matrix4T< fpreal > & getIdentityMatrix()
bool isMaterialUpdatePending() const
unsigned getObjTypeMask() const
void setObjectLOD(GEO_ViewportLOD lod)
GR_MaterialPtr getFactoryMaterialOverride()
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
void identity()
Set the matrix to identity.
virtual UT_Color getWireColor(int id) const
bool isOnionSkinning() const
GLuint const GLchar * name
void setContextMicroNode(UT_UniquePtr< DEP_MicroNode > &µnode)
virtual int getNumDetailHandles() const
void setBeautyRender(bool b)
GLboolean GLboolean GLboolean b
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
void setSeparateOutline(bool b)
virtual bool isXray() const
DEP_MicroNode * contextMicroNode()
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
bool useNewLightInterface() const
void setActiveModel(bool active_model)
OP_Node * getShopsRelativeTo() const
UT_Vector4T< fpreal32 > UT_Vector4F
void clearActiveVisualizers()
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
SIM_API const UT_StringHolder position
void setXRayOverride(bool xray)
bool isObjSelectionHint() const
void setFactoryMaterialOverride(RE_MaterialPtr material)
int64 getMetaCacheCount() const
int64 getPrimDecorMask() const
void resetVisualizerCheck()
GA_API const UT_StringHolder pivot
void setOutputIndex(int index)
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
void setEmitColor(const UT_Vector4F &color)
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
GUI_SetupResult getUpdateReason()
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 setForceTimeDependent(bool v)
void setShowAxes(bool show_axes)
void setObjHidden(bool hide)
bool isCurrentOutput() const
UT_Array< GUI_SetupResult > mySetupResults
void appendActiveVisualizer(int vis_id)
GUI_DisplaySetType updateDisplaySetType()
void setObjOutput(bool output)
constexpr SYS_FORCE_INLINE T & x() noexcept
bool shadeOpenCurves() const