00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __OBJ_SubNet__
00021 #define __OBJ_SubNet__
00022
00023 #include "OBJ_API.h"
00024 #include <UT/UT_DMatrix4.h>
00025 #include "OBJ_Node.h"
00026 #include "OBJ_Shared.h"
00027
00028 class OP_Bundle;
00029
00030 enum OBJ_SubNetIndex
00031 {
00032 I_LABEL1 = I_N_BASE_INDICES,
00033 I_LABEL2,
00034 I_LABEL3,
00035 I_LABEL4,
00036
00037 I_OUTPUTOBJ,
00038 I_VISIBLEOBJECTS,
00039
00040 I_N_SUBNET_INDICES
00041 };
00042
00043 class OBJ_API OBJ_SubNet : public OBJ_Node
00044 {
00045 public:
00046 OBJ_SubNet(OP_Network *net,
00047 const char *name,
00048 OP_Operator *op);
00049 virtual ~OBJ_SubNet();
00050
00051 virtual const char *getChildType() const;
00052 virtual OBJ_OBJECT_TYPE getObjectType() const;
00053
00054 virtual OP_OpTypeId getChildTypeID() const;
00055
00056 virtual OP_Node *getDisplayNodePtr();
00057 virtual OP_Node *getRenderNodePtr();
00058 virtual int isObjectRenderable() const;
00059 OP_Bundle *getVisibleObjectBundle(float t);
00060 int isVisibleObject(const OBJ_Node *node,
00061 float t) const;
00062
00063 virtual void opChanged(OP_EventType reason, void *data=0);
00064 virtual void propagateParmChange(OP_Node *node,
00065 OP_PropagateData &prop_data,
00066 bool &data_change);
00067
00068 virtual OP_ERROR setInput(unsigned idx, OP_Node *op,
00069 unsigned outputIdx = 0);
00070 virtual OP_ERROR setInputReference(unsigned idx,
00071 const char *label,
00072 int keeppos,
00073 unsigned outputIdx = 0);
00074 virtual OP_ERROR setIndirectInput(unsigned idx,
00075 OP_InputIndirect *in);
00076
00077 const UT_DMatrix4 & getSubnetTransform(OP_Context &context);
00078
00079 void LABEL(UT_String &str, int idx);
00080
00081 void OUTPUTOBJ(UT_String &str)
00082 {
00083 evalString(str, "outputobj",
00084 &getIndirect()[I_OUTPUTOBJ],
00085 0, 0.0f);
00086 }
00087 void VISIBLEOBJECTS(UT_String &str, float t)
00088 {
00089 evalString(str, "visibleobjects",
00090 &getIndirect()[I_VISIBLEOBJECTS],
00091 0, t);
00092 }
00093 void setVISIBLEOBJECTS(const UT_String &str,
00094 CH_StringMeaning meaning, float t)
00095 {
00096 setString(str, meaning, "visibleobjects",
00097 getIndirect()[I_VISIBLEOBJECTS],
00098 0, t);
00099 }
00100
00101 static OP_Node *myConstructor(OP_Network *net,
00102 const char *name,
00103 OP_Operator *entry);
00104
00105 static PRM_Template *getTemplateList(OBJ_ParmsStyle style);
00106
00107
00108 virtual fpreal getW() const;
00109
00110 virtual fpreal getH() const;
00111
00112 virtual OBJ_SubNet *castToOBJSubNet() { return this; }
00113
00114 protected:
00115
00116 virtual int *getIndirect() const
00117 { return subnetIndirect; }
00118
00119 virtual OP_ERROR cookMyObj(OP_Context &context);
00120 virtual void childFlagChange(OP_Node *);
00121 virtual const char *inputLabel(unsigned idx) const;
00122
00123 virtual void buildParmDependency( int parm_index );
00124
00125 virtual bool getTimeOverride();
00126
00127 private:
00128 bool internalDisplayDisabled(float t);
00129 void propagateDisplayChangeToDescendents(
00130 bool visible_children_changed);
00131 void checkInternalExtraInputTimeDependency(
00132 float t);
00133 void updateInternalTimeDependency();
00134
00135 bool myResetInternalTimeDependent;
00136 bool myInternalTimeDependent;
00137 bool myInternalExtraInputTimeDependent;
00138 int myLastDisplayDisabled;
00139
00140 UT_DMatrix4 mySubnetXform;
00141
00142 static int *subnetIndirect;
00143 static int myLastInternalParmIndex;
00144 };
00145
00146 #endif