📄 inode.h
字号:
/**********************************************************************
*<
FILE: inode.h
DESCRIPTION:
CREATED BY: Dan Silva
HISTORY:
*> Copyright (c) 1994, All Rights Reserved.
**********************************************************************/
#ifndef __INODE__H
#define __INODE__H
class ObjectState;
class Object;
class Control;
class ScaleValue;
class Mtl;
class RenderData;
class View;
class IDerivedObject;
// Transform modes -- passed to Move/Rotate/Scale
#define PIV_NONE 0
#define PIV_PIVOT_ONLY 1
#define PIV_OBJECT_ONLY 2
#define PIV_HIERARCHY_ONLY 3
// Node interface
class INode: public ReferenceTarget {
public:
// If this was a temporary INode (like an INodeTransformed) this will delete it.
virtual void DisposeTemporary() {}
// In the case of INodeTransformed, this gets a pointer to the real node.
virtual INode *GetActualINode() {return this;}
virtual TCHAR* GetName()=0;
virtual void SetName(TCHAR *s)=0;
// Get/Set node's transform ( without object-offset or WSM affect)
virtual Matrix3 GetNodeTM(TimeValue t, Interval* valid=NULL)=0;
virtual void SetNodeTM(TimeValue t, Matrix3& tm)=0;
// Invalidate node's caches
virtual void InvalidateTreeTM()=0;
virtual void InvalidateTM()=0;
virtual void InvalidateWS()=0;
// Get object's transform (including object-offset)
// and also the WSM affect when appropriate )
// This is used inside object Display and HitTest routines
virtual Matrix3 GetObjectTM(TimeValue time, Interval* valid=NULL)=0;
// Get object's transform including object-offset but not WSM affect
virtual Matrix3 GetObjTMBeforeWSM(TimeValue time, Interval* valid=NULL)=0;
// Get object's transform including object-offset and WSM affect
virtual Matrix3 GetObjTMAfterWSM(TimeValue time, Interval* valid=NULL)=0;
// evaluate the State the object after offset and WSM's applied
// if evalHidden is FALSE and the node is hidden the pipeline will not
// actually be evaluated (however the TM will).
virtual const ObjectState& EvalWorldState(TimeValue time,BOOL evalHidden=TRUE)=0;
// Hierarchy manipulation
virtual INode* GetParentNode()=0;
virtual void AttachChild(INode* node, int keepPos=1)=0; // make node a child of this one
virtual void Detach(TimeValue t, int keepPos=1)=0; // detach node
virtual int NumberOfChildren()=0;
virtual INode* GetChildNode(int i)=0;
// This will delete a node, handle removing from the hierarchy, and also handle Undo.
virtual void Delete(TimeValue t, int keepChildPosition) {}
// display attributes
virtual void Hide(BOOL onOff)=0; // set node's hide bit
virtual int IsHidden(DWORD hflags=0,BOOL forRenderer=FALSE) {return 0;}
virtual int IsNodeHidden(BOOL forRenderer=FALSE) {return 0;} // is node hidden in *any* way.
virtual void Freeze(BOOL onOff)=0; // stop node from being pickable
virtual int IsFrozen()=0;
virtual void XRayMtl(BOOL onOff)=0; // use x-ray material on node
virtual int HasXRayMtl()=0;
virtual void IgnoreExtents(BOOL onOff)=0;// ignore this node during zoom extents
virtual int GetIgnoreExtents()=0;
virtual void BoxMode(BOOL onOff)=0; // display node with a bounding box
virtual int GetBoxMode()=0;
virtual void AllEdges(BOOL onOff)=0; // display all edges, including "hidden" ones
virtual int GetAllEdges()=0;
virtual void BackCull(BOOL onOff)=0; // backcull display toggle
virtual int GetBackCull()=0;
virtual void SetCastShadows(BOOL onOff)=0;
virtual int CastShadows()=0;
virtual void SetRcvShadows(BOOL onOff)=0;
virtual int RcvShadows()=0;
virtual void SetGenerateCaustics(BOOL onOff) {}
virtual int GenerateCaustics() {return 0;}
virtual void SetRcvCaustics(BOOL onOff) {}
virtual int RcvCaustics() {return 0;}
virtual void SetGenerateGlobalIllum(BOOL onOff) {}
virtual int GenerateGlobalIllum() {return 0;}
virtual void SetRcvGlobalIllum(BOOL onOff) {}
virtual int RcvGlobalIllum() {return 0;}
virtual void SetMotBlur(int kind)=0; // kind = 0: none, 1:object blur, 2: image blur
virtual int MotBlur()=0;
virtual float GetImageBlurMultiplier(TimeValue t) { return 1.0f;}
virtual void SetImageBlurMultiplier(TimeValue t, float m){};
virtual void SetImageBlurMultController(Control *cont){}
virtual Control *GetImageBlurMultController() {return NULL; }
// Object motion blur enable controller. This affects both object and image motion blur
virtual BOOL GetMotBlurOnOff(TimeValue t) { return 1; }
virtual void SetMotBlurOnOff(TimeValue t, BOOL m) { }
virtual Control *GetMotBlurOnOffController() { return NULL;}
virtual void SetMotBlurOnOffController(Control *cont) { }
virtual void SetRenderable(BOOL onOff)=0;
virtual int Renderable()=0;
virtual void SetCVertMode(int onOff) {}
virtual int GetCVertMode() {return 0;}
virtual void SetShadeCVerts(int onOff) {}
virtual int GetShadeCVerts() {return 0;}
virtual int GetTrajectoryON() {return 0;}
virtual void SetTrajectoryON(BOOL onOff) {}
// bone display attributes.
virtual void ShowBone(int boneVis)=0; // 0: off, 1: show bone, 2: show bone only
virtual void BoneAsLine(int onOff)=0; // display bone as simple line
virtual BOOL IsBoneShowing()=0;
virtual BOOL IsBoneOnly() { return 0; } // don't display node when displaying bone
// used for hit-testing and selecting node and target as a single unit
virtual void SetTargetNodePair(int onOff) {}
virtual int GetTargetNodePair() { return 0; }
// Access node's wire-frame color
virtual DWORD GetWireColor()=0;
virtual void SetWireColor(DWORD newcol)=0;
// Test various flags
virtual int IsRootNode()=0;
virtual int Selected()=0;
virtual int Dependent()=0;
virtual int IsTarget()=0;
virtual void SetIsTarget(BOOL b)=0;
// Node transform locks
virtual BOOL GetTransformLock(int type, int axis)=0;
virtual void SetTransformLock(int type, int axis, BOOL onOff)=0;
// Get target node if any.
virtual INode* GetTarget()=0; // returns NULL if node has no target.
virtual INode* GetLookatNode()=0; // if this is a target, this finds the node that looks at it.
// This is just GetParent+GetNodeTM
virtual Matrix3 GetParentTM(TimeValue t)=0;
// This is just GetTarget+GetNodeTM
virtual int GetTargetTM(TimeValue t, Matrix3& m)=0;
// Object reference
virtual Object* GetObjectRef()=0; // skips over WSM's to the object
virtual void SetObjectRef(Object *)=0; // sets the object reference directly
virtual Object* GetObjOrWSMRef()=0; // returns the object reference directly
// TM Controller
virtual Control* GetTMController()=0;
virtual void SetTMController(Control *m3cont)=0;
// Visibility controller
virtual Control *GetVisController()=0;
virtual void SetVisController(Control *cont)=0;
virtual float GetVisibility(TimeValue t,Interval *valid=NULL)=0; // may be inherited
virtual float GetVisibility(TimeValue t,View &view,Interval *valid=NULL) {return GetVisibility(t,valid);}
virtual void SetVisibility(TimeValue t,float vis)=0;
virtual float GetLocalVisibility(TimeValue t,Interval *valid=NULL)=0; // not inherited
virtual BOOL GetInheritVisibility()=0;
virtual void SetInheritVisibility(BOOL onOff)=0;
// Set/Get REnderOccluded property
virtual void SetRenderOccluded(BOOL onOff)=0;
virtual BOOL GetRenderOccluded()=0;
// Renderer Materials
virtual Mtl *GetMtl()=0;
virtual void SetMtl(Mtl* matl)=0;
// GraphicsWindow Materials
virtual Material* Mtls()=0; // Array of GraphicsWindow Materials
virtual int NumMtls()=0; // number of entries in Mtls
// Object offset from node:
virtual void SetObjOffsetPos(Point3 p)=0;
virtual Point3 GetObjOffsetPos()=0;
virtual void SetObjOffsetRot(Quat q)=0;
virtual Quat GetObjOffsetRot()=0;
virtual void SetObjOffsetScale(ScaleValue sv)=0;
virtual ScaleValue GetObjOffsetScale()=0;
// Misc.
virtual void FlagForeground(TimeValue t,BOOL notify=TRUE)=0;
virtual int IsActiveGrid()=0;
// A place to hang temp data. Don't expect the data to stay around after you return control
virtual void SetNodeLong(LONG l)=0;
virtual LONG GetNodeLong()=0;
// virtual void GetMaterial(Material &mtl)=0; // Why do we need this?
// Access render data
virtual RenderData *GetRenderData()=0;
virtual void SetRenderData(RenderData *rd)=0;
//
// Access user defined property text
//
// The first two functions access the entire buffer
virtual void GetUserPropBuffer(TSTR &buf)=0;
virtual void SetUserPropBuffer(const TSTR &buf)=0;
// These get individual properties - return FALSE if the key is not found
virtual BOOL GetUserPropString(const TSTR &key,TSTR &string)=0;
virtual BOOL GetUserPropInt(const TSTR &key,int &val)=0;
virtual BOOL GetUserPropFloat(const TSTR &key,float &val)=0;
virtual BOOL GetUserPropBool(const TSTR &key,BOOL &b)=0;
// These set individual properties - create the key if it doesn't exist
virtual void SetUserPropString(const TSTR &key,const TSTR &string)=0;
virtual void SetUserPropInt(const TSTR &key,int val)=0;
virtual void SetUserPropFloat(const TSTR &key,float val)=0;
virtual void SetUserPropBool(const TSTR &key,BOOL b)=0;
// Just checks to see if a key exists
virtual BOOL UserPropExists(const TSTR &key)=0;
// G-Buffer ID's (user settable)
virtual ULONG GetGBufID()=0;
virtual void SetGBufID(ULONG id)=0;
// G-Buffer Render ID's (set by renderer)
virtual UWORD GetRenderID() { return 0xffff; }
virtual void SetRenderID(UWORD id) {}
// Transform the node about a specified axis system.
// Either the pivot point or the object or both can be transformed.
// Also, the children can be counter transformed so they don't move.
virtual void Move(TimeValue t, const Matrix3& tmAxis, const Point3& val, BOOL localOrigin=FALSE, BOOL affectKids=TRUE, int pivMode=PIV_NONE, BOOL ignoreLocks=FALSE)=0;
virtual void Rotate(TimeValue t, const Matrix3& tmAxis, const AngAxis& val, BOOL localOrigin=FALSE, BOOL affectKids=TRUE, int pivMode=PIV_NONE, BOOL ignoreLocks=FALSE)=0;
virtual void Rotate(TimeValue t, const Matrix3& tmAxis, const Quat& val, BOOL localOrigin=FALSE, BOOL affectKids=TRUE, int pivMode=PIV_NONE, BOOL ignoreLocks=FALSE)=0;
virtual void Scale(TimeValue t, const Matrix3& tmAxis, const Point3& val, BOOL localOrigin=FALSE, BOOL affectKids=TRUE, int pivMode=PIV_NONE, BOOL ignoreLocks=FALSE)=0;
virtual BOOL IsGroupMember()=0;
virtual BOOL IsGroupHead()=0;
virtual BOOL IsOpenGroupMember() {return 0; }
virtual BOOL IsOpenGroupHead() {return 0; }
virtual void SetGroupMember(BOOL b) {}
virtual void SetGroupHead(BOOL b) {}
virtual void SetGroupMemberOpen(BOOL b) {}
virtual void SetGroupHeadOpen(BOOL b) {}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -