Skip to content

Instantly share code, notes, and snippets.

View mattcox's full-sized avatar

Matt Cox mattcox

View GitHub Profile
@mattcox
mattcox / pmodel_createPlane_incremental.cpp
Last active July 30, 2022 20:27
Demonstrates a simple plane mesh operation for the Modo procedural modelling system. This demonstrates how to do incremental updates that create the polygon on the first evaluation, and then updates point positions on subsequent evaluations. Incremental updates can significantly improve performance, as Modo will only rebuild the surface for draw…
#include <lxsdk/lx_mesh.hpp>
#include <lxsdk/lx_pmodel.hpp>
#include <lxsdk/lx_seltypes.hpp>
#include <lxsdk/lxu_attributes.hpp>
#define SERVER_NAME "pmodel.createPlane"
#define ATTRs_SIZE "size"
#define ATTRi_SIZE 0
class MeshOp :
@mattcox
mattcox / matchXfrm.cpp
Last active May 19, 2022 19:42
Match Transform Command for Luxology Modo.
/*
matchXfrm.cpp
Sample plugin to demonstrate a simple command that matches
position, rotation and scale between multiple selected items.
This command operates slightly differently to the built in
match.position, rotation, scale commands. The built in commands
will average out the transform if multiple items are selected,
@mattcox
mattcox / SurfaceForce.py
Last active December 16, 2021 14:48
This example plugin for modo 701, shows how to create a surface force in Python. The force will read a mesh, get the closest position on that mesh and find the normal at that position. A force will be created along the normal vector of the surface. The result is a force that pushes particles and dynamic objects away from the surface.
#python
'''
Surface Force
This example plugin for modo 701, shows how to create a surface force in
Python. The force will read a mesh, get the closest position on that mesh
and find the normal at that position. A force will be created along the
normal vector of the surface. The result is a force that pushes particles
@mattcox
mattcox / material_new.py
Last active November 9, 2021 08:19
Auto generates material masks for every new, unique material ptag in the scene.
#!/usr/bin/env python
'''
Auto generates material masks for every material ptag in the scene.
Usage: Put the script in a folder called lxserv inside your modo scripts
folder. Restart modo. Run the command: material.generate
'''
import lx
@mattcox
mattcox / pmodel_selectOdd.cpp
Last active August 26, 2021 14:27
Example of a simple selection operation for the Modo procedural modelling system that selects every other polygon. It demonstrates how to use thread slots, to allow selection to be evaluated from multiple threads
#include <lxsdk/lx_mesh.hpp>
#include <lxsdk/lx_pmodel.hpp>
#include <lxsdk/lx_seltypes.hpp>
#include <lxsdk/lx_thread.hpp>
#include <lxsdk/lxu_attributes.hpp>
#define SERVER_NAME "pmodel.selectEveryOther"
/*
* The Selection Operation is evaluated in parallel from multiple threads. As
import Cocoa
import Foundation
let pathToImage = "/some/path/to/an/image.png"
let pathToFolders = URL(fileURLWithPath: "/Some/Folder/Path/")
guard let image = NSImage(contentsOfFile: pathToImage) else {
fatalError("Unable to load image.")
}
@mattcox
mattcox / shapeDraw.py
Last active April 16, 2020 08:08
Python example demonstrating how to modify GL drawing of an item.
#python
'''
Shape Draw python example. This python plugins demonstrates how to create
a Package that can be added to existing items, that controls how they draw
in the GL viewport. We will simply draw a circle. A radius channel and an
sides channel will control how the circle is drawn.
To use, add the python script to an lxserv folder in your scripts directory.
Select an locator item and enter: item.addPackage shape.draw. To remove the
@mattcox
mattcox / meshDumpCurvesCommand.py
Created November 7, 2019 10:33
Demonstrates how to print vertex information for the points on an ILxCurve.
#python
import lx
import lxifc
import lxu.command
import modo
class Command(lxu.command.BasicCommand):
def __init__(self):
lxu.command.BasicCommand.__init__(self)
@mattcox
mattcox / getReferenceScenesAndItems.py
Created July 24, 2018 11:57
Collect reference items in the selected scene.
import lxu.select
class ReferencedItems:
def __init__(self, scene):
self.mScene = lx.object.Scene(scene)
self.mSceneFilename = self.mScene.Filename()
self.mItems = []
def AddItem(self, item):
print item
@mattcox
mattcox / SetCOM.cpp
Created February 15, 2019 15:27
Demonstrates how to implement a custom Polymorph object that implements the SetCOM method. When the COM object is allocated, the SetCOM method will be passed a copy of the object, which can be useful if the allocated object needs passing to additional methods from within the COM implementation. Note: As the COM object is maintaining a pointer to…
class SomeInterface :
public CLxImpl_Foo
{
public:
class MyPolymorph :
public CLxPolymorph<SomeInterface>
{
public:
virtual void
SetCOM(