Esempio n. 1
0
def maximize_perspective():
    '''Setup perspective for the render'''
    rt.viewport.setLayout(rt.Name('layout_1'))
    rt.viewport.setType(rt.Name('view_persp_user'))
    rt.viewport.setTM(
        rt.matrix3(rt.point3(0.707107, 0.353553, -0.612372),
                   rt.point3(-0.707107, 0.353553, -0.612372),
                   rt.point3(0, 0.866025, 0.5),
                   rt.point3(-0.00967026, -70.3466, -552.481)))
def layout_objects(title, cases, y_position, x_offset_text=-45):
    """Layout a list of nodes in a line"""
    create_text(rt.Point3(x_offset_text, y_position, 0), title)
    x_position = 0.0
    for gen in cases:
        gen.Position = rt.point3(x_position, y_position, 0)
        x_position += X_STEP
        if (x_position % 260.0) < 0.001:
            x_position = 0.0
            y_position += Y_STEP
    return y_position
Esempio n. 3
0
def make_pyramid_mesh(side=20.0):
    '''Construct a pyramid from vertices and faces.'''
    halfside = side / 2.0
    return rt.mesh(vertices=[
        rt.point3(0.0, 0.0, side),
        rt.point3(-halfside, -halfside, 0.0),
        rt.point3(-halfside, halfside, 0.0),
        rt.point3(halfside, 0.0, 0.0)
    ],
                   faces=[
                       rt.point3(1, 2, 3),
                       rt.point3(1, 3, 4),
                       rt.point3(1, 4, 2),
                       rt.point3(2, 3, 4),
                   ])
Esempio n. 4
0
    def pickPoints(self):
        self.geo = self.geometry()
        self.hide()

        try:
            mxs.unregisterRedrawViewsCallback(self.debugView)
        except:
            pass

        try:
            self.pos1 = mxs.pickPoint(
                snap=mxs.readvalue(mxs.StringStream('#3D')))
            self.pos2 = mxs.pickPoint(
                snap=mxs.readvalue(mxs.StringStream('#3D')))

            self.moveVector = self.pos2 - self.pos1

            vector = self.moveVector

            X = mxs.normalize(vector)
            Z = mxs.point3(0, 0, 1)
            Y = mxs.normalize(mxs.cross(Z, X))
            Z = mxs.normalize(mxs.cross(X, Y))

            self.transform = mxs.matrix3(Z, Y, X, mxs.point3(0, 0, 0))

            mxs.WorkingPivot.SetTM(self.transform)
            mxs.execute("max tti")

            mxs.registerRedrawViewsCallback(self.debugView)
            mxs.execute("max move")
            mxs.execute("toolMode.coordsys #working_pivot")
            self.show()
            self.setGeometry(self.geo)

        except:
            print("Point Picking Cancelled")
def volume_based_transform(obj):
    """
    creates a transform matrix by running a SVD operation on the verts that make up the mesh

    :param type obj: a max node...
    :returns: a transform matrix
    :rtype: mxs.matrix3
    """
    mesh = mxs.snapshotAsMesh(obj)  # let's work in world space :D
    print('collecting verts')
    verts = [[mesh.verts[i].pos.x, mesh.verts[i].pos.y, mesh.verts[i].pos.z] for i in range(mesh.verts.count)]

    print('making convexhull')
    hull = ConvexHull(verts)
    center = hull.points.mean(axis=0)

    print('centering points ch points')
    hull_verts = [hull.points[vert] - center for vert in hull.vertices]

    print('working out svd')
    pcloud = matrix(hull_verts)
    _, _, vh = svd(pcloud)

    print('building matrix')
    xaxis, yaxis, zaxis = vh.tolist()

    xaxis = mxs.point3(*map(float, xaxis))
    yaxis = mxs.point3(*map(float, yaxis))
    zaxis = mxs.point3(*map(float, zaxis))

    transform = mxs.matrix3(mxs.normalize(xaxis),
                            mxs.normalize(yaxis),
                            mxs.normalize(zaxis),
                            mxs.point3(*map(float, center)))

    return transform
Esempio n. 6
0
mySelection = rt.selection

for each in mySelection:
	
	print each.name
	
#get first selected

firstItem = rt.selection[0]

print firstItem.name

#create simple object

rt.sphere(radius=50, position=rt.point3(25, 25, 25), segments=8)

#select all objects

rt.select(rt.objects)

# with MaxPlus

MaxPlus.Core.GetRootNode().Children

#clear selection

rt.clearselection()


rt.select(firstItem)
Esempio n. 7
0
def execute():

    # Define the target object
    my_target = mxs.selection[0]

    # Reset the pivot
    my_target.pivot = my_target.center

    # Define the grid object
    my_grid = mxs.grid()

    # Define the vector
    vector = my_target.transform.position - mxs.inverse(
        mxs.viewport.getTM()).position

    # Define the length of the target
    distance = (mxs.length(my_target.min - my_target.max) / 2)

    # Normalize + UP vector (Z)
    X = mxs.normalize(vector)
    Z = mxs.point3(0, 0, 1)
    Y = mxs.normalize(mxs.cross(Z, X))
    Z = mxs.normalize(mxs.cross(X, Y))

    # Define a new transform based on vector
    my_transform = mxs.matrix3(Z, Y, X, my_target.transform.position)

    # Edit the position of the transform
    new_position = my_transform.position - (X * distance)
    my_transform = mxs.matrix3(Z, Y, X, new_position)

    # Assign the transform to the grid
    my_grid.transform = my_transform

    # Activate the grid
    mxs.activegrid = my_grid

    # Define spline method
    def setMode(name):
        name.curveType = 1

    try:
        # Set iso view
        mxs.execute("max vpt iso user")

        # Define user draw curves
        curves = mxs.startObjectCreation(mxs.FreehandSpline,
                                         returnNewNodes=True,
                                         newNodeCallback=setMode)

        # Define modifiers
        noise_mod = mxs.Noisemodifier()
        quad_mod = mxs.Quadify_Mesh()
        extrude_mod = mxs.Extrude()

        # Change the parameters
        extrude_mod.amount = distance * 2
        quad_mod.quadsize = 2
        noise_mod.scale = 10
        noise_mod.fractal = True
        noise_mod.strength = mxs.point3(2, 10, 2)

        # Add the modifiers
        mxs.addmodifier(curves, extrude_mod)
        mxs.addmodifier(curves, quad_mod)
        mxs.addmodifier(curves, noise_mod)

        # Define cutter splines
        mxs.ProCutter.CreateCutter(curves, 1, True, True, False, True, True)

        # Define stock object
        mxs.ProCutter.AddStocks(curves[0], my_target, 1, 1)

        # Set perspective view
        mxs.execute("max vpt persp user")

        # Deactivate and delete the grid
        mxs.activegrid = None
        mxs.delete(my_grid)

    except:

        # Set perspective view
        mxs.execute("max vpt persp user")

        # Deactivate and delete the grid
        mxs.activegrid = None
        mxs.delete(my_grid)

        print("cancled")
Esempio n. 8
0
    def recreate(self):
        defaultSize = 2
        bones = mxs.Array()

        if len(self.result) > 0:
            self.newNodes = []
            self.dict = {}
            temp = mxs.Array()
            lastNode = None
            index = 0

            rootNode = mxs.BoneSys.createBone(mxs.point3(0, 0, 0),
                                              mxs.point3(0, 1, 0),
                                              mxs.point3(0, 1, 0))
            rootNode.transform = mxs.Matrix3(1)
            rootNode.size = 2
            rootNode.name = "rootBone"
            mxs.join(temp, rootNode)

        def new_create_constraints(node, nNode):

            posList = mxs.position_list()  # Create Pos_List
            const = mxs.Position_Constraint()  # Create  Pos_Constraint
            const.appendTarget(nNode, 100)  # Add target to Constraint
            secsub = mxs.setPropertyController(node.controller, "Position",
                                               posList)  # Add PosList to node
            mxs.setPropertyController(secsub, 'Available', const)

            posList = mxs.rotation_list()  # Create Pos_List
            const = mxs.Orientation_Constraint()  # Create  Pos_Constraint
            const.appendTarget(nNode, 100)  # Add target to Constraint
            secsub = mxs.setPropertyController(node.controller, "Rotation",
                                               posList)  # Add PosList to node
            mxs.setPropertyController(secsub, 'Available', const)

        def create_constraints(nNode, node):
            # Position
            posList = mxs.position_list()  # Create Pos_List
            const = mxs.Position_Constraint()  # Create  Pos_Constraint
            const.appendTarget(nNode, 100)  # Add target to Constraint
            secsub = mxs.setPropertyController(node.controller, "Position",
                                               posList)  # Add PosList to node
            mxs.setPropertyController(secsub, 'Available', const)

            # Rotation
            posList = mxs.rotation_list()  # Create Pos_List
            const = mxs.Orientation_Constraint()  # Create  Pos_Constraint
            const.appendTarget(nNode, 100)  # Add target to Constraint
            secsub = mxs.setPropertyController(node.controller, "Rotation",
                                               posList)  # Add PosList to node
            mxs.setPropertyController(secsub, 'Available', const)

        for obj in self.result:
            endPos = mxs.point3(0, 0, 0)

            if obj.children.count > 0:
                endPos = obj.children[0].transform.pos

            else:
                endPos = (mxs.transmatrix(mxs.point3(defaultSize, 0, 0)) *
                          obj.transform).pos

            zPos = (mxs.transmatrix(mxs.point3(0, 0, 1)) * obj.transform).pos
            d = mxs.BoneSys.createBone(obj.transform.pos, endPos, zPos)
            d.transform = obj.transform
            d.name = obj.name
            d.wirecolor = obj.wirecolor
            mxs.join(bones, d)
            self.dict[obj] = d
            self.newNodes.append(obj)

            # Create parent connections
            if mxs.isValidNode(obj.parent):
                d.parent = self.dict[obj.parent]

            else:
                d.parent = rootNode

            create_constraints(obj, d)

        mxs.select(bones)
        mxs.selectmore(rootNode)
        mxs.redrawViews()