# Next, let's create a clickable object to start the timeline my_object = objects.W3DObject( name="button", # Give it a name color=(255, 0, 0), # Make it red placement=placement.W3DPlacement( # Specify position and orientation position=(0, 1, 0), # We'll leave rotation as default for now ), content=objects.W3DText( # Specify that this is a text object text="Play" # ...with text reading "Hello, World!" ), link=objects.W3DLink( # Add a clickable link to the text object actions={ 0: [ # On first click (index 0)... actions.TimelineAction( # start the timeline timeline_name="my_timeline", change="Start" ) ] } ) ) # Now add this object to the project my_project["objects"].append(my_object) my_project["debug"] = True # Finally, we render the whole thing using Blender, export it, and display the # result export_to_blender(my_project, filename="timeline_sound_sample.blend", display=True)
start_immediately=True, actions=absolute_actions ) my_project["timelines"].append(absolute_timeline) relative_actions.append( ( 2 * theta_div, actions.TimelineAction( timeline_name="absolute", change="Start" ) ) ) relative_timeline = timeline.W3DTimeline( name="relative", start_immediately=False, actions=relative_actions ) my_project["timelines"].append(relative_timeline) # Now, we export the project to archival XML (e.g. for use in legacy cwapp # environment) my_project.save_XML("axis_rotations.xml") # Finally, we render the whole thing using Blender, export it, and display the # result export_to_blender( my_project, filename="axis_rotations.blend", display=True, fullscreen=False )
color=(255, 0, 0), # Make it red placement=placement.W3DPlacement( # Specify position and orientation position=(0, 1, 0), # We'll leave rotation as default for now ), content=objects.W3DText( # Specify that this is a text object text="Hello, World!" # ...with text reading "Hello, World!" ), link=objects.W3DLink( # Add a clickable link to the text object actions = { -1: [ # On every click (negative number)... actions.ObjectAction( # ...change the object... object_name="hello", # ...named hello... duration=1, # ...over a period of one second... move_relative=True, # ...by moving it relative to its # current location... placement=placement.W3DPlacement( position=(0, 0.5, 0) # ...back half a meter. ) ) ] } ) ) # Now add this object to the project my_project["objects"].append(my_object) #Finally, we render the whole thing using Blender, export it, and display the #result export_to_blender(my_project, filename="link_sample.blend", display=True)
my_object = objects.W3DObject( name="elem{}x{}".format(i, j), color=(randint(0, 255), randint(0, 255), randint(0, 255)), placement=placement.W3DPlacement( position=( radius*sin(theta)*cos(phi), radius*sin(theta)*sin(phi), radius*cos(theta) ), rotation=placement.W3DRotation( rotation_mode="LookAt", rotation_vector=(0, 0, 0) ) ), content=objects.W3DText( text="W3D" ), ) my_project["objects"].append(my_object) #Now, we export the project to archival XML (e.g. for use in legacy cwapp #environment) my_project.save_XML("sphere_sample.xml") #Finally, we render the whole thing using Blender, export it, and display the #result export_to_blender( my_project, filename="sphere_sample.blend", display=True, fullscreen=True)
import argparse import os import sys home_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.append(os.path.abspath(os.path.join(home_dir, os.pardir))) from pyw3d import project, export_to_blender, W3D_CONFIG if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("config", choices=["desktop", "desktopfull"], help="run configuration") parser.add_argument("project_file") if "blender" in sys.argv[0]: args = parser.parse_args(sys.argv[4:]) else: args = parser.parse_args() print("Configuration information: ", W3D_CONFIG) # It's as simple as loading the project... my_project = project.W3DProject.fromXML_file(args.project_file) blend_filename = "run.blend" # ...and exporting it! export_to_blender(my_project, filename=blend_filename, display=True, fullscreen=(args.config == "desktopfull"))
]) absolute_actions.append((2 * (len(ordered_names) + 1), actions.TimelineAction(timeline_name="relative", change="Start"))) absolute_timeline = timeline.W3DTimeline(name="absolute", start_immediately=True, actions=absolute_actions) my_project["timelines"].append(absolute_timeline) relative_actions.append( (5, actions.TimelineAction(timeline_name="absolute", change="Start"))) relative_timeline = timeline.W3DTimeline(name="relative", start_immediately=False, actions=relative_actions) my_project["timelines"].append(relative_timeline) my_project["debug"] = True # Now, we export the project to archival XML (e.g. for use in legacy cwapp # environment) my_project.save_XML("wall_movement.xml") # Finally, we render the whole thing using Blender, export it, and display the # result export_to_blender(my_project, filename="wall_movement.blend", display=True, fullscreen=False)
placement=placement.W3DPlacement( # Specify position and orientation position=(0, 1, 0), # We'll leave rotation as default for now ), content=objects.W3DText( # Specify that this is a text object text="Hello, World!", # ...with text reading "Hello, World!" font="LinBiolinum_K.otf" ), link=objects.W3DLink( # Add a clickable link to the text object actions = { -1: [ # On every click (negative number)... actions.ObjectAction( # ...change the object... object_name="hello", # ...named hello... duration=1, # ...over a period of one second... move_relative=True, # ...by moving it relative to its # current location... placement=placement.W3DPlacement( position=(0, 0.5, 0) # ...back half a meter. ) ) ] } ), ) # Now add this object to the project my_project["objects"].append(my_object) #Finally, we render the whole thing using Blender, export it, and display the #result export_to_blender(my_project, filename="link_sample.blend", display=True)
my_project["objects"].append(my_object) my_object = objects.W3DObject( name="litmodel", placement=placement.W3DPlacement(position=(-10, 20, 0), rotation=placement.W3DRotation( rotation_mode="LookAt", rotation_vector=(0, 0, 0), )), content=objects.W3DModel(filename="models/bathroom2.obj"), lighting=True) my_project["objects"].append(my_object) my_object = objects.W3DObject( name="unlitmodel", placement=placement.W3DPlacement(position=(10, 20, 0), rotation=placement.W3DRotation( rotation_mode="LookAt", rotation_vector=(0, 0, 0), )), content=objects.W3DModel(filename="models/bathroom2.obj"), lighting=False) my_project["objects"].append(my_object) my_project["background"] = (140, 0, 140) my_project["debug"] = True export_to_blender(my_project, filename="lighting.blend", display=True)
where run.xml is a copy of your project in archival XML format. It is possible to use this script as a drop-in replacement for cwapp with CWEditor. In the "Run" menu of CWEditor, select "Configure Paths". Then, simply browse to find this script in the resulting dialog. You may also need to make this script executable on your platform. On Unix-based systems, this can be done from terminal via:: $ chmod u+x cwapp.py """ import argparse from pyw3d import project, export_to_blender if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument( "config", choices=["desktop", "desktopfull"], help="run configuration") parser.add_argument("project_file") args = parser.parse_args() # It's as simple as loading the project... my_project = project.W3DProject.fromXML_file(args.project_file) # ...and exporting it! export_to_blender( my_project, display=True, fullscreen=(args.config == "desktopfull") )
(radius + 8) * sin(theta) * sin(phi), (radius + 8) * cos(theta)), ), content=objects.W3DPSys(particle_group="particles", max_particles=100, max_age=3, speed=1, particle_actions="my_actions"), visible=True)) my_project["trigger_events"].append( triggers.HeadPositionTrigger( name="trigger{}x{}".format(i, j), box=triggers.EventBox(direction="Inside", corner1=(i, j, i + j), corner2=(j, i + 5, i + j)), actions=[ actions.ObjectAction(object_name="system{}x{}".format( i, j), visible=False) ])) my_project["profile"] = True my_project["debug"] = False start_time = time.time() export_to_blender(my_project, filename="performance_sample.blend", display=False, fullscreen=True) print("Approximate wall time: {}".format(time.time() - start_time))
name="elem{}x{}".format(i, j), color=(randint(0, 255), randint(0, 255), randint(0, 255)), double_sided=False, placement=placement.W3DPlacement( position=( radius*sin(theta)*cos(phi), radius*sin(theta)*sin(phi), radius*cos(theta) ), rotation=placement.W3DRotation( rotation_mode="LookAt", rotation_vector=(0, 0, 0) ) ), content=objects.W3DText( text="W3D" ), ) my_project["objects"].append(my_object) #Now, we export the project to archival XML (e.g. for use in legacy cwapp #environment) my_project.save_XML("single_sided_sample.xml") #Finally, we render the whole thing using Blender, export it, and display the #result export_to_blender( my_project, filename="single_sided_sample.blend", display=True, fullscreen=True)