00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include <UT/UT_DSOVersion.h>
00030 #include "SOP_HOMWave.h"
00031 #include <OP/OP_OperatorTable.h>
00032 #include <HOM/HOM_Module.h>
00033 #include <HOM/HOM_SopNode.h>
00034 #include <HOM/HOM_Geometry.h>
00035 #include <HOM/HOM_Vector3.h>
00036 #include <HOM/HOM_Point.h>
00037 #include <HOM/HOM_NodeType.h>
00038 #include <boost/shared_ptr.hpp>
00039
00040 using namespace HDK_Sample;
00041
00042 void
00043 newSopOperator(OP_OperatorTable *table)
00044 {
00045 table->addOperator(new OP_Operator(
00046 "hom_wave", "HOM Wave",
00047 &SOP_HOMWave::myConstructor, SOP_HOMWave::myTemplateList,
00048 1, 1));
00049 }
00050
00051 OP_Node *
00052 SOP_HOMWave::myConstructor(OP_Network *net, const char *name, OP_Operator *op)
00053 {
00054 return new SOP_HOMWave(net, name, op);
00055 }
00056
00057
00058 PRM_Template
00059 SOP_HOMWave::myTemplateList[] = {
00060 PRM_Template(),
00061 };
00062
00063 SOP_HOMWave::SOP_HOMWave(
00064 OP_Network *network, const char *name, OP_Operator *op_type)
00065 : SOP_HOM(network, name, op_type)
00066 {
00067 }
00068
00069 void
00070 SOP_HOMWave::cookWithHOM()
00071 {
00072 HOM_Module &hou = HOM();
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 boost::shared_ptr<HOM_Geometry> geo(HOMdel(
00088 dynamic_cast<HOM_SopNode*>(hou.pwd()))->geometry());
00089
00090 float f = hou.frame() * 0.03;
00091 std::vector<HOM_ElemPtr<HOM_Point> > points = geo->points();
00092 for (int i=0; i<points.size(); ++i)
00093 {
00094 boost::shared_ptr<HOM_Point> p(points[i].myPointer);
00095
00096 boost::shared_ptr<HOM_Vector3> pos_ptr(p->position());
00097 HOM_Vector3 &pos = *pos_ptr;
00098 pos[1] = sin(pos[0] * 0.2 + pos[2] * 0.3 + f);
00099
00100 std::vector<float> pos_vector;
00101 for (int i=0; i<pos.__len__(); ++i)
00102 pos_vector.push_back(pos[i]);
00103 p->setPosition(pos_vector);
00104 }
00105 }
00106