Blender V2.61 - r43446
|
00001 # 00002 # Copyright 2011, Blender Foundation. 00003 # 00004 # This program is free software; you can redistribute it and/or 00005 # modify it under the terms of the GNU General Public License 00006 # as published by the Free Software Foundation; either version 2 00007 # of the License, or (at your option) any later version. 00008 # 00009 # This program is distributed in the hope that it will be useful, 00010 # but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 # GNU General Public License for more details. 00013 # 00014 # You should have received a copy of the GNU General Public License 00015 # along with this program; if not, write to the Free Software Foundation, 00016 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00017 # 00018 00019 # <pep8 compliant> 00020 00021 import bpy 00022 00023 from bpy.types import Panel, Menu 00024 00025 from . import enums, engine 00026 00027 00028 class CYCLES_MT_integrator_presets(Menu): 00029 bl_label = "Integrator Presets" 00030 preset_subdir = "cycles/integrator" 00031 preset_operator = "script.execute_preset" 00032 COMPAT_ENGINES = {'CYCLES'} 00033 draw = Menu.draw_preset 00034 00035 00036 class CyclesButtonsPanel(): 00037 bl_space_type = "PROPERTIES" 00038 bl_region_type = "WINDOW" 00039 bl_context = "render" 00040 00041 @classmethod 00042 def poll(cls, context): 00043 rd = context.scene.render 00044 return rd.engine == 'CYCLES' 00045 00046 00047 class CyclesRender_PT_integrator(CyclesButtonsPanel, Panel): 00048 bl_label = "Integrator" 00049 bl_options = {'DEFAULT_CLOSED'} 00050 00051 def draw(self, context): 00052 layout = self.layout 00053 00054 scene = context.scene 00055 cscene = scene.cycles 00056 00057 row = layout.row(align=True) 00058 row.menu("CYCLES_MT_integrator_presets", text=bpy.types.CYCLES_MT_integrator_presets.bl_label) 00059 row.operator("render.cycles_integrator_preset_add", text="", icon="ZOOMIN") 00060 row.operator("render.cycles_integrator_preset_add", text="", icon="ZOOMOUT").remove_active = True 00061 00062 split = layout.split() 00063 00064 col = split.column() 00065 sub = col.column(align=True) 00066 sub.label(text="Samples:") 00067 sub.prop(cscene, "samples", text="Render") 00068 sub.prop(cscene, "preview_samples", text="Preview") 00069 sub.prop(cscene, "seed") 00070 00071 sub = col.column(align=True) 00072 sub.label("Transparency:") 00073 sub.prop(cscene, "transparent_max_bounces", text="Max") 00074 sub.prop(cscene, "transparent_min_bounces", text="Min") 00075 sub.prop(cscene, "use_transparent_shadows", text="Shadows") 00076 00077 col = split.column() 00078 00079 sub = col.column(align=True) 00080 sub.label(text="Bounces:") 00081 sub.prop(cscene, "max_bounces", text="Max") 00082 sub.prop(cscene, "min_bounces", text="Min") 00083 00084 sub = col.column(align=True) 00085 sub.label(text="Light Paths:") 00086 sub.prop(cscene, "diffuse_bounces", text="Diffuse") 00087 sub.prop(cscene, "glossy_bounces", text="Glossy") 00088 sub.prop(cscene, "transmission_bounces", text="Transmission") 00089 sub.prop(cscene, "no_caustics") 00090 00091 #row = col.row() 00092 #row.prop(cscene, "blur_caustics") 00093 #row.active = not cscene.no_caustics 00094 00095 00096 class CyclesRender_PT_film(CyclesButtonsPanel, Panel): 00097 bl_label = "Film" 00098 00099 def draw(self, context): 00100 layout = self.layout 00101 00102 scene = context.scene 00103 cscene = scene.cycles 00104 00105 split = layout.split() 00106 00107 col = split.column() 00108 col.prop(cscene, "film_exposure") 00109 col.prop(cscene, "film_transparent") 00110 00111 col = split.column() 00112 sub = col.column(align=True) 00113 sub.prop(cscene, "filter_type", text="") 00114 if cscene.filter_type != 'BOX': 00115 sub.prop(cscene, "filter_width", text="Width") 00116 00117 00118 class CyclesRender_PT_performance(CyclesButtonsPanel, Panel): 00119 bl_label = "Performance" 00120 bl_options = {'DEFAULT_CLOSED'} 00121 00122 def draw(self, context): 00123 layout = self.layout 00124 00125 scene = context.scene 00126 rd = scene.render 00127 cscene = scene.cycles 00128 00129 split = layout.split() 00130 00131 col = split.column(align=True) 00132 00133 col.label(text="Threads:") 00134 col.row().prop(rd, "threads_mode", expand=True) 00135 sub = col.column() 00136 sub.enabled = rd.threads_mode == 'FIXED' 00137 sub.prop(rd, "threads") 00138 00139 sub = col.column(align=True) 00140 sub.label(text="Tiles:") 00141 sub.prop(cscene, "debug_tile_size") 00142 sub.prop(cscene, "debug_min_size") 00143 00144 col = split.column() 00145 00146 sub = col.column(align=True) 00147 sub.label(text="Acceleration structure:") 00148 sub.prop(cscene, "debug_bvh_type", text="") 00149 sub.prop(cscene, "debug_use_spatial_splits") 00150 sub.prop(cscene, "use_cache") 00151 00152 class CyclesRender_PT_layers(CyclesButtonsPanel, Panel): 00153 bl_label = "Layers" 00154 bl_options = {'DEFAULT_CLOSED'} 00155 COMPAT_ENGINES = {'BLENDER_RENDER'} 00156 00157 def draw(self, context): 00158 layout = self.layout 00159 00160 scene = context.scene 00161 rd = scene.render 00162 00163 row = layout.row() 00164 row.template_list(rd, "layers", rd.layers, "active_index", rows=2) 00165 00166 col = row.column(align=True) 00167 col.operator("scene.render_layer_add", icon='ZOOMIN', text="") 00168 col.operator("scene.render_layer_remove", icon='ZOOMOUT', text="") 00169 00170 row = layout.row() 00171 rl = rd.layers.active 00172 row.prop(rl, "name") 00173 row.prop(rd, "use_single_layer", text="", icon_only=True) 00174 00175 split = layout.split() 00176 00177 col = split.column() 00178 col.prop(scene, "layers", text="Scene") 00179 00180 col = split.column() 00181 col.prop(rl, "layers", text="Layer") 00182 00183 layout.separator() 00184 00185 rl = rd.layers[0] 00186 layout.prop(rl, "material_override", text="Material") 00187 00188 00189 class Cycles_PT_post_processing(CyclesButtonsPanel, Panel): 00190 bl_label = "Post Processing" 00191 bl_options = {'DEFAULT_CLOSED'} 00192 00193 def draw(self, context): 00194 layout = self.layout 00195 00196 rd = context.scene.render 00197 00198 split = layout.split() 00199 00200 col = split.column() 00201 col.prop(rd, "use_compositing") 00202 col.prop(rd, "use_sequencer") 00203 00204 col = split.column() 00205 col.prop(rd, "dither_intensity", text="Dither", slider=True) 00206 00207 00208 class CyclesCamera_PT_dof(CyclesButtonsPanel, Panel): 00209 bl_label = "Depth of Field" 00210 bl_context = "data" 00211 00212 @classmethod 00213 def poll(cls, context): 00214 return context.camera and CyclesButtonsPanel.poll(context) 00215 00216 def draw(self, context): 00217 layout = self.layout 00218 00219 cam = context.camera 00220 ccam = cam.cycles 00221 00222 split = layout.split() 00223 00224 col = split.column() 00225 col.label("Focus:") 00226 col.prop(cam, "dof_object", text="") 00227 00228 sub = col.row() 00229 sub.active = cam.dof_object is None 00230 sub.prop(cam, "dof_distance", text="Distance") 00231 00232 col = split.column() 00233 00234 col.label("Aperture:") 00235 col.prop(ccam, "aperture_size", text="Size") 00236 00237 sub = col.column(align=True) 00238 sub.prop(ccam, "aperture_blades", text="Blades") 00239 sub.prop(ccam, "aperture_rotation", text="Rotation") 00240 00241 00242 class Cycles_PT_context_material(CyclesButtonsPanel, Panel): 00243 bl_label = "Surface" 00244 bl_context = "material" 00245 bl_options = {'HIDE_HEADER'} 00246 00247 @classmethod 00248 def poll(cls, context): 00249 return (context.material or context.object) and CyclesButtonsPanel.poll(context) 00250 00251 def draw(self, context): 00252 layout = self.layout 00253 00254 mat = context.material 00255 ob = context.object 00256 slot = context.material_slot 00257 space = context.space_data 00258 00259 if ob: 00260 row = layout.row() 00261 00262 row.template_list(ob, "material_slots", ob, "active_material_index", rows=2) 00263 00264 col = row.column(align=True) 00265 col.operator("object.material_slot_add", icon='ZOOMIN', text="") 00266 col.operator("object.material_slot_remove", icon='ZOOMOUT', text="") 00267 00268 col.menu("MATERIAL_MT_specials", icon='DOWNARROW_HLT', text="") 00269 00270 if ob.mode == 'EDIT': 00271 row = layout.row(align=True) 00272 row.operator("object.material_slot_assign", text="Assign") 00273 row.operator("object.material_slot_select", text="Select") 00274 row.operator("object.material_slot_deselect", text="Deselect") 00275 00276 split = layout.split(percentage=0.65) 00277 00278 if ob: 00279 split.template_ID(ob, "active_material", new="material.new") 00280 row = split.row() 00281 00282 if slot: 00283 row.prop(slot, "link", text="") 00284 else: 00285 row.label() 00286 elif mat: 00287 split.template_ID(space, "pin_id") 00288 split.separator() 00289 00290 00291 class Cycles_PT_mesh_displacement(CyclesButtonsPanel, Panel): 00292 bl_label = "Displacement" 00293 bl_context = "data" 00294 00295 @classmethod 00296 def poll(cls, context): 00297 if CyclesButtonsPanel.poll(context): 00298 if context.mesh or context.curve or context.meta_ball: 00299 if context.scene.cycles.feature_set == 'EXPERIMENTAL': 00300 return True 00301 00302 return False 00303 00304 def draw(self, context): 00305 layout = self.layout 00306 00307 mesh = context.mesh 00308 curve = context.curve 00309 mball = context.meta_ball 00310 00311 if mesh: 00312 cdata = mesh.cycles 00313 elif curve: 00314 cdata = curve.cycles 00315 elif mball: 00316 cdata = mball.cycles 00317 00318 layout.prop(cdata, "displacement_method", text="Method") 00319 layout.prop(cdata, "use_subdivision") 00320 layout.prop(cdata, "dicing_rate") 00321 00322 00323 class CyclesObject_PT_ray_visibility(CyclesButtonsPanel, Panel): 00324 bl_label = "Ray Visibility" 00325 bl_context = "object" 00326 bl_options = {'DEFAULT_CLOSED'} 00327 00328 @classmethod 00329 def poll(cls, context): 00330 ob = context.object 00331 return CyclesButtonsPanel.poll(context) and ob and ob.type in {'MESH', 'CURVE', 'CURVE', 'SURFACE', 'FONT', 'META'} # todo: 'LAMP' 00332 00333 def draw(self, context): 00334 layout = self.layout 00335 00336 ob = context.object 00337 visibility = ob.cycles_visibility 00338 00339 split = layout.split() 00340 00341 col = split.column() 00342 col.prop(visibility, "camera") 00343 col.prop(visibility, "diffuse") 00344 col.prop(visibility, "glossy") 00345 00346 col = split.column() 00347 col.prop(visibility, "transmission") 00348 col.prop(visibility, "shadow") 00349 00350 00351 def find_node(material, nodetype): 00352 if material and material.node_tree: 00353 ntree = material.node_tree 00354 00355 for node in ntree.nodes: 00356 if getattr(node, "type", None) == nodetype: 00357 return node 00358 00359 return None 00360 00361 00362 def find_node_input(node, name): 00363 for input in node.inputs: 00364 if input.name == name: 00365 return input 00366 00367 return None 00368 00369 00370 def panel_node_draw(layout, id_data, output_type, input_name): 00371 if not id_data.node_tree: 00372 layout.prop(id_data, "use_nodes", icon='NODETREE') 00373 return False 00374 00375 ntree = id_data.node_tree 00376 00377 node = find_node(id_data, output_type) 00378 if not node: 00379 layout.label(text="No output node.") 00380 else: 00381 input = find_node_input(node, input_name) 00382 layout.template_node_view(ntree, node, input) 00383 00384 return True 00385 00386 00387 class CyclesLamp_PT_lamp(CyclesButtonsPanel, Panel): 00388 bl_label = "Lamp" 00389 bl_context = "data" 00390 00391 @classmethod 00392 def poll(cls, context): 00393 return context.lamp and CyclesButtonsPanel.poll(context) 00394 00395 def draw(self, context): 00396 layout = self.layout 00397 00398 lamp = context.lamp 00399 clamp = lamp.cycles 00400 00401 layout.prop(lamp, "type", expand=True) 00402 00403 split = layout.split() 00404 col = split.column(align=True) 00405 00406 if lamp.type in {'POINT', 'SUN', 'SPOT'}: 00407 col.prop(lamp, "shadow_soft_size", text="Size") 00408 elif lamp.type == 'AREA': 00409 col.prop(lamp, "shape", text="") 00410 sub = col.column(align=True) 00411 00412 if lamp.shape == 'SQUARE': 00413 sub.prop(lamp, "size") 00414 elif lamp.shape == 'RECTANGLE': 00415 sub.prop(lamp, "size", text="Size X") 00416 sub.prop(lamp, "size_y", text="Size Y") 00417 00418 col = split.column() 00419 col.prop(clamp, "cast_shadow") 00420 00421 if lamp.type == 'SPOT': 00422 layout.label(text="Not supported, interpreted as point lamp.") 00423 elif lamp.type == 'HEMI': 00424 layout.label(text="Not supported, interpreted as sun lamp.") 00425 00426 00427 class CyclesLamp_PT_nodes(CyclesButtonsPanel, Panel): 00428 bl_label = "Nodes" 00429 bl_context = "data" 00430 00431 @classmethod 00432 def poll(cls, context): 00433 return context.lamp and CyclesButtonsPanel.poll(context) 00434 00435 def draw(self, context): 00436 layout = self.layout 00437 00438 lamp = context.lamp 00439 if not panel_node_draw(layout, lamp, 'OUTPUT_LAMP', 'Surface'): 00440 layout.prop(lamp, "color") 00441 00442 00443 class CyclesWorld_PT_surface(CyclesButtonsPanel, Panel): 00444 bl_label = "Surface" 00445 bl_context = "world" 00446 00447 @classmethod 00448 def poll(cls, context): 00449 return context.world and CyclesButtonsPanel.poll(context) 00450 00451 def draw(self, context): 00452 layout = self.layout 00453 00454 world = context.world 00455 if not panel_node_draw(layout, world, 'OUTPUT_WORLD', 'Surface'): 00456 layout.prop(world, "horizon_color", text="Color") 00457 00458 00459 class CyclesWorld_PT_volume(CyclesButtonsPanel, Panel): 00460 bl_label = "Volume" 00461 bl_context = "world" 00462 bl_options = {'DEFAULT_CLOSED'} 00463 00464 @classmethod 00465 def poll(cls, context): 00466 # world = context.world 00467 # world and world.node_tree and CyclesButtonsPanel.poll(context) 00468 return False 00469 00470 def draw(self, context): 00471 layout = self.layout 00472 layout.active = False 00473 00474 world = context.world 00475 panel_node_draw(layout, world, 'OUTPUT_WORLD', 'Volume') 00476 00477 00478 class CyclesMaterial_PT_surface(CyclesButtonsPanel, Panel): 00479 bl_label = "Surface" 00480 bl_context = "material" 00481 00482 @classmethod 00483 def poll(cls, context): 00484 return context.material and CyclesButtonsPanel.poll(context) 00485 00486 def draw(self, context): 00487 layout = self.layout 00488 00489 mat = context.material 00490 if not panel_node_draw(layout, mat, 'OUTPUT_MATERIAL', 'Surface'): 00491 layout.prop(mat, "diffuse_color") 00492 00493 00494 class CyclesMaterial_PT_volume(CyclesButtonsPanel, Panel): 00495 bl_label = "Volume" 00496 bl_context = "material" 00497 bl_options = {'DEFAULT_CLOSED'} 00498 00499 @classmethod 00500 def poll(cls, context): 00501 # mat = context.material 00502 # mat and mat.node_tree and CyclesButtonsPanel.poll(context) 00503 return False 00504 00505 def draw(self, context): 00506 layout = self.layout 00507 layout.active = False 00508 00509 mat = context.material 00510 cmat = mat.cycles 00511 00512 panel_node_draw(layout, mat, 'OUTPUT_MATERIAL', 'Volume') 00513 00514 layout.prop(cmat, "homogeneous_volume") 00515 00516 00517 class CyclesMaterial_PT_displacement(CyclesButtonsPanel, Panel): 00518 bl_label = "Displacement" 00519 bl_context = "material" 00520 00521 @classmethod 00522 def poll(cls, context): 00523 mat = context.material 00524 return mat and mat.node_tree and CyclesButtonsPanel.poll(context) 00525 00526 def draw(self, context): 00527 layout = self.layout 00528 00529 mat = context.material 00530 panel_node_draw(layout, mat, 'OUTPUT_MATERIAL', 'Displacement') 00531 00532 00533 class CyclesMaterial_PT_settings(CyclesButtonsPanel, Panel): 00534 bl_label = "Settings" 00535 bl_context = "material" 00536 bl_options = {'DEFAULT_CLOSED'} 00537 00538 @classmethod 00539 def poll(cls, context): 00540 return context.material and CyclesButtonsPanel.poll(context) 00541 00542 def draw(self, context): 00543 layout = self.layout 00544 00545 mat = context.material 00546 cmat = mat.cycles 00547 00548 split = layout.split() 00549 00550 col = split.column() 00551 col.prop(mat, "diffuse_color", text="Viewport Color") 00552 00553 col = split.column() 00554 col.prop(cmat, "sample_as_light") 00555 00556 00557 class CyclesTexture_PT_context(CyclesButtonsPanel, Panel): 00558 bl_label = "" 00559 bl_context = "texture" 00560 bl_options = {'HIDE_HEADER'} 00561 COMPAT_ENGINES = {'CYCLES'} 00562 00563 def draw(self, context): 00564 layout = self.layout 00565 00566 tex = context.texture 00567 space = context.space_data 00568 pin_id = space.pin_id 00569 use_pin_id = space.use_pin_id 00570 user = context.texture_user 00571 # node = context.texture_node 00572 00573 if not use_pin_id or not isinstance(pin_id, bpy.types.Texture): 00574 pin_id = None 00575 00576 if not pin_id: 00577 layout.template_texture_user() 00578 00579 if user: 00580 layout.separator() 00581 00582 split = layout.split(percentage=0.65) 00583 col = split.column() 00584 00585 if pin_id: 00586 col.template_ID(space, "pin_id") 00587 elif user: 00588 col.template_ID(user, "texture", new="texture.new") 00589 00590 if tex: 00591 row = split.row() 00592 row.prop(tex, "use_nodes", icon="NODETREE", text="") 00593 row.label() 00594 00595 if not tex.use_nodes: 00596 split = layout.split(percentage=0.2) 00597 split.label(text="Type:") 00598 split.prop(tex, "type", text="") 00599 00600 00601 class CyclesTexture_PT_nodes(CyclesButtonsPanel, Panel): 00602 bl_label = "Nodes" 00603 bl_context = "texture" 00604 00605 @classmethod 00606 def poll(cls, context): 00607 tex = context.texture 00608 return (tex and tex.use_nodes) and CyclesButtonsPanel.poll(context) 00609 00610 def draw(self, context): 00611 layout = self.layout 00612 00613 tex = context.texture 00614 panel_node_draw(layout, tex, 'OUTPUT_TEXTURE', 'Color') 00615 00616 00617 class CyclesTexture_PT_node(CyclesButtonsPanel, Panel): 00618 bl_label = "Node" 00619 bl_context = "texture" 00620 00621 @classmethod 00622 def poll(cls, context): 00623 node = context.texture_node 00624 return node and CyclesButtonsPanel.poll(context) 00625 00626 def draw(self, context): 00627 layout = self.layout 00628 00629 node = context.texture_node 00630 ntree = node.id_data 00631 layout.template_node_view(ntree, node, None) 00632 00633 00634 class CyclesTexture_PT_mapping(CyclesButtonsPanel, Panel): 00635 bl_label = "Mapping" 00636 bl_context = "texture" 00637 00638 @classmethod 00639 def poll(cls, context): 00640 tex = context.texture 00641 node = context.texture_node 00642 return (node or (tex and tex.use_nodes)) and CyclesButtonsPanel.poll(context) 00643 00644 def draw(self, context): 00645 layout = self.layout 00646 00647 # tex = context.texture 00648 node = context.texture_node 00649 00650 mapping = node.texture_mapping 00651 00652 row = layout.row() 00653 00654 row.column().prop(mapping, "location") 00655 row.column().prop(mapping, "rotation") 00656 row.column().prop(mapping, "scale") 00657 00658 layout.label(text="Projection:") 00659 00660 row = layout.row() 00661 row.prop(mapping, "mapping_x", text="") 00662 row.prop(mapping, "mapping_y", text="") 00663 row.prop(mapping, "mapping_z", text="") 00664 00665 00666 class CyclesTexture_PT_colors(CyclesButtonsPanel, Panel): 00667 bl_label = "Color" 00668 bl_context = "texture" 00669 bl_options = {'DEFAULT_CLOSED'} 00670 00671 @classmethod 00672 def poll(cls, context): 00673 # tex = context.texture 00674 # node = context.texture_node 00675 return False 00676 #return (node or (tex and tex.use_nodes)) and CyclesButtonsPanel.poll(context) 00677 00678 def draw(self, context): 00679 layout = self.layout 00680 00681 # tex = context.texture 00682 node = context.texture_node 00683 00684 mapping = node.color_mapping 00685 00686 split = layout.split() 00687 00688 col = split.column() 00689 col.label(text="Blend:") 00690 col.prop(mapping, "blend_type", text="") 00691 col.prop(mapping, "blend_factor", text="Factor") 00692 col.prop(mapping, "blend_color", text="") 00693 00694 col = split.column() 00695 col.label(text="Adjust:") 00696 col.prop(mapping, "brightness") 00697 col.prop(mapping, "contrast") 00698 col.prop(mapping, "saturation") 00699 00700 layout.separator() 00701 00702 layout.prop(mapping, "use_color_ramp", text="Ramp") 00703 if mapping.use_color_ramp: 00704 layout.template_color_ramp(mapping, "color_ramp", expand=True) 00705 00706 00707 def draw_device(self, context): 00708 scene = context.scene 00709 layout = self.layout 00710 00711 if scene.render.engine == "CYCLES": 00712 cscene = scene.cycles 00713 00714 layout.prop(cscene, "feature_set") 00715 00716 device_type = context.user_preferences.system.compute_device_type 00717 if device_type == 'CUDA': 00718 layout.prop(cscene, "device") 00719 elif device_type == 'OPENCL' and cscene.feature_set == 'EXPERIMENTAL': 00720 layout.prop(cscene, "device") 00721 00722 def draw_pause(self, context): 00723 layout = self.layout 00724 scene = context.scene 00725 00726 if scene.render.engine == "CYCLES": 00727 view = context.space_data 00728 00729 if view.viewport_shade == "RENDERED": 00730 cscene = scene.cycles 00731 layout.prop(cscene, "preview_pause", icon="PAUSE", text="") 00732 00733 00734 def get_panels(): 00735 return ( 00736 bpy.types.RENDER_PT_render, 00737 bpy.types.RENDER_PT_output, 00738 bpy.types.RENDER_PT_encoding, 00739 bpy.types.RENDER_PT_dimensions, 00740 bpy.types.RENDER_PT_stamp, 00741 bpy.types.SCENE_PT_scene, 00742 bpy.types.SCENE_PT_audio, 00743 bpy.types.SCENE_PT_unit, 00744 bpy.types.SCENE_PT_keying_sets, 00745 bpy.types.SCENE_PT_keying_set_paths, 00746 bpy.types.SCENE_PT_physics, 00747 bpy.types.WORLD_PT_context_world, 00748 bpy.types.DATA_PT_context_mesh, 00749 bpy.types.DATA_PT_context_camera, 00750 bpy.types.DATA_PT_context_lamp, 00751 bpy.types.DATA_PT_texture_space, 00752 bpy.types.DATA_PT_curve_texture_space, 00753 bpy.types.DATA_PT_mball_texture_space, 00754 bpy.types.DATA_PT_vertex_groups, 00755 bpy.types.DATA_PT_shape_keys, 00756 bpy.types.DATA_PT_uv_texture, 00757 bpy.types.DATA_PT_vertex_colors, 00758 bpy.types.DATA_PT_camera, 00759 bpy.types.DATA_PT_camera_display, 00760 bpy.types.DATA_PT_lens, 00761 bpy.types.DATA_PT_custom_props_mesh, 00762 bpy.types.DATA_PT_custom_props_camera, 00763 bpy.types.DATA_PT_custom_props_lamp, 00764 bpy.types.TEXTURE_PT_clouds, 00765 bpy.types.TEXTURE_PT_wood, 00766 bpy.types.TEXTURE_PT_marble, 00767 bpy.types.TEXTURE_PT_magic, 00768 bpy.types.TEXTURE_PT_blend, 00769 bpy.types.TEXTURE_PT_stucci, 00770 bpy.types.TEXTURE_PT_image, 00771 bpy.types.TEXTURE_PT_image_sampling, 00772 bpy.types.TEXTURE_PT_image_mapping, 00773 bpy.types.TEXTURE_PT_musgrave, 00774 bpy.types.TEXTURE_PT_voronoi, 00775 bpy.types.TEXTURE_PT_distortednoise, 00776 bpy.types.TEXTURE_PT_voxeldata, 00777 bpy.types.TEXTURE_PT_pointdensity, 00778 bpy.types.TEXTURE_PT_pointdensity_turbulence, 00779 bpy.types.PARTICLE_PT_context_particles, 00780 bpy.types.PARTICLE_PT_emission, 00781 bpy.types.PARTICLE_PT_hair_dynamics, 00782 bpy.types.PARTICLE_PT_cache, 00783 bpy.types.PARTICLE_PT_velocity, 00784 bpy.types.PARTICLE_PT_rotation, 00785 bpy.types.PARTICLE_PT_physics, 00786 bpy.types.PARTICLE_PT_boidbrain, 00787 bpy.types.PARTICLE_PT_render, 00788 bpy.types.PARTICLE_PT_draw, 00789 bpy.types.PARTICLE_PT_children, 00790 bpy.types.PARTICLE_PT_field_weights, 00791 bpy.types.PARTICLE_PT_force_fields, 00792 bpy.types.PARTICLE_PT_vertexgroups, 00793 bpy.types.PARTICLE_PT_custom_props, 00794 ) 00795 00796 00797 def register(): 00798 bpy.types.RENDER_PT_render.append(draw_device) 00799 bpy.types.VIEW3D_HT_header.append(draw_pause) 00800 00801 for panel in get_panels(): 00802 panel.COMPAT_ENGINES.add('CYCLES') 00803 00804 00805 def unregister(): 00806 bpy.types.RENDER_PT_render.remove(draw_device) 00807 bpy.types.VIEW3D_HT_header.remove(draw_pause) 00808 00809 for panel in get_panels(): 00810 panel.COMPAT_ENGINES.remove('CYCLES')