svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r20855:20928
Sequencer changes from source/blender/src coming next
This commit is contained in:
commit
a1cf7988c1
@ -608,6 +608,10 @@
|
||||
<Filter
|
||||
Name="TEX_nodes"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\..\source\blender\nodes\intern\TEX_nodes\TEX_at.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\source\blender\nodes\intern\TEX_nodes\TEX_bricks.c"
|
||||
>
|
||||
|
@ -1,6 +1,6 @@
|
||||
#dxfLibrary.py : provides functions for generating DXF files
|
||||
# --------------------------------------------------------------------------
|
||||
__version__ = "v1.32 - 2009.06.06"
|
||||
__version__ = "v1.33 - 2009.06.16"
|
||||
__author__ = "Stani Michiels(Stani), Remigiusz Fiedler(migius)"
|
||||
__license__ = "GPL"
|
||||
__url__ = "http://wiki.blender.org/index.php/Scripts/Manual/Export/autodesk_dxf"
|
||||
@ -20,8 +20,14 @@ IDEAs:
|
||||
TODO:
|
||||
- add support for DXFr14 (needs extended file header)
|
||||
- add support for SPLINEs (possible first in DXFr14 version)
|
||||
- add user preset for floating point precision (3-16?)
|
||||
|
||||
History
|
||||
v1.33 - 2009.06.16 by migius
|
||||
- modif _point(): converts all coords to floats
|
||||
- modif LineType class: implement elements
|
||||
- added VPORT class, incl. defaults
|
||||
- fix Insert class
|
||||
v1.32 - 2009.06.06 by migius
|
||||
- modif Style class: changed defaults to widthFactor=1.0, obliqueAngle=0.0
|
||||
- modif Text class: alignment parameter reactivated
|
||||
@ -88,7 +94,7 @@ _HEADER_POINTS=['insbase','extmin','extmax']
|
||||
def _point(x,index=0):
|
||||
"""Convert tuple to a dxf point"""
|
||||
#print 'deb: _point=', x #-------------
|
||||
return '\n'.join([' %s\n%s'%((i+1)*10+index,x[i]) for i in range(len(x))])
|
||||
return '\n'.join([' %s\n%s'%((i+1)*10+index,float(x[i])) for i in range(len(x))])
|
||||
|
||||
def _points(plist):
|
||||
"""Convert a list of tuples to dxf points"""
|
||||
@ -137,8 +143,8 @@ class _Entity(_Call):
|
||||
if parent.layer!=None: result+=' 8\n%s\n'%parent.layer
|
||||
if parent.color!=None: result+=' 62\n%s\n'%parent.color
|
||||
if parent.lineType!=None: result+=' 6\n%s\n'%parent.lineType
|
||||
#TODO: if parent.lineWeight!=None: result+='370\n%s\n'%parent.lineWeight
|
||||
#TODO: if parent.visible!=None: result+='60\n%s\n'%parent.visible
|
||||
# TODO: if parent.lineWeight!=None: result+='370\n%s\n'%parent.lineWeight
|
||||
# TODO: if parent.visible!=None: result+='60\n%s\n'%parent.visible
|
||||
if parent.lineTypeScale!=None: result+=' 48\n%s\n'%parent.lineTypeScale
|
||||
if parent.elevation!=None: result+=' 38\n%s\n'%parent.elevation
|
||||
if parent.thickness!=None: result+=' 39\n%s\n'%parent.thickness
|
||||
@ -287,7 +293,7 @@ class Insert(_Entity):
|
||||
self.rotation=rotation
|
||||
|
||||
def __str__(self):
|
||||
result=' 0\nINSERT\n 2\n%s\n%s\n%s\n'%\
|
||||
result=' 0\nINSERT\n 2\n%s\n%s%s\n'%\
|
||||
(self.name,self._common(),_point(self.point))
|
||||
if self.xscale!=None:result+=' 41\n%s\n'%self.xscale
|
||||
if self.yscale!=None:result+=' 42\n%s\n'%self.yscale
|
||||
@ -383,7 +389,7 @@ class Point(_Entity):
|
||||
def __init__(self,points=None,**common):
|
||||
_Entity.__init__(self,**common)
|
||||
self.points=points
|
||||
def __str__(self): #TODO:
|
||||
def __str__(self): # TODO:
|
||||
return ' 0\nPOINT\n%s%s\n' %(self._common(),
|
||||
_points(self.points)
|
||||
)
|
||||
@ -515,7 +521,7 @@ class Block(_Collection):
|
||||
self.name=name
|
||||
self.flag=0
|
||||
self.base=base
|
||||
def __str__(self): #TODO:
|
||||
def __str__(self): # TODO:
|
||||
e=''.join([str(x)for x in self.entities])
|
||||
return ' 0\nBLOCK\n 8\n%s\n 2\n%s\n 70\n%s\n%s\n 3\n%s\n%s 0\nENDBLK\n'%\
|
||||
(self.layer,self.name.upper(),self.flag,_point(self.base),self.name.upper(),e)
|
||||
@ -535,15 +541,22 @@ class Layer(_Call):
|
||||
#-----------------------------------------------
|
||||
class LineType(_Call):
|
||||
"""Custom linetype"""
|
||||
def __init__(self,name='continuous',description='Solid line',elements=[],flag=64):
|
||||
# TODO: Implement lineType elements
|
||||
def __init__(self,name='CONTINUOUS',description='Solid line',elements=[0.0],flag=0):
|
||||
self.name=name
|
||||
self.description=description
|
||||
self.elements=copy.copy(elements)
|
||||
self.flag=flag
|
||||
def __str__(self):
|
||||
return ' 0\nLTYPE\n 2\n%s\n 70\n%s\n 3\n%s\n 72\n65\n 73\n%s\n 40\n0.0\n'%\
|
||||
(self.name.upper(),self.flag,self.description,len(self.elements))
|
||||
result = ' 0\nLTYPE\n 2\n%s\n 70\n%s\n 3\n%s\n 72\n65\n'%\
|
||||
(self.name.upper(),self.flag,self.description)
|
||||
if self.elements:
|
||||
elements = ' 73\n%s\n' %(len(self.elements)-1)
|
||||
elements += ' 40\n%s\n' %(self.elements[0])
|
||||
for e in self.elements[1:]:
|
||||
elements += ' 49\n%s\n' %e
|
||||
result += elements
|
||||
return result
|
||||
|
||||
|
||||
#-----------------------------------------------
|
||||
class Style(_Call):
|
||||
@ -566,27 +579,137 @@ class Style(_Call):
|
||||
self.font.upper(),self.bigFont.upper())
|
||||
|
||||
#-----------------------------------------------
|
||||
class View(_Call):
|
||||
def __init__(self,name,flag=0,width=1,height=1,center=(0.5,0.5),
|
||||
direction=(0,0,1),target=(0,0,0),lens=50,
|
||||
frontClipping=0,backClipping=0,twist=0,mode=0):
|
||||
class VPort(_Call):
|
||||
def __init__(self,name,flag=0,
|
||||
leftBottom=(0.0,0.0),
|
||||
rightTop=(1.0,1.0),
|
||||
center=(0.5,0.5),
|
||||
snap_base=(0.0,0.0),
|
||||
snap_spacing=(0.1,0.1),
|
||||
grid_spacing=(0.1,0.1),
|
||||
direction=(0.0,0.0,1.0),
|
||||
target=(0.0,0.0,0.0),
|
||||
height=1.0,
|
||||
ratio=1.0,
|
||||
lens=50,
|
||||
frontClipping=0,
|
||||
backClipping=0,
|
||||
snap_rotation=0,
|
||||
twist=0,
|
||||
mode=0,
|
||||
circle_zoom=100,
|
||||
fast_zoom=1,
|
||||
ucsicon=1,
|
||||
snap_on=0,
|
||||
grid_on=0,
|
||||
snap_style=0,
|
||||
snap_isopair=0
|
||||
):
|
||||
self.name=name
|
||||
self.flag=flag
|
||||
self.width=width
|
||||
self.height=height
|
||||
self.leftBottom=leftBottom
|
||||
self.rightTop=rightTop
|
||||
self.center=center
|
||||
self.snap_base=snap_base
|
||||
self.snap_spacing=snap_spacing
|
||||
self.grid_spacing=grid_spacing
|
||||
self.direction=direction
|
||||
self.target=target
|
||||
self.height=float(height)
|
||||
self.ratio=float(ratio)
|
||||
self.lens=float(lens)
|
||||
self.frontClipping=float(frontClipping)
|
||||
self.backClipping=float(backClipping)
|
||||
self.snap_rotation=float(snap_rotation)
|
||||
self.twist=float(twist)
|
||||
self.mode=mode
|
||||
self.circle_zoom=circle_zoom
|
||||
self.fast_zoom=fast_zoom
|
||||
self.ucsicon=ucsicon
|
||||
self.snap_on=snap_on
|
||||
self.grid_on=grid_on
|
||||
self.snap_style=snap_style
|
||||
self.snap_isopair=snap_isopair
|
||||
def __str__(self):
|
||||
output = [' 0', 'VPORT',
|
||||
' 2', self.name,
|
||||
' 70', self.flag,
|
||||
_point(self.leftBottom),
|
||||
_point(self.rightTop,1),
|
||||
_point(self.center,2), # View center point (in DCS)
|
||||
_point(self.snap_base,3),
|
||||
_point(self.snap_spacing,4),
|
||||
_point(self.grid_spacing,5),
|
||||
_point(self.direction,6), #view direction from target (in WCS)
|
||||
_point(self.target,7),
|
||||
' 40', self.height,
|
||||
' 41', self.ratio,
|
||||
' 42', self.lens,
|
||||
' 43', self.frontClipping,
|
||||
' 44', self.backClipping,
|
||||
' 50', self.snap_rotation,
|
||||
' 51', self.twist,
|
||||
' 71', self.mode,
|
||||
' 72', self.circle_zoom,
|
||||
' 73', self.fast_zoom,
|
||||
' 74', self.ucsicon,
|
||||
' 75', self.snap_on,
|
||||
' 76', self.grid_on,
|
||||
' 77', self.snap_style,
|
||||
' 78', self.snap_isopair
|
||||
]
|
||||
|
||||
output_str = ''
|
||||
for s in output:
|
||||
output_str += '%s\n' %s
|
||||
return output_str
|
||||
|
||||
|
||||
|
||||
#-----------------------------------------------
|
||||
class View(_Call):
|
||||
def __init__(self,name,flag=0,
|
||||
width=1,
|
||||
height=1,
|
||||
center=(0.5,0.5),
|
||||
direction=(0,0,1),
|
||||
target=(0,0,0),
|
||||
lens=50,
|
||||
frontClipping=0,
|
||||
backClipping=0,
|
||||
twist=0,mode=0
|
||||
):
|
||||
self.name=name
|
||||
self.flag=flag
|
||||
self.width=float(width)
|
||||
self.height=float(height)
|
||||
self.center=center
|
||||
self.direction=direction
|
||||
self.target=target
|
||||
self.lens=lens
|
||||
self.frontClipping=frontClipping
|
||||
self.backClipping=backClipping
|
||||
self.twist=twist
|
||||
self.lens=float(lens)
|
||||
self.frontClipping=float(frontClipping)
|
||||
self.backClipping=float(backClipping)
|
||||
self.twist=float(twist)
|
||||
self.mode=mode
|
||||
def __str__(self):
|
||||
return ' 0\nVIEW\n 2\n%s\n 70\n%s\n 40\n%s\n%s\n 41\n%s\n%s\n%s\n 42\n%s\n 43\n%s\n 44\n%s\n 50\n%s\n 71\n%s\n'%\
|
||||
(self.name,self.flag,self.height,_point(self.center),self.width,
|
||||
_point(self.direction,1),_point(self.target,2),self.lens,
|
||||
self.frontClipping,self.backClipping,self.twist,self.mode)
|
||||
output = [' 0', 'VIEW',
|
||||
' 2', self.name,
|
||||
' 70', self.flag,
|
||||
' 40', self.height,
|
||||
_point(self.center),
|
||||
' 41', self.width,
|
||||
_point(self.direction,1),
|
||||
_point(self.target,2),
|
||||
' 42', self.lens,
|
||||
' 43', self.frontClipping,
|
||||
' 44', self.backClipping,
|
||||
' 50', self.twist,
|
||||
' 71', self.mode
|
||||
]
|
||||
output_str = ''
|
||||
for s in output:
|
||||
output_str += '%s\n' %s
|
||||
return output_str
|
||||
|
||||
#-----------------------------------------------
|
||||
def ViewByWindow(name,leftBottom=(0,0),rightTop=(1,1),**options):
|
||||
@ -601,7 +724,7 @@ class Drawing(_Collection):
|
||||
"""Dxf drawing. Use append or any other list methods to add objects."""
|
||||
def __init__(self,insbase=(0.0,0.0,0.0),extmin=(0.0,0.0,0.0),extmax=(0.0,0.0,0.0),
|
||||
layers=[Layer()],linetypes=[LineType()],styles=[Style()],blocks=[],
|
||||
views=[],entities=None,fileName='test.dxf'):
|
||||
views=[],vports=[],entities=None,fileName='test.dxf'):
|
||||
# TODO: replace list with None,arial
|
||||
if not entities:
|
||||
entities=[]
|
||||
@ -613,6 +736,7 @@ class Drawing(_Collection):
|
||||
self.linetypes=copy.copy(linetypes)
|
||||
self.styles=copy.copy(styles)
|
||||
self.views=copy.copy(views)
|
||||
self.vports=copy.copy(vports)
|
||||
self.blocks=copy.copy(blocks)
|
||||
self.fileName=fileName
|
||||
#private
|
||||
@ -656,7 +780,8 @@ class Drawing(_Collection):
|
||||
header=[self.acadver]+[self._point(attr,getattr(self,attr))+'\n' for attr in _HEADER_POINTS]
|
||||
header=self._section('header',header)
|
||||
|
||||
tables=[self._table('ltype',[str(x) for x in self.linetypes]),
|
||||
tables=[self._table('vport',[str(x) for x in self.vports]),
|
||||
self._table('ltype',[str(x) for x in self.linetypes]),
|
||||
self._table('layer',[str(x) for x in self.layers]),
|
||||
self._table('style',[str(x) for x in self.styles]),
|
||||
self._table('view',[str(x) for x in self.views]),
|
||||
@ -740,17 +865,16 @@ def test():
|
||||
d.append(Line(points=[(0,0,0),(1,1,1)]))
|
||||
d.append(Mtext('Click on Ads\nmultiple lines with mtext',point=(1,1,1),color=5,rotation=90))
|
||||
d.append(Text('Please donate!',point=(3,0,1)))
|
||||
d.append(Rectangle(point=(2,2,2),width=4,height=3,color=6,solid=Solid(color=2)))
|
||||
#d.append(Rectangle(point=(2,2,2),width=4,height=3,color=6,solid=Solid(color=2)))
|
||||
d.append(Solid(points=[(4,4,0),(5,4,0),(7,8,0),(9,9,0)],color=3))
|
||||
d.append(PolyLine(points=[(1,1,1),(2,1,1),(2,2,1),(1,2,1)],closed=1,color=1))
|
||||
#d.append(PolyLine(points=[(1,1,1),(2,1,1),(2,2,1),(1,2,1)],flag=1,color=1))
|
||||
|
||||
#d.saveas('c:\\test.dxf')
|
||||
d.saveas('test.dxf')
|
||||
|
||||
|
||||
#-----------------------------------------------------
|
||||
if __name__=='__main__':
|
||||
if not copy:
|
||||
Draw.PupMenu('Error%t|This script requires a full python install')
|
||||
else: main()
|
||||
else: test()
|
||||
|
@ -204,7 +204,7 @@ typedef struct ModifierTypeInfo {
|
||||
*
|
||||
* This function is optional.
|
||||
*/
|
||||
CustomDataMask (*requiredDataMask)(struct ModifierData *md);
|
||||
CustomDataMask (*requiredDataMask)(struct Object *ob, struct ModifierData *md);
|
||||
|
||||
/* Free internal modifier data variables, this function should
|
||||
* not free the md variable itself.
|
||||
@ -272,6 +272,7 @@ int modifier_dependsOnTime(struct ModifierData *md);
|
||||
int modifier_supportsMapping(struct ModifierData *md);
|
||||
int modifier_couldBeCage(struct ModifierData *md);
|
||||
int modifier_isDeformer(struct ModifierData *md);
|
||||
int modifier_isEnabled(struct ModifierData *md, int required_mode);
|
||||
void modifier_setError(struct ModifierData *md, char *format, ...);
|
||||
|
||||
void modifiers_foreachObjectLink(struct Object *ob,
|
||||
@ -302,8 +303,10 @@ int modifiers_indexInObject(struct Object *ob, struct ModifierData *md
|
||||
* evaluation, assuming the data indicated by dataMask is required at the
|
||||
* end of the stack.
|
||||
*/
|
||||
struct LinkNode *modifiers_calcDataMasks(struct ModifierData *md,
|
||||
CustomDataMask dataMask);
|
||||
struct LinkNode *modifiers_calcDataMasks(struct Object *ob,
|
||||
struct ModifierData *md,
|
||||
CustomDataMask dataMask,
|
||||
int required_mode);
|
||||
struct ModifierData *modifiers_getVirtualModifierList(struct Object *ob);
|
||||
|
||||
#endif
|
||||
|
@ -410,8 +410,9 @@ struct TexResult;
|
||||
#define TEX_NODE_DECOMPOSE 420
|
||||
#define TEX_NODE_VALTONOR 421
|
||||
#define TEX_NODE_SCALE 422
|
||||
#define TEX_NODE_AT 423
|
||||
|
||||
/* 201-299 reserved. Use like this: TEX_NODE_PROC + TEX_CLOUDS, etc */
|
||||
/* 501-599 reserved. Use like this: TEX_NODE_PROC + TEX_CLOUDS, etc */
|
||||
#define TEX_NODE_PROC 500
|
||||
#define TEX_NODE_PROC_MAX 600
|
||||
|
||||
|
@ -191,7 +191,7 @@ static BME_Poly *BME_split_face(BME_Mesh *bm, BME_Poly *f, BME_Vert *v1, BME_Ver
|
||||
nf = BME_SFME(bm,f,v1,v2,nl);
|
||||
nf->flag = f->flag;
|
||||
/* if the edge was selected, select this face, too */
|
||||
if (example->flag & SELECT) f->flag |= ME_FACE_SEL;
|
||||
if (example && (example->flag & SELECT)) f->flag |= ME_FACE_SEL;
|
||||
nf->h = f->h;
|
||||
nf->mat_nr = f->mat_nr;
|
||||
if (nl && example) {
|
||||
|
@ -1604,18 +1604,18 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
|
||||
|
||||
modifiers_clearErrors(ob);
|
||||
|
||||
if(useRenderParams) required_mode = eModifierMode_Render;
|
||||
else required_mode = eModifierMode_Realtime;
|
||||
|
||||
/* we always want to keep original indices */
|
||||
dataMask |= CD_MASK_ORIGINDEX;
|
||||
|
||||
datamasks = modifiers_calcDataMasks(md, dataMask);
|
||||
datamasks = modifiers_calcDataMasks(ob, md, dataMask, required_mode);
|
||||
curr = datamasks;
|
||||
|
||||
if(deform_r) *deform_r = NULL;
|
||||
*final_r = NULL;
|
||||
|
||||
if(useRenderParams) required_mode = eModifierMode_Render;
|
||||
else required_mode = eModifierMode_Realtime;
|
||||
|
||||
if(useDeform) {
|
||||
if(useDeform > 0 && do_ob_key(scene, ob)) /* shape key makes deform verts */
|
||||
deformedVerts = mesh_getVertexCos(me, &numVerts);
|
||||
@ -1628,8 +1628,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
|
||||
|
||||
md->scene= scene;
|
||||
|
||||
if((md->mode & required_mode) != required_mode) continue;
|
||||
if(mti->isDisabled && mti->isDisabled(md)) continue;
|
||||
if(!modifier_isEnabled(md, required_mode)) continue;
|
||||
if(useDeform < 0 && mti->dependsOnTime && mti->dependsOnTime(md)) continue;
|
||||
|
||||
if(mti->type == eModifierTypeType_OnlyDeform) {
|
||||
@ -1678,19 +1677,18 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
|
||||
|
||||
md->scene= scene;
|
||||
|
||||
if((md->mode & required_mode) != required_mode) continue;
|
||||
if(!modifier_isEnabled(md, required_mode)) continue;
|
||||
if(mti->type == eModifierTypeType_OnlyDeform && !useDeform) continue;
|
||||
if((mti->flags & eModifierTypeFlag_RequiresOriginalData) && dm) {
|
||||
modifier_setError(md, "Modifier requires original data, bad stack position.");
|
||||
continue;
|
||||
}
|
||||
if(mti->isDisabled && mti->isDisabled(md)) continue;
|
||||
if(needMapping && !modifier_supportsMapping(md)) continue;
|
||||
if(useDeform < 0 && mti->dependsOnTime && mti->dependsOnTime(md)) continue;
|
||||
|
||||
/* add an orco layer if needed by this modifier */
|
||||
if(dm && mti->requiredDataMask) {
|
||||
mask = mti->requiredDataMask(md);
|
||||
mask = mti->requiredDataMask(ob, md);
|
||||
if(mask & CD_MASK_ORCO)
|
||||
add_orco_dm(ob, NULL, dm, orcodm);
|
||||
}
|
||||
@ -1860,14 +1858,11 @@ static int editmesh_modifier_is_enabled(ModifierData *md, DerivedMesh *dm)
|
||||
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
int required_mode = eModifierMode_Realtime | eModifierMode_Editmode;
|
||||
|
||||
if((md->mode & required_mode) != required_mode) return 0;
|
||||
if(!modifier_isEnabled(md, required_mode)) return 0;
|
||||
if((mti->flags & eModifierTypeFlag_RequiresOriginalData) && dm) {
|
||||
modifier_setError(md, "Modifier requires original data, bad stack position.");
|
||||
return 0;
|
||||
}
|
||||
if(mti->isDisabled && mti->isDisabled(md)) return 0;
|
||||
if(!(mti->flags & eModifierTypeFlag_SupportsEditmode)) return 0;
|
||||
if(md->mode & eModifierMode_DisableTemporary) return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -1882,6 +1877,7 @@ static void editmesh_calc_modifiers(Scene *scene, Object *ob, EditMesh *em, Deri
|
||||
DerivedMesh *dm, *orcodm = NULL;
|
||||
int i, numVerts = 0, cageIndex = modifiers_getCageIndex(ob, NULL);
|
||||
LinkNode *datamasks, *curr;
|
||||
int required_mode = eModifierMode_Realtime | eModifierMode_Editmode;
|
||||
|
||||
modifiers_clearErrors(ob);
|
||||
|
||||
@ -1895,7 +1891,7 @@ static void editmesh_calc_modifiers(Scene *scene, Object *ob, EditMesh *em, Deri
|
||||
/* we always want to keep original indices */
|
||||
dataMask |= CD_MASK_ORIGINDEX;
|
||||
|
||||
datamasks = modifiers_calcDataMasks(md, dataMask);
|
||||
datamasks = modifiers_calcDataMasks(ob, md, dataMask, required_mode);
|
||||
|
||||
curr = datamasks;
|
||||
for(i = 0; md; i++, md = md->next, curr = curr->next) {
|
||||
@ -1908,7 +1904,7 @@ static void editmesh_calc_modifiers(Scene *scene, Object *ob, EditMesh *em, Deri
|
||||
|
||||
/* add an orco layer if needed by this modifier */
|
||||
if(dm && mti->requiredDataMask) {
|
||||
mask = mti->requiredDataMask(md);
|
||||
mask = mti->requiredDataMask(ob, md);
|
||||
if(mask & CD_MASK_ORCO)
|
||||
add_orco_dm(ob, em, dm, orcodm);
|
||||
}
|
||||
|
@ -209,7 +209,7 @@ static void curveModifier_copyData(ModifierData *md, ModifierData *target)
|
||||
strncpy(tcmd->name, cmd->name, 32);
|
||||
}
|
||||
|
||||
CustomDataMask curveModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask curveModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
CurveModifierData *cmd = (CurveModifierData *)md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -285,7 +285,7 @@ static void latticeModifier_copyData(ModifierData *md, ModifierData *target)
|
||||
strncpy(tlmd->name, lmd->name, 32);
|
||||
}
|
||||
|
||||
CustomDataMask latticeModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask latticeModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
LatticeModifierData *lmd = (LatticeModifierData *)md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -668,7 +668,7 @@ static void maskModifier_copyData(ModifierData *md, ModifierData *target)
|
||||
strcpy(tmmd->vgroup, mmd->vgroup);
|
||||
}
|
||||
|
||||
static CustomDataMask maskModifier_requiredDataMask(ModifierData *md)
|
||||
static CustomDataMask maskModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
return (1 << CD_MDEFORMVERT);
|
||||
}
|
||||
@ -3396,7 +3396,7 @@ static void bevelModifier_copyData(ModifierData *md, ModifierData *target)
|
||||
strncpy(tbmd->defgrp_name, bmd->defgrp_name, 32);
|
||||
}
|
||||
|
||||
CustomDataMask bevelModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask bevelModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
BevelModifierData *bmd = (BevelModifierData *)md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -3476,7 +3476,7 @@ static void displaceModifier_copyData(ModifierData *md, ModifierData *target)
|
||||
strncpy(tdmd->uvlayer_name, dmd->uvlayer_name, 32);
|
||||
}
|
||||
|
||||
CustomDataMask displaceModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask displaceModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
DisplaceModifierData *dmd = (DisplaceModifierData *)md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -3819,7 +3819,7 @@ static void uvprojectModifier_copyData(ModifierData *md, ModifierData *target)
|
||||
tumd->aspecty = umd->aspecty;
|
||||
}
|
||||
|
||||
CustomDataMask uvprojectModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask uvprojectModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
CustomDataMask dataMask = 0;
|
||||
|
||||
@ -4285,7 +4285,7 @@ int smoothModifier_isDisabled(ModifierData *md)
|
||||
return 0;
|
||||
}
|
||||
|
||||
CustomDataMask smoothModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask smoothModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
SmoothModifierData *smd = (SmoothModifierData *)md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -4514,7 +4514,7 @@ int castModifier_isDisabled(ModifierData *md)
|
||||
return 0;
|
||||
}
|
||||
|
||||
CustomDataMask castModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask castModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
CastModifierData *cmd = (CastModifierData *)md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -5145,7 +5145,7 @@ static void waveModifier_updateDepgraph(
|
||||
}
|
||||
}
|
||||
|
||||
CustomDataMask waveModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask waveModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
WaveModifierData *wmd = (WaveModifierData *)md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -5482,7 +5482,7 @@ static void armatureModifier_copyData(ModifierData *md, ModifierData *target)
|
||||
strncpy(tamd->defgrp_name, amd->defgrp_name, 32);
|
||||
}
|
||||
|
||||
CustomDataMask armatureModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask armatureModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
CustomDataMask dataMask = 0;
|
||||
|
||||
@ -5596,7 +5596,7 @@ static void hookModifier_copyData(ModifierData *md, ModifierData *target)
|
||||
strncpy(thmd->name, hmd->name, 32);
|
||||
}
|
||||
|
||||
CustomDataMask hookModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask hookModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
HookModifierData *hmd = (HookModifierData *)md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -5855,7 +5855,7 @@ static void clothModifier_updateDepgraph(
|
||||
}
|
||||
}
|
||||
|
||||
CustomDataMask clothModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask clothModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
CustomDataMask dataMask = 0;
|
||||
|
||||
@ -6239,7 +6239,7 @@ static DerivedMesh *booleanModifier_applyModifier(
|
||||
return derivedData;
|
||||
}
|
||||
|
||||
CustomDataMask booleanModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask booleanModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
CustomDataMask dataMask = (1 << CD_MTFACE) + (1 << CD_MEDGE);
|
||||
|
||||
@ -6287,12 +6287,27 @@ static void particleSystemModifier_copyData(ModifierData *md, ModifierData *targ
|
||||
tpsmd->psys = psmd->psys;
|
||||
}
|
||||
|
||||
CustomDataMask particleSystemModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask particleSystemModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
ParticleSystemModifierData *psmd= (ParticleSystemModifierData*) md;
|
||||
CustomDataMask dataMask = (1 << CD_MTFACE) + (1 << CD_MEDGE);
|
||||
CustomDataMask dataMask = 0;
|
||||
Material *ma;
|
||||
MTex *mtex;
|
||||
int i;
|
||||
|
||||
ma= give_current_material(ob, psmd->psys->part->omat);
|
||||
if(ma) {
|
||||
for(i=0; i<MAX_MTEX; i++) {
|
||||
mtex=ma->mtex[i];
|
||||
if(mtex && (ma->septex & (1<<i))==0)
|
||||
if(mtex->pmapto && (mtex->texco & TEXCO_UV))
|
||||
dataMask |= (1 << CD_MTFACE);
|
||||
}
|
||||
}
|
||||
|
||||
if(psmd->psys->part->tanfac!=0.0)
|
||||
dataMask |= (1 << CD_MTFACE);
|
||||
|
||||
/* ask for vertexgroups if we need them */
|
||||
for(i=0; i<PSYS_TOT_VG; i++){
|
||||
if(psmd->psys->vgroup[i]){
|
||||
@ -6637,7 +6652,7 @@ static int explodeModifier_dependsOnTime(ModifierData *md)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
CustomDataMask explodeModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask explodeModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
ExplodeModifierData *emd= (ExplodeModifierData*) md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -7551,7 +7566,7 @@ static void meshdeformModifier_copyData(ModifierData *md, ModifierData *target)
|
||||
tmmd->object = mmd->object;
|
||||
}
|
||||
|
||||
CustomDataMask meshdeformModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask meshdeformModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
MeshDeformModifierData *mmd = (MeshDeformModifierData *)md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -7815,10 +7830,12 @@ static void meshdeformModifier_deformVerts(
|
||||
{
|
||||
DerivedMesh *dm;
|
||||
|
||||
if(!derivedData && ob->type==OB_MESH)
|
||||
dm= CDDM_from_mesh(ob->data, ob);
|
||||
else
|
||||
dm= derivedData;
|
||||
if (!derivedData) {
|
||||
dm= get_original_dm(md->scene, ob, NULL, 0);
|
||||
if (dm == NULL) return;
|
||||
}
|
||||
else dm= derivedData;
|
||||
|
||||
|
||||
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
|
||||
|
||||
@ -7930,7 +7947,7 @@ static void shrinkwrapModifier_copyData(ModifierData *md, ModifierData *target)
|
||||
tsmd->subsurfLevels = smd->subsurfLevels;
|
||||
}
|
||||
|
||||
CustomDataMask shrinkwrapModifier_requiredDataMask(ModifierData *md)
|
||||
CustomDataMask shrinkwrapModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *)md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -7964,7 +7981,7 @@ static void shrinkwrapModifier_foreachObjectLink(ModifierData *md, Object *ob, O
|
||||
static void shrinkwrapModifier_deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts, int useRenderParams, int isFinalCalc)
|
||||
{
|
||||
DerivedMesh *dm = NULL;
|
||||
CustomDataMask dataMask = shrinkwrapModifier_requiredDataMask(md);
|
||||
CustomDataMask dataMask = shrinkwrapModifier_requiredDataMask(ob, md);
|
||||
|
||||
/* We implement requiredDataMask but thats not really usefull since mesh_calc_modifiers pass a NULL derivedData or without the modified vertexs applied */
|
||||
if(dataMask)
|
||||
@ -7990,7 +8007,7 @@ static void shrinkwrapModifier_deformVerts(ModifierData *md, Object *ob, Derived
|
||||
static void shrinkwrapModifier_deformVertsEM(ModifierData *md, Object *ob, EditMesh *editData, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = NULL;
|
||||
CustomDataMask dataMask = shrinkwrapModifier_requiredDataMask(md);
|
||||
CustomDataMask dataMask = shrinkwrapModifier_requiredDataMask(ob, md);
|
||||
|
||||
if(dataMask)
|
||||
{
|
||||
@ -8049,7 +8066,7 @@ static void simpledeformModifier_copyData(ModifierData *md, ModifierData *target
|
||||
memcpy(tsmd->limit, smd->limit, sizeof(tsmd->limit));
|
||||
}
|
||||
|
||||
static CustomDataMask simpledeformModifier_requiredDataMask(ModifierData *md)
|
||||
static CustomDataMask simpledeformModifier_requiredDataMask(Object *ob, ModifierData *md)
|
||||
{
|
||||
SimpleDeformModifierData *smd = (SimpleDeformModifierData *)md;
|
||||
CustomDataMask dataMask = 0;
|
||||
@ -8078,7 +8095,7 @@ static void simpledeformModifier_updateDepgraph(ModifierData *md, DagForest *for
|
||||
static void simpledeformModifier_deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts, int useRenderParams, int isFinalCalc)
|
||||
{
|
||||
DerivedMesh *dm = NULL;
|
||||
CustomDataMask dataMask = simpledeformModifier_requiredDataMask(md);
|
||||
CustomDataMask dataMask = simpledeformModifier_requiredDataMask(ob, md);
|
||||
|
||||
/* We implement requiredDataMask but thats not really usefull since mesh_calc_modifiers pass a NULL derivedData or without the modified vertexs applied */
|
||||
if(dataMask)
|
||||
@ -8105,7 +8122,7 @@ static void simpledeformModifier_deformVerts(ModifierData *md, Object *ob, Deriv
|
||||
static void simpledeformModifier_deformVertsEM(ModifierData *md, Object *ob, EditMesh *editData, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
|
||||
{
|
||||
DerivedMesh *dm = NULL;
|
||||
CustomDataMask dataMask = simpledeformModifier_requiredDataMask(md);
|
||||
CustomDataMask dataMask = simpledeformModifier_requiredDataMask(ob, md);
|
||||
|
||||
/* We implement requiredDataMask but thats not really usefull since mesh_calc_modifiers pass a NULL derivedData or without the modified vertexs applied */
|
||||
if(dataMask)
|
||||
@ -8717,7 +8734,20 @@ int modifiers_isParticleEnabled(Object *ob)
|
||||
return (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render));
|
||||
}
|
||||
|
||||
LinkNode *modifiers_calcDataMasks(ModifierData *md, CustomDataMask dataMask)
|
||||
int modifier_isEnabled(ModifierData *md, int required_mode)
|
||||
{
|
||||
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
||||
if((md->mode & required_mode) != required_mode) return 0;
|
||||
if(mti->isDisabled && mti->isDisabled(md)) return 0;
|
||||
if(md->mode & eModifierMode_DisableTemporary) return 0;
|
||||
if(required_mode & eModifierMode_Editmode)
|
||||
if(!(mti->flags & eModifierTypeFlag_SupportsEditmode)) return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
LinkNode *modifiers_calcDataMasks(Object *ob, ModifierData *md, CustomDataMask dataMask, int required_mode)
|
||||
{
|
||||
LinkNode *dataMasks = NULL;
|
||||
LinkNode *curr, *prev;
|
||||
@ -8727,7 +8757,9 @@ LinkNode *modifiers_calcDataMasks(ModifierData *md, CustomDataMask dataMask)
|
||||
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
CustomDataMask mask = 0;
|
||||
|
||||
if(mti->requiredDataMask) mask = mti->requiredDataMask(md);
|
||||
if(modifier_isEnabled(md, required_mode))
|
||||
if(mti->requiredDataMask)
|
||||
mask = mti->requiredDataMask(ob, md);
|
||||
|
||||
BLI_linklist_prepend(&dataMasks, SET_INT_IN_POINTER(mask));
|
||||
}
|
||||
|
@ -3050,6 +3050,7 @@ static void registerTextureNodes(ListBase *ntypelist)
|
||||
nodeRegisterType(ntypelist, &tex_node_rotate);
|
||||
nodeRegisterType(ntypelist, &tex_node_translate);
|
||||
nodeRegisterType(ntypelist, &tex_node_scale);
|
||||
nodeRegisterType(ntypelist, &tex_node_at);
|
||||
|
||||
nodeRegisterType(ntypelist, &tex_node_proc_voronoi);
|
||||
nodeRegisterType(ntypelist, &tex_node_proc_blend);
|
||||
|
@ -3169,7 +3169,7 @@ static void get_cpa_texture(DerivedMesh *dm, Material *ma, int face_index, float
|
||||
|
||||
if(ma) for(m=0; m<MAX_MTEX; m++){
|
||||
mtex=ma->mtex[m];
|
||||
if(mtex && (ma->septex & (1<<m))==0){
|
||||
if(mtex && (ma->septex & (1<<m))==0 && mtex->pmapto){
|
||||
float def=mtex->def_var;
|
||||
float var=mtex->varfac;
|
||||
short blend=mtex->blendtype;
|
||||
@ -3218,7 +3218,7 @@ void psys_get_texture(Object *ob, Material *ma, ParticleSystemModifierData *psmd
|
||||
|
||||
if(ma) for(m=0; m<MAX_MTEX; m++){
|
||||
mtex=ma->mtex[m];
|
||||
if(mtex && (ma->septex & (1<<m))==0){
|
||||
if(mtex && (ma->septex & (1<<m))==0 && mtex->pmapto){
|
||||
float var=mtex->varfac;
|
||||
float def=mtex->def_var;
|
||||
short blend=mtex->blendtype;
|
||||
|
@ -1761,7 +1761,10 @@ void reset_particle(Scene *scene, ParticleData *pa, ParticleSystem *psys, Partic
|
||||
where_is_object_time(scene, ob,pa->time);
|
||||
|
||||
/* get birth location from object */
|
||||
psys_particle_on_emitter(psmd,part->from,pa->num, pa->num_dmcache, pa->fuv,pa->foffset,loc,nor,utan,vtan,0,0);
|
||||
if(part->tanfac!=0.0)
|
||||
psys_particle_on_emitter(psmd,part->from,pa->num, pa->num_dmcache, pa->fuv,pa->foffset,loc,nor,utan,vtan,0,0);
|
||||
else
|
||||
psys_particle_on_emitter(psmd,part->from,pa->num, pa->num_dmcache, pa->fuv,pa->foffset,loc,nor,0,0,0,0);
|
||||
|
||||
/* save local coordinates for later */
|
||||
VECCOPY(tloc,loc);
|
||||
|
@ -9137,6 +9137,34 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
|
||||
}
|
||||
}
|
||||
|
||||
if (main->versionfile < 249 && main->subversionfile < 2) {
|
||||
Scene *sce= main->scene.first;
|
||||
Sequence *seq;
|
||||
Editing *ed;
|
||||
|
||||
while(sce) {
|
||||
ed= sce->ed;
|
||||
if(ed) {
|
||||
SEQP_BEGIN(ed, seq) {
|
||||
if (seq->strip && seq->strip->proxy){
|
||||
if (sce->r.size != 100.0) {
|
||||
seq->strip->proxy->size
|
||||
= sce->r.size;
|
||||
} else {
|
||||
seq->strip->proxy->size
|
||||
= 25.0;
|
||||
}
|
||||
seq->strip->proxy->quality =90;
|
||||
}
|
||||
}
|
||||
SEQ_END
|
||||
}
|
||||
|
||||
sce= sce->id.next;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
|
||||
/* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
|
||||
|
@ -746,7 +746,9 @@ GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, /*GPU
|
||||
glGetObjectParameterivARB(shader->object, GL_OBJECT_LINK_STATUS_ARB, &status);
|
||||
if (!status) {
|
||||
glGetInfoLogARB(shader->object, sizeof(log), &length, log);
|
||||
shader_print_errors("linking", log, fragcode);
|
||||
if (fragcode) shader_print_errors("linking", log, fragcode);
|
||||
else if (vertexcode) shader_print_errors("linking", log, vertexcode);
|
||||
else if (libcode) shader_print_errors("linking", log, libcode);
|
||||
|
||||
GPU_shader_free(shader);
|
||||
return NULL;
|
||||
|
@ -1285,7 +1285,7 @@ void GPU_materials_free()
|
||||
|
||||
GPU_material_free(&defmaterial);
|
||||
|
||||
for(ob=G.main->object.first; ma; ma=ma->id.next)
|
||||
for(ob=G.main->object.first; ob; ob=ob->id.next)
|
||||
GPU_lamp_free(ob);
|
||||
}
|
||||
|
||||
|
@ -191,7 +191,7 @@ struct ImBuf *imb_loadhdr(unsigned char *mem, int size, int flags)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found) {
|
||||
if (found && (x<(size + 2))) {
|
||||
if (sscanf((char *)&mem[x+1], "%79s %d %79s %d", (char*)&oriY, &height,
|
||||
(char*)&oriX, &width) != 4) return NULL;
|
||||
|
||||
|
@ -80,6 +80,9 @@ typedef struct StripProxy {
|
||||
char dir[160];
|
||||
char file[80];
|
||||
struct anim *anim;
|
||||
short size;
|
||||
short quality;
|
||||
int pad;
|
||||
} StripProxy;
|
||||
|
||||
typedef struct Strip {
|
||||
|
@ -59,6 +59,7 @@ extern bNodeType tex_node_distance;
|
||||
extern bNodeType tex_node_rotate;
|
||||
extern bNodeType tex_node_translate;
|
||||
extern bNodeType tex_node_scale;
|
||||
extern bNodeType tex_node_at;
|
||||
|
||||
extern bNodeType tex_node_compose;
|
||||
extern bNodeType tex_node_decompose;
|
||||
|
70
source/blender/nodes/intern/TEX_nodes/TEX_at.c
Normal file
70
source/blender/nodes/intern/TEX_nodes/TEX_at.c
Normal file
@ -0,0 +1,70 @@
|
||||
/**
|
||||
*
|
||||
* ***** BEGIN GPL LICENSE BLOCK *****
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2005 Blender Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): R Allen
|
||||
*
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#include "../TEX_util.h"
|
||||
|
||||
static bNodeSocketType inputs[]= {
|
||||
{ SOCK_RGBA, 1, "Texture", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f },
|
||||
{ SOCK_VECTOR, 1, "Coordinates", 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f },
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
static bNodeSocketType outputs[]= {
|
||||
{ SOCK_RGBA, 0, "Texture", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f },
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
|
||||
static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
|
||||
{
|
||||
float new_coord[3];
|
||||
|
||||
tex_input_vec(new_coord, in[1], coord, thread);
|
||||
tex_input_rgba(out, in[0], new_coord, thread);
|
||||
}
|
||||
|
||||
static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
|
||||
{
|
||||
tex_output(node, in, out[0], &colorfn);
|
||||
}
|
||||
|
||||
bNodeType tex_node_at = {
|
||||
/* *next,*prev */ NULL, NULL,
|
||||
/* type code */ TEX_NODE_AT,
|
||||
/* name */ "At",
|
||||
/* width+range */ 100, 60, 150,
|
||||
/* class+opts */ NODE_CLASS_DISTORT, 0,
|
||||
/* input sock */ inputs,
|
||||
/* output sock */ outputs,
|
||||
/* storage */ "",
|
||||
/* execfunc */ exec,
|
||||
/* butfunc */ NULL,
|
||||
/* initfunc */ NULL,
|
||||
/* freestoragefunc */ NULL,
|
||||
/* copystoragefunc */ NULL,
|
||||
/* id */ NULL
|
||||
|
||||
};
|
@ -2418,13 +2418,13 @@ void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, int ef
|
||||
|
||||
|
||||
/* placement */
|
||||
if(mtex->projx) texvec[0]= mtex->size[0]*(co[mtex->projx-1]+mtex->ofs[0]);
|
||||
if(mtex->projx && co) texvec[0]= mtex->size[0]*(co[mtex->projx-1]+mtex->ofs[0]);
|
||||
else texvec[0]= mtex->size[0]*(mtex->ofs[0]);
|
||||
|
||||
if(mtex->projy) texvec[1]= mtex->size[1]*(co[mtex->projy-1]+mtex->ofs[1]);
|
||||
if(mtex->projy && co) texvec[1]= mtex->size[1]*(co[mtex->projy-1]+mtex->ofs[1]);
|
||||
else texvec[1]= mtex->size[1]*(mtex->ofs[1]);
|
||||
|
||||
if(mtex->projz) texvec[2]= mtex->size[2]*(co[mtex->projz-1]+mtex->ofs[2]);
|
||||
if(mtex->projz && co) texvec[2]= mtex->size[2]*(co[mtex->projz-1]+mtex->ofs[2]);
|
||||
else texvec[2]= mtex->size[2]*(mtex->ofs[2]);
|
||||
|
||||
if(shi->osatex) {
|
||||
|
@ -19,6 +19,7 @@ incs += ' #source/gameengine/Physics/Dummy'
|
||||
incs += ' #source/gameengine/Network/LoopBackNetwork'
|
||||
incs += ' #source/blender/misc #source/blender/blenloader #source/blender/gpu'
|
||||
incs += ' #source/blender/windowmanager'
|
||||
incs += ' #source/blender/makesrna'
|
||||
|
||||
if env['WITH_BF_SOLID']:
|
||||
incs += ' #source/gameengine/Physics/Sumo #source/gameengine/Physics/Sumo/Fuzzics/include'
|
||||
|
@ -636,63 +636,3 @@ void CParser::SetContext(CValue* context)
|
||||
}
|
||||
m_identifierContext = context;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
PyObject* CParserPyMake(PyObject* ignored,PyObject* args)
|
||||
{
|
||||
char* txt;
|
||||
if (!PyArg_ParseTuple(args,"s",&txt))
|
||||
return NULL;
|
||||
CParser parser;
|
||||
CExpression* expr = parser.ProcessText(txt);
|
||||
CValue* val = expr->Calculate();
|
||||
expr->Release();
|
||||
return val->GetProxy();
|
||||
}
|
||||
|
||||
static PyMethodDef CParserMethods[] =
|
||||
{
|
||||
{ "calc", CParserPyMake , METH_VARARGS},
|
||||
{ NULL,NULL} // Sentinel
|
||||
};
|
||||
|
||||
|
||||
#if (PY_VERSION_HEX >= 0x03000000)
|
||||
static struct PyModuleDef Expression_module_def = {
|
||||
{}, /* m_base */
|
||||
"Expression", /* m_name */
|
||||
0, /* m_doc */
|
||||
0, /* m_size */
|
||||
CParserMethods, /* m_methods */
|
||||
0, /* m_reload */
|
||||
0, /* m_traverse */
|
||||
0, /* m_clear */
|
||||
0, /* m_free */
|
||||
};
|
||||
#endif
|
||||
|
||||
extern "C" {
|
||||
void initExpressionModule(void)
|
||||
{
|
||||
PyObject *m;
|
||||
/* Use existing module where possible
|
||||
* be careful not to init any runtime vars after this */
|
||||
m = PyImport_ImportModule( "Expression" );
|
||||
if(m) {
|
||||
Py_DECREF(m);
|
||||
//return m;
|
||||
}
|
||||
else {
|
||||
PyErr_Clear();
|
||||
|
||||
#if (PY_VERSION_HEX >= 0x03000000)
|
||||
PyModule_Create(&Expression_module_def);
|
||||
#else
|
||||
Py_InitModule("Expression",CParserMethods);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -725,54 +725,6 @@ PyObject* CValue::ConvertKeysToPython( void )
|
||||
return pylist;
|
||||
}
|
||||
|
||||
/*
|
||||
PyObject* CValue::PyMake(PyObject* ignored,PyObject* args)
|
||||
{
|
||||
|
||||
//if (!PyArg_ParseTuple(args,"s:make",&name)) return NULL;
|
||||
Py_RETURN_NONE;//new CValue();
|
||||
}
|
||||
*/
|
||||
|
||||
#if (PY_VERSION_HEX >= 0x03000000)
|
||||
static struct PyModuleDef CValue_module_def = {
|
||||
{}, /* m_base */
|
||||
"CValue", /* m_name */
|
||||
0, /* m_doc */
|
||||
0, /* m_size */
|
||||
CValueMethods, /* m_methods */
|
||||
0, /* m_reload */
|
||||
0, /* m_traverse */
|
||||
0, /* m_clear */
|
||||
0, /* m_free */
|
||||
};
|
||||
#endif
|
||||
|
||||
extern "C" {
|
||||
void initCValue(void)
|
||||
{
|
||||
PyObject *m;
|
||||
/* Use existing module where possible
|
||||
* be careful not to init any runtime vars after this */
|
||||
m = PyImport_ImportModule( "CValue" );
|
||||
if(m) {
|
||||
Py_DECREF(m);
|
||||
//return m;
|
||||
}
|
||||
else {
|
||||
PyErr_Clear();
|
||||
|
||||
#if (PY_VERSION_HEX >= 0x03000000)
|
||||
PyModule_Create(&CValue_module_def);
|
||||
#else
|
||||
Py_InitModule("CValue",CValueMethods);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif //NO_EXP_PYTHON_EMBEDDING
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -630,6 +630,7 @@ PyObject* initPythonConstraintBinding()
|
||||
|
||||
#if (PY_VERSION_HEX >= 0x03000000)
|
||||
m = PyModule_Create(&PhysicsConstraints_module_def);
|
||||
PyDict_SetItemString(PySys_GetObject("modules"), PhysicsConstraints_module_def.m_name, m);
|
||||
#else
|
||||
m = Py_InitModule4("PhysicsConstraints", physicsconstraints_methods,
|
||||
PhysicsConstraints_module_documentation,
|
||||
|
@ -70,6 +70,7 @@
|
||||
#include "MT_Vector3.h"
|
||||
#include "MT_Point3.h"
|
||||
#include "ListValue.h"
|
||||
#include "InputParser.h"
|
||||
#include "KX_Scene.h"
|
||||
#include "SND_DeviceManager.h"
|
||||
|
||||
@ -501,6 +502,32 @@ static PyObject *pyPrintExt(PyObject *,PyObject *,PyObject *)
|
||||
}
|
||||
|
||||
|
||||
static PyObject *gEvalExpression(PyObject*, PyObject* value)
|
||||
{
|
||||
char* txt= PyString_AsString(value);
|
||||
|
||||
if (txt==NULL) {
|
||||
PyErr_SetString(PyExc_TypeError, "Expression.calc(text): expects a single string argument");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CParser parser;
|
||||
CExpression* expr = parser.ProcessText(txt);
|
||||
CValue* val = expr->Calculate();
|
||||
expr->Release();
|
||||
|
||||
if (val) {
|
||||
PyObject* pyobj = val->ConvertValueToPython();
|
||||
if (pyobj)
|
||||
return pyobj;
|
||||
else
|
||||
return val->GetProxy();
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
static struct PyMethodDef game_methods[] = {
|
||||
{"expandPath", (PyCFunction)gPyExpandPath, METH_VARARGS, (PY_METHODCHAR)gPyExpandPath_doc},
|
||||
{"sendMessage", (PyCFunction)gPySendMessage, METH_VARARGS, (PY_METHODCHAR)gPySendMessage_doc},
|
||||
@ -529,6 +556,7 @@ static struct PyMethodDef game_methods[] = {
|
||||
{"getAverageFrameRate", (PyCFunction) gPyGetAverageFrameRate, METH_NOARGS, (PY_METHODCHAR)"Gets the estimated average frame rate"},
|
||||
{"getBlendFileList", (PyCFunction)gPyGetBlendFileList, METH_VARARGS, (PY_METHODCHAR)"Gets a list of blend files in the same directory as the current blend file"},
|
||||
{"PrintGLInfo", (PyCFunction)pyPrintExt, METH_NOARGS, (PY_METHODCHAR)"Prints GL Extension Info"},
|
||||
{"EvalExpression", (PyCFunction)gEvalExpression, METH_O, (PY_METHODCHAR)"Evaluate a string as a game logic expression"},
|
||||
{NULL, (PyCFunction) NULL, 0, NULL }
|
||||
};
|
||||
|
||||
@ -1035,6 +1063,7 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
|
||||
// Create the module and add the functions
|
||||
#if (PY_VERSION_HEX >= 0x03000000)
|
||||
m = PyModule_Create(&GameLogic_module_def);
|
||||
PyDict_SetItemString(PySys_GetObject("modules"), GameLogic_module_def.m_name, m);
|
||||
#else
|
||||
m = Py_InitModule4("GameLogic", game_methods,
|
||||
GameLogic_module_documentation,
|
||||
@ -1701,6 +1730,7 @@ PyObject* initRasterizer(RAS_IRasterizer* rasty,RAS_ICanvas* canvas)
|
||||
// Create the module and add the functions
|
||||
#if (PY_VERSION_HEX >= 0x03000000)
|
||||
m = PyModule_Create(&Rasterizer_module_def);
|
||||
PyDict_SetItemString(PySys_GetObject("modules"), Rasterizer_module_def.m_name, m);
|
||||
#else
|
||||
m = Py_InitModule4("Rasterizer", rasterizer_methods,
|
||||
Rasterizer_module_documentation,
|
||||
@ -1835,6 +1865,7 @@ PyObject* initGameKeys()
|
||||
// Create the module and add the functions
|
||||
#if (PY_VERSION_HEX >= 0x03000000)
|
||||
m = PyModule_Create(&GameKeys_module_def);
|
||||
PyDict_SetItemString(PySys_GetObject("modules"), GameKeys_module_def.m_name, m);
|
||||
#else
|
||||
m = Py_InitModule4("GameKeys", gamekeys_methods,
|
||||
GameKeys_module_documentation,
|
||||
@ -1990,6 +2021,8 @@ PyObject* initGeometry() {Py_INCREF(Py_None);return Py_None;}
|
||||
PyObject* initBGL() {Py_INCREF(Py_None);return Py_None;}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
void KX_SetActiveScene(class KX_Scene* scene)
|
||||
{
|
||||
gp_KetsjiScene = scene;
|
||||
@ -2021,11 +2054,17 @@ int saveGamePythonConfig( char **marshal_buffer)
|
||||
if (pyGlobalDictMarshal) {
|
||||
// for testing only
|
||||
// PyObject_Print(pyGlobalDictMarshal, stderr, 0);
|
||||
|
||||
char *marshal_cstring;
|
||||
|
||||
#if PY_VERSION_HEX < 0x03000000
|
||||
marshal_cstring = PyString_AsString(pyGlobalDictMarshal);
|
||||
marshal_length= PyString_Size(pyGlobalDictMarshal);
|
||||
#else // py3 uses byte arrays
|
||||
marshal_cstring = PyBytes_AsString(pyGlobalDictMarshal);
|
||||
marshal_length= PyBytes_Size(pyGlobalDictMarshal);
|
||||
#endif
|
||||
*marshal_buffer = new char[marshal_length + 1];
|
||||
memcpy(*marshal_buffer, PyString_AsString(pyGlobalDictMarshal), marshal_length);
|
||||
|
||||
memcpy(*marshal_buffer, marshal_cstring, marshal_length);
|
||||
Py_DECREF(pyGlobalDictMarshal);
|
||||
} else {
|
||||
printf("Error, GameLogic.globalDict could not be marshal'd\n");
|
||||
@ -2102,5 +2141,5 @@ void setGamePythonPath(char *path)
|
||||
// engine but loading blend files within the BGE wont overwrite gp_GamePythonPathOrig
|
||||
void resetGamePythonPath()
|
||||
{
|
||||
gp_GamePythonPathOrig[0] == '\0';
|
||||
gp_GamePythonPathOrig[0] = '\0';
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ static Py_ssize_t KX_PythonSeq_len( PyObject * self )
|
||||
PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base);
|
||||
|
||||
if(self_plus==NULL) {
|
||||
PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG);
|
||||
PyErr_SetString(PyExc_SystemError, "len(seq): "BGE_PROXY_ERROR_MSG);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -84,7 +84,7 @@ static PyObject *KX_PythonSeq_getIndex(PyObject* self, int index)
|
||||
PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base);
|
||||
|
||||
if(self_plus==NULL) {
|
||||
PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG);
|
||||
PyErr_SetString(PyExc_SystemError, "val = seq[i]: "BGE_PROXY_ERROR_MSG);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -145,25 +145,9 @@ static PyObject *KX_PythonSeq_getIndex(PyObject* self, int index)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key)
|
||||
static PyObjectPlus * KX_PythonSeq_subscript__internal(PyObject *self, char *key)
|
||||
{
|
||||
PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base);
|
||||
char *name = NULL;
|
||||
|
||||
if(self_plus==NULL) {
|
||||
PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (PyInt_Check(key)) {
|
||||
return KX_PythonSeq_getIndex(self, PyInt_AS_LONG( key ));
|
||||
} else if ( PyString_Check(key) ) {
|
||||
name = PyString_AsString( key );
|
||||
} else {
|
||||
PyErr_SetString( PyExc_TypeError, "expected a string or an index" );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch(((KX_PythonSeq *)self)->type) {
|
||||
case KX_PYGENSEQ_CONT_TYPE_SENSORS:
|
||||
@ -172,8 +156,9 @@ static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key)
|
||||
SCA_ISensor* sensor;
|
||||
for (unsigned int index=0;index<linkedsensors.size();index++) {
|
||||
sensor = linkedsensors[index];
|
||||
if (sensor->GetName() == name)
|
||||
return sensor->GetProxy();
|
||||
if (sensor->GetName() == key)
|
||||
return static_cast<PyObjectPlus *>(sensor);
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -183,8 +168,8 @@ static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key)
|
||||
SCA_IActuator* actuator;
|
||||
for (unsigned int index=0;index<linkedactuators.size();index++) {
|
||||
actuator = linkedactuators[index];
|
||||
if (actuator->GetName() == name)
|
||||
return actuator->GetProxy();
|
||||
if (actuator->GetName() == key)
|
||||
return static_cast<PyObjectPlus *>(actuator);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -194,8 +179,8 @@ static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key)
|
||||
SCA_ISensor *sensor;
|
||||
for (unsigned int index=0;index<linkedsensors.size();index++) {
|
||||
sensor= linkedsensors[index];
|
||||
if (sensor->GetName() == name)
|
||||
return sensor->GetProxy();
|
||||
if (sensor->GetName() == key)
|
||||
return static_cast<PyObjectPlus *>(sensor);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -205,8 +190,8 @@ static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key)
|
||||
SCA_IController *controller;
|
||||
for (unsigned int index=0;index<linkedcontrollers.size();index++) {
|
||||
controller= linkedcontrollers[index];
|
||||
if (controller->GetName() == name)
|
||||
return controller->GetProxy();
|
||||
if (controller->GetName() == key)
|
||||
return static_cast<PyObjectPlus *>(controller);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -216,23 +201,105 @@ static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key)
|
||||
SCA_IActuator *actuator;
|
||||
for (unsigned int index=0;index<linkedactuators.size();index++) {
|
||||
actuator= linkedactuators[index];
|
||||
if (actuator->GetName() == name)
|
||||
return actuator->GetProxy();
|
||||
if (actuator->GetName() == key)
|
||||
return static_cast<PyObjectPlus *>(actuator);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
PyErr_Format( PyExc_KeyError, "requested item \"%s\" does not exist", name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
static PyObject * KX_PythonSeq_subscript(PyObject * self, PyObject *key)
|
||||
{
|
||||
PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base);
|
||||
|
||||
if(self_plus==NULL) {
|
||||
PyErr_SetString(PyExc_SystemError, "val = seq[key], KX_PythonSeq: "BGE_PROXY_ERROR_MSG);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (PyInt_Check(key)) {
|
||||
return KX_PythonSeq_getIndex(self, PyInt_AS_LONG( key ));
|
||||
}
|
||||
else if ( PyString_Check(key) ) {
|
||||
char *name = PyString_AsString(key);
|
||||
PyObjectPlus *ret = KX_PythonSeq_subscript__internal(self, name);
|
||||
|
||||
if(ret) {
|
||||
return ret->GetProxy();
|
||||
} else {
|
||||
PyErr_Format( PyExc_KeyError, "requested item \"%s\" does not exist", name);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
PyErr_SetString( PyExc_TypeError, "expected a string or an index" );
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static int KX_PythonSeq_contains(PyObject *self, PyObject *key)
|
||||
{
|
||||
PyObjectPlus *self_plus= BGE_PROXY_REF(((KX_PythonSeq *)self)->base);
|
||||
|
||||
if(self_plus==NULL) {
|
||||
PyErr_SetString(PyExc_SystemError, "key in seq, KX_PythonSeq: "BGE_PROXY_ERROR_MSG);
|
||||
return -1;
|
||||
}
|
||||
if(!PyString_Check(key)) {
|
||||
PyErr_SetString(PyExc_SystemError, "key in seq, KX_PythonSeq: key must be a string");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(KX_PythonSeq_subscript__internal(self, PyString_AsString(key)))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Matches python dict.get(key, [default]) */
|
||||
PyObject* KX_PythonSeq_get(PyObject * self, PyObject *args)
|
||||
{
|
||||
char *key;
|
||||
PyObject* def = Py_None;
|
||||
PyObjectPlus* ret_plus;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "s|O:get", &key, &def))
|
||||
return NULL;
|
||||
|
||||
if((ret_plus = KX_PythonSeq_subscript__internal(self, key)))
|
||||
return ret_plus->GetProxy();
|
||||
|
||||
Py_INCREF(def);
|
||||
return def;
|
||||
}
|
||||
|
||||
PySequenceMethods KX_PythonSeq_as_sequence = {
|
||||
NULL, /* Cant set the len otherwise it can evaluate as false */
|
||||
NULL, /* sq_concat */
|
||||
NULL, /* sq_repeat */
|
||||
NULL, /* sq_item */
|
||||
NULL, /* sq_slice */
|
||||
NULL, /* sq_ass_item */
|
||||
NULL, /* sq_ass_slice */
|
||||
(objobjproc)KX_PythonSeq_contains, /* sq_contains */
|
||||
};
|
||||
|
||||
static PyMappingMethods KX_PythonSeq_as_mapping = {
|
||||
KX_PythonSeq_len, /* mp_length */
|
||||
KX_PythonSeq_subscript, /* mp_subscript */
|
||||
0, /* mp_ass_subscript */
|
||||
};
|
||||
|
||||
PyMethodDef KX_PythonSeq_methods[] = {
|
||||
// dict style access for props
|
||||
{"get",(PyCFunction) KX_PythonSeq_get, METH_VARARGS},
|
||||
{NULL,NULL} //Sentinel
|
||||
};
|
||||
|
||||
/*
|
||||
* Initialize the interator index
|
||||
@ -241,7 +308,7 @@ static PyMappingMethods KX_PythonSeq_as_mapping = {
|
||||
static PyObject *KX_PythonSeq_getIter(KX_PythonSeq *self)
|
||||
{
|
||||
if(BGE_PROXY_REF(self->base)==NULL) {
|
||||
PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG);
|
||||
PyErr_SetString(PyExc_SystemError, "for i in seq: "BGE_PROXY_ERROR_MSG);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -323,7 +390,7 @@ PyTypeObject KX_PythonSeq_Type = {
|
||||
/* Method suites for standard classes */
|
||||
|
||||
NULL, /* PyNumberMethods *tp_as_number; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
&KX_PythonSeq_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
||||
&KX_PythonSeq_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
||||
|
||||
/* More standard operations (here for binary compatibility) */
|
||||
@ -361,7 +428,7 @@ PyTypeObject KX_PythonSeq_Type = {
|
||||
( iternextfunc ) KX_PythonSeq_nextIter, /* iternextfunc tp_iternext; */
|
||||
|
||||
/*** Attribute descriptor and subclassing stuff ***/
|
||||
NULL, /* struct PyMethodDef *tp_methods; */
|
||||
KX_PythonSeq_methods, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMemberDef *tp_members; */
|
||||
NULL, /* struct PyGetSetDef *tp_getset; */
|
||||
NULL, /* struct _typeobject *tp_base; */
|
||||
|
@ -979,6 +979,7 @@ void CcdPhysicsController::setScaling(float scaleX,float scaleY,float scaleZ)
|
||||
|
||||
if (m_object && m_object->getCollisionShape())
|
||||
{
|
||||
m_object->activate(true); // without this, sleeping objects scale wont be applied in bullet if python changes the scale - Campbell.
|
||||
m_object->getCollisionShape()->setLocalScaling(m_cci.m_scaling);
|
||||
|
||||
//printf("no inertia recalc for fixed objects with mass=0\n");
|
||||
|
@ -6,22 +6,29 @@ The Blender Game Engine Python API Reference
|
||||
|
||||
See U{release notes<http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.49/Game_Engine>} for updates, changes and new functionality in the Game Engine Python API.
|
||||
|
||||
Top Module:
|
||||
-----------
|
||||
|
||||
- L{GameLogic}
|
||||
- L{GameKeys}
|
||||
- L{GameTypes}
|
||||
- L{Mathutils}
|
||||
- L{Geometry}
|
||||
- L{BGL}
|
||||
Blender Game Engine Modules:
|
||||
----------------------------
|
||||
|
||||
Modules that include methods for accessing GameEngine data and functions.
|
||||
|
||||
- L{GameLogic} utility functons for game logic.
|
||||
- L{GameKeys} keyboard input and event conversion.
|
||||
- L{Rasterizer} display and rendering.
|
||||
- L{GameTypes} contains all the python types spesific to the GameEngine.
|
||||
|
||||
Undocumented modules:
|
||||
---------------------
|
||||
- VideoTexture
|
||||
- CValue
|
||||
- Expression
|
||||
- PhysicsConstraints
|
||||
|
||||
Additional Modules:
|
||||
-------------------
|
||||
|
||||
These modules have no GameEngine spesific functionality but are useful in many cases.
|
||||
|
||||
- L{Mathutils}
|
||||
- L{Geometry}
|
||||
- L{BGL}
|
||||
|
||||
|
||||
Introduction:
|
||||
|
@ -271,7 +271,7 @@ Documentation for the GameLogic Module.
|
||||
@var KX_PARENT_REMOVE:
|
||||
@var KX_PARENT_SET:
|
||||
|
||||
@group Shader: MODELMATRIX*, MODELVIEWMATRIX*, VIEWMATRIX*, CAM_POS, CONSTANT_TIMER
|
||||
@group Shader: MODELMATRIX*, MODELVIEWMATRIX*, VIEWMATRIX*, CAM_POS, CONSTANT_TIMER, SHD_TANGENT
|
||||
@var VIEWMATRIX:
|
||||
@var VIEWMATRIX_INVERSE:
|
||||
@var VIEWMATRIX_INVERSETRANSPOSE:
|
||||
@ -285,8 +285,8 @@ Documentation for the GameLogic Module.
|
||||
@var MODELVIEWMATRIX_INVERSETRANSPOSE:
|
||||
@var MODELVIEWMATRIX_TRANSPOSE:
|
||||
@var CAM_POS: Current camera position
|
||||
@var CONSTANT_TIMER: Current camera position
|
||||
@var SHD_TANGENT: Current camera position
|
||||
@var CONSTANT_TIMER: User a timer for the uniform value.
|
||||
@var SHD_TANGENT: Not yet documented.
|
||||
|
||||
@group Blender Material: BL_*
|
||||
@var BL_DST_ALPHA:
|
||||
@ -302,6 +302,13 @@ Documentation for the GameLogic Module.
|
||||
@var BL_ZERO:
|
||||
|
||||
@group Deprecated: addActiveActuator
|
||||
|
||||
@var globalDict: A dictionary that is saved between loading blend files so you can use
|
||||
it to store inventory and other variables you want to store between
|
||||
scenes and blend files. It can also be written to a file and loaded
|
||||
later on with the game load/save actuators.
|
||||
note: only python built in types such as int/string/bool/float/tuples/lists
|
||||
can be saved, GameObjects, Actuators etc will not work as expectred.
|
||||
"""
|
||||
|
||||
import GameTypes
|
||||
@ -441,6 +448,14 @@ def setPhysicsTicRate(ticrate):
|
||||
@type ticrate: float
|
||||
"""
|
||||
|
||||
def EvalExpression(text):
|
||||
"""
|
||||
Evaluate the string as an expression, similar to the expression controller logic brick.
|
||||
@param text: The expression to evaluate.
|
||||
@type text: string
|
||||
@return: The result of the expression. The type depends on the expression.
|
||||
"""
|
||||
|
||||
#{ Utility functions
|
||||
def getAverageFrameRate():
|
||||
"""
|
||||
|
@ -204,6 +204,7 @@ PyObject* initVideoTexture(void)
|
||||
|
||||
#if (PY_VERSION_HEX >= 0x03000000)
|
||||
m = PyModule_Create(&VideoTexture_module_def);
|
||||
PyDict_SetItemString(PySys_GetObject("modules"), VideoTexture_module_def.m_name, m);
|
||||
#else
|
||||
m = Py_InitModule4("VideoTexture", moduleMethods,
|
||||
"Module that allows to play video files on textures in GameBlender.",
|
||||
|
Loading…
Reference in New Issue
Block a user