The trick might be that the sdk "polPnts( state, polygon, npoints, point_array )" translates to python "polPnts( state, polygon, point_array )" without the npoints argument.
Here's a sample that worked for me. The first part was my original script to create a square then at the end it replaces the points of the polygon with new points to make it bigger.
#! /usr/bin/env python
# -*- Mode: Python -*-
# -*- coding: ascii -*-
"""
This is a LightWave Command Sequence plug-in (Modeler) that creates
a square then relaces the points.
"""
import sys
import lwsdk
import math
__author__ = "Clinton Reese"
__date__ = "sep 28 2013"
__copyright__ = "Copyright (C) 2011 Clinton's 3D Creations"
__version__ = "1.0"
__maintainer__ = "Clinton Reese"
__email__ = "
[email protected]"
__status__ = "Example modified"
__lwver__ = "11.5"
class make_square(lwsdk.ICommandSequence):
def __init__(self, context):
super(make_square, self).__init__()
# LWCommandSequence -----------------------------------
def process(self, mod_command):
edit_op_result = lwsdk.EDERR_NONE
mesh_edit_op = mod_command.editBegin(0, 0, lwsdk.OPSEL_USER)
if not mesh_edit_op:
print >>sys.stderr, 'Failed to engage mesh edit operations!'
return lwsdk.AFUNC_OK
ptID = []
pt = [ -1.0, 0.0, -1.0 ]
uv = [ 0.0, 0.0 ]
rgb = [1.0, 0.0, 0.0]
ptID.append(mesh_edit_op.addPoint(mesh_edit_op.sta te, pt))
# different from c, dimension of vmap is not used?
#mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[0], lwsdk.LWVMAP_TXUV,"MyUVMap", 2, uv)
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[0], lwsdk.LWVMAP_TXUV, "MyUVMap", uv)
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[0], lwsdk.LWVMAP_WGHT, "MyWeightMap", 0.0)
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[0], lwsdk.LWVMAP_RGB, "MyVertexColorMap", rgb)
pt = [ -1.0, 0.0, 1.0 ]
uv = [ 0.0, 1.0 ]
rgb = [0.0, 1.0, 0.0]
ptID.append(mesh_edit_op.addPoint(mesh_edit_op.sta te, pt))
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[1], lwsdk.LWVMAP_TXUV, "MyUVMap", uv)
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[1], lwsdk.LWVMAP_WGHT, "MyWeightMap", 0.25)
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[1], lwsdk.LWVMAP_RGB, "MyVertexColorMap", rgb)
pt = [ 1.0, 0.0, 1.0 ]
uv = [ 1.0, 1.0 ]
rgb = [0.0, 0.0, 1.0]
ptID.append(mesh_edit_op.addPoint(mesh_edit_op.sta te, pt))
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[2], lwsdk.LWVMAP_TXUV, "MyUVMap", uv)
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[2], lwsdk.LWVMAP_WGHT, "MyWeightMap", 0.75)
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[2], lwsdk.LWVMAP_RGB, "MyVertexColorMap", rgb)
pt = [ 1.0, 0.0, -1.0 ]
uv = [ 1.0, 0.0 ]
rgb = [1.0, 1.0, 1.0]
ptID.append(mesh_edit_op.addPoint(mesh_edit_op.sta te, pt))
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[3], lwsdk.LWVMAP_TXUV, "MyUVMap", uv)
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[3], lwsdk.LWVMAP_WGHT, "MyWeightMap", 1.0)
mesh_edit_op.pntVMap(mesh_edit_op.state, ptID[3], lwsdk.LWVMAP_RGB, "MyVertexColorMap", rgb)
polygon = mesh_edit_op.addPoly(mesh_edit_op.state, lwsdk.LWPOLTYPE_FACE, None, "MySurface", ptID)
#mesh_edit_op.pntVPMap would be used at this point to create discontinuous uv values for the polygons
mesh_edit_op.done(mesh_edit_op.state, edit_op_result, 0)
ninetyDegrees = math.pi/2.0
#new_color = lwsdk.Color(0.0, 1.0, 1.0)
new_color = [0.0, 1.0, 1.0]
surface_funcs = lwsdk.LWSurfaceFuncs()
surface = surface_funcs.first()
while surface:
if surface_funcs.name(surface) == "MySurface":
#try float for lw11.5 - worked
#surface_funcs.setFlt(surface, lwsdk.SURF_COLR, new_color)
surface_funcs.set_float(surface, lwsdk.SURF_COLR, new_color)
surface_funcs.set_float(surface, lwsdk.SURF_SMAN, ninetyDegrees)
break
surface = surface_funcs.next()
thecommand = mod_command.lookup(mod_command.data, "SETLAYER")
i="1"
cs_options = lwsdk.marshall_dynavalues(i)
result = mod_command.execute(mod_command.data, thecommand, cs_options, lwsdk.OPSEL_USER)
mesh_edit_op = mod_command.editBegin(0, 0, lwsdk.OPSEL_USER)
ptID = []
pt = [ -1.5, 0.0, -1.5 ]
ptID.append(mesh_edit_op.addPoint(mesh_edit_op.sta te, pt))
pt = [ -1.5, 0.0, 1.5 ]
ptID.append(mesh_edit_op.addPoint(mesh_edit_op.sta te, pt))
pt = [ 1.5, 0.0, 1.5 ]
ptID.append(mesh_edit_op.addPoint(mesh_edit_op.sta te, pt))
pt = [ 1.5, 0.0, -1.5 ]
ptID.append(mesh_edit_op.addPoint(mesh_edit_op.sta te, pt))
mesh_edit_op.polPnts( mesh_edit_op.state, polygon, ptID )
mesh_edit_op.done(mesh_edit_op.state, edit_op_result, 0)
return lwsdk.AFUNC_OK
ServerTagInfo = [
( "Python Basic Square", lwsdk.SRVTAG_USERNAME | lwsdk.LANGID_USENGLISH ),
( "Make Square", lwsdk.SRVTAG_BUTTONNAME | lwsdk.LANGID_USENGLISH ),
( "Utilities/Python", lwsdk.SRVTAG_MENU | lwsdk.LANGID_USENGLISH )
]
ServerRecord = { lwsdk.CommandSequenceFactory("LW_PyMakeSquare", make_square) : ServerTagInfo }