HOM/SOP_HOMWaveInlinecpp.py

#
# Copyright (c) 2013
#       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.
#
#----------------------------------------------------------------------------
# This SOP provides an example of a SOP implemented in Python that uses the
# inlinecpp module to speed it up with C++ embedded code.  See also
# SOP_HOMWave.py for a pure-Python implementation, SOP_HOMWave.C for an all-C++
# implementation using the HOM C++ API and SOP_CPPWave.C for an all-C++
# implementation using the HDK C++ API.
#

"""This is the accelerated equivalent of SOP_HOMWave.py.  It implements the
same SOP, but runs approximately 20x faster.

To use this code,
    1) In Houdini, choose File -> New Operator Type
    2) Choose "Python Type"
    3) Choose the network type as "Geometry Operator"
    4) Paste this code in the "Code" tab of the type properties.

@see SOP_HOMWave, SOP_CPPWave, vex_wave()
"""

import inlinecpp

inlinecpp.extendClass(
    hou.Geometry, "sop_homwave_code", function_sources=["""
    void wave(GU_Detail *gdp, double f)
    {
        GEO_Point *point;
        FOR_ALL_GPOINTS(gdp, point)
        {
            UT_Vector4 pos(point->getPos());
            pos[1] = sinf(pos[0] * 0.2 + pos[2] * 0.3 + f);
            point->setPos(pos);
        }
    }
    """])
hou.pwd().geometry().wave(hou.frame() * 0.03)


Generated on Mon Jan 28 00:45:38 2013 for HDK by  doxygen 1.5.9