📄 ref.h
字号:
/**********************************************************************
*<
FILE: ref.h
DESCRIPTION: Defines Animatable, Reference Classes
CREATED BY: Rolf Berteig & Dan Silva
HISTORY: created 9 September 1994
*> Copyright (c) 1994, All Rights Reserved.
**********************************************************************/
#ifndef _REF_H_
#define _REF_H_
/* This module implements a first run at the concept of references.
* Some other stuff is in here to like time and intervals, but
* these are implemented only to get the reference classes working.
*/
typedef void *ReferenceData;
typedef unsigned int TargetParam;
typedef unsigned long PartID;
// Bits for PartID
// OBJECT STATE: SUB-PARTS
// These are the 4 sub-channels object in the object state.
// Dont change these defines
// (See CHANNELS.H for define of TOPO_CHANNEL, etc.)
#define PART_TOPO TOPO_CHANNEL
#define PART_GEOM GEOM_CHANNEL
#define PART_TEXMAP TEXMAP_CHANNEL
#define PART_MTL MTL_CHANNEL
#define PART_SELECT SELECT_CHANNEL
#define PART_SUBSEL_TYPE SUBSEL_TYPE_CHANNEL
#define PART_DISPLAY DISP_ATTRIB_CHANNEL
#define PART_VERTCOLOR VERTCOLOR_CHANNEL
#define PART_GFX_DATA GFX_DATA_CHANNEL
#define PART_DISP_APPROX DISP_APPROX_CHANNEL
// These represent the TM and MTL parts of the object state
#define PART_TM_CHAN TM_CHANNEL
#define PART_MTL_CHAN GLOBMTL_CHANNEL
#define PART_OBJECT_TYPE (1<<11)
#define PART_TM (1<<12) // node TM
#define PART_OBJ (PART_TOPO|PART_GEOM)
#define PART_ALL (ALL_CHANNELS|PART_TM)
// Special part ID sent by visibility controllers when they change the hidden in viewport state. Sent with REFMSG_CHANGE message
#define PART_HIDESTATE (1<<30)
// One of these is set as the PartID when notify dependents is
// called with REFMSG_FLAGDEPENDENTS
#define PART_PUT_IN_FG (1<<0)
#define PART_SHOW_DEPENDENCIES (1<<1)
#define PART_SHOWDEP_ON (1<<2)
/* The message passed to notify and evaluate.
*/
typedef unsigned int RefMessage;
#define REFMSG_LOOPTEST 0x00000010
#define REFMSG_TARGET_DELETED 0x00000020
#define REFMSG_MODAPP_DELETING 0x00000021
#define REFMSG_EVAL 0x00000030
#define REFMSG_RESET_ORIGIN 0x00000040
#define REFMSG_CHANGE 0x00000050
#define REFMSG_FLAGDEPENDENTS 0x00000070
#define REFMSG_TARGET_SELECTIONCHANGE 0x00000080
#define REFMSG_BEGIN_EDIT 0x00000090
#define REFMSG_END_EDIT 0x000000A0
#define REFMSG_DISABLE 0x000000B0
#define REFMSG_ENABLE 0x000000C0
#define REFMSG_TURNON 0x000000D0
#define REFMSG_TURNOFF 0x000000E0
#define REFMSG_LOOKAT_TARGET_DELETED 0x000000F0
#define REFMSG_INVALIDATE_IF_BG 0x000000F1
// turn on and off the a modifier display
#define REFMSG_MOD_DISPLAY_ON 0x000000F2
#define REFMSG_MOD_DISPLAY_OFF 0x000000F3
// Modifier uses this to tell Modapps to call their Eval() proc:
#define REFMSG_MOD_EVAL 0x000000F4
// Ask if its ok to change topology. If any dependents have made
// topology-dependent mods, they should return REF_FAIL:
// a return of REF_SUCCEED means that the answer is YES
// a return of REF_FAIL means that the answer is NO
#define REFMSG_IS_OK_TO_CHANGE_TOPOLOGY 0x000000F5
// This main purpose of these notifications is to cause the tree
// view to update when one of these events takes place.
// Sent by a node when it has a child linked to it or unlinked from it.
#define REFMSG_NODE_LINK 0x000000F6
// Sent by a node when it's name has been changed.
#define REFMSG_NODE_NAMECHANGE 0x000000F7
// Sent by a node (or derived object) when the object it references changes.
#define REFMSG_OBREF_CHANGE 0x000000F8
// Sent by a derived object when a modifier is a added or deleted.
#define REFMSG_MODIFIER_ADDED 0x000000F9
// Sent when an animatable switches controllers for one of it's parameters.
#define REFMSG_CONTROLREF_CHANGE 0x000000FA
// A parameter block sends the message to it's client when it needs the anim
// name of the ith parameter.
// partID is set to a pointer to a GetParamName structure defined in iparamb.h
#define REFMSG_GET_PARAM_NAME 0x000000FB
// A parameter block sends this message to it's client when it needs to know
// the dimension type of the ith parameter.
// partID is set to a pointer to a GetParamDim structure defined in iparamb.h
#define REFMSG_GET_PARAM_DIM 0x000000FC
// A controller can send this to it's client to get it's param dimension.
// It should set partID to a ParamDimension **
#define REFMSG_GET_CONTROL_DIM 0x000000FD
// This message is sent by a node when it's TM has changed because it was evaluated
// at a different time. Normally this isn't neccessary - anyone depending on the
// node's TM would have a validity interval that reflected the validity of the
// TM. The axis system doesn't store a validity interval (it probably should) so this
// message is needed for it.
#define REFMSG_TM_CHANGE 0x000000FE
// A node sends this message when it's anim range changes.
#define REFMSG_RANGE_CHANGE 0x000000FF
// Sent to the tree view when an animatable's line height changes.
#define REFMSG_LINEHEIGHT_CHANGE 0x00000100
// A controller should send this message to the treeview when it becomes animated.
// If the user has the animated only filter on then the tree view will display this item.
#define REFMSG_BECOMING_ANIMATED 0x00000101
// This is intended mainly for the TrackView to tell it to re-generate
// view below the message sender's level.
#define REFMSG_SUBANIM_STRUCTURE_CHANGED 0x00000102
// A target has had a ref deleted: Mtl's use this to tell mtlLib, in case
// the # of node refs has gone to zero.
#define REFMSG_REF_DELETED 0x00000103
// A target has had a ref Added: Mtl's use this to tell mtlLib, in case
// the # of node refs has become non-zero.
#define REFMSG_REF_ADDED 0x00000104
// Sent by an object that provides branching in the history to notify that
// the structure of the branches changed.
#define REFMSG_BRANCHED_HISTORY_CHANGED 0x00000105
// The selection set sends this notification when it receives a REFMSG_CHANGE
// from an item in the selection set. The selection set doesn't propogate the
// REFMSG_CHANGE message.
#define REFMSG_NODEINSELSET_CHANGED 0x00000106
// Used to test dependencies
#define REFMSG_TEST_DEPENDENCY 0x00000107
// A Param block sends this to its client to ask if it should display
// a distinct "Parameters" level in the track view hierarchy.
// A pointer to a boolan is passed in for PartID: set this to the desired answer.
// The default is NO -- in this case the message doesn't need
// to be responded to.
#define REFMSG_WANT_SHOWPARAMLEVEL 0x00000108
// Theser are sent before and after a paste has been done: Sent as partID is
// a pointer to a data structure containing three RefTargetHandle's: the ref maker,
// the old target, and the new target. The message is sent to the ref maker initially.
#define REFMSG_BEFORE_PASTE 0x00000109
#define REFMSG_NOTIFY_PASTE 0x0000010A
// Sent when a UV Generator changes symmetry, so interactive texture display
// updates.
#define REFMSG_UV_SYM_CHANGE 0x0000010B
// The first node that gets this message will fill in the
// TSTR which partID points to with its name and stop the
// message from propogating.
#define REFMSG_GET_NODE_NAME 0x0000010C
// Sent by the selection set whenever it has just deleted nodes
#define REFMSG_SEL_NODES_DELETED 0x0000010D
// Sent *before* a reference target is pasted. Sent by the target
// about to be replaced.
#define REFMSG_PRENOTIFY_PASTE 0x0000010E
// Sent when a shape enters a state where it'll be changing a lot and it
// would be a good idea for anybody using it for mesh generation to suppress
// updates.
#define REFMSG_SHAPE_START_CHANGE 0x0000010F
// Sent to terminate the above state
#define REFMSG_SHAPE_END_CHANGE 0x00000110
// A texture map has been removed: tells medit to remove
// it from the viewport if it is active.
#define REFMSG_TEXMAP_REMOVED 0x00000111
// Sent by an unselected node to see if any selected nodes depend on it.
// The partID param points to a boolean. If a selected node receives this
// message it should set the boolean to true and return REF_STOP.
#define REFMSG_FLAG_NODES_WITH_SEL_DEPENDENTS 0x00000112
// The following are sent by objects which contain shapes when the selection,
// position, or both change:
#define REFMSG_CONTAINED_SHAPE_POS_CHANGE 0x00000120
#define REFMSG_CONTAINED_SHAPE_SEL_CHANGE 0x00000121
#define REFMSG_CONTAINED_SHAPE_GENERAL_CHANGE 0x00000122
// When an object receives this message it should do what ever it needs
// to do (usually select the appropriate sub-object) to make the dependent
// object be the object returned from GetPipeBranch().
// The partID will point to an INode pointer that will be filled in by
// the first node to receive this message.
#define REFMSG_SELECT_BRANCH 0x00000130
// These messages are sent to dependents of the TM controllers for selected
// objects when the user begins and ends a mouse transformation in the
// viewports (move/rotate/scale).
#define REFMSG_MOUSE_CYCLE_STARTED 0x00000140
#define REFMSG_MOUSE_CYCLE_COMPLETED 0x00000150
// Sent by a node to other nodes (which depend on that node) when the
// user attempts to link another node to a node.
// The partID parameter contains a pointer to the new parent node.
#define REFMSG_CHECK_FOR_INVALID_BIND 0x00000161
// Sent when a cache is dumped in the pipeline. A REFMSG_CHANGE message
// used to be sent, however that was misleading since the object itself
// didn't change even though any old object pointer has become invalid.
// For example, if a path controller depends on a spline object and
// that object dumps some caches in the pipeline, the path controller
// hasn't actually changed.
#define REFMSG_OBJECT_CACHE_DUMPED 0x00000162
// Sent by Atmospheric or Effect when it makes or deletes a reference
// to a node.
#define REFMSG_SFX_CHANGE 0x00000170
// Sent when updating object xrefs. PartID contains new material... when a
// node receives this message it will set its material to the new one.
// This message is for internal use only.
#define REFMSG_OBJXREF_UPDATEMAT 0x00000180
// Sent to build a list of nodes which use a particular XRef object.
// PartID points to a table of base node pointers
// This message is for internal use only.
#define REFMSG_OBJXREF_GETNODES 0x00000190
// Sent when objects are replaced from another scene (File->Replace).
// Other objects referencing the object that is replaced may want to
// perform some validity checking; this message is more specific than
// REFMSG_SUMANIM_STRUCTURE_CHANGED.
#define REFMSG_OBJECT_REPLACED 0x00000200
// Sent when nodes wireframe color is changed
#define REFMSG_NODE_WIRECOLOR_CHANGED 0x00000210
/* Message numbers above this value can be defined for use
* by sub-classes, below are reserved.
*/
#define REFMSG_USER 0x00010000
/* Some return codes for references...
* There would probably be a bunch of these.
*/
enum RefResult {
REF_FAIL,
REF_SUCCEED,
REF_DONTCARE,
REF_STOP,
REF_INVALID
};
// Use this to disable ref counting on objects.
#define MakeFakeHandleClass( className, handleClassName ) \
class className; typedef className* handleClassName
MakeFakeHandleClass( ReferenceTarget, RefTargetHandle );
MakeFakeHandleClass( ReferenceMaker, RefMakerHandle );
// This replaces the .Valid() method of handles.
#define VALID(x) (x)
// If this super class is passed to NotifyDependents() all dependents will be notified
#define NOTIFY_ALL 0xfffffff0
// For remapping references during a Clone.
class RemapDir {
public:
virtual RefTargetHandle FindMapping(RefTargetHandle from)=0;
virtual void AddEntry(RefTargetHandle hfrom, RefTargetHandle hto)=0;
virtual RefTargetHandle CloneRef(RefTargetHandle oldTarg);
virtual void PatchPointer(RefTargetHandle* patchThis, RefTargetHandle oldTarg)=0;
virtual void Backpatch()=0;
virtual void Clear()=0;
virtual void ClearBackpatch() {}
virtual void DeleteThis()=0;
};
/* Reference list link-node
*/
class CoreExport RefListItem {
public:
RefMakerHandle maker;
RefListItem *next;
/* Constructors:
*/
RefListItem( RefMakerHandle hmaker, RefListItem *list ) {
next = list;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -