Particles: initial Quick Particles operator

This operator automates the following steps:
1. Create a point cloud object.
2. Create a simulation data block.
3. Add a small particle simulation to the node tree.
4. Add a Simulation modifier to the point cloud object.
5. Reference the particle simulation from the modifier.

You have to go back to frame 1 to start the simulation.
The simulation is not yet cached and cannot be rendered.

The bounding box of the point cloud object is enabled for now,
because otherwise it is hard to select the object.
This commit is contained in:
2020-07-25 20:24:36 +02:00
parent 04d46bdb83
commit 1e999c7bdb
3 changed files with 55 additions and 1 deletions

View File

@@ -561,9 +561,61 @@ class QuickLiquid(Operator):
return {'FINISHED'}
class QuickParticles(Operator):
"""Use active object as particle emitter"""
bl_idname = "object.quick_particles"
bl_label = "Quick Particles"
@classmethod
def poll(cls, context):
if not context.preferences.experimental.use_new_particle_system:
return False
if context.mode != 'OBJECT':
return False
if context.active_object is None:
return False
if context.active_object.type != 'MESH':
return False
return True
def execute(self, context):
pointcloud = bpy.data.pointclouds.new("Particles")
pointcloud_object = bpy.data.objects.new("Particles", pointcloud)
modifier = pointcloud_object.modifiers.new("Simulation", 'SIMULATION')
simulation = bpy.data.simulations.new("Particle Simulation")
tree = simulation.node_tree
default_name = "Particles"
particle_simulation_node = tree.nodes.new('SimulationNodeParticleSimulation')
particle_simulation_node.name = default_name
emitter_node = tree.nodes.new('SimulationNodeParticleMeshEmitter')
emitter_node.location.x -= 200
emitter_node.location.y += 50
emitter_node.inputs["Object"].default_value = context.active_object
force_node = tree.nodes.new('SimulationNodeForce')
force_node.location.x -= 200
force_node.location.y -= 100
force_node.inputs["Force"].default_value = (0, 0, -1)
tree.links.new(particle_simulation_node.inputs["Emitters"], emitter_node.outputs["Emitter"])
tree.links.new(particle_simulation_node.inputs["Forces"], force_node.outputs["Force"])
modifier.simulation = simulation
modifier.data_path = default_name
for obj in context.selected_objects:
obj.select_set(False)
context.collection.objects.link(pointcloud_object)
pointcloud_object.select_set(True)
context.view_layer.objects.active = pointcloud_object
pointcloud_object.show_bounds = True
return {'FINISHED'}
classes = (
QuickExplode,
QuickFur,
QuickSmoke,
QuickLiquid,
QuickParticles,
)