[Bf-extensions-cvs] [1eecd96] master: Added: IMPORTER in an operator (primitives.py) from Main import menu or special povray add menu to import povray primitives and mesh objects from several *.POV/*.INC files at once. confirmed to work with avogadro files and some other test scenes.
Maurice Raybaud
noreply at git.blender.org
Sat Jul 2 19:42:25 CEST 2016
Commit: 1eecd9602f9908350e610c9bef2cb6f0028558ad
Author: Maurice Raybaud
Date: Sat Jul 2 19:42:09 2016 +0200
Branches: master
https://developer.blender.org/rBA1eecd9602f9908350e610c9bef2cb6f0028558ad
Added: IMPORTER in an operator (primitives.py) from Main import menu or special povray add menu to import povray primitives and mesh objects from several *.POV/*.INC files at once. confirmed to work with avogadro files and some other test scenes.
===================================================================
M render_povray/__init__.py
M render_povray/primitives.py
M render_povray/render.py
M render_povray/shading.py
M render_povray/ui.py
===================================================================
diff --git a/render_povray/__init__.py b/render_povray/__init__.py
index f272355..31b7671 100644
--- a/render_povray/__init__.py
+++ b/render_povray/__init__.py
@@ -993,6 +993,11 @@ class RenderPovSettingsObject(PropertyGroup):
name="Imported Pov location",
precision=6,
default=(0.0, 0.0, 0.0))
+
+ imported_loc_cap = FloatVectorProperty(
+ name="Imported Pov location",
+ precision=6,
+ default=(0.0, 0.0, 2.0))
unlock_parameters = BoolProperty(name="Lock",default = False)
@@ -1061,11 +1066,7 @@ class RenderPovSettingsObject(PropertyGroup):
addboundorclip = BoolProperty(description="",default=False)
blob_threshold = FloatProperty(name="Threshold",min=0.00, max=10.0, default=0.6)
-
- cylinder_radius = FloatProperty(name="Cylinder R",min=0.00, max=10.0, default=0.04)
-
-
blob_strength = FloatProperty(name="Strength",min=-10.00, max=10.0, default=1.00)
res_u = IntProperty(name="U",min=100, max=1000, default=500)
@@ -1089,14 +1090,32 @@ class RenderPovSettingsObject(PropertyGroup):
all_intersections = BoolProperty(name="All Intersections",default=False)
max_trace = IntProperty(name="Max Trace",min=1, max=100,default=1)
-
-
-
+
+
+ def prop_update_cylinder(self, context):
+ if bpy.ops.pov.cylinder_update.poll():
+ bpy.ops.pov.cylinder_update()
+ cylinder_radius = FloatProperty(name="Cylinder R",min=0.00, max=10.0, default=0.04, update=prop_update_cylinder)
+ cylinder_location_cap = FloatVectorProperty(
+ name="Cylinder Cap Location", subtype='TRANSLATION',
+ description="The position of the 'other' end of the cylinder (relative to object location)",
+ default=(0.0, 0.0, 2.0), update=prop_update_cylinder,
+ )
+
+ imported_cyl_loc = FloatVectorProperty(
+ name="Imported Pov location",
+ precision=6,
+ default=(0.0, 0.0, 0.0))
+
+ imported_cyl_loc_cap = FloatVectorProperty(
+ name="Imported Pov location",
+ precision=6,
+ default=(0.0, 0.0, 2.0))
+
def prop_update_sphere(self, context):
bpy.ops.pov.sphere_update()
- sphere_radius = FloatProperty(name="Sphere radius",min=0.00, max=10.0, default=0.5, update=prop_update_sphere)
+ sphere_radius = FloatProperty(name="Sphere radius",min=0.00, max=10.0, default=0.5, update=prop_update_sphere)
-
def prop_update_cone(self, context):
bpy.ops.pov.cone_update()
diff --git a/render_povray/primitives.py b/render_povray/primitives.py
index c668ed2..27010ba 100644
--- a/render_povray/primitives.py
+++ b/render_povray/primitives.py
@@ -1,8 +1,6 @@
############ To get POV-Ray specific objects In and Out of Blender ###########
import bpy
-#from . import render
-#from render import POVRAY_RENDER
from bpy_extras.io_utils import ImportHelper
from bpy_extras import object_utils
from math import atan, pi, degrees, sqrt, cos, sin
@@ -19,6 +17,11 @@ from bpy.props import (
CollectionProperty,
)
+from mathutils import (
+ Vector,
+ )
+
+#import collections
def pov_define_mesh(mesh, verts, edges, faces, name, hide_geometry=True):
if mesh is None:
@@ -602,31 +605,115 @@ class POVRAY_OT_box_add(bpy.types.Operator):
ob.pov.object_as = "BOX"
return {'FINISHED'}
+
+def pov_cylinder_define(context, op, ob, radius, loc, loc_cap):
+ if op:
+ R = op.R
+ loc = bpy.context.scene.cursor_location
+ loc_cap[0] = loc[0]
+ loc_cap[1] = loc[1]
+ loc_cap[2] = (loc[2]+2)
+ vec = Vector(loc_cap) - Vector(loc)
+ depth = vec.length
+ rot = Vector((0, 0, 1)).rotation_difference(vec) # Rotation from Z axis.
+ trans = rot * Vector((0, 0, depth / 2)) # Such that origin is at center of the base of the cylinder.
+ roteuler = rot.to_euler()
+ if not ob:
+ bpy.ops.object.add(type='MESH', location=loc)
+ ob = context.object
+ ob.name = ob.data.name = "PovCylinder"
+ ob.pov.cylinder_radius = radius
+ ob.pov.cylinder_location_cap = vec
+ ob.pov.object_as = "CYLINDER"
+ else:
+ ob.location = loc
+
+ bpy.ops.object.mode_set(mode="EDIT")
+ bpy.ops.mesh.reveal()
+ bpy.ops.mesh.select_all(action='SELECT')
+ bpy.ops.mesh.delete(type='VERT')
+ bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=depth, location=loc, rotation=roteuler, end_fill_type='NGON') #'NOTHING'
+ bpy.ops.transform.translate(value=trans)
+
+ bpy.ops.mesh.hide(unselected=False)
+ bpy.ops.object.mode_set(mode="OBJECT")
+ bpy.ops.object.shade_smooth()
+
+
class POVRAY_OT_cylinder_add(bpy.types.Operator):
bl_idname = "pov.addcylinder"
bl_label = "Cylinder"
bl_description = "Add Cylinder"
bl_options = {'REGISTER', 'UNDO'}
+ # XXX Keep it in sync with __init__'s cylinder Primitive
+ R = FloatProperty(name="Cylinder radius", min=0.00, max=10.0, default=1.0)
+
+ imported_cyl_loc = FloatVectorProperty(
+ name="Imported Pov base location",
+ precision=6,
+ default=(0.0, 0.0, 0.0))
+
+ imported_cyl_loc_cap = FloatVectorProperty(
+ name="Imported Pov cap location",
+ precision=6,
+ default=(0.0, 0.0, 2.0))
+
def execute(self,context):
+ props = self.properties
+ R = props.R
+ ob = context.object
layers = 20*[False]
layers[0] = True
- bpy.ops.mesh.primitive_cylinder_add(layers = layers)
+ if ob:
+ if ob.pov.imported_cyl_loc:
+ LOC = ob.pov.imported_cyl_loc
+ if ob.pov.imported_cyl_loc_cap:
+ LOC_CAP = ob.pov.imported_cyl_loc_cap
+ else:
+ if not props.imported_cyl_loc:
+ LOC_CAP = LOC = bpy.context.scene.cursor_location
+ LOC_CAP[2] += 2.0
+ else:
+ LOC = props.imported_cyl_loc
+ LOC_CAP = props.imported_cyl_loc_cap
+ self.report({'WARNING'}, "This native POV-Ray primitive "
+ "won't have any vertex to show in edit mode")
+
+ pov_cylinder_define(context, self, None, self.R, LOC, LOC_CAP)
+
+ return {'FINISHED'}
+
+
+class POVRAY_OT_cylinder_update(bpy.types.Operator):
+ bl_idname = "pov.cylinder_update"
+ bl_label = "Update"
+ bl_description = "Update Cylinder"
+ bl_options = {'REGISTER', 'UNDO'}
+ COMPAT_ENGINES = {'POVRAY_RENDER'}
+
+ @classmethod
+ def poll(cls, context):
+ engine = context.scene.render.engine
ob = context.object
- ob.name = ob.data.name = 'PovCylinder'
- bpy.ops.object.mode_set(mode="EDIT")
- self.report({'WARNING'}, "This native POV-Ray primitive "
- "won't have any vertex to show in edit mode")
- bpy.ops.mesh.hide(unselected=False)
- bpy.ops.object.mode_set(mode="OBJECT")
- ob.pov.object_as = "CYLINDER"
+ return (ob and ob.data and ob.type == 'MESH' and ob.pov.object_as == "CYLINDER" and engine in cls.COMPAT_ENGINES)
+
+ def execute(self, context):
+ ob = context.object
+ radius = ob.pov.cylinder_radius
+ loc = ob.location
+ loc_cap = loc + ob.pov.cylinder_location_cap
+
+ pov_cylinder_define(context, None, ob, radius, loc, loc_cap)
return {'FINISHED'}
+
+
################################SPHERE##########################################
def pov_sphere_define(context, op, ob, loc):
if op:
R = op.R
-
+ loc = bpy.context.scene.cursor_location
else:
assert(ob)
R = ob.pov.sphere_radius
@@ -648,6 +735,7 @@ def pov_sphere_define(context, op, ob, loc):
bpy.ops.mesh.hide(unselected=False)
bpy.ops.object.mode_set(mode="OBJECT")
+ bpy.ops.object.shade_smooth()
#bpy.ops.transform.rotate(axis=obrot,constraint_orientation='GLOBAL')
if not ob:
@@ -659,6 +747,7 @@ def pov_sphere_define(context, op, ob, loc):
bpy.ops.object.mode_set(mode="EDIT")
bpy.ops.mesh.hide(unselected=False)
bpy.ops.object.mode_set(mode="OBJECT")
+
class POVRAY_OT_sphere_add(bpy.types.Operator):
bl_idname = "pov.addsphere"
bl_label = "Sphere"
@@ -677,14 +766,22 @@ class POVRAY_OT_sphere_add(bpy.types.Operator):
props = self.properties
R = props.R
ob = context.object
+
+
+
if ob:
if ob.pov.imported_loc:
LOC = ob.pov.imported_loc
else:
- LOC = bpy.context.scene.cursor_location
+ if not props.imported_loc:
+ LOC = bpy.context.scene.cursor_location
+
+ else:
+ LOC = props.imported_loc
+ self.report({'WARNING'}, "This native POV-Ray primitive "
+ "won't have any vertex to show in edit mode")
pov_sphere_define(context, self, None, LOC)
- self.report({'WARNING'}, "This native POV-Ray primitive "
- "won't have any vertex to show in edit mode")
+
return {'FINISHED'}
# def execute(self,context):
@@ -1355,140 +1452,376 @@ class POVRAY_OT_shape_polygon_to_circle_add(bpy.types.Operator):
return {'FINISHED'}
#############################IMPORT
-class ImportAvogadroPOV(bpy.types.Operator, ImportHelper):
- """Load Povray File as output by Avogadro"""
- bl_idname = "import_scene.avogadro"
- bl_label = "Import POV Avogadro"
+
+class ImportPOV(bpy.types.Operator, ImportHelper):
+ """Load Povray files"""
+ bl_idname = "import_scene.pov"
+ bl_label = "POV-Ray files (.pov/.inc)"
bl_options = {'PRESET', 'UNDO'}
COMPAT_ENGINES = {'POVRAY_RENDER'}
- filename_ext = ".pov"
+ # -----------
+ # File props.
+ files = CollectionProperty(type=bpy.types.OperatorFileListElement, options={'HIDDEN', 'SKIP_SAVE'})
+ directory = Stri
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list