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,
131 void updateForRender(
136 const char *view_name,
150 { myMatUpdatePending =
up; }
152 {
return myMatUpdatePending; }
158 void reactivateRetired();
164 void getGeometryRenders(
168 void setSingleGeometryRender(
OP_Node *node);
169 void resetGeometryRender();
175 void clearSelectData();
176 bool hasSelectData()
const;
183 virtual bool isPickable()
const;
188 int & )
const {
return false; }
196 {
return drawLit() && !isWireframeOnly(); }
202 bool hasTransparency()
const;
205 bool hasReflectiveMaterial()
const;
213 virtual int getNumDetailHandles()
const;
216 virtual void appendDOPDataName(
UT_String &str,
int i,
217 bool descriptive)
const;
218 virtual const SIM_Data *getDOPData(
int i)
const;
219 virtual const SIM_RootData *getDOPRootData(
int i)
const;
220 virtual bool getIsDetailTempSelected(
int i)
const;
222 virtual UT_Vector4F getDetailPosition(
int i)
const;
229 void signalNodeSelectionChanged(
int i)
const;
231 virtual void setTempComponentSelection(
235 virtual void releaseAllTempComponentSelections();
238 { myEnableDOPDisplay = enable; }
240 {
return myEnableDOPDisplay; }
242 { myIsChosenDopnet = ischosen; }
244 {
return myIsChosenDopnet; }
246 bool hasUserSelection()
const;
249 { myUseNewLightInterface=i;}
251 {
return myUseNewLightInterface; }
252 void addObjLight(
int obj_light_id);
253 bool hasObjLight(
int obj_light_id)
const;
254 void removeObjLight(
int obj_light_id);
255 void clearObjLights();
259 void setLightArray(
RE_Light *lights[],
int nLights = 0);
264 void enableAllLights();
270 {
return myEnabledLights; }
273 static RE_Light *getGlobalHeadlight();
274 static RE_Light *getGlobalDomelight();
276 void setUseWireColor(
int c);
277 void setWireColor(
const UT_Color &clr);
283 {
return myWireColor; }
286 {
return myOutlineColor; }
291 { myXform = mat; myXformDirty =
true; }
293 {
return isObjSolo() ? (myXform*mySoloXform) :myXform; }
297 void setAllowShadingOpenCurves(
bool val);
299 {
return myFlag.shade_open_curves; }
301 void setDisplayAsSubdiv(
bool val);
308 if(!myFlag.overrideDisplay)
310 if(myFlag.display != display)
311 myDisplaySetDirty=
true;
312 myFlag.display = display;
319 { myFlag.shouldPick = picking; }
324 if(myFlag.templated!=templated)
325 myDisplaySetDirty=
true;
326 myFlag.templated = templated;
329 {
if(myFlag.footprinted!=footprint)
330 myDisplaySetDirty=
true;
331 myFlag.footprinted = footprint; }
333 { myDisplaySetDirty |= (myFlag.highlighted != highlight);
334 myFlag.highlighted = highlight; }
336 { myFlag.xray = xray; }
338 {
if(myFlag.targetoutput !=target_output)
339 myDisplaySetDirty=
true;
340 myFlag.targetoutput = target_output; }
341 void setCurrentOutput(
bool current_output);
342 void setDrawLit(
int onoff);
343 void setDrawCookComponentSelection(
bool enable);
345 void setSecondarySelection(
int onoff);
346 void setObjSelection(
bool obj_sel);
347 void setObjCurrent(
bool obj_current);
348 void setObjSelectionHint(
bool obj_sel_hint);
349 virtual void setObjGhost(
bool obj_ghost,
OP_Node *for_node);
351 void setObjSolo(
bool solo,
const UT_Matrix4D *solo_transform=
nullptr);
356 { myFlag.wireframeOnly = wireframe_only; }
358 { myFlag.outline = outline; }
360 { myFlag.separateOutline =
b; }
362 { myFlag.beautyRender =
b; }
365 if(myFlag.active_model != active_model)
367 myDisplaySetDirty =
true;
368 myFlag.active_model = active_model;
375 static void setUVObject(
OP_Node *
object);
376 bool isUVObject()
const;
378 void setOnionSkinning(
int onion_skin_state);
388 { myFlag.use_frustum_culling = frust_cull; }
390 {
return myFlag.use_frustum_culling && !myFlag.onion_skin
391 && !myLastPointInstanceState &&
392 getUsesGeoRenderInstancing(); }
394 virtual void applyBundleToDisplayedObjects(
OP_Bundle *bdl,
int object_vis_change_count);
400 myFlag.prevDisplay = myFlag.display;
401 myFlag.display = onoff;
402 myFlag.overrideDisplay =
true;
407 myFlag.display = myFlag.prevDisplay;
408 myFlag.overrideDisplay =
false;
412 bool isDetailDisplayOn()
const;
424 virtual bool isXray()
const {
return myFlag.xray || myFlag.geoxray || myIsXRay; }
427 virtual bool isGuide()
const {
return false; }
428 virtual bool useWireColor(
int node_id)
const {
return myFlag.usewireclr; }
429 bool drawLit()
const {
return myFlag.drawLit; }
432 {
return myFlag.drawCookComponentSelection; }
452 {
return myInstanceUseTransform; }
455 {
return myFlag.needsAlphaPass; }
457 { myFlag.needsAlphaPass = e; }
467 if(myFlag.forceHidden != on)
469 myDisplaySetDirty=
true;
470 myFlag.forceHidden = on;
477 return myFlag.forceAsUVObject;
481 myFlag.forceAsUVObject = on;
487 if(myFlag.castShadows != on)
489 myDisplaySetDirty=
true;
490 myFlag.castShadows = on;
499 int showGroupColorVersion()
const;
500 void setShowGroupColorVersion(
int version);
504 int use_vertex)
const;
509 void invalidateBBox();
514 { myViewportMask =
mask; }
516 {
return myViewportMask; }
519 bool shownInViewport(
int viewport_id)
const;
520 void showInViewport(
int viewport_id);
521 void showInAllViewports();
524 int serial,
int serial2,
int id)
532 if(!myDisplaySetDirty)
534 return privGetDisplaySetType();
538 {
return privGetDisplaySetType(); }
558 ourChosenDopnetPath =
path;
562 ourChosenDopnetPath.clear();
567 return ourChosenDopnetPath.c_str();
572 auto len = ourChosenDopnetPath.length();
574 && !strncmp(ourChosenDopnetPath, path, len)
575 && (path[len] ==
':' || path[len] ==
'\0');
585 { myObjectLOD =
lod; }
587 void useObjectMaterials(
bool use_obj_mat);
591 { myFlag.showMaterials = show; }
593 {
return myFlag.showMaterials; }
598 { myFactoryMaterial = material; }
601 {
return myFactoryMaterial!=
nullptr; }
604 virtual bool isTimeDependent(
fpreal t);
605 bool areInstancesTimeDependent(
fpreal t);
610 static void setActiveViewport(
const char *
name,
int id);
612 static const char *getActiveViewport();
614 static int getActiveViewportId();
616 static const char *getActiveViewportMatString();
619 static void visibleViewportTypes(
bool view_3d,
bool view_2d);
620 static bool hasVisible3D();
621 static bool hasVisibleUV();
625 static int64 visibleUVAttribSerial();
627 enum { VIEW_3D = 0x1, VIEW_2D = 0x2 };
628 static void visibleViewportBoundaries(
631 UT_Array<std::pair<UT_StringHolder,int> > &uvs);
632 static bool hasVisibleBoundaries();
633 static bool visible3DBoundary();
637 &visibleUVBoundaries();
640 {
return myActiveVisualizers; }
642 {
return myActiveVisualizers.entries(); }
644 { myActiveVisualizers.append(vis_id);
645 myCollectVisPrimitives.append(0); }
648 myActiveVisualizers.clear();
649 myCollectVisPrimitives.clear();
652 {
return myCollectVisPrimitives(i); }
654 { myCollectVisPrimitives(i) = prim; }
657 void checkForErrors();
661 { myRedrawValue = redraw; }
663 {
if(myRedrawValue) myRedrawValue->changed(NULL); }
667 myFlag.visualizerCheck =
true;
668 myFlag.needVisualizerSetup =
false;
672 myFlag.visualizerCheck =
false;
673 myFlag.needVisualizerSetup = setup;
677 return (myFlag.needVisualizerSetup ||
678 myFlag.visualizerCheck);
693 if (!record_viewport && !record_memory)
720 void cacheNodePtrs();
723 void initInstanceTable();
733 void finalizeInstanceTable();
737 bool createObjectInstance(
const char *instance_path,
740 gui_Instance &instance,
745 void removeDeletedGeos();
756 bool show_selections,
780 bool setupPointInstancing(
bool show_selections,
787 void updateInstancingStatus();
791 void freeCachedDetails();
792 void freeDeletedCachedDetails();
794 int getNumOnionSkins()
const;
801 void clearOnionSkins();
803 class GUI_DetailLookFlags
806 GUI_DetailLookFlags()
819 targetoutput =
false;
820 currentoutput =
false;
823 drawCookComponentSelection =
true;
824 needsAlphaPass =
false;
826 secondarySelection =
false;
827 objSelection =
false;
829 objSelectionHint =
false;
831 wireframeOnly =
false;
833 separateOutline =
false;
836 prevShouldPick =
true;
837 overrideDisplay =
false;
838 displayAsSubdiv =
false;
839 shaders_used =
false;
840 active_model =
false;
841 being_deleted =
false;
842 shade_open_curves =
false;
844 onion_skin_deform =
false;
845 use_frustum_culling =
true;
846 errorsChecked =
false;
847 visualizerCheck =
false;
848 needVisualizerSetup =
true;
850 forceAsUVObject =
false;
851 showMaterials =
true;
876 drawCookComponentSelection:1,
879 secondarySelection:1,
898 use_frustum_culling:1,
901 needVisualizerSetup:1,
910 GUI_DetailLookFlags myFlag;
914 int myShowGroupColorVersion;
931 unsigned myObjTypeMask;
941 bool myUseNewLightInterface;
947 unsigned int myViewportMask;
948 bool myEnableDOPDisplay;
949 bool myIsChosenDopnet;
950 bool myNullDetailFlag;
952 bool myInitializedFlag;
953 bool myCopyDetailFlag;
956 mutable bool myDisplaySetDirty;
959 fpreal myPrevInstanceFract;
960 int myPrevInstanceLimit;
961 int myInstanceFractSerial;
962 int64 myPointInstanceVersion;
963 int myInstanceXformVersion;
965 int myInstanceObjectID;
966 bool myHasInstancing;
967 bool myHasPointInstancing;
968 bool myInstanceUseTransform;
969 bool myHasTransparentPrimitives;
970 bool myLastPointInstanceState;
971 bool myHasInstanceFile;
977 int64 myOpErrorPosted;
988 bool myCachingDetails;
990 int64 myCacheSopSerial;
992 bool myHasUnlitGeometry;
994 bool myUpdatePending;
995 bool myMatUpdatePending;
998 exint myVisUpdateTime;
1001 exint myVisUpdateVersion;
1009 myCollectVisPrimitives;
1016 class gui_OnionSkinDetail
1020 : myDetail(dh), myRender(NULL), myUsedFlag(true)
1022 myDetail.addPreserveRequest();
1024 ~gui_OnionSkinDetail();
1030 typedef std::pair<exint,int64> gui_OnionSkinId;
1032 gui_OnionSkins myOnionSkins;
1034 class gui_OnionSkinLayer
1038 : myDetailID(id), myTime(t), myRender(NULL),
1039 myTransform(mat), myIsPreFrame(pre) {}
1041 gui_OnionSkinId myDetailID;
1049 class CachedDetailPos {
1057 CachedDetailPos(
const GU_Detail *detail)
1063 void computePosition(
const GU_Detail *detail)
1077 return myCacheCount == p.myCacheCount
1078 && myUniqueId == p.myUniqueId;
1103 return myNullDetailFlag ? 0 : 1;
1110 return myCachedObject;
1151 if((myFlag.display || myFlag.objOutput) && !myFlag.objHide)
1153 #if UT_ASSERT_LEVEL > 2
1168 if(myFlag.objSolo != solo)
1170 myFlag.objSolo = solo;
1171 if(solo && solo_transform)
1172 mySoloXform = *solo_transform;
1175 myXformDirty =
true;
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
bool getDetailDisplay() const
int getVersion(int version)
bool isSeparateOutline() const
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 hasInstanceFile() const
bool useInstancerObjTransform() const
void setXform(const UT_Matrix4D &mat)
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
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)
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 isBeautyRender() const
bool isSecondarySelection() const
void setCastShadows(bool on)
UT_Vector3T< T > center() const
bool showMaterials() const
void setObjSolo(bool solo, const UT_Matrix4D *solo_transform=nullptr)
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)
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
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
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()
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
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
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)
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