/* * Copyright (c) 2005 * Side Effects Software Inc. All rights reserved. * * Redistribution and use of Houdini Development Kit samples in source and * binary forms, with or without modification, are permitted provided that the * following conditions are met: * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. The name of Side Effects Software may not be used to endorse or * promote products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY SIDE EFFECTS SOFTWARE `AS IS' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN * NO EVENT SHALL SIDE EFFECTS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * *---------------------------------------------------------------------------- * C++ version of the wave SOP */ #include <UT/UT_DSOVersion.h> #include <SYS/SYS_Math.h> #include <GU/GU_Detail.h> #include <GEO/GEO_AttributeHandle.h> #include <PRM/PRM_Include.h> #include <OP/OP_Director.h> #include <OP/OP_Operator.h> #include <OP/OP_OperatorTable.h> #include "SOP_CPPWave.h" using namespace HDK_Sample; void newSopOperator(OP_OperatorTable *table) { table->addOperator(new OP_Operator("cpp_wave", "CPP Wave ", SOP_CPPWave::myConstructor, SOP_CPPWave::myTemplateList, 1, 1, 0)); } PRM_Template SOP_CPPWave::myTemplateList[] = { PRM_Template(), }; OP_Node * SOP_CPPWave::myConstructor(OP_Network *net, const char *name, OP_Operator *op) { return new SOP_CPPWave(net, name, op); } SOP_CPPWave::SOP_CPPWave(OP_Network *net, const char *name, OP_Operator *op) : SOP_Node(net, name, op) { } SOP_CPPWave::~SOP_CPPWave() { } OP_ERROR SOP_CPPWave::cookMySop(OP_Context &context) { double frame; int i, npts; // Before we do anything, we must lock our inputs. Before returning, // we have to make sure that the inputs get unlocked. if (lockInputs(context) >= UT_ERROR_ABORT) return error(); // Duplicate input geometry duplicateSource(0, context); // Flag the SOP as being time dependent (i.e. cook on time changes) flags().timeDep = 1; frame = OPgetDirector()->getChannelManager()->getSample(context.getTime()); frame *= 0.03; npts = gdp->points().entries(); GEO_AttributeHandle Phandle; UT_Vector4 Pvalue; Phandle = gdp->getAttribute(GEO_POINT_DICT, "P"); for (i = 0; i < npts; i++) { Phandle.setElement(gdp->points()(i)); Pvalue = Phandle.getV4(); Pvalue.y() = sin(Pvalue.x()*.2 + Pvalue.z()*.3 + frame); Phandle.setV4(Pvalue); } unlockInputs(); return error(); }
1.5.9