forked from bartvdbraak/blender
Scripts:
-- adding help_browser.py to show help for installed scripts; -- updated scripts to include basic doc info to be shown with above script: script authors can / will / should update with more info, of course; -- updated some scripts to newer versions: disp_paint, fixfromarmature, hotkeys, etc.
This commit is contained in:
parent
23e8b98228
commit
c702b237d5
@ -6,6 +6,28 @@ Blender: 234
|
||||
Group: 'Mesh'
|
||||
Tooltip: 'Create fixed copies of deformed meshes'
|
||||
"""
|
||||
|
||||
__author__ = "Martin Poirier"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.5 09/21/04"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script creates "raw" copies of deformed meshes.
|
||||
|
||||
Usage:
|
||||
|
||||
Select the mesh(es) and run this script. A fixed copy of each selected mesh
|
||||
will be created, with the word "_deformed" appended to its name.
|
||||
|
||||
Meshes in Blender can be deformed by armatures, lattices, curve objects and subdivision, but this will only change its appearance on screen and rendered
|
||||
images -- the actual mesh data is still simpler, with vertices in an original
|
||||
"rest" position and less vertices than the subdivided version.
|
||||
|
||||
Use this script if you want a "real" version of the deformed mesh, so you can
|
||||
directly manipulate or export its data.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
|
@ -4,9 +4,40 @@
|
||||
Name: 'Axis Orientation Copy'
|
||||
Blender: 233
|
||||
Group: 'Object'
|
||||
Tip: 'Copy the axis orientation of the active object to all selected mesh object'
|
||||
Tip: 'Copy the axis orientation of the active object to all selected mesh objects'
|
||||
"""
|
||||
|
||||
__author__ = "A Vanpoucke (xand)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"French Blender support forum, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "1.1 11/05/04"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script copies the axis orientation -- X, Y and Z rotations -- of the
|
||||
active object to all selected meshes.
|
||||
|
||||
It's useful to align the orientations of all meshes of a structure, a human
|
||||
skeleton, for example.
|
||||
|
||||
Usage:
|
||||
|
||||
Select all mesh objects that need to have their orientations changed
|
||||
(reminder: keep SHIFT pressed after the first, to add each new one to the
|
||||
selection), then select the object whose orientation will be copied from and
|
||||
finally run this script to update the angles.
|
||||
|
||||
Notes:<br>
|
||||
Before copying the orientation to each object, the script stores its
|
||||
transformation matrix. Then the angles are copied and after that the object's
|
||||
vertices are transformed "back" so that they still have the same positions as
|
||||
before. In other words, the rotations are updated, but you won't notice that
|
||||
just from looking at the objects.<br>
|
||||
Checking their X, Y and Z rotation values with "Transform Properties" in
|
||||
the 3D View's Object menu shows the angles are now the same of the active
|
||||
object.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
#----------------------------------------------
|
||||
@ -53,17 +84,23 @@ def applyTransform(mesh,mat):
|
||||
oblist =Object.GetSelected()
|
||||
lenob=len(oblist)
|
||||
|
||||
if lenob<2:
|
||||
Draw.PupMenu("Select at least 2 objects")
|
||||
else :
|
||||
source=oblist[0]
|
||||
nsource=source.name
|
||||
texte="Copy axis orientation from : " + nsource + " ?%t|OK"
|
||||
result=Draw.PupMenu(texte)
|
||||
error = 0
|
||||
for o in oblist[1:]:
|
||||
if o.getType() != "Mesh":
|
||||
Draw.PupMenu("ERROR%t|Selected objects must be meshes")
|
||||
error = 1
|
||||
|
||||
if not error:
|
||||
if lenob<2:
|
||||
Draw.PupMenu("ERROR%t|You must select at least 2 objects")
|
||||
else :
|
||||
source=oblist[0]
|
||||
nsource=source.name
|
||||
texte="Copy axis orientation from: " + nsource + " ?%t|OK"
|
||||
result=Draw.PupMenu(texte)
|
||||
|
||||
|
||||
for cible in oblist[1:]:
|
||||
if cible.getType()=='Mesh':
|
||||
for cible in oblist[1:]:
|
||||
if source.rot!=cible.rot:
|
||||
rotcible=cible.mat.toEuler().toMatrix()
|
||||
rotsource=source.mat.toEuler().toMatrix()
|
||||
|
@ -6,9 +6,38 @@ Blender: 234
|
||||
Group: 'Export'
|
||||
Submenu: 'Export to DX8 file format' export
|
||||
Submenu: 'How to use this exporter?' help
|
||||
Tip: 'Export to DirectX8 text file format format.'
|
||||
Tip: 'Export to DirectX8 text file format'
|
||||
"""
|
||||
|
||||
__author__ = "Arben (Ben) Omari"
|
||||
__url__ = ("blender", "elysiun", "Author's site, http://www.omariben.too.it")
|
||||
__version__ = "1.0"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports a Blender mesh with armature to DirectX 8's text file
|
||||
format.
|
||||
|
||||
Usage:
|
||||
|
||||
1) There should be only one mesh and one armature in the scene;
|
||||
|
||||
2) Before parenting set:<br>
|
||||
a) Armature and mesh must have the same origin location
|
||||
(in the 3d View press N (menu Object->"Transform Properties") for both and set
|
||||
same LocX, LocY and LocZ);<br>
|
||||
b) Armature and mesh must have the same rotation
|
||||
(select them and press Ctrl + A);
|
||||
|
||||
3) Set the number of the animation frames to export;
|
||||
|
||||
4) Read warnings (if any) in console.
|
||||
|
||||
Notes:<br>
|
||||
Check author's site or the elYsiun forum for a new beta version of the
|
||||
DX exporter.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# DirectX8Exporter.py version 1.0
|
||||
|
@ -6,9 +6,34 @@ Blender: 234
|
||||
Group: 'Export'
|
||||
Submenu: 'Only mesh data...' mesh
|
||||
Submenu: 'Animation(not armature yet)...' anim
|
||||
Tip: 'Export to DirectX text file format format.'
|
||||
Tip: 'Export to DirectX text file format'
|
||||
"""
|
||||
|
||||
__author__ = "Arben (Ben) Omari"
|
||||
__url__ = ("blender", "elysiun", "Author's site, http://www.omariben.too.it")
|
||||
__version__ = "1.0"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports Blender uv-textured meshes with animation frame keys to
|
||||
DirectX 7's text file format.
|
||||
|
||||
Usage:
|
||||
|
||||
Run the script and check console for possible warning messages.
|
||||
|
||||
Supported:<br>
|
||||
UV-textured meshes with animation frame (location, rotation) keys.
|
||||
|
||||
Known issues:<br>
|
||||
Some DX format viewers don't support Material names with dots
|
||||
('.') in them.
|
||||
|
||||
Notes:<br>
|
||||
Check author's site or the elYsiun forum for a new beta version of the
|
||||
DX exporter.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# DirectX.py version 1.0
|
||||
|
@ -1,10 +1,40 @@
|
||||
#!BPY
|
||||
|
||||
""" Registration info for Blender menus: <- these words are ignored
|
||||
Name: 'UVpainter'
|
||||
Blender: 232
|
||||
Group: 'UV'
|
||||
Tip: 'Use vertex paint color value to fill uvmapping.'
|
||||
Tip: 'Use vertex paint color value to fill uvmapping'
|
||||
"""
|
||||
|
||||
__author__ = "Jean-Michel Soler (jms)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Script's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_uvpainting.htm",
|
||||
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "0.5 05/2004"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script "paints" uv-mappings with the model's vertex colors.
|
||||
|
||||
Usage:
|
||||
|
||||
With this script you can export uv-maps filled with vertex colors to TARGA
|
||||
(.tga) images. To use it the mesh must have proper uv coordinates assigned
|
||||
in UV Face Select Mode. And to fill the projected faces with color, the mesh
|
||||
can also have material(s) and vertex colors painted on it.
|
||||
|
||||
The script has a GUI with a preview of the results and options like drawing
|
||||
lines or not, defining size, etc. You can paint vertex colors in the mesh and
|
||||
see the uv-map updated in the script's window.
|
||||
|
||||
Notes:<br>
|
||||
Material's rgb color is also used to fill the uv-map;<br>
|
||||
If there are no vertex colors or texture faces in the mesh and you press
|
||||
the "Make" VColors button in the edit mesh buttons win, the current light setup
|
||||
is saved as vertex colors for the model;<br>
|
||||
Check the script's homepage for example images.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
#----------------------------------------------
|
||||
@ -13,7 +43,6 @@ Tip: 'Use vertex paint color value to fill uvmapping.'
|
||||
# this script is released under GPL licence
|
||||
# for the Blender 2.33 scripts distribution
|
||||
#----------------------------------------------
|
||||
#----------------------------------------------
|
||||
# Official page :
|
||||
# http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_uvpainting.htm
|
||||
# Communicate problems and errors on:
|
||||
@ -26,7 +55,30 @@ Tip: 'Use vertex paint color value to fill uvmapping.'
|
||||
#---------------------------------------------
|
||||
# ce script est proposé sous licence GPL pour etre associe
|
||||
# a la distribution de Blender 2.33 et suivant
|
||||
#----------------------------------------------
|
||||
# --------------------------------------------------------------------------
|
||||
# this script is released under GPL licence
|
||||
# for the Blender 2.33 scripts package
|
||||
# --------------------------------------------------------------------------
|
||||
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||
#
|
||||
# Script copyright (C) 2003, 2004: Jean-Michel Soler
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# ***** END GPL LICENCE BLOCK *****
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
import Blender
|
||||
from Blender.Draw import *
|
||||
|
@ -10,6 +10,37 @@ Submenu: 'Configure +' config
|
||||
Tip: 'Export to AC3D (.ac) format.'
|
||||
"""
|
||||
|
||||
__author__ = "Willian P. Germano"
|
||||
__url__ = ("blender", "elysiun", "AC3D's homepage, http://www.ac3d.org",
|
||||
"PLib 3d gaming lib, http://plib.sf.net")
|
||||
__version__ = "2.34 09/20/04"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports Blender meshes to AC3D's .ac file format.
|
||||
|
||||
AC3D is a simple and affordable commercial 3d modeller also built with OpenGL.
|
||||
The .ac file format is an easy to parse text format well supported,
|
||||
for example, by the PLib 3d gaming library (AC3D v3.x).
|
||||
|
||||
Supported:<br>
|
||||
UV-textured meshes with hierarchy (grouping) information.
|
||||
|
||||
Missing:<br>
|
||||
Support for AC3D 4's crease tag (simple, will be added soon).
|
||||
|
||||
Known issues:<br>
|
||||
Models textured with more than one image do not work -- for the
|
||||
moment you can separate them in Blender such that each mesh only has one
|
||||
image assigned (also see notes below);<br>
|
||||
The exporter is slow for large meshes -- faster code was written for the
|
||||
TuxKart (http://tuxkart.sf.net) game exporter and will be integrated on a
|
||||
future version of this exporter.
|
||||
|
||||
Notes:<br>
|
||||
There is a version of this script by <fix this> that accepts meshes with
|
||||
more than one texture image assigned, check TuxKart's wiki.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
|
@ -7,6 +7,33 @@ Group: 'Import'
|
||||
Tip: 'Import an AC3D (.ac) file.'
|
||||
"""
|
||||
|
||||
__author__ = "Willian P. Germano"
|
||||
__url__ = ("blender", "elysiun", "AC3D's homepage, http://www.ac3d.org",
|
||||
"PLib 3d gaming lib, http://plib.sf.net")
|
||||
__version__ = "2.34 07/26/04"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script imports AC3D models into Blender.
|
||||
|
||||
AC3D is a simple and affordable commercial 3d modeller also built with OpenGL.
|
||||
The .ac file format is an easy to parse text format well supported,
|
||||
for example, by the PLib 3d gaming library (AC3D v3.x).
|
||||
|
||||
Supported:<br>
|
||||
UV-textured meshes with hierarchy (grouping) information.
|
||||
|
||||
Missing:<br>
|
||||
Support for AC3D 4's crease tag (simple, will be added soon).
|
||||
|
||||
Known issues:<br>
|
||||
None.
|
||||
|
||||
Notes:<br>
|
||||
Check script's source code for options that can be tweaked (using Blender
|
||||
empties to emulate AC3D's grouping info and setting a default folder for
|
||||
textures, for the case of wrong paths in the .ac file(s).
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
|
@ -4,7 +4,23 @@
|
||||
Name: 'Batch Object Name Edit'
|
||||
Blender: 232
|
||||
Group: 'Object'
|
||||
Tooltip: 'Apply the chosen rule to rename all selected objects at once.'
|
||||
Tooltip: 'Apply the chosen rule to rename all selected objects at once'
|
||||
"""
|
||||
|
||||
__author__ = "Campbell Barton"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
|
||||
__bpydoc__ = """\
|
||||
"Batch Object Name Edit" allows you to change multiple names of Blender
|
||||
objects at once. It provides options to define if you want to: replace text
|
||||
in the current names, truncate their beginnings or endings or prepend / append
|
||||
strings to them.
|
||||
|
||||
Usage:
|
||||
|
||||
Select the objects to be renamed and run this script from the Object->Scripts
|
||||
menu of the 3d View.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
|
@ -7,6 +7,30 @@ Group: 'Mesh'
|
||||
Tip: 'Bevel selected vertices'
|
||||
"""
|
||||
|
||||
__author__ = "Loic Berthe"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script implements vertex bevelling in Blender.
|
||||
|
||||
Usage:
|
||||
|
||||
Select the mesh you want to work on, enter Edit Mode and select the vertices
|
||||
to bevel. Then run this script from the 3d View's Mesh->Scripts menu.
|
||||
|
||||
You can control the thickness of the bevel with the slider -- redefine the
|
||||
end points for bigger or smaller ranges. The thickness can be changed even
|
||||
after applying the bevel, as many times as needed.
|
||||
|
||||
For an extra smoothing after or instead of direct bevel, set the level of
|
||||
recursiveness and use the "Recursive" button.
|
||||
|
||||
Notes:<br>
|
||||
You can undo and redo your steps just like with normal mesh operations in
|
||||
Blender.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
######################################################################
|
||||
|
@ -6,6 +6,46 @@ Blender: 234
|
||||
Group: 'Export'
|
||||
Tip: 'Export armature/bone data to the Cal3D library.'
|
||||
"""
|
||||
|
||||
__author__ = ["Jean-Baptiste Lamy (Jiba)", "Chris Montijin", "Damien McGinnes"]
|
||||
__url__ = ("blender", "elysiun", "Cal3D, http://cal3d.sf.net")
|
||||
__version__ = "0.7"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports armature / bone data to the well known open source Cal3D
|
||||
library.
|
||||
|
||||
Usage:
|
||||
|
||||
Simply run the script to export available armatures.
|
||||
|
||||
Supported:<br>
|
||||
Cal3D versions 0.7 -> 0.9.
|
||||
|
||||
Known issues:<br>
|
||||
Material color is not supported yet;<br>
|
||||
Cal3D springs (for clothes and hair) are not supported yet;<br>
|
||||
Cal3d has a bug in that a cycle that doesn't have a root bone channel
|
||||
will segfault cal3d. Until cal3d supports this, add a keyframe for the
|
||||
root bone;<br>
|
||||
When you finish an animation and run the script you can get an error
|
||||
(something with KeyError). Just save your work and reload the model. This is
|
||||
usually caused by deleted items hanging around;<br>
|
||||
If a vertex is assigned to one or more bones, but has for each bone a
|
||||
weight of zero, there used to be a subdivision by zero error somewhere. As a
|
||||
workaround, if sum is 0.0 then sum becomes 1.0. It's recommended that you give
|
||||
weights to all bones to avoid problems.
|
||||
|
||||
Notes:<br>
|
||||
Objects/bones/actions whose names start by "_" are not exported so call IK
|
||||
and null bones _LegIK, for example;<br>
|
||||
All your armature's exported bones must be connected to another bone
|
||||
(except for the root bone). Contrary to Blender, Cal3D doesn't support
|
||||
"floating" bones.<br>
|
||||
Actions that start with '@' will be exported as actions, others will be
|
||||
exported as cycles.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# Copyright (C) 2003 Jean-Baptiste LAMY -- jiba@tuxfamily.org
|
||||
|
@ -7,6 +7,23 @@ Group: 'Export'
|
||||
Tip: 'Export a (.bvh) motion capture file'
|
||||
"""
|
||||
|
||||
__author__ = "Campbell Barton"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0 03/30/04"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports animation data to BVH motion capture file format.
|
||||
|
||||
Supported:<br>
|
||||
|
||||
Missing:<br>
|
||||
|
||||
Known issues:<br>
|
||||
|
||||
Notes:<br>
|
||||
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
#===============================================#
|
||||
|
@ -7,6 +7,23 @@ Group: 'Import'
|
||||
Tip: 'Import a (.bvh) motion capture file'
|
||||
"""
|
||||
|
||||
__author__ = "Campbell Barton"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0 03/25/04"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script imports BVH motion capture data to Blender.
|
||||
|
||||
Supported:<br>
|
||||
|
||||
Missing:<br>
|
||||
|
||||
Known issues:<br>
|
||||
|
||||
Notes:<br>
|
||||
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
#===============================================#
|
||||
|
@ -7,6 +7,28 @@ Group: 'Mesh'
|
||||
Tooltip: 'Clean unused data from all selected meshes'
|
||||
"""
|
||||
|
||||
__author__ = "Campbell Barton"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0 04/25/04"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script cleans specific data from all selected meshes.
|
||||
|
||||
Usage:
|
||||
|
||||
Select the meshes to be cleaned and run this script. A pop-up will ask
|
||||
you what you want to remove:
|
||||
|
||||
- Free standing vertices;<br>
|
||||
- Edges that are not part of any face;<br>
|
||||
- Edges below a threshold length;<br>
|
||||
- Faces below a threshold area;<br>
|
||||
- All of the above.
|
||||
|
||||
After choosing one of the above alternatives, if your choice requires a
|
||||
threshold value you'll be prompted with a number pop-up to set it.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
|
@ -1,29 +1,57 @@
|
||||
#!BPY
|
||||
|
||||
""" Registration info for Blender menus: <- these words are ignored
|
||||
Name: 'Dispaint'
|
||||
Blender: 234
|
||||
Name: 'dispaint'
|
||||
Blender: 233
|
||||
Group: 'Mesh'
|
||||
Tip: 'Use vertex paint color value to modify shape displacing vertices along normal'
|
||||
Tip: 'use vertex paint color value to modify shape displacing vertices along normal'
|
||||
"""
|
||||
|
||||
__author__ = "Jean-Michel Soler (jms)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Script's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_displacementpainting.htm",
|
||||
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "233i"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script displaces mesh vertices according to vertex color values.
|
||||
|
||||
Usage:
|
||||
|
||||
Select the mesh, enter Edit Mode and run this script to open its GUI. Options
|
||||
include setting mode, orientation, size and number of repetitions of the
|
||||
displacement. You can enter Vertex Paint mode and alternate applying
|
||||
displacements and painting parts of the mesh.
|
||||
|
||||
Orientation includes vertex normals, local coordinates and noise (you may need
|
||||
to resize the scripts window to view the noise menu below the "Last Error:"
|
||||
line. This menu lets you define noise type from the many options available in
|
||||
Blender.
|
||||
|
||||
Notes:<br>
|
||||
The "Create" button will make at any time a copy of the active mesh in its
|
||||
current state, so you can keep it and continue working on the copy;<br>
|
||||
One of the great possible uses of this script is to "raise" terrain from a
|
||||
subdivided plane, for example, with good control of the process by setting
|
||||
options, defining orientation and alternating vertex painting with
|
||||
displacements.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
#----------------------------------------------
|
||||
# jm soler, displacement paint 03/2002 - > 05/2004: disp_paintf
|
||||
# Terrain Noise added suugered by Jimmy Haze
|
||||
#----------------------------------------------
|
||||
# Page officielle :
|
||||
# http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_displacementpainting.htm
|
||||
# http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_displacementpainting.htm
|
||||
# Communiquer les problemes et erreurs sur:
|
||||
# http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
|
||||
# --------------------------------------------------------------------------
|
||||
# http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
|
||||
#---------------------------------------------
|
||||
# ce script est proposé sous licence GPL pour etre associe
|
||||
# a la distribution de Blender 2.33
|
||||
# --------------------------------------------------------------------------
|
||||
#----------------------------------------------
|
||||
# this script is released under GPL licence
|
||||
# for the Blender 2.33 scripts package
|
||||
# --------------------------------------------------------------------------
|
||||
#----------------------------------------------
|
||||
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||
#
|
||||
# Copyright (C) 2003, 2004: Jean-Michel Soler
|
||||
@ -46,6 +74,7 @@ Tip: 'Use vertex paint color value to modify shape displacing vertices along nor
|
||||
# --------------------------------------------------------------------------
|
||||
# 09/07/04 : Noise functions based on a piece of script by Jimmy Haze.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
import Blender
|
||||
from Blender import *
|
||||
from Blender.Draw import *
|
||||
@ -74,6 +103,31 @@ NEWName=''
|
||||
ERROR=0
|
||||
TextERROR=''
|
||||
|
||||
E_EXIT = 1
|
||||
E_MODE = 2
|
||||
E_ORIENT = 3
|
||||
E_NSIZE = 4
|
||||
E_REPEAT = 5
|
||||
E_ACTION = 16
|
||||
E_CREATE = 17
|
||||
E_DOCMAT = 24
|
||||
E_MATVAL = [32,33,34,35,36,37,38,39,40,41,42,43,44]
|
||||
E_AXESEL = 45
|
||||
E_AXESELX = 46
|
||||
E_AXESELY = 47
|
||||
E_AXESELZ = 48
|
||||
|
||||
E_NOISEME = 49
|
||||
E_NOISEH = 50
|
||||
E_NOISELAC = 51
|
||||
E_NOISEOCT = 52
|
||||
E_NOISEOFF = 53
|
||||
E_NOISEBAS = 54
|
||||
E_NOISEVAL=[E_NOISEH,E_NOISELAC,E_NOISEOCT,E_NOISEOFF,E_NOISEBAS]
|
||||
E_NOISEDIM = 55
|
||||
|
||||
|
||||
|
||||
def copy_transform(ozero,Obis):
|
||||
Obis.setSize(ozero.getSize());
|
||||
Obis.setEuler(ozero.getEuler());
|
||||
@ -81,7 +135,7 @@ def copy_transform(ozero,Obis):
|
||||
return Obis
|
||||
|
||||
def traite_face(f):
|
||||
global vindexm, ng, NOISE
|
||||
global vindexm, ng, NOISE, NOISEDIM
|
||||
global H,lacunarity,octaves,offset,basis
|
||||
|
||||
if ORIENTMenu.val==1:
|
||||
@ -111,10 +165,10 @@ def traite_face(f):
|
||||
for z in range(len(f.v)):
|
||||
c=0.0
|
||||
if vindex[f.v[z].index]!=0:
|
||||
nx=f.v[z].co[0]/4
|
||||
ny=f.v[z].co[1]/4
|
||||
nz=f.v[z].co[2]/4
|
||||
nn = ng + noise((nx,ny,nz),NOISE)
|
||||
nx=f.v[z].co[0]/NOISEDIM
|
||||
ny=f.v[z].co[1]/NOISEDIM
|
||||
nz=f.v[z].co[2]/NOISEDIM
|
||||
nn = ng * noise((nx,ny,nz),NOISE)
|
||||
c=float(f.col[z].r+f.col[z].b+f.col[z].g)/maxcol*nn/vindex[f.v[z].index]
|
||||
else:
|
||||
c=0
|
||||
@ -126,10 +180,10 @@ def traite_face(f):
|
||||
for z in range(len(f.v)):
|
||||
c=0.0
|
||||
if vindex[f.v[z].index]!=0:
|
||||
nx=f.v[z].co[0]/4
|
||||
ny=f.v[z].co[1]/4
|
||||
nz=f.v[z].co[2]/4
|
||||
nn = ng + cellNoise((nx,ny,nz))
|
||||
nx=f.v[z].co[0]/NOISEDIM
|
||||
ny=f.v[z].co[1]/NOISEDIM
|
||||
nz=f.v[z].co[2]/NOISEDIM
|
||||
nn = ng * cellNoise((nx,ny,nz))
|
||||
c=float(f.col[z].r+f.col[z].b+f.col[z].g)/maxcol*nn/vindex[f.v[z].index]
|
||||
else:
|
||||
c=0
|
||||
@ -141,10 +195,10 @@ def traite_face(f):
|
||||
for z in range(len(f.v)):
|
||||
c=0.0
|
||||
if vindex[f.v[z].index]!=0:
|
||||
nx=f.v[z].co[0]/4
|
||||
ny=f.v[z].co[1]/4
|
||||
nz=f.v[z].co[2]/4
|
||||
nn = ng + heteroTerrain((nx,ny,nz),H,lacunarity,octaves,offset,basis)
|
||||
nx=f.v[z].co[0]/NOISEDIM
|
||||
ny=f.v[z].co[1]/NOISEDIM
|
||||
nz=f.v[z].co[2]/NOISEDIM
|
||||
nn = ng * heteroTerrain((nx,ny,nz),H,lacunarity,octaves,offset,basis)
|
||||
c=float(f.col[z].r+f.col[z].b+f.col[z].g)/maxcol*nn/vindex[f.v[z].index]
|
||||
else:
|
||||
c=0
|
||||
@ -154,68 +208,60 @@ def traite_face(f):
|
||||
|
||||
|
||||
def paint():
|
||||
global MODEMenu, vindex,ng, mat, ORIName, NEWName
|
||||
global MODEMenu, vindex,ng, mat, ORIName, NEWName
|
||||
global ERROR, TextERROR
|
||||
|
||||
Me=Object.GetSelected()
|
||||
if Me!=[]:
|
||||
if Me[0].getType()=='Mesh':
|
||||
|
||||
|
||||
vindex=[]
|
||||
ORIName=Me[0].getData().name
|
||||
me1=NMesh.GetRaw(Me[0].getData().name)
|
||||
|
||||
try:
|
||||
o=Object.Get('newMESH')
|
||||
me=o.getData()
|
||||
me=me1
|
||||
|
||||
me=NMesh.GetRaw(Me[0].getData().name)
|
||||
|
||||
try:
|
||||
for m in me.verts:
|
||||
vindex.append(0)
|
||||
|
||||
for f in me.faces:
|
||||
for v in f.v:
|
||||
if MODEMenu.val!=2:
|
||||
if MODEMenu.val==1:
|
||||
vindex[v.index]+=1
|
||||
else:
|
||||
if v.sel==1:
|
||||
vindex[v.index]+=1
|
||||
else:
|
||||
#print mat
|
||||
if f.mat in mat:
|
||||
vindex[v.index]+=1
|
||||
for f in me.faces:
|
||||
if MODEMenu.val==2:
|
||||
if f.mat in mat:
|
||||
traite_face(f)
|
||||
else:
|
||||
traite_face(f)
|
||||
Me[0].link(me)
|
||||
Me[0].makeDisplayList()
|
||||
except:
|
||||
o=Object.New('Mesh','newMESH')
|
||||
sc.link(o)
|
||||
me=me1
|
||||
ERROR=2
|
||||
TextERROR='No color on this Object.'
|
||||
|
||||
def NEWMEcreation(obj):
|
||||
|
||||
if obj.getType()=='Mesh':
|
||||
nomdelobjet="";
|
||||
objnumber=-1; namelist=[]
|
||||
OBJ=Object.Get()
|
||||
|
||||
name='new.002'
|
||||
|
||||
for m in me.verts:
|
||||
vindex.append(0)
|
||||
for ozero in OBJ:
|
||||
if ozero.getType()=='Mesh':
|
||||
namelist.append(ozero.getData().name)
|
||||
|
||||
for f in me.faces:
|
||||
for v in f.v:
|
||||
if MODEMenu.val!=2:
|
||||
if MODEMenu.val==1:
|
||||
vindex[v.index]+=1
|
||||
else:
|
||||
if v.sel==1:
|
||||
vindex[v.index]+=1
|
||||
else:
|
||||
#print mat
|
||||
if f.mat in mat:
|
||||
vindex[v.index]+=1
|
||||
for f in me.faces:
|
||||
if MODEMenu.val==2:
|
||||
if f.mat in mat:
|
||||
traite_face(f)
|
||||
else:
|
||||
traite_face(f)
|
||||
|
||||
|
||||
Me[0].link(me)
|
||||
#o=copy_transform(Me[0],o)
|
||||
|
||||
def NEWMEcreation(name):
|
||||
nomdelobjet=""; objnumber=-1; namelist=[]
|
||||
obj=Object.Get()
|
||||
|
||||
for ozero in obj:
|
||||
if ozero.getType()=='Mesh':
|
||||
namelist.append(ozero.getData().name)
|
||||
if ozero.getData().name==name:
|
||||
objnumber=obj.index(ozero)
|
||||
|
||||
if objnumber!=-1:
|
||||
ozero=obj[objnumber]
|
||||
ozero=obj
|
||||
nomdelobjet=ozero.getName()
|
||||
Mesh=Blender.NMesh.GetRawFromObject(nomdelobjet)
|
||||
|
||||
name=obj.getData().name
|
||||
n=0; name2=name[:];ok=0
|
||||
|
||||
while ok==0:
|
||||
@ -224,6 +270,7 @@ def NEWMEcreation(name):
|
||||
ok=0;name2=name[0:name.find('.')+1]+'%s'%(n+1)
|
||||
else: ok=1
|
||||
n+=1
|
||||
|
||||
Mesh.name=name2
|
||||
Obis = Blender.NMesh.PutRaw(Mesh,name2)
|
||||
copy_transform(ozero,Obis)
|
||||
@ -265,12 +312,26 @@ octaves=5.0
|
||||
offset=1.0
|
||||
basis=3
|
||||
|
||||
NOISEDIM=4
|
||||
NOISEDIMbout=Create(NOISEDIM)
|
||||
HBout=Create(H)
|
||||
lacunarityBout=Create(lacunarity)
|
||||
octavesBout=Create(octaves)
|
||||
offsetBout=Create(offset)
|
||||
basisBout=Create(basis)
|
||||
|
||||
|
||||
noiseTYPE={0:'BLENDER',
|
||||
1:'STDPERLIN',
|
||||
2:'STDPERLIN',
|
||||
3:'NEWPERLIN',
|
||||
4:'VORONOI_F1',
|
||||
5:'VORONOI_F2',
|
||||
6:'VORONOI_F3',
|
||||
7:'VORONOI_F2F1',
|
||||
8:'VORONOI_CRACKLE',
|
||||
9:'CELLNOISE'}
|
||||
|
||||
TMATList= [0,[],[]]
|
||||
|
||||
for t in range(16):
|
||||
@ -291,8 +352,9 @@ glRct=glRectf
|
||||
def draw():
|
||||
global MODEMenu, NSIZE, TDOCMat,TMATList, TAXEList
|
||||
global mat, ORIName, NEWName, ORIENTMenu
|
||||
global NRepeat, ERROR, TextERROR , NOISE, NOISEMenu
|
||||
global NRepeat, ERROR, TextERROR , NOISE, NOISEMenu, NOISEDIMbout,NOISEDIM
|
||||
global HBout,lacunarityBout,octavesBout,offsetBout,basisBout
|
||||
global noiseTYPE
|
||||
|
||||
size=Buffer(GL_FLOAT, 4)
|
||||
glGetFloatv(GL_SCISSOR_BOX, size)
|
||||
@ -307,7 +369,7 @@ def draw():
|
||||
|
||||
glColor3f(1.0,1.0,1.0)
|
||||
glRasterPos2f(20, size[3]-15)
|
||||
Text("Script Python de displacement painting")
|
||||
Text("Script Python de displacement paintingt")
|
||||
|
||||
glRasterPos2f(20, size[3]-28)
|
||||
Text("Jean-michel Soler, juillet 2004")
|
||||
@ -316,20 +378,20 @@ def draw():
|
||||
n0=70
|
||||
n1=55
|
||||
|
||||
Button("Create" ,17 ,5 ,size[3]-n0+16 ,60 ,20)
|
||||
Button("Action" ,16 ,5 ,size[3]-n0-4 ,60 ,20)
|
||||
Button("Exit" ,1 ,5 ,size[3]-n0-24 ,60 ,20)
|
||||
Button("Create" ,E_CREATE ,5 ,size[3]-n0+16 ,60 ,20)
|
||||
Button("Action" ,E_ACTION ,5 ,size[3]-n0-4 ,60 ,20)
|
||||
Button("Exit" ,E_EXIT ,5 ,size[3]-n0-24 ,60 ,20)
|
||||
|
||||
NRepeat=Number("repeat" ,5 ,5 ,size[3]-n0-50 ,75 ,20, NRepeat.val,1,10)
|
||||
NRepeat=Number("repeat" ,E_REPEAT ,5 ,size[3]-n0-50 ,75 ,20, NRepeat.val,1,10)
|
||||
|
||||
glColor3f(0.0,0.0,0.0)
|
||||
glRasterPos2f(80 ,size[3]-n0+24)
|
||||
Text("MODE")
|
||||
|
||||
MODEMenu= Menu(MOname, 2 ,80 ,size[3]-n0 ,100,20, MODEMenu.val, "MODE menu.")
|
||||
MODEMenu= Menu(MOname, E_MODE ,80 ,size[3]-n0 ,100,20, MODEMenu.val, "MODE menu.")
|
||||
|
||||
if MODEMenu.val==2:
|
||||
TDOCMat=Toggle("Doc Mat" ,24 ,180 ,size[3]-n0 ,60 ,20,TDOCMat.val)
|
||||
TDOCMat=Toggle("Doc Mat" ,E_DOCMAT ,180 ,size[3]-n0 ,60 ,20,TDOCMat.val)
|
||||
if TDOCMat.val==1:
|
||||
#print TMATList
|
||||
for t in range(TMATList[0]):
|
||||
@ -341,9 +403,10 @@ def draw():
|
||||
80+t*40+40,
|
||||
size[3]-n0-60+40)
|
||||
TMATList[2][t]=Toggle("%s"%t , 32+t ,80+t*40+5 ,size[3]-n0-50 ,30 , 20,TMATList[2][t].val)
|
||||
|
||||
glColor3f(1.0,0.3,0.0)
|
||||
glRasterPos2f(80+40+5 ,size[3]-n0-80)
|
||||
if ERROR==1:
|
||||
if ERROR>1:
|
||||
Text('Last error : '+TextERROR)
|
||||
else:
|
||||
Text('Last error : ')
|
||||
@ -351,54 +414,57 @@ def draw():
|
||||
glColor3f(0.0,0.0,0.0)
|
||||
glRasterPos2f(240 ,size[3]-n0+24)
|
||||
Text("ORIENTATION")
|
||||
ORIENTMenu= Menu(ORname, 3 ,240 ,size[3]-n0 ,100,20, ORIENTMenu.val, "ORIENT menu.")
|
||||
ORIENTMenu= Menu(ORname, E_ORIENT ,240 ,size[3]-n0 ,100,20, ORIENTMenu.val, "ORIENT menu.")
|
||||
|
||||
if ORIENTMenu.val==2 :
|
||||
for t in range(3):
|
||||
TAXEList[1][t]=Toggle("%s"%TAXEList[0][t],
|
||||
40+t,
|
||||
E_AXESEL+t,
|
||||
240+100+t*30 , size[3]-n0 ,30 , 20,
|
||||
TAXEList[1][t].val)
|
||||
|
||||
|
||||
if ORIENTMenu.val==3 :
|
||||
glRasterPos2f(20 ,size[3]-n0-90+24)
|
||||
glRasterPos2f(240 ,size[3]-n0-90-4)
|
||||
Text("NOISE")
|
||||
NOISEMenu= Menu(NOname, 45 , 240 ,size[3]-n0-110 ,110,20, NOISEMenu.val, "NOISE menu.")
|
||||
if NOISEMenu.val==11:
|
||||
HBout= Slider("H", 46 ,110 ,size[3]-n0-190 ,125,20, HBout.val, -2.0,+2.0,0,)
|
||||
lacunarityBout=Slider("lacunarity",47 ,110 ,size[3]-n0-110 ,125,20, lacunarityBout.val, -4.0,+4.0,0,)
|
||||
octavesBout=Slider("octave", 48 ,110 ,size[3]-n0-130 ,125,20, octavesBout.val, -10.0,+10.0,0,)
|
||||
offsetBout=Slider("offset", 49 ,110 ,size[3]-n0-150 ,125,20, offsetBout.val, -5.0,+5.0,0,)
|
||||
basisBout=Slider("noise", 50 ,110 ,size[3]-n0-170 ,125,20, basisBout.val, 0,9,0,)
|
||||
NOISEMenu= Menu(NOname, E_NOISEME , 240 ,size[3]-n0-118 ,110,20, NOISEMenu.val, "NOISE menu.")
|
||||
NOISEDIMbout=Number(" Dim: " ,E_NOISEDIM , 240 ,size[3]-n0-138 ,110,20, NOISEDIMbout.val, 1,100)
|
||||
|
||||
NSIZE= Slider("Disp Size", 4 ,80 ,size[3]-n0-20 ,260,20, NSIZE.val, -4.0,+4.0,0,"SIZE.")
|
||||
if NOISEMenu.val==11:
|
||||
basisBout=Slider(noiseTYPE[basisBout.val],
|
||||
E_NOISEBAS ,40 ,size[3]-n0-118 ,175,20, basisBout.val, 0,9,)
|
||||
HBout= Slider("H", E_NOISEH ,40 ,size[3]-n0-138 ,175,20, HBout.val, -2.0,+2.0,0,)
|
||||
lacunarityBout=Slider("lacunarity", E_NOISELAC ,40 ,size[3]-n0-158 ,175,20, lacunarityBout.val, -4.0,+4.0,0,)
|
||||
octavesBout=Slider("octave", E_NOISEOCT ,40 ,size[3]-n0-178 ,175,20, octavesBout.val, -10.0,+10.0,0,)
|
||||
offsetBout=Slider("offset", E_NOISEOFF ,40 ,size[3]-n0-198 ,175,20, offsetBout.val, -5.0,+5.0,0,)
|
||||
|
||||
NSIZE= Slider("Disp Size", E_NSIZE ,80 ,size[3]-n0-20 ,260,20, NSIZE.val, -4.0,+4.0,0,"SIZE.")
|
||||
|
||||
|
||||
|
||||
|
||||
def event(evt, val):
|
||||
if ((evt== QKEY or evt== ESCKEY) and not val): Exit()
|
||||
if (evt== QKEY and not val): Exit()
|
||||
|
||||
def bevent(evt):
|
||||
global MODEMenu, NSIZE, ng, TMATList
|
||||
global mat, ORIENTMenu, NRepeat, TAXEList
|
||||
global ERROR,TextERROR, NOISE, NOISEMenu
|
||||
global ERROR,TextERROR, NOISE, NOISEMenu, NOISEDIMbout,NOISEDIM
|
||||
global HBout,lacunarityBout,octavesBout,offsetBout,basisBout
|
||||
global H,lacunarity,octaves,offset,basis
|
||||
|
||||
if (evt== 1):
|
||||
if (evt== E_EXIT):
|
||||
Exit()
|
||||
|
||||
|
||||
elif (evt== 16):
|
||||
elif (evt== E_ACTION):
|
||||
for n in range(NRepeat.val):
|
||||
paint()
|
||||
|
||||
elif (evt== 4):
|
||||
elif (evt== E_NSIZE):
|
||||
ng=NSIZE.val
|
||||
|
||||
elif (evt== 24) or (evt in [32,33,34,35,36,37,38,39,40,41,42,43,44]):
|
||||
elif (evt== E_DOCMAT) or (evt in E_MATVAL):
|
||||
Me=Object.GetSelected()
|
||||
if Me!=[]:
|
||||
if Me[0].getType()=='Mesh':
|
||||
@ -414,21 +480,29 @@ def bevent(evt):
|
||||
else:
|
||||
ERROR=1
|
||||
TextERROR='No Selected Object.'
|
||||
|
||||
elif (evt== 17):
|
||||
NEWMEcreation('new.002')
|
||||
|
||||
|
||||
elif (evt== 45):
|
||||
elif (evt== E_CREATE):
|
||||
|
||||
NEWMEcreation(Blender.Object.GetSelected()[0])
|
||||
Blender.Draw.Redraw()
|
||||
|
||||
ERROR=1
|
||||
TextERROR='No Selected Object.'
|
||||
|
||||
elif (evt== E_NOISEME):
|
||||
NOISE=NOISEMenu.val-1
|
||||
|
||||
elif (evt in [46,47,48,49, 50]):
|
||||
elif (evt in E_NOISEVAL):
|
||||
H=HBout.val
|
||||
lacunarity=lacunarityBout.val
|
||||
octaves=octavesBout.val
|
||||
offset=offsetBout.val
|
||||
basis=basisBout.val
|
||||
|
||||
Blender.Redraw()
|
||||
elif (evt== E_NOISEDIM):
|
||||
NOISEDIM=NOISEDIMbout.val
|
||||
|
||||
Blender.Draw.Redraw()
|
||||
|
||||
Window.EditMode(0)
|
||||
Register(draw, event, bevent)
|
||||
|
@ -7,6 +7,24 @@ Group: 'Misc'
|
||||
Tip: 'Browse BPython (scripting API) modules doc strings.'
|
||||
"""
|
||||
|
||||
__author__ = "Daniel Dunbar"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
__bpydoc__ = """\
|
||||
The "Doc Browser" lets users navigate the documentation strings of part of
|
||||
the Blender Python API.
|
||||
|
||||
It doesn't give access yet to object method functions and variables, only to
|
||||
module functions, but still it is a handy reference. Specially for quick
|
||||
access, for example to Blender.BGL: the module that wraps OpenGL calls.
|
||||
|
||||
Notes:<br>
|
||||
Everyone interested in the bpython api is also invited to read "The Blender
|
||||
Python API Reference" doc, available online ("Python Scripting Reference"
|
||||
entry in Blender's Help menu).
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
|
@ -4,7 +4,21 @@
|
||||
Name: 'Fix From Armature'
|
||||
Blender: 232
|
||||
Group: 'Mesh'
|
||||
Tip: 'Fix armature deformation.'
|
||||
Tip: 'Fix armature deformation'
|
||||
"""
|
||||
|
||||
__author__ = "Jean-Michel Soler (jms)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Script's homepage, http://jmsoler.free.fr/util/blenderfile/py/fixfromarmature.py",
|
||||
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "10/2004"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script creates a copy of the active mesh with armature deformation fixed.
|
||||
|
||||
Usage:
|
||||
|
||||
Select the mesh and run this script. A fixed copy of it will be created.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
@ -21,19 +35,43 @@ Tip: 'Fix armature deformation.'
|
||||
# http://jmsoler.free.fr/util/blenderfile/py/fixfromarmature.py
|
||||
# Communiquer les problemes et erreurs sur:
|
||||
# http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
|
||||
#---------------------------------------------
|
||||
#---------------------------------------------
|
||||
# ce script est proposé sous licence GPL pour etre associe
|
||||
# a la distribution de Blender 2.33 et suivant
|
||||
# --------------------------------------------------------------------------
|
||||
# this script is released under GPL licence
|
||||
# for the Blender 2.33 scripts package
|
||||
# --------------------------------------------------------------------------
|
||||
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||
#
|
||||
# Script copyright (C) 2003, 2004: Jean-Michel Soler
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# ***** END GPL LICENCE BLOCK *****
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
import Blender
|
||||
try:
|
||||
Ozero=Blender.Object.GetSelected()[0]
|
||||
nomdelobjet=Ozero.getName()
|
||||
Mesh=Blender.NMesh.GetRawFromObject(nomdelobjet)
|
||||
Obis = Blender.Object.New ('Mesh')
|
||||
Obis.link(Mesh)
|
||||
Obis.setSize(Ozero.getSize())
|
||||
Obis.setEuler(Ozero.getEuler())
|
||||
Obis.setLocation(Ozero.getMatrix()[3][0:3])
|
||||
scene = Blender.Scene.getCurrent()
|
||||
scene.link (Obis)
|
||||
Ozero=Blender.Object.GetSelected()[0]
|
||||
nomdelobjet=Ozero.getName()
|
||||
Mesh=Blender.NMesh.GetRawFromObject(nomdelobjet)
|
||||
Obis = Blender.Object.New ('Mesh')
|
||||
Obis.link(Mesh)
|
||||
Obis.setMatrix(Ozero.getMatrix())
|
||||
scene = Blender.Scene.getCurrent()
|
||||
scene.link (Obis)
|
||||
except:
|
||||
Blender.Draw.PupMenu("Error|Not a mesh or no object selected")
|
||||
Blender.Draw.PupMenu("Error%t|Not a mesh or no object selected")
|
||||
|
753
release/scripts/help_browser.py
Normal file
753
release/scripts/help_browser.py
Normal file
@ -0,0 +1,753 @@
|
||||
#!BPY
|
||||
|
||||
"""
|
||||
Name: 'Scripts Help Browser'
|
||||
Blender: 234
|
||||
Group: 'Help'
|
||||
Tooltip: 'Show help information about a chosen installed script.'
|
||||
"""
|
||||
|
||||
__author__ = "Willian P. Germano"
|
||||
__version__ = "0.1 11/02/04"
|
||||
__email__ = ('scripts', 'Author, wgermano:ig*com*br')
|
||||
__url__ = ('blender', 'elysiun')
|
||||
|
||||
__bpydoc__ ="""\
|
||||
This script shows help information for scripts registered in the menus.
|
||||
|
||||
Usage:
|
||||
|
||||
- Start Screen:
|
||||
|
||||
To read any script's "user manual" select a script from one of the
|
||||
available category menus. If the script has help information in the format
|
||||
expected by this Help Browser, it will be displayed in the Script Help
|
||||
Screen. Otherwise you'll be offered the possibility of loading the chosen
|
||||
script's source file in Blender's Text Editor. The programmer(s) may have
|
||||
written useful comments there for users.
|
||||
|
||||
Hotkeys:<br>
|
||||
ESC or Q: [Q]uit
|
||||
|
||||
- Script Help Screen:
|
||||
|
||||
This screen shows the user manual page for the chosen script. If the text
|
||||
doesn't fit completely on the screen, you can scroll it up or down with
|
||||
arrow keys or a mouse wheel. There may be link and email buttons that if
|
||||
clicked should open your default web browser and email client programs for
|
||||
further information or support.
|
||||
|
||||
Hotkeys:<br>
|
||||
ESC: back to Start Screen<br>
|
||||
Q: [Q]uit<br>
|
||||
S: view script's [S]ource code in Text Editor<br>
|
||||
UP, DOWN Arrows and mouse wheel: scroll text up / down
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
# sysinfo.py version 0.1 Jun 09, 2004
|
||||
# --------------------------------------------------------------------------
|
||||
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||
#
|
||||
# Copyright (C) 2004: Willian P. Germano, wgermano _at_ ig.com.br
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# ***** END GPL LICENCE BLOCK *****
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
import Blender
|
||||
from Blender import sys as bsys, Draw, Window
|
||||
|
||||
WEBBROWSER = True
|
||||
try:
|
||||
import webbrowser
|
||||
except:
|
||||
WEBBROWSER = False
|
||||
|
||||
DEFAULT_EMAILS = {
|
||||
'scripts': ['Bf-scripts-dev', 'bf-scripts-dev@blender.org']
|
||||
}
|
||||
|
||||
DEFAULT_LINKS = {
|
||||
'blender': ["blender.org\'s Python forum", "http://www.blender.org/modules.php?op=modload&name=phpBB2&file=viewforum&f=9"],
|
||||
'elysiun': ["elYsiun\'s Python and Plugins forum", "http://www.elysiun.com/forum/viewforum.php?f=5"]
|
||||
}
|
||||
|
||||
PADDING = 15
|
||||
COLUMNS = 1
|
||||
TEXT_WRAP = 100
|
||||
WIN_W = WIN_H = 200
|
||||
SCROLL_DOWN = 0
|
||||
|
||||
def screen_was_resized():
|
||||
global WIN_W, WIN_H
|
||||
|
||||
w, h = Window.GetAreaSize()
|
||||
if WIN_W != w or WIN_H != h:
|
||||
WIN_W = w
|
||||
WIN_H = h
|
||||
return True
|
||||
return False
|
||||
|
||||
def fit_on_screen():
|
||||
global TEXT_WRAP, PADDING, WIN_W, WIN_H, COLUMNS
|
||||
|
||||
COLUMNS = 1
|
||||
WIN_W, WIN_H = Window.GetAreaSize()
|
||||
TEXT_WRAP = int((WIN_W - PADDING) / 6)
|
||||
if TEXT_WRAP < 40:
|
||||
TEXT_WRAP = 40
|
||||
elif TEXT_WRAP > 100:
|
||||
if TEXT_WRAP > 110:
|
||||
COLUMNS = 2
|
||||
TEXT_WRAP /= 2
|
||||
else: TEXT_WRAP = 100
|
||||
|
||||
def cut_point(text, length):
|
||||
"Returns position of the last space found before 'length' chars"
|
||||
l = length
|
||||
c = text[l]
|
||||
while c != ' ':
|
||||
l -= 1
|
||||
if l == 0: return length # no space found
|
||||
c = text[l]
|
||||
return l
|
||||
|
||||
def text_wrap(text, length = None):
|
||||
global TEXT_WRAP
|
||||
|
||||
wrapped = []
|
||||
lines = text.split('<br>')
|
||||
llen = len(lines)
|
||||
if llen > 1:
|
||||
if lines[-1] == '': llen -= 1
|
||||
for i in range(llen - 1):
|
||||
lines[i] = lines[i].rstrip() + '<br>'
|
||||
lines[llen-1] = lines[llen-1].rstrip()
|
||||
|
||||
if not length: length = TEXT_WRAP
|
||||
|
||||
for l in lines:
|
||||
while len(l) > length:
|
||||
cpt = cut_point(l, length)
|
||||
line, l = l[:cpt], l[cpt + 1:]
|
||||
wrapped.append(line)
|
||||
wrapped.append(l)
|
||||
return wrapped
|
||||
|
||||
def load_script_text(script):
|
||||
global PATHS, SCRIPT_INFO
|
||||
|
||||
if script.userdir:
|
||||
path = PATHS['uscripts']
|
||||
else:
|
||||
path = PATHS['scripts']
|
||||
|
||||
fname = bsys.join(path, script.fname)
|
||||
|
||||
source = Blender.Text.Load(fname)
|
||||
if source:
|
||||
Draw.PupMenu("File loaded%%t|Please check the file \"%s\" in the Text Editor window" % source.name)
|
||||
|
||||
|
||||
# for theme colors:
|
||||
def float_colors(cols):
|
||||
return map(lambda x: x / 255.0, cols)
|
||||
|
||||
# globals
|
||||
|
||||
SCRIPT_INFO = None
|
||||
|
||||
PATHS = {
|
||||
'home': Blender.Get('homedir'),
|
||||
'scripts': Blender.Get('scriptsdir'),
|
||||
'uscripts': Blender.Get('uscriptsdir')
|
||||
}
|
||||
|
||||
BPYMENUS_FILE = bsys.join(PATHS['home'], 'Bpymenus')
|
||||
|
||||
f = file(BPYMENUS_FILE, 'r')
|
||||
lines = f.readlines()
|
||||
f.close()
|
||||
|
||||
AllGroups = []
|
||||
|
||||
class Script:
|
||||
|
||||
def __init__(self, data):
|
||||
self.name = data[0]
|
||||
self.version = data[1]
|
||||
self.fname = data[2]
|
||||
self.userdir = data[3]
|
||||
self.tip = data[4]
|
||||
|
||||
# End of class Script
|
||||
|
||||
|
||||
class Group:
|
||||
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
self.scripts = []
|
||||
|
||||
def add_script(self, script):
|
||||
self.scripts.append(script)
|
||||
|
||||
def get_name(self):
|
||||
return self.name
|
||||
|
||||
def get_scripts(self):
|
||||
return self.scripts
|
||||
|
||||
# End of class Group
|
||||
|
||||
|
||||
class BPy_Info:
|
||||
|
||||
def __init__(self, script, dict):
|
||||
|
||||
self.script = script
|
||||
|
||||
self.d = dict
|
||||
|
||||
self.header = []
|
||||
self.len_header = 0
|
||||
self.content = []
|
||||
self.len_content = 0
|
||||
self.spaces = 0
|
||||
self.fix_urls()
|
||||
self.make_header()
|
||||
self.wrap_lines()
|
||||
|
||||
def make_header(self):
|
||||
|
||||
sc = self.script
|
||||
d = self.d
|
||||
|
||||
header = self.header
|
||||
|
||||
title = "Script: %s" % sc.name
|
||||
version = "Version: %s for Blender %1.2f or newer" % (d['__version__'],
|
||||
sc.version / 100.0)
|
||||
|
||||
if len(d['__author__']) == 1:
|
||||
asuffix = ':'
|
||||
else: asuffix = 's:'
|
||||
|
||||
authors = "%s%s %s" % ("Author", asuffix, ", ".join(d['__author__']))
|
||||
|
||||
header.append(title)
|
||||
header.append(version)
|
||||
header.append(authors)
|
||||
self.len_header = len(header)
|
||||
|
||||
|
||||
def fix_urls(self):
|
||||
|
||||
emails = self.d['__email__']
|
||||
fixed = []
|
||||
for a in emails:
|
||||
if a in DEFAULT_EMAILS.keys():
|
||||
fixed.append(DEFAULT_EMAILS[a])
|
||||
else:
|
||||
a = a.replace('*','.').replace(':','@')
|
||||
ltmp = a.split(',')
|
||||
if len(ltmp) != 2:
|
||||
ltmp = [ltmp[0], ltmp[0]]
|
||||
fixed.append(ltmp)
|
||||
|
||||
self.d['__email__'] = fixed
|
||||
|
||||
links = self.d['__url__']
|
||||
fixed = []
|
||||
for a in links:
|
||||
if a in DEFAULT_LINKS.keys():
|
||||
fixed.append(DEFAULT_LINKS[a])
|
||||
else:
|
||||
ltmp = a.split(',')
|
||||
if len(ltmp) != 2:
|
||||
ltmp = [ltmp[0], ltmp[0]]
|
||||
fixed.append([ltmp[0].strip(), ltmp[1].strip()])
|
||||
|
||||
self.d['__url__'] = fixed
|
||||
|
||||
|
||||
def wrap_lines(self, reset = 0):
|
||||
|
||||
lines = self.d['__bpydoc__'].split('\n')
|
||||
self.content = []
|
||||
newlines = []
|
||||
newline = []
|
||||
|
||||
if reset:
|
||||
self.len_content = 0
|
||||
self.spaces = 0
|
||||
|
||||
for l in lines:
|
||||
if l == '' and newline:
|
||||
newlines.append(newline)
|
||||
newline = []
|
||||
newlines.append('')
|
||||
else: newline.append(l)
|
||||
if newline: newlines.append(newline)
|
||||
|
||||
for lst in newlines:
|
||||
wrapped = text_wrap(" ".join(lst))
|
||||
for l in wrapped:
|
||||
self.content.append(l)
|
||||
if l: self.len_content += 1
|
||||
else: self.spaces += 1
|
||||
|
||||
if not self.content[-1]:
|
||||
self.len_content -= 1
|
||||
|
||||
|
||||
# End of class BPy_Info
|
||||
|
||||
def parse_pyobj_close(closetag, lines, i):
|
||||
i += 1
|
||||
l = lines[i]
|
||||
while l.find(closetag) < 0:
|
||||
i += 1
|
||||
l = "%s%s" % (l, lines[i])
|
||||
return [l, i]
|
||||
|
||||
def parse_pyobj(var, lines, i):
|
||||
"Bad code, was in a hurry for release"
|
||||
|
||||
l = lines[i].replace(var, '').replace('=','',1).strip()
|
||||
|
||||
i0 = i - 1
|
||||
|
||||
if l[0] == '"':
|
||||
if l[1:3] == '""': # """
|
||||
if l.find('"""', 3) < 0: # multiline
|
||||
l2, i = parse_pyobj_close('"""', lines, i)
|
||||
if l[-1] == '\\': l = l[:-1]
|
||||
l = "%s%s" % (l, l2)
|
||||
elif l[-1] == '"' and l[-2] != '\\': # single line: "..."
|
||||
pass
|
||||
else:
|
||||
l = "ERROR"
|
||||
|
||||
elif l[0] == "'":
|
||||
if l[-1] == '\\':
|
||||
l2, i = parse_pyobj_close("'", lines, i)
|
||||
l = "%s%s" % (l, l2)
|
||||
elif l[-1] == "'" and l[-2] != '\\': # single line: '...'
|
||||
pass
|
||||
else:
|
||||
l = "ERROR"
|
||||
|
||||
elif l[0] == '(':
|
||||
if l[-1] != ')':
|
||||
l2, i = parse_pyobj_close(')', lines, i)
|
||||
l = "%s%s" % (l, l2)
|
||||
|
||||
elif l[0] == '[':
|
||||
if l[-1] != ']':
|
||||
l2, i = parse_pyobj_close(']', lines, i)
|
||||
l = "%s%s" % (l, l2)
|
||||
|
||||
return [l, i - i0]
|
||||
|
||||
# helper functions:
|
||||
|
||||
def parse_help_info(script):
|
||||
|
||||
global PATHS, SCRIPT_INFO
|
||||
|
||||
if script.userdir:
|
||||
path = PATHS['uscripts']
|
||||
else:
|
||||
path = PATHS['scripts']
|
||||
|
||||
fname = bsys.join(path, script.fname)
|
||||
|
||||
if not bsys.exists(fname):
|
||||
Draw.PupMenu('IO Error|Couldn\'t find script %s' % fname)
|
||||
return None
|
||||
|
||||
f = file(fname, 'r')
|
||||
lines = f.readlines()
|
||||
f.close()
|
||||
|
||||
# fix line endings:
|
||||
if lines[0].find('\r'):
|
||||
unixlines = []
|
||||
for l in lines:
|
||||
unixlines.append(l.replace('\r',''))
|
||||
lines = unixlines
|
||||
|
||||
llen = len(lines)
|
||||
has_doc = 0
|
||||
|
||||
doc_data = {
|
||||
'__author__': '',
|
||||
'__version__': '',
|
||||
'__url__': '',
|
||||
'__email__': '',
|
||||
'__bpydoc__': '',
|
||||
'__doc__': ''
|
||||
}
|
||||
|
||||
i = 0
|
||||
while i < llen:
|
||||
l = lines[i]
|
||||
incr = 1
|
||||
for k in doc_data.keys():
|
||||
if l.find(k, 0, 20) == 0:
|
||||
value, incr = parse_pyobj(k, lines, i)
|
||||
exec("doc_data['%s'] = %s" % (k, value))
|
||||
has_doc = 1
|
||||
break
|
||||
i += incr
|
||||
|
||||
# fix these to seqs, simplifies coding elsewhere
|
||||
for w in ['__author__', '__url__', '__email__']:
|
||||
val = doc_data[w]
|
||||
if val and type(val) == str:
|
||||
doc_data[w] = [doc_data[w]]
|
||||
|
||||
if not doc_data['__bpydoc__']:
|
||||
if doc_data['__doc__']:
|
||||
doc_data['__bpydoc__'] = doc_data['__doc__']
|
||||
|
||||
if has_doc: # any data, maybe should confirm at least doc/bpydoc
|
||||
info = BPy_Info(script, doc_data)
|
||||
SCRIPT_INFO = info
|
||||
return True
|
||||
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def parse_script_line(l):
|
||||
|
||||
try:
|
||||
pieces = l.split("'")
|
||||
name = pieces[1].replace('...','')
|
||||
version, fname, userdir = pieces[2].strip().split()
|
||||
tip = pieces[3]
|
||||
except:
|
||||
return None
|
||||
|
||||
return [name, int(version), fname, int(userdir), tip]
|
||||
|
||||
|
||||
def parse_bpymenus(lines):
|
||||
|
||||
global AllGroups
|
||||
|
||||
llen = len(lines)
|
||||
|
||||
for i in range(llen):
|
||||
l = lines[i].strip()
|
||||
if not l: continue
|
||||
if l[-1] == '{':
|
||||
group = Group(l[:-2])
|
||||
AllGroups.append(group)
|
||||
i += 1
|
||||
l = lines[i].strip()
|
||||
while l != '}':
|
||||
if l[0] != '|':
|
||||
data = parse_script_line(l)
|
||||
if data:
|
||||
script = Script(data)
|
||||
group.add_script(script)
|
||||
i += 1
|
||||
l = lines[i].strip()
|
||||
|
||||
AllGroups.reverse()
|
||||
|
||||
|
||||
def create_group_menus():
|
||||
|
||||
global AllGroups
|
||||
menus = []
|
||||
|
||||
for group in AllGroups:
|
||||
|
||||
name = group.get_name()
|
||||
menu = []
|
||||
scripts = group.get_scripts()
|
||||
for s in scripts: menu.append(s.name)
|
||||
menu = "|".join(menu)
|
||||
menu = "%s%%t|%s" % (name, menu)
|
||||
menus.append([name, menu])
|
||||
|
||||
return menus
|
||||
|
||||
|
||||
# Collecting data:
|
||||
fit_on_screen()
|
||||
parse_bpymenus(lines)
|
||||
GROUP_MENUS = create_group_menus()
|
||||
|
||||
|
||||
# GUI:
|
||||
|
||||
from Blender import BGL
|
||||
from Blender.Window import Theme
|
||||
|
||||
# globals:
|
||||
|
||||
START_SCREEN = 0
|
||||
SCRIPT_SCREEN = 1
|
||||
|
||||
SCREEN = START_SCREEN
|
||||
|
||||
# gui buttons:
|
||||
len_gmenus = len(GROUP_MENUS)
|
||||
|
||||
BUT_GMENU = range(len_gmenus)
|
||||
for i in range(len_gmenus):
|
||||
BUT_GMENU[i] = Draw.Create(0)
|
||||
|
||||
# events:
|
||||
BEVT_LINK = None # range(len(SCRIPT_INFO.links))
|
||||
BEVT_EMAIL = None # range(len(SCRIPT_INFO.emails))
|
||||
BEVT_GMENU = range(100, len_gmenus + 100)
|
||||
BEVT_VIEWSOURCE = 1
|
||||
BEVT_EXIT = 2
|
||||
BEVT_BACK = 3
|
||||
|
||||
# gui callbacks:
|
||||
|
||||
def gui(): # drawing the screen
|
||||
|
||||
global SCREEN, START_SCREEN, SCRIPT_SCREEN
|
||||
global SCRIPT_INFO, AllGroups, GROUP_MENUS
|
||||
global BEVT_EMAIL, BEVT_LINK
|
||||
global BEVT_VIEWSOURCE, BEVT_EXIT, BEVT_BACK, BEVT_GMENU, BUT_GMENU
|
||||
global PADDING, WIN_W, WIN_H, SCROLL_DOWN, COLUMNS
|
||||
|
||||
theme = Theme.Get()[0]
|
||||
tui = theme.get('ui')
|
||||
ttxt = theme.get('text')
|
||||
|
||||
COL_BG = float_colors(ttxt.back)
|
||||
COL_TXT = ttxt.text
|
||||
COL_TXTHI = ttxt.text_hi
|
||||
|
||||
BGL.glClearColor(COL_BG[0],COL_BG[1],COL_BG[2],COL_BG[3])
|
||||
BGL.glClear(BGL.GL_COLOR_BUFFER_BIT)
|
||||
BGL.glColor3ub(COL_TXT[0],COL_TXT[1], COL_TXT[2])
|
||||
|
||||
resize = screen_was_resized()
|
||||
if resize: fit_on_screen()
|
||||
|
||||
if SCREEN == START_SCREEN:
|
||||
x = PADDING
|
||||
bw = 70
|
||||
bh = 25
|
||||
hincr = 50
|
||||
|
||||
butcolumns = (WIN_W - 2*x)/ bw
|
||||
if butcolumns < 2: butcolumns = 2
|
||||
elif butcolumns > 7: butcolumns = 7
|
||||
|
||||
len_gm = len(GROUP_MENUS)
|
||||
butlines = len_gm / butcolumns
|
||||
if len_gm % butcolumns: butlines += 1
|
||||
|
||||
h = hincr * butlines + 20
|
||||
y = h + bh
|
||||
|
||||
BGL.glColor3ub(COL_TXTHI[0],COL_TXTHI[1], COL_TXTHI[2])
|
||||
BGL.glRasterPos2i(x, y)
|
||||
Draw.Text('Scripts Help Browser')
|
||||
|
||||
y -= bh
|
||||
|
||||
BGL.glColor3ub(COL_TXT[0],COL_TXT[1], COL_TXT[2])
|
||||
|
||||
i = 0
|
||||
j = 0
|
||||
for group_menu in GROUP_MENUS:
|
||||
BGL.glRasterPos2i(x, y)
|
||||
Draw.Text(group_menu[0]+':')
|
||||
BUT_GMENU[j] = Draw.Menu(group_menu[1], BEVT_GMENU[j],
|
||||
x, y-bh-5, bw, bh, 0,
|
||||
'Choose a script to read its help information')
|
||||
if i == butcolumns - 1:
|
||||
x = PADDING
|
||||
i = 0
|
||||
y -= hincr
|
||||
else:
|
||||
i += 1
|
||||
x += bw + 3
|
||||
j += 1
|
||||
|
||||
x = PADDING
|
||||
y = 10
|
||||
BGL.glRasterPos2i(x, y)
|
||||
Draw.Text('Select script for its help. Press Q or ESC to leave.')
|
||||
|
||||
elif SCREEN == SCRIPT_SCREEN:
|
||||
if SCRIPT_INFO:
|
||||
|
||||
if resize:
|
||||
SCRIPT_INFO.wrap_lines(1)
|
||||
SCROLL_DOWN = 0
|
||||
|
||||
h = 18 * SCRIPT_INFO.len_content + 12 * SCRIPT_INFO.spaces
|
||||
x = PADDING
|
||||
y = WIN_H
|
||||
bw = 38
|
||||
bh = 16
|
||||
|
||||
BGL.glColor3ub(COL_TXTHI[0],COL_TXTHI[1], COL_TXTHI[2])
|
||||
for line in SCRIPT_INFO.header:
|
||||
y -= 18
|
||||
BGL.glRasterPos2i(x, y)
|
||||
size = Draw.Text(line)
|
||||
|
||||
for line in text_wrap('Tooltip: %s' % SCRIPT_INFO.script.tip):
|
||||
y -= 18
|
||||
BGL.glRasterPos2i(x, y)
|
||||
size = Draw.Text(line)
|
||||
|
||||
i = 0
|
||||
y -= 28
|
||||
for data in SCRIPT_INFO.d['__url__']:
|
||||
Draw.PushButton('link %d' % (i + 1), BEVT_LINK[i],
|
||||
x + i*bw, y, bw, bh, data[0])
|
||||
i += 1
|
||||
y -= bh + 1
|
||||
|
||||
i = 0
|
||||
for data in SCRIPT_INFO.d['__email__']:
|
||||
Draw.PushButton('email', BEVT_EMAIL[i], x + i*bw, y, bw, bh, data[0])
|
||||
i += 1
|
||||
y -= 18
|
||||
|
||||
y0 = y
|
||||
BGL.glColor3ub(COL_TXT[0],COL_TXT[1], COL_TXT[2])
|
||||
for line in SCRIPT_INFO.content[SCROLL_DOWN:]:
|
||||
if line:
|
||||
line = line.replace('<br>', '')
|
||||
BGL.glRasterPos2i(x, y)
|
||||
Draw.Text(line)
|
||||
y -= 18
|
||||
else: y -= 12
|
||||
if y < PADDING + 20: # reached end, either stop or go to 2nd column
|
||||
if COLUMNS == 1: break
|
||||
elif x == PADDING: # make sure we're still in column 1
|
||||
x = 6*TEXT_WRAP + PADDING / 2
|
||||
y = y0
|
||||
|
||||
x = PADDING
|
||||
Draw.PushButton('source', BEVT_VIEWSOURCE, x, 17, 45, bh,
|
||||
'View this script\'s source code in the Text Editor (hotkey: S)')
|
||||
Draw.PushButton('exit', BEVT_EXIT, x + 45, 17, 45, bh,
|
||||
'Exit from Scripts Help Browser (hotkey: Q)')
|
||||
Draw.PushButton('back', BEVT_BACK, x + 2*45, 17, 45, bh,
|
||||
'Back to scripts selection screen (hotkey: ESC)')
|
||||
BGL.glColor3ub(COL_TXTHI[0],COL_TXTHI[1], COL_TXTHI[2])
|
||||
BGL.glRasterPos2i(x, 5)
|
||||
Draw.Text('use the arrow keys or the mouse wheel to scroll text', 'small')
|
||||
|
||||
def fit_scroll():
|
||||
global SCROLL_DOWN
|
||||
if not SCRIPT_INFO:
|
||||
SCROLL_DOWN = 0
|
||||
return
|
||||
max = SCRIPT_INFO.len_content + SCRIPT_INFO.spaces - 1
|
||||
if SCROLL_DOWN > max: SCROLL_DOWN = max
|
||||
if SCROLL_DOWN < 0: SCROLL_DOWN = 0
|
||||
|
||||
|
||||
def event(evt, val): # input events
|
||||
|
||||
global SCREEN, START_SCREEN, SCRIPT_SCREEN
|
||||
global SCROLL_DOWN
|
||||
|
||||
if not val: return
|
||||
|
||||
if evt == Draw.ESCKEY:
|
||||
if SCREEN == START_SCREEN: Draw.Exit()
|
||||
else:
|
||||
SCREEN = START_SCREEN
|
||||
SCROLL_DOWN = 0
|
||||
Draw.Redraw()
|
||||
return
|
||||
elif evt == Draw.QKEY:
|
||||
Draw.Exit()
|
||||
return
|
||||
elif evt in [Draw.DOWNARROWKEY, Draw.WHEELDOWNMOUSE] and SCREEN == SCRIPT_SCREEN:
|
||||
SCROLL_DOWN += 1
|
||||
fit_scroll()
|
||||
Draw.Redraw()
|
||||
return
|
||||
elif evt in [Draw.UPARROWKEY, Draw.WHEELUPMOUSE] and SCREEN == SCRIPT_SCREEN:
|
||||
SCROLL_DOWN -= 1
|
||||
fit_scroll()
|
||||
Draw.Redraw()
|
||||
return
|
||||
elif evt == Draw.SKEY:
|
||||
if SCREEN == SCRIPT_SCREEN and SCRIPT_INFO:
|
||||
load_script_text(SCRIPT_INFO.script)
|
||||
return
|
||||
|
||||
def button_event(evt): # gui button events
|
||||
|
||||
global SCREEN, START_SCREEN, SCRIPT_SCREEN
|
||||
global BEVT_LINK, BEVT_EMAIL, BEVT_GMENU, BUT_GMENU, SCRIPT_INFO
|
||||
global SCROLL_DOWN
|
||||
|
||||
if evt >= 100: # group menus
|
||||
for i in range(len(BUT_GMENU)):
|
||||
if evt == BEVT_GMENU[i]:
|
||||
group = AllGroups[i]
|
||||
index = BUT_GMENU[i].val - 1
|
||||
if index < 0: return # user didn't pick a menu entry
|
||||
script = group.get_scripts()[BUT_GMENU[i].val - 1]
|
||||
if parse_help_info(script):
|
||||
SCREEN = SCRIPT_SCREEN
|
||||
BEVT_LINK = range(20, len(SCRIPT_INFO.d['__url__']) + 20)
|
||||
BEVT_EMAIL = range(50, len(SCRIPT_INFO.d['__email__']) + 50)
|
||||
Draw.Redraw()
|
||||
else:
|
||||
res = Draw.PupMenu("No help available%t|View Source|Cancel")
|
||||
if res == 1:
|
||||
load_script_text(script)
|
||||
elif evt >= 20:
|
||||
if not WEBBROWSER:
|
||||
Draw.PupMenu('Missing standard Python module%t|You need module "webbrowser" to access the web')
|
||||
return
|
||||
|
||||
if evt >= 50: # script screen email buttons
|
||||
email = SCRIPT_INFO.d['__email__'][evt - 50][1]
|
||||
webbrowser.open("mailto:%s" % email)
|
||||
else: # >= 20: script screen link buttons
|
||||
link = SCRIPT_INFO.d['__url__'][evt - 20][1]
|
||||
webbrowser.open(link)
|
||||
elif evt == BEVT_VIEWSOURCE:
|
||||
if SCREEN == SCRIPT_SCREEN: load_script_text(SCRIPT_INFO.script)
|
||||
elif evt == BEVT_EXIT:
|
||||
Draw.Exit()
|
||||
return
|
||||
elif evt == BEVT_BACK:
|
||||
if SCREEN == SCRIPT_SCREEN:
|
||||
SCREEN = START_SCREEN
|
||||
SCRIPT_INFO = None
|
||||
SCROLL_DOWN = 0
|
||||
Draw.Redraw()
|
||||
|
||||
Draw.Register(gui, event, button_event)
|
@ -6,6 +6,16 @@ Group: 'Help'
|
||||
Tooltip: 'Help for new users'
|
||||
"""
|
||||
|
||||
__author__ = "Matt Ebb"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
__bpydoc__ = """\
|
||||
This script opens the user's default web browser at www.blender3d.org's
|
||||
"Getting Started" page.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
# Getting Started Help Menu Item
|
||||
# --------------------------------------------------------------------------
|
||||
@ -30,4 +40,4 @@ Tooltip: 'Help for new users'
|
||||
|
||||
import Blender, webbrowser
|
||||
version = str(Blender.Get('version'))
|
||||
webbrowser.open('http://www.blender3d.org/Help/?pg=GettingStarted&ver=' + version)
|
||||
webbrowser.open('http://www.blender3d.org/Help/?pg=GettingStarted&ver=' + version)
|
||||
|
@ -6,6 +6,14 @@ Group: 'Help'
|
||||
Tooltip: 'The Blender reference manual'
|
||||
"""
|
||||
|
||||
__author__ = "Matt Ebb"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
__bpydoc__ = """\
|
||||
This script opens the user's default web browser at www.blender3d.org's
|
||||
"Blender Manual" page.
|
||||
"""
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Manual Help Menu Item
|
||||
# --------------------------------------------------------------------------
|
||||
@ -30,4 +38,4 @@ Tooltip: 'The Blender reference manual'
|
||||
|
||||
import Blender, webbrowser
|
||||
version = str(Blender.Get('version'))
|
||||
webbrowser.open('http://www.blender3d.org/Help/?pg=Manual&ver=' + version)
|
||||
webbrowser.open('http://www.blender3d.org/Help/?pg=Manual&ver=' + version)
|
||||
|
@ -6,6 +6,15 @@ Group: 'Help'
|
||||
Tooltip: 'Documentation for using the Blender Python API'
|
||||
"""
|
||||
|
||||
__author__ = "Matt Ebb"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
__bpydoc__ = """\
|
||||
This script opens the user's default web browser at www.blender3d.org's
|
||||
"Blender Python API Reference" page.
|
||||
"""
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Python Scripting Reference Help Menu Item
|
||||
# --------------------------------------------------------------------------
|
||||
@ -30,4 +39,4 @@ Tooltip: 'Documentation for using the Blender Python API'
|
||||
|
||||
import Blender, webbrowser
|
||||
version = str(Blender.Get('version'))
|
||||
webbrowser.open('http://www.blender3d.org/Help/?pg=PyReference&ver=' + version)
|
||||
webbrowser.open('http://www.blender3d.org/Help/?pg=PyReference&ver=' + version)
|
||||
|
@ -6,6 +6,14 @@ Group: 'Help'
|
||||
Tooltip: 'Information about the changes in this version of Blender'
|
||||
"""
|
||||
|
||||
__author__ = "Matt Ebb"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
__bpydoc__ = """\
|
||||
This script opens the user's default web browser at www.blender3d.org's
|
||||
"Release Notes" page.
|
||||
"""
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Release Notes Help Menu Item
|
||||
# --------------------------------------------------------------------------
|
||||
@ -30,4 +38,4 @@ Tooltip: 'Information about the changes in this version of Blender'
|
||||
|
||||
import Blender, webbrowser
|
||||
version = str(Blender.Get('version'))
|
||||
webbrowser.open('http://www.blender3d.org/Help/?pg=ReleaseNotes&ver=' + version)
|
||||
webbrowser.open('http://www.blender3d.org/Help/?pg=ReleaseNotes&ver=' + version)
|
||||
|
@ -7,6 +7,14 @@ Group: 'Help'
|
||||
Tooltip: 'Tutorials for learning to use Blender'
|
||||
"""
|
||||
|
||||
__author__ = "Matt Ebb"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
__bpydoc__ = """\
|
||||
This script opens the user's default web browser at www.blender3d.org's
|
||||
"Blender Tutorials" page.
|
||||
"""
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Tutorials Help Menu Item
|
||||
# --------------------------------------------------------------------------
|
||||
@ -31,4 +39,4 @@ Tooltip: 'Tutorials for learning to use Blender'
|
||||
|
||||
import Blender, webbrowser
|
||||
version = str(Blender.Get('version'))
|
||||
webbrowser.open('http://www.blender3d.org/Help/?pg=Tutorials&ver=' + version)
|
||||
webbrowser.open('http://www.blender3d.org/Help/?pg=Tutorials&ver=' + version)
|
||||
|
@ -7,6 +7,15 @@ Group: 'HelpWebsites'
|
||||
Tooltip: 'The official Blender website'
|
||||
"""
|
||||
|
||||
__author__ = "Matt Ebb"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
__bpydoc__ = """\
|
||||
This script opens the user's default web browser at Blender's main site,
|
||||
www.blender3d.org.
|
||||
"""
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Blender Website Help Menu -> Websites Item
|
||||
# --------------------------------------------------------------------------
|
||||
@ -30,4 +39,4 @@ Tooltip: 'The official Blender website'
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
import Blender, webbrowser
|
||||
webbrowser.open('http://www.blender3d.org/')
|
||||
webbrowser.open('http://www.blender3d.org/')
|
||||
|
@ -7,6 +7,14 @@ Group: 'HelpWebsites'
|
||||
Tooltip: 'Get involved with Blender development'
|
||||
"""
|
||||
|
||||
__author__ = "Matt Ebb"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
__bpydoc__ = """\
|
||||
This script opens the user's default web browser at www.blender.org, the
|
||||
Blender development portal.
|
||||
"""
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Blender Website Help Menu -> Websites Item
|
||||
# --------------------------------------------------------------------------
|
||||
@ -30,4 +38,4 @@ Tooltip: 'Get involved with Blender development'
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
import webbrowser
|
||||
webbrowser.open('http://www.blender.org')
|
||||
webbrowser.open('http://www.blender.org')
|
||||
|
@ -7,6 +7,14 @@ Group: 'HelpWebsites'
|
||||
Tooltip: 'Buy official Blender resources and merchandise online'
|
||||
"""
|
||||
|
||||
__author__ = "Matt Ebb"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
__bpydoc__ = """\
|
||||
This script opens the user's default web browser at www.blender3d.org's
|
||||
"E-Shop" section.
|
||||
"""
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Blender Website Help Menu -> Websites Item
|
||||
# --------------------------------------------------------------------------
|
||||
@ -30,4 +38,4 @@ Tooltip: 'Buy official Blender resources and merchandise online'
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
import Blender, webbrowser
|
||||
webbrowser.open('http://www.blender3d.org/e-shop')
|
||||
webbrowser.open('http://www.blender3d.org/e-shop')
|
||||
|
@ -7,6 +7,14 @@ Group: 'HelpWebsites'
|
||||
Tooltip: 'Get involved with other Blender users'
|
||||
"""
|
||||
|
||||
__author__ = "Matt Ebb"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
__bpydoc__ = """\
|
||||
This script opens the user's default web browser at www.blender3d.org's
|
||||
"User Community" page.
|
||||
"""
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Blender Website Help Menu -> Websites Item
|
||||
# --------------------------------------------------------------------------
|
||||
@ -30,4 +38,4 @@ Tooltip: 'Get involved with other Blender users'
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
import webbrowser
|
||||
webbrowser.open('http://www.blender3d.org/Community')
|
||||
webbrowser.open('http://www.blender3d.org/Community')
|
||||
|
@ -1,15 +1,33 @@
|
||||
#!BPY
|
||||
|
||||
""" Registration info for Blender menus:
|
||||
Name: 'Hotkey Reference'
|
||||
Name: 'HotKey and MouseAction Reference'
|
||||
Blender: 232
|
||||
Group: 'Help'
|
||||
Tip: 'All the hotkeys'
|
||||
Tip: 'All the hotkeys/short keys'
|
||||
"""
|
||||
|
||||
__author__ = "Jean-Michel Soler (jms)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Script's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_hotkeyscript.htm",
|
||||
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "10/2004"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script is a reference about all hotkeys and mouse actions in Blender.
|
||||
|
||||
Usage:
|
||||
|
||||
Open the script from the Help menu and select group of keys to browse.
|
||||
|
||||
Notes:<br>
|
||||
Additional entries in the database (c) 2004 by Bart.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#------------------------
|
||||
# Hotkeys script
|
||||
# jm soler (2003)
|
||||
# jm soler (2003-->10/2004)
|
||||
# -----------------------
|
||||
# Page officielle :
|
||||
# http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_hotkeyscript.htm
|
||||
@ -24,7 +42,8 @@ Tip: 'All the hotkeys'
|
||||
# --------------------------------------------------------------------------
|
||||
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||
#
|
||||
# Copyright (C) 2003, 2004: Jean-Michel Soler
|
||||
# Script copyright (C) 2003, 2004: Jean-Michel Soler
|
||||
# Additionnal entries in the original data base (c) 2004 by Bart (bart@neeneenee.de)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@ -50,205 +69,294 @@ from Blender.BGL import *
|
||||
hotkeys={
|
||||
'Specials 1 ':[
|
||||
[',', 'Set Bounding Box rotation scaling pivot'],
|
||||
['.', 'Set 3D cursor as rotation scaling pivot'] ,
|
||||
['~', 'Display all layers'] ,
|
||||
['Shift-~', 'Display all/previous layers'] ,
|
||||
['TAB', 'Enter/exit edit mode'] ,
|
||||
['Ctrl-,', 'Set Median Point rotation scaling pivot'],
|
||||
['.', 'Set 3D cursor as rotation scaling pivot'],
|
||||
['Ctrl-.', 'Set Individual Object Centers as rotation scaling pivot'] ,
|
||||
['~', 'Display all layers (German keys: ö)'],
|
||||
['Shift-~', 'Display all/previous layers (German keys: Shift-ö)'],
|
||||
['Space', 'Popup menu'],
|
||||
['Space', '3D View: camera selected + fly mode, accept'],
|
||||
['TAB', 'Enter/exit Edit Mode'],
|
||||
['TAB', 'Edit Mode and Numerical Edit (see N key) : move to next input value'],
|
||||
['TAB', 'Sequencer: Edit meta strip'] ,
|
||||
['CTRL-TAB', 'Enter/exit pose mode']
|
||||
['TAB', 'Sequencer: Edit meta strip'],
|
||||
['TAB', 'IPO: Edit selected'],
|
||||
['Ctrl-TAB', 'Enter/exit Pose Mode'],
|
||||
['Shift-TAB', 'Enter Object Mode'],
|
||||
['Ctrl-Open menu/', ''],
|
||||
['Ctrl-Load Image', 'Opens a thumbnail browser instead of file browser for images']
|
||||
],
|
||||
|
||||
'Specials 2 ':[
|
||||
'Mouse ':[
|
||||
['Actions:', ''],
|
||||
['LMB', '3D View: Set 3D Cursor'],
|
||||
['LMB', '3D View: camera selected + fly mode, move forward'],
|
||||
['LMB drag', 'Border select circle: add to selection'],
|
||||
['LMB hold down', 'Popup menu'],
|
||||
['LMB hold down drag', 'Gesture'],
|
||||
['Ctrl-LMB', 'IPO: Add key'],
|
||||
['MMB', 'Rotate'],
|
||||
['Ctrl-MMB', 'Zoom view'],
|
||||
['Shift-MMB', 'Move view'],
|
||||
['RMB', 'Select'],
|
||||
['RMB drag', 'Border select circle: subtract from selection'],
|
||||
['RMB hold down', 'Popup menu'],
|
||||
['Alt+Ctrl-RMB', 'Edit Mode: Select edge'],
|
||||
['Alt+Ctrl-RMB', 'UV Image Editor: Select face'],
|
||||
['Shift-RMB', 'Add/subtract to/from selection'],
|
||||
['Wheel', 'Zoom view'],
|
||||
['Transformations:', ''],
|
||||
['Drag+Ctrl', 'Step adjustment'],
|
||||
['Drag+Ctrl+Shift', 'Small step adjustment'],
|
||||
['Drag+Shift', 'Fine adjustment'],
|
||||
['LMB', 'Confirm transformation'],
|
||||
['MMB', 'Toggle optional transform feature'],
|
||||
['RMB', 'Abort transformation']
|
||||
],
|
||||
'F-Keys ':[
|
||||
['F1', 'Open File'],
|
||||
['F2', 'Save File'],
|
||||
['F3', 'Save image'],
|
||||
['F4', 'Logic window (may change)'],
|
||||
['F5', 'Material window'],
|
||||
['F6', 'Texture window'],
|
||||
['F7', 'Object window'],
|
||||
['F8', 'World window'],
|
||||
['F9', 'Edit Mode window'],
|
||||
['F4', 'Logic Window (may change)'],
|
||||
['F5', 'Material Window'],
|
||||
['F6', 'Texture Window'],
|
||||
['F7', 'Object Window'],
|
||||
['F8', 'World Window'],
|
||||
['F9', 'Edit Mode Window'],
|
||||
['F10', 'Render Window'],
|
||||
['F11', 'Recall the last rendered image'],
|
||||
['F12', 'Render current Scene'],
|
||||
['Ctrl-Shift-F12', 'NLA Editor'],
|
||||
['Shift-F1', 'Library Data Select'],
|
||||
['Shift-F4', 'Data Select '],
|
||||
['Shift-F5', '3D window'],
|
||||
['Shift-F6', 'IPO window'],
|
||||
['Shift-F8', 'Video Sequencer window'],
|
||||
['Shift-F9', 'OOP window'],
|
||||
['Shift-F10', 'Image Window']
|
||||
] ,
|
||||
['Shift-F2', 'Export DXF'],
|
||||
['Shift-F4', 'Object manager Data Select '],
|
||||
['Shift-F5', '3D Window'],
|
||||
['Shift-F6', 'IPO Window'],
|
||||
['Shift-F7', 'Buttons Window'],
|
||||
['Shift-F8', 'Video Sequencer Window'],
|
||||
['Shift-F9', 'OOP Window'],
|
||||
['Shift-F10', 'UV Image Editor'],
|
||||
['Shift-F11', 'Text Editor'],
|
||||
['Shift-F12', 'Action Editor']
|
||||
],
|
||||
|
||||
'Numbers ':[
|
||||
['1..2..0-=', 'Show layer 1..2..12'] ,
|
||||
['ALT-1..2..0', 'Show layer 11..12..20'] ,
|
||||
['SHIFT-1..2..0-=', 'Toggle layer 1..2..12'] ,
|
||||
['SHIFT-ALT-...', 'Toggle layer 11..12..20'] ],
|
||||
'Numbers ':[
|
||||
['1..2..0-=', 'Show layer 1..2..12'],
|
||||
['Alt-1..2..0', 'Show layer 11..12..20'],
|
||||
['Shift-1..2..0-=', 'Toggle layer 1..2..12'],
|
||||
['Shift-ALT-...', 'Toggle layer 11..12..20']
|
||||
],
|
||||
|
||||
'Numpad ':[
|
||||
['Numpad DEL', 'Zoom on object'] ,
|
||||
['Numpad /', 'Local view on object (hide others)'] ,
|
||||
['Numpad *', "Rotate view to object's local axes"] ,
|
||||
['Numpad +', 'Zoom in (works everywhere)'] ,
|
||||
['Numpad +', 'Proportional vertex edit mode: Increase range of influence'] ,
|
||||
['Numpad -', 'Zoom out (works everywhere)'] ,
|
||||
['Numpad -', 'Proportional vertex edit mode: Decrease range of influence'] ,
|
||||
['Numpad INS', 'Set Camera view'] ,
|
||||
['CTRL-Numpad INS', 'Set active object as camera'] ,
|
||||
['ALT-Numbad INS', 'Restore old camera'] ,
|
||||
['Numpad 1', 'Front view'] ,
|
||||
['CTRL-Numpad 1', 'Back view'] ,
|
||||
['Numpad 3', 'Right-Side view'] ,
|
||||
['CTRL-Numpad 3', 'Left-Side view'] ,
|
||||
['Numpad 7', 'Top view'] ,
|
||||
['CTRL-Numpad 7', 'Bottom view '] ,
|
||||
['Numpad 5', 'Toggle orthogonal // perspective view'] ,
|
||||
['Numpad 9', 'Redraw view'] ,
|
||||
['Numpad 2', 'Rotate view left'] ,
|
||||
['Numpad 6', 'Rotate view right'] ,
|
||||
['Numpad 8', 'Rotate view up'] ,
|
||||
['Numpad 2', 'Rotate view down'] ],
|
||||
'Numpad ':[
|
||||
['Numpad DEL', 'Zoom on object'],
|
||||
['Numpad /', 'Local view on object (hide others)'],
|
||||
['Numpad *', 'Rotate view to objects local axes'],
|
||||
['Numpad +', 'Zoom in (works everywhere)'],
|
||||
['Numpad +', 'Proportional vertex Edit Mode: Increase range of influence'],
|
||||
['Ctrl-Numpad +', 'Edit Mode: Select More vertices'],
|
||||
['Numpad -', 'Zoom out (works everywhere)'],
|
||||
['Numpad -', 'Proportional vertex Edit Mode: Decrease range of influence'],
|
||||
['Ctrl-Numpad +', 'Edit Mode: Select Less vertices'],
|
||||
['Numpad INS', 'Set Camera view'],
|
||||
['Ctrl-Numpad INS', 'Set active object as camera'],
|
||||
['Alt-Numbad INS', 'Restore old camera'],
|
||||
['Numpad 1', 'Front view'],
|
||||
['Ctrl-Numpad 1', 'Back view'],
|
||||
['Numpad 3', 'Right view'],
|
||||
['Ctrl-Numpad 3', 'Left view'],
|
||||
['Numpad 7', 'Top view'],
|
||||
['Ctrl-Numpad 7', 'Bottom view '],
|
||||
['Numpad 5', 'Toggle orthogonal/perspective view'],
|
||||
['Numpad 9', 'Redraw view'],
|
||||
['Numpad 4', 'Rotate view left'],
|
||||
['Numpad 6', 'Rotate view right'],
|
||||
['Numpad 8', 'Rotate view up'],
|
||||
['Numpad 2', 'Rotate view down']
|
||||
],
|
||||
|
||||
'Arrows ':[
|
||||
['PgUp', 'IPO: Select next keyframe'] ,
|
||||
['CTRL-PgUp', 'IPO: Select and jump to next keyframe'] ,
|
||||
['PgDn', 'IPO: Select previous keyframe'] ,
|
||||
['CTRL-PgDn', 'IPO: Select and jump to previous keyframe'] ,
|
||||
['LEFT', 'One frame backwards'] ,
|
||||
['RIGHT', 'One frame forwards'] ,
|
||||
['DOWN', '10 frames backwards'] ,
|
||||
['UP', '10 frames forwards'] ],
|
||||
['Home/Pos1', 'View all'],
|
||||
['PgUp', 'IPO: Select next keyframe'],
|
||||
['Ctrl-PgUp', 'IPO: Select and jump to next keyframe'],
|
||||
['PgDn', 'IPO: Select previous keyframe'],
|
||||
['Ctrl-PgDn', 'IPO: Select and jump to previous keyframe'],
|
||||
['Left', 'One frame backwards'],
|
||||
['Right', 'One frame forwards'],
|
||||
['Down', '10 frames backwards'],
|
||||
['Up', '10 frames forwards'],
|
||||
['Alt-Down', 'Blender in Window mode'],
|
||||
['Alt-Up', 'Blender in Fullscreen mode'],
|
||||
['Ctrl-Left', 'Previous screen'],
|
||||
['Ctrl-Right', 'Next screen'],
|
||||
['Ctrl-Down', 'Maximize window toggle'],
|
||||
['Ctrl-Up', 'Maximize window toggle'],
|
||||
['Shift-Arrow', 'Toggle first frame/ last frame']
|
||||
],
|
||||
|
||||
'Letters ':[ {"A":[
|
||||
['A', 'Select all / Deselect all'] ,
|
||||
['ALT-A', 'Animate current window'] ,
|
||||
['CTRL-A', "Apply object's size/rotation to object data"] ,
|
||||
['SHIFT-A', 'Sequencer: ADD menu'] ,
|
||||
['SHIFT-ALT-A', 'Animate all windows'] ,
|
||||
['SHIFT-CTRL-A', 'Apply lattice / Make dupliverts real']] ,
|
||||
['A', 'Select all/Deselect all'],
|
||||
['Alt-A', 'Play animation in current window'],
|
||||
['Ctrl-A', 'Apply objects size/rotation to object data'],
|
||||
['Ctrl-A', 'Text Editor: Select all'],
|
||||
['Shift-A', 'Sequencer: Add menu'],
|
||||
['Shift-A', '3D-View: Add menu'],
|
||||
['Shift-ALT-A', 'Play animation in all windows'],
|
||||
['Shift-CTRL-A', 'Apply lattice / Make dupliverts real']
|
||||
],
|
||||
|
||||
"B":[
|
||||
['B', 'Border select'] ,
|
||||
['BB', 'Circle select'] ,
|
||||
['SHIFT-B', 'Set render border'] ],
|
||||
['B', 'Border select'],
|
||||
['BB', 'Circle select'],
|
||||
['Alt+B', 'Edit Mode: Select Vertex Loop'],
|
||||
['Shift-B', 'Set render border (in active camera view)']
|
||||
],
|
||||
|
||||
"C":[
|
||||
['C', 'Center view on cursor'] ,
|
||||
['C', 'Sequencer: Change images'] ,
|
||||
['C', 'IPO: Snap current frame to selected key'] ,
|
||||
['ALT-C', 'Convert menu'] ,
|
||||
['CTRL-C', 'Copy menu (Copy properties of active to selected objects)'] ,
|
||||
['SHIFT-C', 'Center and zoom view on selected objects']] ,
|
||||
['C', 'Center view on cursor'],
|
||||
['C', 'UV Image Editor: Active Face Select toggle'],
|
||||
['C', 'Sequencer: Change images'],
|
||||
['C', 'IPO: Snap current frame to selected key'],
|
||||
['Alt-C', 'Object Mode: Convert menu'],
|
||||
['Alt-C', 'Text Editor: Copy selection to clipboard'],
|
||||
['Ctrl-C', 'Copy menu (Copy properties of active to selected objects)'],
|
||||
['Ctrl-C', 'UV Image Editor: Stick UVs to mesh vertex'],
|
||||
['Shift-C', 'Center and zoom view on selected objects'],
|
||||
['Shift-C', 'UV Image Editor: Stick local UVs to mesh vertex']
|
||||
],
|
||||
|
||||
"D":[
|
||||
['D', 'Set 3d draw mode'] ,
|
||||
['ALT-D', 'Create new instance of object'] ,
|
||||
['CTRL-D', 'Display alpha of image texture as wire'] ,
|
||||
['SHIFT-D', 'Create full copy of object'] ],
|
||||
['D', 'Set 3d draw mode'],
|
||||
['Alt-D', 'Object Mode: Create new instance of object'],
|
||||
['Ctrl-D', 'Display alpha of image texture as wire'],
|
||||
['Shift-D', 'Create full copy of object']
|
||||
],
|
||||
|
||||
"E":[
|
||||
['E', 'Extrude'],
|
||||
['EX', 'Extrude along X axis'],
|
||||
['EY', 'Extrude along Y axis'],
|
||||
['EZ', 'Extrude along Z axis'],
|
||||
['ALT-E', 'Edit mode: exit edit mode'],] ,
|
||||
['E', 'Edit Mode: Extrude'],
|
||||
['E', 'UV Image Editor: LSCM Unwrap'],
|
||||
['ER', 'Edit Mode: Extrude Rotate'],
|
||||
['ES', 'Edit Mode: Extrude Scale'],
|
||||
['ESX', 'Edit Mode: Extrude Scale X axis'],
|
||||
['ESY', 'Edit Mode: Extrude Scale Y axis'],
|
||||
['ESZ', 'Edit Mode: Extrude Scale Z axis'],
|
||||
['EX', 'Edit Mode: Extrude along X axis'],
|
||||
['EY', 'Edit Mode: Extrude along Y axis'],
|
||||
['EZ', 'Edit Mode: Extrude along Z axis'],
|
||||
['Alt-E', 'Edit Mode: exit Edit Mode'],
|
||||
['Ctrl-E', 'Edit Mode: Edge Specials menu'],
|
||||
['Shift-E', 'Edit Mode: SubSurf Edge Sharpness']
|
||||
],
|
||||
|
||||
"F":[
|
||||
['F', 'Edit mode: Make edge/face'] ,
|
||||
['F', 'Sequencer: Set Filter Y'] ,
|
||||
['F', 'Faceselect mode'] ,
|
||||
['ALT-F', 'Beautify fill'] ,
|
||||
['CTRL-F', 'Sort faces in Z direction'] ,
|
||||
['CTRL-F', 'Edit mode: Flip triangle edges'] ,
|
||||
['SHIFT-F', 'Edit mode: Fill with triangles']] ,
|
||||
['F', 'Edit mode: Make edge/face'],
|
||||
['F', 'Sequencer: Set Filter Y'],
|
||||
['F', 'Object Mode: UV/Face Select mode'],
|
||||
['Alt-F', 'Edit Mode: Beautify fill'],
|
||||
['Ctrl-F', 'Object Mode: Sort faces in Z direction'],
|
||||
['Ctrl-F', 'Edit Mode: Flip triangle edges'],
|
||||
['Shift-F', 'Edit Mode: Fill with triangles'],
|
||||
['Shift-F', 'Object Mode: active camera in fly mode (use LMB, RMB, Alt, Ctrl and Space too)']
|
||||
],
|
||||
|
||||
"G":[
|
||||
['G', 'Grab (move)'] ,
|
||||
['ALT-G', 'Clear location'] ,
|
||||
['SHIFT-ALT-G', 'Remove selected objects from group'] ,
|
||||
['CTRL-G', 'Add selected objects to group'] ,
|
||||
['SHIFT-G', 'Group menu'] ],
|
||||
['G', 'Grab (move)'],
|
||||
['Alt-G', 'Clear location'],
|
||||
['Shift-ALT-G', 'Remove selected objects from group'],
|
||||
['Ctrl-G', 'Add selected objects to group'],
|
||||
['Shift-G', 'Selected Group menu']
|
||||
],
|
||||
|
||||
"H":[
|
||||
['H', 'Hide selected vertices/faces'] ,
|
||||
['H', 'Curves: Set handle type'] ,
|
||||
['ALT-H', 'Reveal vertices'] ,
|
||||
['CTRL-H', 'Curves: Automatic handle calculation'] ,
|
||||
['SHIFT-H', 'Hide deselected vertices'] ,
|
||||
['SHIFT-H', 'Curves: Set handle type']] ,
|
||||
['H', 'Hide selected vertices/faces'],
|
||||
['H', 'Curves: Set handle type'],
|
||||
['Alt-H', 'Show Hidden vertices/faces'],
|
||||
['Ctrl-H', 'Curves: Automatic handle calculation'],
|
||||
['Shift-H', 'Hide deselected vertices/faces'],
|
||||
['Shift-H', 'Curves: Set handle type']
|
||||
],
|
||||
|
||||
"I":[
|
||||
['I', 'Keyframe menu'] ],
|
||||
['I', 'Keyframe menu']
|
||||
],
|
||||
|
||||
"J":[
|
||||
['J', 'Mesh: Join all adjacent triangles to quads'] ,
|
||||
['J', 'Swap render page of render window'] ,
|
||||
['CTRL-J', 'Join selected objects'] ,
|
||||
['CTRL-J', 'Nurbs: Add segment'] ,
|
||||
['CTRL-J', 'IPO: Join keyframes menu'],
|
||||
['ALT-J', 'Edit Mode: convert quads to triangles']
|
||||
['J', 'IPO: Join menu'],
|
||||
['J', 'Mesh: Join all adjacent triangles to quads'],
|
||||
['J', 'Render Window: Swap render buffer'],
|
||||
['Ctrl-J', 'Join selected objects'],
|
||||
['Ctrl-J', 'Nurbs: Add segment'],
|
||||
['Ctrl-J', 'IPO: Join keyframes menu'],
|
||||
['Alt-J', 'Edit Mode: convert quads to triangles']
|
||||
],
|
||||
|
||||
"K":[
|
||||
['K', '3d window: Show keyframe positions'] ,
|
||||
['K', 'IPO: Show keyframe positions'] ,
|
||||
['K', 'Nurbs: Print knots'] ,
|
||||
['CTRL-K', 'Make skeleton from armature'] ,
|
||||
['SHIFT-K', 'Show and select all keyframes for object'] ,
|
||||
['SHIFT-K', 'Edit: Knife Mode select'],
|
||||
['SHIFT-K', 'Faceselect: Clear vertexcolours'],
|
||||
] ,
|
||||
['K', '3d Window: Show keyframe positions'],
|
||||
['K', 'Edit Mode: Loop/Cut menu'],
|
||||
['K', 'IPO: Show keyframe positions'],
|
||||
['K', 'Nurbs: Print knots'],
|
||||
['Ctrl-K', 'Make skeleton from armature'],
|
||||
['Shift-K', 'Show and select all keyframes for object'],
|
||||
['Shift-K', 'Edit Mode: Knife Mode select'],
|
||||
['Shift-K', 'UV Face Select: Clear vertex colours'],
|
||||
['Shift-K', 'Vertex Paint: Fill with vertex colours']
|
||||
],
|
||||
|
||||
"L":[
|
||||
['L', 'Make local menu'] ,
|
||||
['L', 'Edit mode: Select linked vertices (near mouse pointer)'] ,
|
||||
['L', 'OOPS window: Select linked objects'] ,
|
||||
['CTRL-L', 'Make links menu'] ,
|
||||
['SHIFT-L', 'Select links menu'] ],
|
||||
['L', 'Make local menu'],
|
||||
['L', 'Edit mode: Select linked vertices (near mouse pointer)'],
|
||||
['L', 'OOPS window: Select linked objects'],
|
||||
['L', 'UV Face Select: Select linked faces'],
|
||||
['Ctrl-L', 'Make links menu'],
|
||||
['Shift-L', 'Select links menu']
|
||||
],
|
||||
|
||||
"M":[
|
||||
['M', 'Move object to different layer'] ,
|
||||
['M', 'Move object to different layer'],
|
||||
['M', 'Sequencer: Make meta strip (group) from selected strips'],
|
||||
['ALT-M', 'Edit Mode: Merge vertices'] ],
|
||||
['M', 'Edit Mode: Mirros Axis menu'],
|
||||
['Alt-M', 'Edit Mode: Merge vertices menu'],
|
||||
['Ctrl-M', 'Object Mode: Mirros Axis menu']
|
||||
],
|
||||
|
||||
"N":[
|
||||
['N', 'Numeric input menu (Size/Rot/Loc)'] ,
|
||||
['N', 'Transform Properties panel'] ,
|
||||
['N', 'OOPS window: Rename object/linked objects'] ,
|
||||
['CTRL-N', 'Armature: Recalculate bone roll angles'] ,
|
||||
['CTRL-N', 'Recalculate normals to outside'] ,
|
||||
['CTRL-ALT-N', 'Recalculate normals to inside'] ],
|
||||
['Ctrl-N', 'Armature: Recalculate bone roll angles'] ,
|
||||
['Ctrl-N', 'Edit Mode: Recalculate normals to outside'] ,
|
||||
['Ctrl-ALT-N', 'Edit Mode: Recalculate normals to inside'] ],
|
||||
|
||||
"O":[
|
||||
['O', 'Edit mode: Toggle proportional vertex editing'] ,
|
||||
['ALT-O', 'Clear object origin'] ,
|
||||
['CTRL-O', 'Revert current file to last saved'] ,
|
||||
['SHIFT-O', 'Proportional vertex edit mode: Toggle smooth/steep falloff'] ],
|
||||
['O', 'Edit Mode/UV Image Editor: Toggle proportional vertex editing'],
|
||||
['Alt-O', 'Clear object origin'],
|
||||
['Ctrl-O', 'Revert current file to last saved'],
|
||||
['Shift-O', 'Proportional vertex Edit Mode: Toggle smooth/steep falloff']
|
||||
],
|
||||
|
||||
"P":[
|
||||
['P', 'Start realtime engine'] ,
|
||||
['P', 'Edit mode: Seperate vertices to new object'] ,
|
||||
['ALT-P', 'Clear parent relationship'] ,
|
||||
['CTRL-P', 'Make active object parent of selected object'] ,
|
||||
['CTRL-SHIFT-P', 'Make active object parent of selected object without inverse'] ,
|
||||
['CTRL-P', 'Edit mode: Make active vertex parent of selected object'] ],
|
||||
['P', 'Object Mode: Start realtime engine'],
|
||||
['P', 'Edit mode: Seperate vertices to new object'],
|
||||
['P', 'UV Image Editor: Pin UVs'],
|
||||
['Alt-P', 'Clear parent relationship'],
|
||||
['Alt-P', 'UV Image Editor: Unpin UVs'],
|
||||
['Ctrl-P', 'Make active object parent of selected object'],
|
||||
['Ctrl-SHIFT-P', 'Make active object parent of selected object without inverse'],
|
||||
['Ctrl-P', 'Edit mode: Make active vertex parent of selected object']
|
||||
],
|
||||
|
||||
"Q":[['Q', 'Quit'] ],
|
||||
|
||||
"R":[
|
||||
['R', 'Rotate'] ,
|
||||
['R', 'IPO: Record mouse movement as IPO curve'] ,
|
||||
['RX', 'Rotate around X axis'] ,
|
||||
['RXX', "Rotate around object's local X axis"] ,
|
||||
['RY', 'Rotate around Y axis'] ,
|
||||
['RYY', "Rotate around object's local Y axis"] ,
|
||||
['RZ', 'Rotate around Z axis'] ,
|
||||
['RZZ', "Rotate around object's local Z axis"] ,
|
||||
['ALT-R', 'Clear object rotation'] ,
|
||||
['SHIFT-R', 'Nurbs: Select row'],
|
||||
['CTRL-R', 'Edit Mode: Knife, cut selected edges, accept left mouse/ cancel right mouse'],
|
||||
['SHIT-R', 'Edit Mode: loop Selection']],
|
||||
['R', 'Rotate'],
|
||||
['R', 'IPO: Record mouse movement as IPO curve'],
|
||||
['R', 'UV Face Select: Rotate menu uv coords or vertex colour'],
|
||||
['RX', 'Rotate around X axis'],
|
||||
['RXX', "Rotate around object's local X axis"],
|
||||
['RY', 'Rotate around Y axis'],
|
||||
['RYY', "Rotate around object's local Y axis"],
|
||||
['RZ', 'Rotate around Z axis'],
|
||||
['RZZ', "Rotate around object's local Z axis"],
|
||||
['Alt-R', 'Clear object rotation'],
|
||||
['Ctrl-R', 'Edit Mode: Knife, cut selected edges, accept left mouse/ cancel right mouse'],
|
||||
['Shift-R', 'Edit Mode: select Face Loop'],
|
||||
['Shift-R', 'Nurbs: Select row'] ],
|
||||
|
||||
"S":[
|
||||
['S', 'Scale'] ,
|
||||
@ -258,58 +366,69 @@ hotkeys={
|
||||
['SXX', 'Flip around X axis and show axis'] ,
|
||||
['SYY', 'Flip around Y axis and show axis'] ,
|
||||
['SZZ', 'Flip around Z axis and show axis'] ,
|
||||
['ALT-S', 'Edit mode: Shrink/fatten (Scale along vertex normals)'] ,
|
||||
['ALT-S', 'Clear object size'] ,
|
||||
['CTRL-S', 'Edit mode: Shear'] ,
|
||||
['SHIFT-S', 'Cursor/Grid snap menu'] ],
|
||||
['Alt-S', 'Edit mode: Shrink/fatten (Scale along vertex normals)'] ,
|
||||
['Alt-S', 'Clear object size'] ,
|
||||
['Ctrl-S', 'Edit mode: Shear'] ,
|
||||
['Shift-S', 'Cursor/Grid snap menu'] ],
|
||||
|
||||
"T":[
|
||||
['T', 'Sequencer: Touch and print selected movies'] ,
|
||||
['T', 'Adjust texture space'] ,
|
||||
['T', 'Edit mode: Flip 3d curve'] ,
|
||||
['T', 'IPO: Change IPO type'] ,
|
||||
['ALT-T', 'Clear tracking of object'] ,
|
||||
['CTRL-T', 'Make selected object track active object'] ,
|
||||
['CTRL-T', 'Mesh: Convert to triangles'] ,
|
||||
['CTRL-ALT-T', 'Blenchmark'] ],
|
||||
['Alt-T', 'Clear tracking of object'] ,
|
||||
['Ctrl-T', 'Make selected object track active object'] ,
|
||||
['Ctrl-T', 'Edit Mode: Convert to triangles'] ,
|
||||
['Ctrl-ALT-T', 'Benchmark'] ],
|
||||
|
||||
"U":[
|
||||
['U', 'Make single user menu'] ,
|
||||
['U', 'Edit mode: Reload object data from before entering edit mode'] ,
|
||||
['U', 'Faceselect mode: Automatic UV calculation menu'] ,
|
||||
['U', '3D View: Global undo'] ,
|
||||
['U', 'Edit Mode: Reload object data from before entering Edit Mode'] ,
|
||||
['U', 'UV Face Select: Automatic UV calculation menu'] ,
|
||||
['U', 'Vertex-/Weightpaint mode: Undo'] ,
|
||||
['CTRL-U', 'Save current state as user default'],
|
||||
['SHIFT-U', 'EditMode : Redo Menu'],
|
||||
['ALT-U', 'Edit Mode: Undo Menu']
|
||||
],
|
||||
['Ctrl-U', 'Save current state as user default'],
|
||||
['Shift-U', 'Edit Mode: Redo Menu'],
|
||||
['Alt-U', 'Edit Mode: Undo Menu'] ],
|
||||
|
||||
"V":[
|
||||
['V', 'Curves/Nurbs: Vector handle'] ,
|
||||
['V', 'Vertexpaint mode'] ,
|
||||
['ALT-V', "Scale object to match image texture's aspect ratio"] ,
|
||||
['SHIFT-V', 'Edit mode: Align view to selected vertices'] ],
|
||||
['V', 'Curves/Nurbs: Vector handle'],
|
||||
['V', 'Vertexpaint mode'],
|
||||
['V', 'UV Image Editor: Stitch UVs'],
|
||||
['Alt-V', "Scale object to match image texture's aspect ratio"],
|
||||
['Shift-V', 'Edit mode: Align view to selected vertices'],
|
||||
['Shift-V', 'UV Image Editor: Limited Stitch UVs popup'],
|
||||
],
|
||||
|
||||
"W":[
|
||||
['W', 'Boolean operations menu'] ,
|
||||
['W', 'Edit mode: Specials menu'] ,
|
||||
['CTRL-W', 'Save current file'] ,
|
||||
['CTRL-W', 'Nurbs: Switch direction'] ,
|
||||
['SHIFT-W', 'Warp/bend selected vertices around cursor'] ] ,
|
||||
['W', 'Object Mode: Boolean operations menu'],
|
||||
['W', 'Edit mode: Specials menu'],
|
||||
['W', 'UV Image Editor: Weld/Align'],
|
||||
['WX', 'UV Image Editor: Weld/Align X axis'],
|
||||
['WY', 'UV Image Editor: Weld/Align Y axis'],
|
||||
['Ctrl-W', 'Save current file'] ,
|
||||
['Ctrl-W', 'Nurbs: Switch direction'] ,
|
||||
['Shift-W', 'Warp/bend selected vertices around cursor'] ],
|
||||
|
||||
"X":[
|
||||
['X', 'Delete menu'] ,
|
||||
['CTRL-X', 'Restore default state (Erase all)'] ],
|
||||
['Ctrl-X', 'Restore default state (Erase all)'] ],
|
||||
|
||||
"Y":[
|
||||
['Y', 'Mesh: Split selected vertices/faces from the rest'] ],
|
||||
|
||||
"Z":[
|
||||
['Z', 'Render Window: 200% zoom from mouse position'],
|
||||
['Z', 'Switch 3d draw type : solide/ wireframe (see also D)'],
|
||||
['Alt-Z', 'Switch 3d draw type : solid / textured (see also D)'],
|
||||
['Ctrl-Z', 'Switch 3d draw type : shaded (see also D)'],
|
||||
['Shift-Z', 'Switch 3d draw type : shaded / wireframe (see also D)'],
|
||||
|
||||
]}]}
|
||||
|
||||
up=128
|
||||
down=129
|
||||
UP=0
|
||||
|
||||
for k in hotkeys.keys():
|
||||
hotkeys[k].append(Create(0))
|
||||
@ -343,7 +462,7 @@ def trace_rectangle3(r,c,c1):
|
||||
glCl3(c1[0],c1[1],c1[2])
|
||||
|
||||
def draw():
|
||||
global r,c,c1,hotkeys, hot, hotL
|
||||
global r,c,c1,hotkeys, hot, hotL, up, down, UP
|
||||
|
||||
size=Buffer(GL_FLOAT, 4)
|
||||
glGetFloatv(GL_SCISSOR_BOX, size)
|
||||
@ -351,76 +470,113 @@ def draw():
|
||||
|
||||
for s in [0,1,2,3]: size[s]=int(size[s])
|
||||
|
||||
c=[0.9,0.95,0.95,0.0]
|
||||
c1=[0.95,0.95,0.9,0.0]
|
||||
c=[0.75,0.75,0.75,0]
|
||||
c1=[0.6,0.6,0.6,0]
|
||||
|
||||
r=[0,size[3],size[2],0]
|
||||
trace_rectangle4(r,c)
|
||||
|
||||
c=[0.7,0.7,0.9,0.0]
|
||||
c=[0.64,0.64,0.64,0]
|
||||
c1=[0.95,0.95,0.9,0.0]
|
||||
|
||||
r=[0,size[3],size[2],size[3]-20]
|
||||
r=[0,size[3],size[2],size[3]-40]
|
||||
trace_rectangle4(r,c)
|
||||
|
||||
c1=[0.7,0.7,0.9,0.0]
|
||||
c=[0.2,0.2,0.4,0.0]
|
||||
c2=[0.87,0.87,0.95,0.0]
|
||||
c2=[0.71,0.71,0.71,0.0]
|
||||
|
||||
r=[0,size[3]-20,size[2],size[3]-44]
|
||||
trace_rectangle4(r,c)
|
||||
glColor3f(1, 1, 1)
|
||||
glRasterPos2f(42, size[3]-25)
|
||||
|
||||
glColor3f(0.1, 0.1, 0.15)
|
||||
glRasterPos2f(10, size[3]-16)
|
||||
|
||||
Text("HotKey")
|
||||
Text("HotKey and MouseAction Reference")
|
||||
|
||||
l=0
|
||||
listed=0
|
||||
Llisted=0
|
||||
size[3]=size[3]-18
|
||||
|
||||
for k in hot:
|
||||
hotkeys[k][-1]=Toggle(k, hot.index(k)+10, 4+(20*26)/6*hot.index(k), size[3]-(40), len(k)*8, 20, hotkeys[k][-1].val )
|
||||
#hotkeys[k][-1]=Toggle(k, hot.index(k)+10, 4+(20*26)/6*hot.index(k), size[3]-(42), len(k)*8, 20, hotkeys[k][-1].val )
|
||||
hotkeys[k][-1]=Toggle(k, hot.index(k)+10, 78*hot.index(k), size[3]-(47), 78, 24, hotkeys[k][-1].val )
|
||||
|
||||
l+=len(k)
|
||||
|
||||
if hotkeys[k][-1].val==1.0:
|
||||
listed=hot.index(k)
|
||||
#print listed
|
||||
l=0
|
||||
size[3]=size[3]-4
|
||||
if hot[listed]!='Letters ':
|
||||
for n in hotkeys[hot[listed]][:-1]:
|
||||
size[3]=size[3]-8
|
||||
SCROLL=size[3]/21
|
||||
END=-1
|
||||
if SCROLL < len(hotkeys[hot[listed]][:-1]):
|
||||
Button('/\\',up,4,size[3]+8,20,14,'Scroll up')
|
||||
Button('\\/',down,4,size[3]-8,20,14,'Scroll down')
|
||||
if (SCROLL+UP)<len(hotkeys[hot[listed]][:-1]):
|
||||
END=(UP+SCROLL)
|
||||
else:
|
||||
END=-1
|
||||
UP=len(hotkeys[hot[listed]][:-1])-SCROLL
|
||||
else :
|
||||
UP=0
|
||||
|
||||
for n in hotkeys[hot[listed]][:-1][UP:END]:
|
||||
|
||||
if l%2==0:
|
||||
r=[4,size[3]-(18*l+66),
|
||||
8+(21*26), size[3]-(46+18*l)]
|
||||
r=[0,size[3]-(21*l+66),
|
||||
size[2], size[3]-(21*l+43)]
|
||||
trace_rectangle4(r,c2)
|
||||
glColor3f(0.1, 0.1, 0.15)
|
||||
glRasterPos2f(4+8, size[3]-(58+18*l))
|
||||
glColor3f(0,0,0)
|
||||
glRasterPos2f(4+8, size[3]-(58+21*l))
|
||||
Text(n[0])
|
||||
glRasterPos2f(4+8*15, size[3]-(58+18*l))
|
||||
glRasterPos2f(4+8*15, size[3]-(58+21*l))
|
||||
Text(' : '+n[1])
|
||||
l+=1
|
||||
else:
|
||||
for k in hotL:
|
||||
pos=hotL.index(k)
|
||||
hotkeys['Letters '][0][k][-1]=Toggle(k,pos+20,4+hotL.index(k)*21, size[3]-(52+18), 20, 20, hotkeys['Letters '][0][k][-1].val )
|
||||
hotkeys['Letters '][0][k][-1]=Toggle(k,pos+20,hotL.index(k)*21, size[3]-(52+18), 21, 18, hotkeys['Letters '][0][k][-1].val )
|
||||
if hotkeys['Letters '][0][k][-1].val==1.0:
|
||||
Llisted=pos
|
||||
for n in hotkeys['Letters '][0][hotL[Llisted]][:-1]:
|
||||
|
||||
size[3]=size[3]-8
|
||||
|
||||
SCROLL=(size[3]-88)/21
|
||||
END=-1
|
||||
if SCROLL < len(hotkeys['Letters '][0][hotL[Llisted]]):
|
||||
Button('/\\',up,4,size[3]+8,20,14,'Scroll up')
|
||||
Button('\\/',down,4,size[3]-8,20,14,'Scroll down')
|
||||
if (UP+SCROLL)<len(hotkeys['Letters '][0][hotL[Llisted]]):
|
||||
END=(UP+SCROLL)
|
||||
else:
|
||||
END=-1
|
||||
UP=len(hotkeys['Letters '][0][hotL[Llisted]])-SCROLL
|
||||
else :
|
||||
UP=0
|
||||
|
||||
for n in hotkeys['Letters '][0][hotL[Llisted]][UP:END]:
|
||||
if l%2==0:
|
||||
r=[4,size[3]-(18*l+92),
|
||||
8+(21*26), size[3]-(74+18*l)]
|
||||
r=[4,size[3]-(21*l+92),
|
||||
size[2], size[3]-(69+21*l+1)]
|
||||
trace_rectangle4(r,c2)
|
||||
|
||||
glColor3f(0.1, 0.1, 0.15)
|
||||
glRasterPos2f(4+8, size[3]-(88+18*l))
|
||||
glRasterPos2f(4+8, (size[3]-(88+21*l))+3)
|
||||
Text(n[0])
|
||||
glRasterPos2f(4+8*15, size[3]-(88+18*l))
|
||||
glRasterPos2f(4+8*15, (size[3]-(88+21*l))+3)
|
||||
Text(' : '+n[1])
|
||||
l+=1
|
||||
|
||||
def event(evt, val):
|
||||
global hotkeys
|
||||
if ((evt== QKEY or evt== ESCKEY) and not val): Exit()
|
||||
global hotkeys, UP
|
||||
if ((evt== QKEY or evt== ESCKEY) and not val):
|
||||
Exit()
|
||||
|
||||
|
||||
def bevent(evt):
|
||||
global hotkeysmhot, hotL
|
||||
global hotkeysmhot, hotL, up,down,UP
|
||||
|
||||
if (evt== 1):
|
||||
Exit()
|
||||
|
||||
@ -428,14 +584,22 @@ def bevent(evt):
|
||||
for k in hot:
|
||||
if hot.index(k)+10!=evt:
|
||||
hotkeys[k][-1].val=0
|
||||
|
||||
UP=0
|
||||
Blender.Window.Redraw()
|
||||
|
||||
elif (evt in range(20,46,1)):
|
||||
for k in hotL:
|
||||
if hotL.index(k)+20!=evt:
|
||||
hotkeys['Letters '][0][k][-1].val=0
|
||||
|
||||
UP=0
|
||||
Blender.Window.Redraw()
|
||||
|
||||
elif (evt==up):
|
||||
UP+=1
|
||||
Blender.Window.Redraw()
|
||||
|
||||
elif (evt==down):
|
||||
if UP>0: UP-=1
|
||||
Blender.Window.Redraw()
|
||||
|
||||
Register(draw, event, bevent)
|
||||
|
@ -7,6 +7,70 @@ Group: 'Wizards'
|
||||
Tip: 'Set of object aligning, modifying tools'
|
||||
"""
|
||||
|
||||
__author__ = "Carlos López (klopez)"
|
||||
__url__ = ("elysiun", "Author's web page, http://klopes.tk",
|
||||
"Script's homepage, http://www.iespana.es/klopes/enchufes-guiri.htm",
|
||||
"Thread on elYsiun with links to English and Spanish webpage and pdf docs,\
|
||||
http://www.elysiun.com/forum/viewtopic.php?t=25736")
|
||||
__version__ = "3.1"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This Wizard script contains customizable tools to align and modify mesh
|
||||
objects.
|
||||
|
||||
Edited freely from a post by the author to elYsiun (last link button above):
|
||||
|
||||
These tools are initially oriented as a help for the general design of objects
|
||||
in 2D and 3D (architecture, industrial...), and this is the paradigm the
|
||||
program will be developed around.
|
||||
|
||||
The utilities in the program are separated in 4 areas, accessible through the
|
||||
top menu in the GUI:
|
||||
|
||||
- Alignment:<br>
|
||||
+ fitting an object between two others;<br>
|
||||
+ setting to an object the absolute size of another one;<br>
|
||||
+ aligning selected objects, according to several criteria: location,
|
||||
rotation, scale (scale can be changed either additive or multiplicatively);<br>
|
||||
+ location separation can be referenced either by centers, baricenters,
|
||||
origins or limits.
|
||||
|
||||
- Object creation:<br>
|
||||
+ circunference passing through 3 points;<br>
|
||||
+ arc passing through 3 points;<br>
|
||||
+ arc based on angles and radius (interactive).
|
||||
|
||||
- Mesh modification (affects vertices, faces and edges):<br>
|
||||
+ edges subdivision in any number of parts;<br>
|
||||
+ projection onto an arbitrary plane, in an arbitrary direction;<br>
|
||||
+ transformation of position, rotation, scale values (new matrix) of an
|
||||
object, though it looks unaffected.
|
||||
|
||||
- 3D objects modifications (affects transform matrices):<br>
|
||||
+ translating / rotating / scaling randomly the selected objects;<br>
|
||||
+ moving selected objects closer or away from the active one, setting them at
|
||||
a fixed distance or translating by a fixed or proportional value.
|
||||
|
||||
Notes:<br>
|
||||
All numeric / vectorial values used during the program can be copied and
|
||||
pasted with the help of a buffer, which can contain: a position vector, an
|
||||
Euler list or a scaling vector and can store: numbers entered by user, values
|
||||
acquired from objects (matrices averages, distances, differences of position or
|
||||
rotation angles between two objects). Buffer contents can also be pasted to
|
||||
the console window as text.
|
||||
|
||||
Usage:
|
||||
|
||||
Open the script from the "Scripts->Wizards" menu of the Scripts window, then
|
||||
one choose from the available languages. The script has a GUI where specific
|
||||
tools can be selected and configured before being applied.
|
||||
|
||||
Notes:<br>
|
||||
Kloputils has many useful tools. To get a better idea of what it can do,
|
||||
besides reading the tooltips for each button, users can check its online
|
||||
documentation.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
##################################################
|
||||
|
@ -3,10 +3,34 @@
|
||||
"""
|
||||
Name: 'Blender Knife Tool'
|
||||
Blender: 232
|
||||
Group: 'Mesh'
|
||||
Group: 'Object'
|
||||
Tooltip: 'Cut selected mesh(es) along an active plane w/o creating doubles'
|
||||
"""
|
||||
|
||||
__author__ = ["Stefano <S68> Selleri", "Wim Van Hoydonck"]
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "0.0.8a 03/31/04"
|
||||
|
||||
__bpydoc__ = """\
|
||||
"Blender Knife Tool" uses the active mesh plane to cut all selected meshes.
|
||||
|
||||
Usage:
|
||||
|
||||
Create, resize and position a "cutting plane", which will be used to cut
|
||||
the mesh(es), then:
|
||||
|
||||
- select mesh(es) to be cut;<br>
|
||||
- select cutting plane (it will be the active object);<br>
|
||||
- run this script from 3d View's "Object->Scripts" menu.
|
||||
|
||||
Options:
|
||||
|
||||
- edit object: knife creates new vertices in the selected mesh(es);<br>
|
||||
- create new object: knife duplicates objects and creates new vertices in the
|
||||
new objects;<br>
|
||||
- create two new objects: knife creates two new separate objects.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
###################################################################
|
||||
|
@ -7,6 +7,19 @@ Group: 'Export'
|
||||
Tooltip: 'Export selected meshes to LightWave File Format (.lwo)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports meshes to LightWave file format.
|
||||
|
||||
Usage:
|
||||
|
||||
Select meshes to be exported and run this script from "File->Export" menu.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -7,6 +7,20 @@ Group: 'Import'
|
||||
Tooltip: 'Import LightWave Object File Format (.lwo)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script imports LightWave files to Blender.
|
||||
|
||||
Usage:
|
||||
|
||||
Execute this script from the "File->Import" menu and choose a LightWave file to
|
||||
open.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -7,6 +7,20 @@ Group: 'Export'
|
||||
Tooltip: 'Export selected mesh to Nendo File Format (*.ndo)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports meshes to Nendo file format.
|
||||
|
||||
Usage:
|
||||
|
||||
Select meshes to be exported and run this script from "File->Export" menu.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -7,6 +7,21 @@ Group: 'Import'
|
||||
Tooltip: 'Import Nendo Object File Format (.ndo)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script imports Nendo files to Blender.
|
||||
|
||||
Usage:
|
||||
|
||||
Execute this script from the "File->Import" menu and choose a Nendo file to
|
||||
open.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -7,6 +7,26 @@ Group: 'Object'
|
||||
Tip: 'Copy data from active object to other selected ones.'
|
||||
"""
|
||||
|
||||
__author__ = "Jean-Michel Soler (jms)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Script's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_lampdatacopier.htm",
|
||||
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "0.1.1"
|
||||
|
||||
__bpydoc__ = """\
|
||||
Use "Data Copier" to copy attributes from the active object to other selected ones of
|
||||
its same type.
|
||||
|
||||
This script is still in an early version but is already useful for copying
|
||||
attributes for some types of objects like lamps and cameras.
|
||||
|
||||
Usage:
|
||||
|
||||
Select the objects that will be updated, select the object whose data will
|
||||
be copied (they must all be of the same type, of course), then run this script.
|
||||
Toggle the buttons representing the attributes to be copied and press "Copy".
|
||||
"""
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Object DATA copier 0.1.1
|
||||
# (c) 2004 jean-michel soler
|
||||
|
@ -7,6 +7,19 @@ Group: 'Export'
|
||||
Tooltip: 'Save a Wavefront OBJ File'
|
||||
"""
|
||||
|
||||
__author__ = "Campbell Barton"
|
||||
__url__ = ["blender", "elysiun"]
|
||||
__version__ = "0.9"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script is an exporter to OBJ file format.
|
||||
|
||||
Usage:
|
||||
|
||||
Run this script from "File->Export" menu to export all meshes.
|
||||
"""
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# OBJ Export v0.9 by Campbell Barton (AKA Ideasman)
|
||||
# --------------------------------------------------------------------------
|
||||
|
@ -7,6 +7,18 @@ Group: 'Import'
|
||||
Tooltip: 'Load a Wavefront OBJ File'
|
||||
"""
|
||||
|
||||
__author__ = "Campbell Barton"
|
||||
__url__ = ["blender", "elysiun"]
|
||||
__version__ = "0.9"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script imports OBJ files to Blender.
|
||||
|
||||
Usage:
|
||||
|
||||
Run this script from "File->Import" menu and then load the desired OBJ file.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
|
@ -7,6 +7,19 @@ Group: 'Export'
|
||||
Tooltip: 'Export selected mesh to Object File Format (*.off)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports meshes to Object File Format.
|
||||
|
||||
Usage:
|
||||
|
||||
Select meshes to be exported and run this script from "File->Export" menu.
|
||||
"""
|
||||
|
||||
# +---------------------------------------------------------+
|
||||
# | Copyright (c) 2002 Anthony D'Agostino |
|
||||
# | http://www.redrival.com/scorpius |
|
||||
|
@ -7,6 +7,21 @@ Group: 'Import'
|
||||
Tooltip: 'Import Object File Format (*.off)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script imports Object File Format files to Blender.
|
||||
|
||||
Usage:
|
||||
|
||||
Execute this script from the "File->Import" menu and choose an OFF file to
|
||||
open.
|
||||
"""
|
||||
|
||||
|
||||
# +---------------------------------------------------------+
|
||||
# | Copyright (c) 2002 Anthony D'Agostino |
|
||||
# | http://www.redrival.com/scorpius |
|
||||
|
@ -12,6 +12,35 @@ Submenu: 'Postscript (.eps/.ps) PS-Adobe-2.0' EPS
|
||||
Tip: 'Import a path from any of a set of formats (still experimental)'
|
||||
"""
|
||||
|
||||
__author__ = "Jean-Michel Soler (jms)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"AI importer's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_import_ai.htm",
|
||||
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "0.1.1"
|
||||
|
||||
__bpydoc__ = """\
|
||||
Paths Import imports paths from a selection of different formats:
|
||||
|
||||
- Gimp 1.0 -> 1.2.5;<br>
|
||||
- Gimp 2.0;<br>
|
||||
- AI PS-Adobe 2.0;<br>
|
||||
- Inkscape (svg);<br>
|
||||
- Postscript (ps/eps)
|
||||
|
||||
Usage:
|
||||
Run the script from "File->Import", select the desired format from the
|
||||
pop-up menu and select the file to open.
|
||||
|
||||
Notes:<br>
|
||||
Mac AI files have different line endings. The author wrote a version of
|
||||
the importer that supports them, check forum or site links above.
|
||||
"""
|
||||
|
||||
#----------------------------------------------
|
||||
# (c) jm soler juillet 2004, released under Blender Artistic Licence
|
||||
# for the Blender 2.34 Python Scripts Bundle.
|
||||
#----------------------------------------------
|
||||
|
||||
import Blender
|
||||
|
||||
argv=__script__['arg']
|
||||
|
@ -7,6 +7,20 @@ Group: 'Export'
|
||||
Tooltip: 'Export selected mesh (with vertex colors) to Radiosity File Format (.radio)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports meshes to Radiosity file format.
|
||||
|
||||
Usage:
|
||||
|
||||
Select meshes to be exported and run this script from "File->Export" menu.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -7,6 +7,21 @@ Group: 'Import'
|
||||
Tooltip: 'Import Radiosity File Format (.radio) with vertex colors'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script imports Radiosity files to Blender.
|
||||
|
||||
Usage:
|
||||
|
||||
Execute this script from the "File->Import" menu and choose a Radiosity file to
|
||||
open.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -7,6 +7,20 @@ Group: 'Export'
|
||||
Tooltip: 'Export selected mesh to Raw Triangle Format (.raw)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports meshes to Raw Triangle file format.
|
||||
|
||||
Usage:
|
||||
|
||||
Select meshes to be exported and run this script from "File->Export" menu.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -7,6 +7,21 @@ Group: 'Import'
|
||||
Tooltip: 'Import Raw Triangle File Format (.raw)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script imports Raw Triangle File format files to Blender.
|
||||
|
||||
Usage:
|
||||
|
||||
Execute this script from the "File->Import" menu and choose a Raw file to
|
||||
open.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -7,6 +7,22 @@ Group: 'Object'
|
||||
Tip: 'GUI to select and rename objects.'
|
||||
"""
|
||||
|
||||
__author__ = "Jean-Michel Soler (jms)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Script's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_renameobjectgui.htm",
|
||||
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "233"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script offers a GUI to rename selected objects according to a given
|
||||
rule.
|
||||
|
||||
Usage:
|
||||
|
||||
Open it from the 3d View's "Object->Scripts" menu and select the objects to
|
||||
rename and the rule from the buttons in its GUI.
|
||||
"""
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Name OBJECT changer
|
||||
# (c) 2004 jean-michel soler
|
||||
|
@ -7,6 +7,25 @@ Group: 'Mesh'
|
||||
Tip: 'Copy deform data (not surf. subdiv) of active obj to rvk of the 2nd selected obj'
|
||||
"""
|
||||
|
||||
__author__ = "Jean-Michel Soler (jms)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Script's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_rvk1versrvk2.htm",
|
||||
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "2004/05"
|
||||
|
||||
__bpydoc__ = """\
|
||||
"RVK1 to RVK2" copies deform data (except surface subdivision) of the active
|
||||
object to the RVK (relative vertex key) of the other selected object.
|
||||
|
||||
Usage:
|
||||
|
||||
Select the object that will receive the rvk info, then select the deformed
|
||||
object, enter Edit Mode and run this script from the "Mesh->Scripts" menu of
|
||||
the 3d View. If the active object has subsurf turned on and nonzero subdiv
|
||||
level, the script will ask if it should change that. Before copying data to
|
||||
the rvk it will also ask whether it should replace or add a new vertex group.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
#----------------------------------------------
|
||||
@ -104,7 +123,7 @@ def rvk2rvk():
|
||||
|
||||
Blender.Redraw()
|
||||
except:
|
||||
Draw.PupMenu('Error| You need to select two meshes.')
|
||||
Draw.PupMenu('Error%t|You need to select two meshes.')
|
||||
|
||||
|
||||
Blender.Window.EditMode(0)
|
||||
|
@ -3,10 +3,39 @@
|
||||
"""
|
||||
Name: 'Save Current Theme'
|
||||
Blender: 234
|
||||
Group: 'Help'
|
||||
Group: 'Export'
|
||||
Tooltip: 'Save current theme as a bpython script'
|
||||
"""
|
||||
|
||||
__author__ = "Willian P. Germano"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0 11/05/04"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script saves the current Theme in Blender as a Blender Python script.
|
||||
|
||||
Usage:
|
||||
|
||||
Use Blender's Theme tab in the User Preferences window to create and name your
|
||||
theme, then run this script from the File->Export menu to save it.
|
||||
|
||||
It is saved as a bpython script, meaning that you can simply run it to change
|
||||
the current theme. By default it is currently saved under the
|
||||
"Misc" group, available only from the Scripts window "Scripts->Misc" menu.
|
||||
|
||||
To appear in the menu, a theme saved with this script must be put in your
|
||||
Blender's scripts dir, that's what happens by default when you save one by
|
||||
yourself. If you don't know where this dir is, running
|
||||
|
||||
import Blender<br>print Blender.Get("scriptsdir")
|
||||
|
||||
on the Text Editor window (use menu or ALT+P to run it) will write the path on
|
||||
the console.
|
||||
|
||||
Remember to edit your exported theme's source file to put your name and
|
||||
some information on it before sharing it with others.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
@ -29,6 +58,7 @@ theme = Theme.Get()[0] # get current theme
|
||||
# default filename: theme's name + '_theme.py' in user's scripts dir:
|
||||
default_fname = Blender.Get("scriptsdir")
|
||||
default_fname = Blender.sys.join(default_fname, theme.name + '_theme.py')
|
||||
default_fname = default_fname.replace(' ','_')
|
||||
|
||||
def write_theme(filename):
|
||||
"Write the current theme as a bpython script"
|
||||
@ -39,11 +69,22 @@ def write_theme(filename):
|
||||
|
||||
fout.write("""#!BPY
|
||||
|
||||
\"\"\"
|
||||
Name: '%s'
|
||||
Blender: 234
|
||||
Group: 'Theme'
|
||||
Tooltip: 'Change current theme'
|
||||
# \"\"\"
|
||||
# Name: '%s'
|
||||
# Blender: 234
|
||||
# Group: 'Theme'
|
||||
# Tooltip: 'Change current theme'
|
||||
# \"\"\"
|
||||
|
||||
__%s__ = "????"
|
||||
__%s__ = "1.0"
|
||||
__%s__ = [""]
|
||||
__%s__ = \"\"\"\\
|
||||
You can edit this section to write something about your script that can
|
||||
be read then with the Scripts Help Browser script in Blender.
|
||||
|
||||
Remember to also set author, version and possibly url(s) above. You can also
|
||||
define an __email__ tag, check some bundled script's source for examples.
|
||||
\"\"\"
|
||||
|
||||
# This script was automatically generated by the save_theme.py bpython script.
|
||||
@ -55,7 +96,7 @@ import Blender
|
||||
from Blender.Window import Theme
|
||||
|
||||
theme = Theme.New('%s')
|
||||
""" % (theme.name, theme.name))
|
||||
""" % (theme.name, "author", "version", "url", "bpydoc", theme.name))
|
||||
|
||||
for tsp in theme.get(): #
|
||||
command = "\n%s = theme.get('%s')" % (tsp, tsp)
|
||||
|
@ -7,6 +7,38 @@ Group: 'UV'
|
||||
Tooltip: 'Select faces if attributes match the active'
|
||||
"""
|
||||
|
||||
__author__ = "Campbell Barton"
|
||||
__url__ = ["blender", "elysiun"]
|
||||
__version__ = "1.0"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script selects faces matching a given attribute of the currently
|
||||
active face.
|
||||
|
||||
Usage:
|
||||
|
||||
Enter "UV Face Select" mode and make the desired face active. Then run this
|
||||
script and choose the selection rule: by same (or similar for some itens):
|
||||
|
||||
- material;<br>
|
||||
- texture image;<br>
|
||||
- mode;<br>
|
||||
- vertex colors;<br>
|
||||
- uv coordinates;<br>
|
||||
- area;<br>
|
||||
- proportions;<br>
|
||||
- normal vector;<br>
|
||||
- co-planar.
|
||||
|
||||
Another menu will ask if the script should add, subtract, overwrite or
|
||||
overwrite inverse of current current selection. For some choices like vcolors,
|
||||
area, etc., a pop-up will ask for a maximum threshold value.
|
||||
|
||||
Notes:<br>
|
||||
Again, to select / deselect faces, enter "UV Face Select" mode. This is not
|
||||
the same as selecting faces in edit mode (new feature in Blender 2.35).
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
#===============================================#
|
||||
|
@ -11,6 +11,22 @@ Submenu: 'Loft-segment - even method' B2
|
||||
Tooltip: 'Select 2 or more vert loops, then run this script'
|
||||
"""
|
||||
|
||||
__author__ = "Campbell Barton"
|
||||
__url__ = ["blender", "elysiun"]
|
||||
__version__ = "1.0 2004/04/25"
|
||||
|
||||
__bpydoc__ = """\
|
||||
With this script vertex loops can be skinned: faces are created to connect the
|
||||
selected loops of vertices.
|
||||
|
||||
Usage:
|
||||
|
||||
In mesh Edit mode select the vertices of the loops (closed paths / curves of
|
||||
vertices: circles, for example) that should be skinned, then run this script.
|
||||
A pop-up will provide further options, if the results of a method are not adequate try one of the others.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
|
@ -7,6 +7,20 @@ Group: 'Import'
|
||||
Tooltip: 'Import Pro Engineer (.slp) File Format'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script imports Pro Engineer files to Blender.
|
||||
|
||||
Usage:
|
||||
|
||||
Execute this script from the "File->Import" menu and choose an SLP file to
|
||||
open.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!BPY
|
||||
|
||||
"""
|
||||
Name: 'System Information...'
|
||||
Blender: 234
|
||||
@ -6,10 +7,24 @@ Group: 'HelpSystem'
|
||||
Tooltip: 'Information about your Blender environment, useful to diagnose problems.'
|
||||
"""
|
||||
|
||||
__author__ = "Willian P. Germano"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.0"
|
||||
__bpydoc__ = """\
|
||||
This script creates a text in Blender's Text Editor with information
|
||||
about your OS, video card, OpenGL driver, Blender and Python versions and
|
||||
more.
|
||||
|
||||
If you are experiencing trouble running Blender or its scripts in general,
|
||||
this information can be useful for online searches (like checking if there
|
||||
are known issues related to your video card) or to get help from other users
|
||||
or the program's developers.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
# sysinfo.py version 0.1 Jun 09, 2004
|
||||
# sysinfo.py version 1.0 Jun 09, 2004
|
||||
# --------------------------------------------------------------------------
|
||||
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||
#
|
||||
@ -85,13 +100,12 @@ for p in sys.path:
|
||||
output.write(p + '\n')
|
||||
|
||||
output.write("\n- Default folder for registered scripts:\n\n")
|
||||
scriptsdir = Blender.Get("datadir")
|
||||
if scriptsdir:
|
||||
scriptsdir = scriptsdir.replace("/bpydata","/scripts")
|
||||
output.write(scriptsdir)
|
||||
else:
|
||||
scriptsdir = Blender.Get("scriptsdir")
|
||||
if not scriptsdir:
|
||||
output.write("<WARNING> -- not found")
|
||||
warnings += 1
|
||||
else:
|
||||
output.write(scriptsdir)
|
||||
|
||||
missing_mods = [] # missing basic modules
|
||||
|
||||
@ -143,7 +157,7 @@ if (warnings):
|
||||
output.write("\n(*) Found %d warning" % warnings)
|
||||
if (warnings > 1): output.write("s") # (blush)
|
||||
output.write(", documented in the text above.")
|
||||
else: output.write("\n==\nNo problems were found.")
|
||||
else: output.write("\n==\nNo problems were found (scroll up for details).")
|
||||
|
||||
Blender.Window.WaitCursor(0)
|
||||
exitmsg = "Done!|Please check the text %s in the Text Editor window" % output.name
|
||||
|
@ -7,6 +7,31 @@ Group: 'UV'
|
||||
Tooltip: 'Procedural to uvmapped texture baker'
|
||||
"""
|
||||
|
||||
__author__ = "Jean-Michel Soler (jms)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Script online, http://jmsoler.free.fr/util/blenderfile/py/text2uvbaker.py",
|
||||
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "0.2.2 2004/08/01"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script "bakes" Blender procedural materials (including textures): it saves
|
||||
them as 2d uv-mapped images.
|
||||
|
||||
This script saves an uv texture layout of the chosen mesh, that can be used as
|
||||
an uv map for it. It is a way to export procedurals from Blender as normal
|
||||
image textures that can be edited with a 2d image manipulation program or used
|
||||
with the mesh in games and other 3d applications.
|
||||
|
||||
Usage:
|
||||
|
||||
a) Enter face mode and define uv coordinates for your mesh;<br>
|
||||
b) Define its materials and textures and set "Map Input" coordinates to UV;
|
||||
c) Run this script and check the console.
|
||||
|
||||
Notes:<br>
|
||||
This script was based on a suggestion by Martin (Theeth) Poirier;<br>
|
||||
"""
|
||||
|
||||
#---------------------------------------------
|
||||
# Last release : 0.2.2 , 2004/08/01 , 22h13
|
||||
#---------------------------------------------
|
||||
|
@ -7,6 +7,20 @@ Group: 'Export'
|
||||
Tooltip: 'Export selected meshes to TrueSpace File Format (.cob)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports meshes to TrueSpace file format.
|
||||
|
||||
Usage:
|
||||
|
||||
Select meshes to be exported and run this script from "File->Export" menu.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -7,6 +7,20 @@ Group: 'Import'
|
||||
Tooltip: 'Import TrueSpace Object File Format (.cob)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script imports TrueSpace files to Blender.
|
||||
|
||||
Usage:
|
||||
|
||||
Execute this script from the "File->Import" menu and choose a TrueSpace file to
|
||||
open.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -6,6 +6,29 @@ Group: 'Mesh'
|
||||
Tip: 'Unweld all faces from a selected and common vertex. Made vertex bevelling'
|
||||
"""
|
||||
|
||||
__author__ = "Jean-Michel Soler (jms)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Script's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_faces2vertex.htm#exemple",
|
||||
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "0.4.4 beta"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script unwelds faces from a selected vertex.
|
||||
|
||||
There's also experimental support for static or dynamic (move mouse in the
|
||||
Scripts window) vertex bevel.
|
||||
|
||||
Usage:
|
||||
|
||||
Select a vertex, then run this script. Its options are:
|
||||
|
||||
- unbind points;<br>
|
||||
- with noise;<br>
|
||||
- middle face;<br>
|
||||
- static bevel vertex;<br>
|
||||
- moving bevel vertex;
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# ------------------------------------------
|
||||
|
@ -7,6 +7,29 @@ Group: 'UV'
|
||||
Tooltip: 'Export the UV face layout of the selected object to a .TGA file'
|
||||
"""
|
||||
|
||||
__author__ = "Martin (Theeth) Poirier"
|
||||
__url__ = ("blender", "elysiun")
|
||||
__version__ = "1.3a"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports the UV face layout of the selected mesh object to
|
||||
a TGA image file. Then you can, for example, paint details in this image using
|
||||
an external 2d paint program of your choice and bring it back to be used as a
|
||||
texture for the mesh.
|
||||
|
||||
Usage:
|
||||
|
||||
Open this script from UV/Image Editor's "UVs" menu, make sure there is a mesh
|
||||
selected, define size and wire size parameters and push "Export" button.
|
||||
|
||||
There are more options to configure, like setting export path, if image should
|
||||
use object's name and more.
|
||||
|
||||
Notes:<br>
|
||||
Jean-Michel Soler (jms) wrote TGA functions used by this script.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
|
@ -7,6 +7,20 @@ Group: 'Export'
|
||||
Tooltip: 'Export selected mesh to VideoScape File Format (.obj)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports meshes (including vertex colors) to VideoScape File Format.
|
||||
|
||||
Usage:
|
||||
|
||||
Select meshes to be exported and run this script from "File->Export" menu.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -7,6 +7,21 @@ Group: 'Export'
|
||||
Tooltip: 'Export selected mesh to Wings3D File Format (.wings)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius",
|
||||
"Wings 3D, http://www.wings3d.com")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports meshes to Wings 3D file format.
|
||||
|
||||
Usage:
|
||||
|
||||
Select meshes to be exported and run this script from "File->Export" menu.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -7,6 +7,21 @@ Group: 'Import'
|
||||
Tooltip: 'Import Wings3D File Format (.wings)'
|
||||
"""
|
||||
|
||||
__author__ = "Anthony D'Agostino (Scorpius)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Author's homepage, http://www.redrival.com/scorpius",
|
||||
"Wings 3D, http://www.wings3d.com")
|
||||
__version__ = "Part of IOSuite 0.5"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script imports Wings 3d files to Blender.
|
||||
|
||||
Usage:
|
||||
|
||||
Execute this script from the "File->Import" menu and choose a Wings file to
|
||||
open.
|
||||
"""
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# +---------------------------------------------------------+
|
||||
|
@ -8,6 +8,32 @@ Submenu: 'Selected Objects...' selected
|
||||
Tooltip: 'Export to VRML2 (.wrl) file.'
|
||||
"""
|
||||
|
||||
__author__ = ("Rick Kimball", "Ken Miller", "Steve Matthews")
|
||||
__url__ = ["blender", "elysiun",
|
||||
"Author's (Rick) homepage, http://kimballsoftware.com/blender",
|
||||
"Show your VRML world at vrmlworld.net, http://vrmlworld.net"]
|
||||
__version__ = "2004/01/19"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script exports to VRML 2.0 format.
|
||||
|
||||
Usage:
|
||||
|
||||
Run this script from "File->Export" menu. A pop-up will ask whether you
|
||||
want to export only selected or all relevant objects.
|
||||
|
||||
Known issues:<br>
|
||||
Doesn't handle multiple materials (don't use material indices);<br>
|
||||
Doesn't handle multiple UV textures on a single mesh (create a mesh
|
||||
for each texture);<br>
|
||||
Material colors need work;<br>
|
||||
Spotlight softness needs work;<br>
|
||||
Can't get the texture array associated with material * not the UV ones;<br>
|
||||
Can't set smoothing, crease angle and mesh smoothing * setting not
|
||||
accessible.
|
||||
"""
|
||||
|
||||
|
||||
# $Id$
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user