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 40x 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 @ref HOM/SOP_HOMWave.py, @ref HOM/SOP_HOMWaveNumpy.py, @ref HOM/SOP_HOMWave.C, @ref SOP/SOP_CPPWave.C, @ref SOP/SOP_VEXWave.vfl
"""

import inlinecpp

inlinecpp.extendClass(
    hou.Geometry, "sop_homwave_code", function_sources=["""
    void wave(GU_Detail *gdp, double f)
    {
        GEO_AttributeHandle position_attrib = gdp->getAttribute(
            GEO_POINT_DICT, "P");
        int num_points = gdp->points().entries();
        for (int i=0; i < num_points; ++i)
        {
            position_attrib.setElement(gdp->points()(i));
            UT_Vector4 pos(position_attrib.getV4());
            pos.y() = sin(pos.x() * 0.2 + pos.z() * 0.3 + f);
            position_attrib.setV4(pos);
        }
    }
    """])
hou.pwd().geometry().wave(hou.frame() * 0.03)


Generated on Thu Jan 31 00:23:58 2013 for HDK by  doxygen 1.5.9