15 #ifndef __GUI_DetailLook__
16 #define __GUI_DetailLook__
56 class gui_GeoInstanceInfo;
73 const char *detail_name = NULL,
74 SetDetailMode
mode = REFERENCE_DETAIL);
84 if (myRefCount.relaxedLoad() == 0)
90 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,
125 for(
auto r : mySetupResults)
139 void updateForRender(
144 const char *view_name,
150 void updateForRenderInit(
155 const char *view_name,
165 void updateForRenderParallel(
170 const char *view_name,
188 { myMatUpdatePending =
up; }
190 {
return myMatUpdatePending; }
196 void reactivateRetired();
202 void getGeometryRenders(
206 void setSingleGeometryRender(
OP_Node *node);
207 void resetGeometryRender();
213 void clearSelectData();
214 bool hasSelectData()
const;
221 virtual bool isPickable()
const;
226 int & )
const {
return false; }
234 {
return drawLit() && !isWireframeOnly(); }
240 bool hasTransparency()
const;
243 bool hasReflectiveMaterial()
const;
251 virtual int getNumDetailHandles()
const;
254 virtual void appendDOPDataName(
UT_String &str,
int i,
255 bool descriptive)
const;
256 virtual const SIM_Data *getDOPData(
int i)
const;
257 virtual const SIM_RootData *getDOPRootData(
int i)
const;
258 virtual bool getIsDetailTempSelected(
int i)
const;
260 virtual UT_Vector4F getDetailPosition(
int i)
const;
267 void signalNodeSelectionChanged(
int i)
const;
269 virtual void setTempComponentSelection(
273 virtual void releaseAllTempComponentSelections();
276 { myEnableDOPDisplay = enable; }
278 {
return myEnableDOPDisplay; }
280 { myIsChosenDopnet = ischosen; }
282 {
return myIsChosenDopnet; }
284 bool hasUserSelection()
const;
287 { myUseNewLightInterface=i;}
289 {
return myUseNewLightInterface; }
290 void addObjLight(
int obj_light_id);
291 bool hasObjLight(
int obj_light_id)
const;
292 void removeObjLight(
int obj_light_id);
293 void clearObjLights();
296 void setUseWireColor(
int c);
297 void setWireColor(
const UT_Color &clr);
303 {
return myWireColor; }
306 {
return myOutlineColor; }
310 { myEmitColor =
color; }
316 { myXform = mat; myXformDirty =
true; }
318 {
return isObjSolo() ? (myXform*mySoloXform) :myXform; }
322 void setAllowShadingOpenCurves(
bool val);
324 {
return myFlag.shade_open_curves; }
326 void setDisplayAsSubdiv(
bool val);
333 if(!myFlag.overrideDisplay)
335 if(myFlag.display != display)
336 myDisplaySetDirty=
true;
337 myFlag.display = display;
344 { myFlag.shouldPick = picking; }
349 if(myFlag.templated!=templated)
350 myDisplaySetDirty=
true;
351 myFlag.templated = templated;
354 {
if(myFlag.footprinted!=footprint)
355 myDisplaySetDirty=
true;
356 myFlag.footprinted = footprint; }
358 { myDisplaySetDirty |= (myFlag.highlighted != highlight);
359 myFlag.highlighted = highlight; }
361 { myFlag.xray = xray; }
363 {
if(myFlag.targetoutput !=target_output)
364 myDisplaySetDirty=
true;
365 myFlag.targetoutput = target_output; }
366 void setCurrentOutput(
bool current_output);
367 void setDrawLit(
int onoff);
368 void setDrawCookComponentSelection(
bool enable);
370 void setSecondarySelection(
int onoff);
371 void setObjSelection(
bool obj_sel);
372 void setObjCurrent(
bool obj_current);
373 void setObjSelectionHint(
bool obj_sel_hint);
374 virtual void setObjGhost(
bool obj_ghost,
OP_Node *for_node);
376 bool setObjSolo(
bool solo,
const UT_Matrix4D *solo_transform=
nullptr);
381 { myFlag.wireframeOnly = wireframe_only; }
383 { myFlag.outline = outline; }
385 { myFlag.separateOutline =
b; }
387 { myFlag.beautyRender =
b; }
390 if(myFlag.active_model != active_model)
392 myDisplaySetDirty =
true;
393 myFlag.active_model = active_model;
403 static void setUVObject(
OP_Node *
object);
404 bool isUVObject()
const;
406 void setOnionSkinning(
int onion_skin_state);
416 { myFlag.use_frustum_culling = frust_cull; }
418 {
return myFlag.use_frustum_culling && !myFlag.onion_skin
419 && !myLastPointInstanceState &&
420 getUsesGeoRenderInstancing(); }
422 virtual void applyBundleToDisplayedObjects(
OP_Bundle *bdl,
int object_vis_change_count);
428 myFlag.prevDisplay = myFlag.display;
429 myFlag.display = onoff;
430 myFlag.overrideDisplay =
true;
435 myFlag.display = myFlag.prevDisplay;
436 myFlag.overrideDisplay =
false;
440 bool isDetailDisplayOn()
const;
452 virtual bool isXray()
const {
return myFlag.xray || myFlag.geoxray || myIsXRay; }
455 virtual bool isGuide()
const {
return false; }
456 virtual bool useWireColor(
int node_id)
const {
return myFlag.usewireclr; }
457 bool drawLit()
const {
return myFlag.drawLit; }
460 {
return myFlag.drawCookComponentSelection; }
480 {
return myInstanceUseTransform; }
481 OBJ_Node *getInstanceObject()
const;
484 {
return myFlag.needsAlphaPass; }
486 { myFlag.needsAlphaPass = e; }
491 {
return myFlag.hasOnionSkinPrims; }
501 if(myFlag.forceHidden != on)
503 myDisplaySetDirty=
true;
504 myFlag.forceHidden = on;
511 return myFlag.forceAsUVObject;
515 myFlag.forceAsUVObject = on;
521 if(myFlag.castShadows != on)
523 myDisplaySetDirty=
true;
524 myFlag.castShadows = on;
533 int showGroupColorVersion()
const;
534 void setShowGroupColorVersion(
int version);
538 int use_vertex)
const;
543 void invalidateBBox();
548 { myViewportMask =
mask; }
550 {
return myViewportMask; }
553 bool shownInViewport(
int viewport_id)
const;
554 void showInViewport(
int viewport_id);
555 void showInAllViewports();
558 int serial,
int serial2,
int id)
566 if(!myDisplaySetDirty)
568 return privGetDisplaySetType();
572 {
return privGetDisplaySetType(); }
592 ourChosenDopnetPath =
path;
596 ourChosenDopnetPath.clear();
601 return ourChosenDopnetPath.c_str();
606 auto len = ourChosenDopnetPath.length();
608 && !strncmp(ourChosenDopnetPath, path, len)
609 && (path[len] ==
':' || path[len] ==
'\0');
621 { myObjectLOD =
lod; }
623 void useObjectMaterials(
bool use_obj_mat);
627 { myFlag.showMaterials = show; }
629 {
return myFlag.showMaterials; }
634 { myFactoryMaterial = material; }
636 {
return myFactoryMaterial.get() !=
nullptr; }
638 {
return myFactoryMaterial; }
641 virtual bool isTimeDependent(
fpreal t);
642 bool areInstancesTimeDependent(
fpreal t);
654 static void setActiveViewport(
const char *
name,
int id);
656 static const char *getActiveViewport();
658 static int getActiveViewportId();
660 static const char *getActiveViewportMatString();
663 static void visibleViewportTypes(
bool view_3d,
bool view_2d);
664 static bool hasVisible3D();
665 static bool hasVisibleUV();
669 static int64 visibleUVAttribSerial();
671 enum { VIEW_3D = 0x1, VIEW_2D = 0x2 };
672 static void visibleViewportBoundaries(
675 UT_Array<std::pair<UT_StringHolder,int> > &uvs);
676 static bool hasVisibleBoundaries();
677 static bool visible3DBoundary();
681 &visibleUVBoundaries();
684 {
return myActiveVisualizers; }
686 {
return myActiveVisualizers.entries(); }
688 { myActiveVisualizers.append(vis_id);
689 myCollectVisPrimitives.append(0); }
692 myActiveVisualizers.clear();
693 myCollectVisPrimitives.clear();
696 {
return myCollectVisPrimitives(i); }
698 { myCollectVisPrimitives(i) = prim; }
701 void checkForErrors();
705 { myRedrawValue = redraw; }
707 {
if(myRedrawValue) myRedrawValue->changed(NULL); }
711 myFlag.visualizerCheck =
true;
712 myFlag.needVisualizerSetup =
false;
716 myFlag.visualizerCheck =
false;
717 myFlag.needVisualizerSetup = setup;
721 return (myFlag.needVisualizerSetup ||
722 myFlag.visualizerCheck);
728 {
return myContextMicroNode.get(); }
730 { myContextMicroNode = std::move(micronode); }
732 void gpuMemoryUsage(
exint &used_bytes,
733 exint &ununsed_bytes,
734 exint &pinned_bytes);
746 if (!record_viewport && !record_memory)
786 void cacheNodePtrs();
789 void initInstanceTable();
799 void finalizeInstanceTable();
803 bool createObjectInstance(
const char *instance_path,
806 gui_Instance &instance,
811 void removeDeletedGeos();
822 bool show_selections,
846 bool setupPointInstancing(
bool show_selections,
853 void updateInstancingStatus();
855 void checkGeoRenders();
858 void freeCachedDetails();
859 void freeDeletedCachedDetails();
861 int getNumOnionSkins()
const;
868 void clearOnionSkins();
870 class GUI_DetailLookFlags
873 GUI_DetailLookFlags()
886 targetoutput =
false;
887 currentoutput =
false;
890 drawCookComponentSelection =
true;
891 needsAlphaPass =
false;
893 secondarySelection =
false;
894 objSelection =
false;
896 objSelectionHint =
false;
898 wireframeOnly =
false;
900 separateOutline =
false;
903 prevShouldPick =
true;
904 overrideDisplay =
false;
905 displayAsSubdiv =
false;
906 shaders_used =
false;
907 active_model =
false;
908 being_deleted =
false;
909 shade_open_curves =
false;
911 onion_skin_deform =
false;
912 hasOnionSkinPrims =
false;
913 use_frustum_culling =
true;
914 errorsChecked =
false;
915 visualizerCheck =
false;
916 needVisualizerSetup =
true;
918 forceAsUVObject =
false;
919 showMaterials =
true;
924 isControlLook =
false;
925 forceTimeDep =
false;
946 drawCookComponentSelection:1,
949 secondarySelection:1,
969 use_frustum_culling:1,
972 needVisualizerSetup:1,
983 GUI_DetailLookFlags myFlag;
987 int myShowGroupColorVersion;
1005 unsigned myObjTypeMask;
1010 exint myUniqueId = 0;
1016 bool myUseNewLightInterface;
1019 unsigned int myViewportMask;
1020 bool myEnableDOPDisplay;
1021 bool myIsChosenDopnet;
1022 bool myNullDetailFlag;
1024 bool myInitializedFlag;
1025 bool myCopyDetailFlag;
1027 bool myDrawableFlag;
1029 exint myDrawableRefUniqueId;
1030 exint myDrawableRefMetaCacheCount;
1032 mutable bool myDisplaySetDirty;
1035 fpreal myPrevInstanceFract;
1036 int myPrevInstanceLimit;
1037 int myInstanceFractSerial;
1038 int64 myPointInstanceVersion;
1039 int myInstanceXformVersion;
1041 int myInstanceObjectID;
1042 bool myHasInstancing;
1043 bool myHasPointInstancing;
1044 bool myInstanceUseTransform;
1045 bool myHasTransparentPrimitives;
1046 bool myLastPointInstanceState;
1047 bool myHasInstanceFile;
1053 int64 myOpErrorPosted;
1054 int64 myLookVersion;
1067 bool myCachingDetails;
1069 int64 myCacheSopSerial;
1071 bool myHasUnlitGeometry;
1073 bool myUpdatePending;
1074 bool myMatUpdatePending;
1075 bool myThreadedUpdatePending;
1078 exint myVisUpdateTime;
1081 exint myVisUpdateVersion;
1089 myCollectVisPrimitives;
1097 class gui_OnionSkinDetail
1101 : myDetail(dh), myRender(NULL), myUsedFlag(true)
1103 myDetail.addPreserveRequest();
1105 ~gui_OnionSkinDetail();
1111 typedef std::pair<exint,int64> gui_OnionSkinId;
1113 gui_OnionSkins myOnionSkins;
1115 class gui_OnionSkinLayer
1119 : myDetailID(id), myTime(t), myRender(NULL),
1120 myTransform(mat), myIsPreFrame(pre) {}
1122 gui_OnionSkinId myDetailID;
1130 class CachedDetailPos {
1138 CachedDetailPos(
const GU_Detail *detail)
1144 void computePosition(
const GU_Detail *detail)
1156 bool operator==(
const CachedDetailPos& p)
const
1158 return myCacheCount == p.myCacheCount
1159 && myUniqueId == p.myUniqueId;
1175 UI_Value *myCameraChangeValue =
nullptr;
1185 return myNullDetailFlag ? 0 : 1;
1192 return myCachedObject;
1233 if((myFlag.display || myFlag.objOutput) && !myFlag.objHide)
1235 #if UT_ASSERT_LEVEL > 2
1250 bool changed =
false;
1251 if(myFlag.objSolo != solo)
1254 myFlag.objSolo = solo;
1256 if(solo && solo_transform)
1257 mat = *solo_transform;
1261 if(mat != mySoloXform)
1268 myXformDirty =
true;
static const char * getActiveViewportMatString()
static bool matchesChosenDopnetPath(const char *path)
virtual bool getUsesGeoRenderInstancing() const
int64 getNodeErrorID() const
void setTemplate(bool templated)
void setPivot(const UT_Vector3F &pivot)
bool usesFrustumCulling() const
void materialUpdatePending(bool up)
UT_Vector4F getEmitColor() const
Collection class for all cameras in a scene, from all sources.
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
GLsizei const GLfloat * value
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
GUI_API size_t UTformatBuffer(char *buffer, size_t buffer_size, const GUI_DetailLook &v)
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
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)
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)
GA_Size GA_Index
Define the strictness of GA_Offset/GA_Index.
GA_API const UT_StringHolder transform
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)
GA_API const UT_StringHolder parms
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
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
int64 getMetaCacheCount() const
int64 getPrimDecorMask() const
void resetVisualizerCheck()
GA_API const UT_StringHolder pivot
void setOutputIndex(int index)
bool hasOnionSkinPrims() const
Returns true if one of the owned geo renders has any onion skin.
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)
exint getUniqueId() const
constexpr SYS_FORCE_INLINE T & x() noexcept
bool shadeOpenCurves() const