diff --git a/render_povray/__init__.py b/render_povray/__init__.py index 234761b61b5700938de136daeda994f86431ef3a..e346fc165f07cfbe4e4381125afeab3801d342ca 100644 --- a/render_povray/__init__.py +++ b/render_povray/__init__.py @@ -70,6 +70,10 @@ def register(): name="Rendered image path", description="Full path to directory where the rendered image is saved.", default="", maxlen=1024, subtype="DIR_PATH") + Scene.pov_list_lf_enable = BoolProperty( + name="LF in lists", + description="Enable line brakes in lists (vectors and indices). Disabled: lists are exported in one line.", + default=True) # Not a real pov option, just to know if we should write Scene.pov_radio_enable = BoolProperty( @@ -318,6 +322,7 @@ def unregister(): del Scene.pov_deletefiles_enable # CR del Scene.pov_scene_path # CR del Scene.pov_renderimage_path # CR + del Scene.pov_list_lf_enable # CR del Scene.pov_radio_enable del Scene.pov_radio_display_advanced del Scene.pov_radio_adc_bailout diff --git a/render_povray/render.py b/render_povray/render.py index 6996ee53c8a420a23d7f21bd15124af25d75080b..38450d740bfeea044ceb202e5b70ca2b26779303 100644 --- a/render_povray/render.py +++ b/render_povray/render.py @@ -157,6 +157,7 @@ def path_image(image): fn_strip = os.path.basename(fn) if not os.path.isfile(fn): fn = findInSubDir(splitFile(fn), splitPath(bpy.data.filepath)) + fn = os.path.realpath(fn) return fn ##############end find image texture @@ -224,18 +225,21 @@ def write_pov(filename, scene=None, info_callback=None): tab = setTab(scene.pov_indentation_character, scene.pov_indentation_spaces) def tabWrite(str_o): - global tabLevel - brackets = str_o.count("{") - str_o.count("}") + str_o.count("[") - str_o.count("]") - if brackets < 0: - tabLevel = tabLevel + brackets - if tabLevel < 0: - print("Indentation Warning: tabLevel = %s" % tabLevel) - tabLevel = 0 - if tabLevel >= 1: - file.write("%s" % tab * tabLevel) - file.write(str_o) - if brackets > 0: - tabLevel = tabLevel + brackets + if not scene.pov_tempfiles_enable: + global tabLevel + brackets = str_o.count("{") - str_o.count("}") + str_o.count("[") - str_o.count("]") + if brackets < 0: + tabLevel = tabLevel + brackets + if tabLevel < 0: + print("Indentation Warning: tabLevel = %s" % tabLevel) + tabLevel = 0 + if tabLevel >= 1: + file.write("%s" % tab * tabLevel) + file.write(str_o) + if brackets > 0: + tabLevel = tabLevel + brackets + else: + file.write(str_o) def uniqueName(name, nameSeq): @@ -332,19 +336,19 @@ def write_pov(filename, scene=None, info_callback=None): def povHasnoSpecularMaps(Level): if Level == 1: tabWrite("#declare %s = finish {" % safety(name, Level=1)) - if comments: + if not scene.pov_tempfiles_enable and comments: file.write(" //No specular nor Mirror reflection\n") else: tabWrite("\n") elif Level == 2: tabWrite("#declare %s = finish {" % safety(name, Level=2)) - if comments: + if not scene.pov_tempfiles_enable and comments: file.write(" //translation of spec and mir levels for when no map influences them\n") else: tabWrite("\n") elif Level == 3: tabWrite("#declare %s = finish {" % safety(name, Level=3)) - if comments: + if not scene.pov_tempfiles_enable and comments: file.write(" //Maximum Spec and Mirror\n") else: tabWrite("\n") @@ -638,7 +642,7 @@ def write_pov(filename, scene=None, info_callback=None): # TODO - blenders 'motherball' naming is not supported. - if scene.pov_comments_enable and len(metas) >= 1: + if not scene.pov_tempfiles_enable and scene.pov_comments_enable and len(metas) >= 1: file.write("//--Blob objects--\n\n") for ob in metas: @@ -704,7 +708,7 @@ def write_pov(filename, scene=None, info_callback=None): tabWrite("}\n") # End of Metaball block - if scene.pov_comments_enable and len(metas) >= 1: + if not scene.pov_tempfiles_enable and scene.pov_comments_enable and len(metas) >= 1: file.write("\n") objectNames = {} @@ -774,8 +778,12 @@ def write_pov(filename, scene=None, info_callback=None): tabStr = tab * tabLevel for v in me.vertices: - file.write(",\n") - file.write(tabStr + "<%.6f, %.6f, %.6f>" % v.co[:]) # vert count + if not scene.pov_tempfiles_enable and scene.pov_list_lf_enable: + file.write(",\n") + file.write(tabStr + "<%.6f, %.6f, %.6f>" % v.co[:]) # vert count + else: + file.write(", ") + file.write("<%.6f, %.6f, %.6f>" % v.co[:]) # vert count #tabWrite("<%.6f, %.6f, %.6f>" % v.co[:]) # vert count file.write("\n") tabWrite("}\n") @@ -798,8 +806,12 @@ def write_pov(filename, scene=None, info_callback=None): idx = 0 tabStr = tab * tabLevel for no, index in uniqueNormals.items(): - file.write(",\n") - file.write(tabStr + "<%.6f, %.6f, %.6f>" % no) # vert count + if not scene.pov_tempfiles_enable and scene.pov_list_lf_enable: + file.write(",\n") + file.write(tabStr + "<%.6f, %.6f, %.6f>" % no) # vert count + else: + file.write(", ") + file.write("<%.6f, %.6f, %.6f>" % no) # vert count index[0] = idx idx += 1 file.write("\n") @@ -828,8 +840,12 @@ def write_pov(filename, scene=None, info_callback=None): idx = 0 tabStr = tab * tabLevel for uv, index in uniqueUVs.items(): - file.write(",\n") - file.write(tabStr + "<%.6f, %.6f>" % uv) + if not scene.pov_tempfiles_enable and scene.pov_list_lf_enable: + file.write(",\n") + file.write(tabStr + "<%.6f, %.6f>" % uv) + else: + file.write(", ") + file.write("<%.6f, %.6f>" % uv) index[0] = idx idx += 1 ''' @@ -976,7 +992,7 @@ def write_pov(filename, scene=None, info_callback=None): # continue # Some texture found #if special_texture_found: - if texturesSpec != "" or texturesAlpha != "" or texturesNorm != "": + if texturesSpec != "" or texturesAlpha != "": if texturesSpec != "": # tabWrite("\n") tabWrite("pigment_pattern {\n") @@ -1156,8 +1172,12 @@ def write_pov(filename, scene=None, info_callback=None): if not me_materials or me_materials[material_index] is None: # No materials for i1, i2, i3 in indices: - file.write(",\n") - file.write(tabStr + "<%d,%d,%d>" % (fv[i1], fv[i2], fv[i3])) # vert count + if not scene.pov_tempfiles_enable and scene.pov_list_lf_enable: + file.write(",\n") + file.write(tabStr + "<%d,%d,%d>" % (fv[i1], fv[i2], fv[i3])) # vert count + else: + file.write(", ") + file.write("<%d,%d,%d>" % (fv[i1], fv[i2], fv[i3])) # vert count else: material = me_materials[material_index] for i1, i2, i3 in indices: @@ -1176,8 +1196,12 @@ def write_pov(filename, scene=None, info_callback=None): diffuse_color = material.diffuse_color ci1 = ci2 = ci3 = vertCols[diffuse_color[0], diffuse_color[1], diffuse_color[2], f.material_index][0] - file.write(",\n") - file.write(tabStr + "<%d,%d,%d>, %d,%d,%d" % (fv[i1], fv[i2], fv[i3], ci1, ci2, ci3)) # vert count + if not scene.pov_tempfiles_enable and scene.pov_list_lf_enable: + file.write(",\n") + file.write(tabStr + "<%d,%d,%d>, %d,%d,%d" % (fv[i1], fv[i2], fv[i3], ci1, ci2, ci3)) # vert count + else: + file.write(", ") + file.write("<%d,%d,%d>, %d,%d,%d" % (fv[i1], fv[i2], fv[i3], ci1, ci2, ci3)) # vert count file.write("\n") tabWrite("}\n") @@ -1195,15 +1219,26 @@ def write_pov(filename, scene=None, info_callback=None): for i1, i2, i3 in indices: if me_faces[fi].use_smooth: - file.write(",\n") - file.write(tabStr + "<%d,%d,%d>" %\ - (uniqueNormals[verts_normals[fv[i1]]][0],\ - uniqueNormals[verts_normals[fv[i2]]][0],\ - uniqueNormals[verts_normals[fv[i3]]][0])) # vert count + if not scene.pov_tempfiles_enable and scene.pov_list_lf_enable: + file.write(",\n") + file.write(tabStr + "<%d,%d,%d>" %\ + (uniqueNormals[verts_normals[fv[i1]]][0],\ + uniqueNormals[verts_normals[fv[i2]]][0],\ + uniqueNormals[verts_normals[fv[i3]]][0])) # vert count + else: + file.write(", ") + file.write("<%d,%d,%d>" %\ + (uniqueNormals[verts_normals[fv[i1]]][0],\ + uniqueNormals[verts_normals[fv[i2]]][0],\ + uniqueNormals[verts_normals[fv[i3]]][0])) # vert count else: idx = uniqueNormals[faces_normals[fi]][0] - file.write(",\n") - file.write(tabStr + "<%d,%d,%d>" % (idx, idx, idx)) # vert count + if not scene.pov_tempfiles_enable and scene.pov_list_lf_enable: + file.write(",\n") + file.write(tabStr + "<%d,%d,%d>" % (idx, idx, idx)) # vert count + else: + file.write(", ") + file.write("<%d,%d,%d>" % (idx, idx, idx)) # vert count file.write("\n") tabWrite("}\n") @@ -1226,12 +1261,18 @@ def write_pov(filename, scene=None, info_callback=None): uvs = uv.uv1[:], uv.uv2[:], uv.uv3[:] for i1, i2, i3 in indices: - file.write(",\n") - file.write(tabStr + "<%d,%d,%d>" % ( - uniqueUVs[uvs[i1]][0],\ - uniqueUVs[uvs[i2]][0],\ - uniqueUVs[uvs[i3]][0], - )) + if not scene.pov_tempfiles_enable and scene.pov_list_lf_enable: + file.write(",\n") + file.write(tabStr + "<%d,%d,%d>" % ( + uniqueUVs[uvs[i1]][0],\ + uniqueUVs[uvs[i2]][0],\ + uniqueUVs[uvs[i3]][0])) + else: + file.write(", ") + file.write("<%d,%d,%d>" % ( + uniqueUVs[uvs[i1]][0],\ + uniqueUVs[uvs[i2]][0],\ + uniqueUVs[uvs[i3]][0])) file.write("\n") tabWrite("}\n") @@ -1404,32 +1445,32 @@ def write_pov(filename, scene=None, info_callback=None): sel = scene.objects comments = scene.pov_comments_enable - if comments: + if not scene.pov_tempfiles_enable and comments: file.write("//---------------------------------------------\n//--Exported with POV-Ray exporter for Blender--\n//---------------------------------------------\n\n") file.write("#version 3.7;\n") - if comments: + if not scene.pov_tempfiles_enable and comments: file.write("\n//--Global settings and background--\n\n") exportGlobalSettings(scene) - if comments: + if not scene.pov_tempfiles_enable and comments: file.write("\n") exportWorld(scene.world) - if comments: + if not scene.pov_tempfiles_enable and comments: file.write("\n//--Cameras--\n\n") exportCamera() - if comments: + if not scene.pov_tempfiles_enable and comments: file.write("\n//--Lamps--\n\n") exportLamps([l for l in sel if l.type == 'LAMP']) - if comments: + if not scene.pov_tempfiles_enable and comments: file.write("\n//--Material Definitions--\n\n") # Convert all materials to strings we can access directly per vertex. @@ -1438,12 +1479,12 @@ def write_pov(filename, scene=None, info_callback=None): for material in bpy.data.materials: if material.users > 0: writeMaterial(material) - if comments: + if not scene.pov_tempfiles_enable and comments: file.write("\n") exportMeta([l for l in sel if l.type == 'META']) - if comments: + if not scene.pov_tempfiles_enable and comments: file.write("//--Mesh objects--\n") exportMeshs(scene, sel) @@ -1717,7 +1758,7 @@ class PovrayRender(bpy.types.RenderEngine): # renderImagePath = renderImagePath + "\\" + povSceneName # for now this has to be the same like the pov output. Bug in POV-Ray RC3. renderImagePath = povPath # Bugfix for POV-Ray RC3 bug - renderImagePath = os.path.realpath(renderImagePath) + # renderImagePath = os.path.realpath(renderImagePath) # Bugfix for POV-Ray RC3 bug #print("Export path: %s" % povPath) #print("Render Image path: %s" % renderImagePath) diff --git a/render_povray/ui.py b/render_povray/ui.py index 678314f1917c24109db8a125643cc158790ac363..722622e1fb758e13b71b78d911d59331e3649b4b 100644 --- a/render_povray/ui.py +++ b/render_povray/ui.py @@ -181,6 +181,8 @@ class RENDER_PT_povray_export_settings(RenderButtonsPanel, bpy.types.Panel): split = layout.split() col = split.column() col.prop(scene, "pov_comments_enable", text="Comments") + col = split.column() + col.prop(scene, "pov_list_lf_enable", text="Line brakes in lists") class RENDER_PT_povray_render_settings(RenderButtonsPanel, bpy.types.Panel):