utils: fix getElementShape()
The mover can now support whole object selection
This commit is contained in:
parent
508fcd7713
commit
6b98f8c7b6
30
utils.py
30
utils.py
|
@ -83,41 +83,51 @@ def getElementShape(obj,tp=None,transform=False):
|
||||||
if not isinstance(obj,(tuple,list)):
|
if not isinstance(obj,(tuple,list)):
|
||||||
shape = obj
|
shape = obj
|
||||||
else:
|
else:
|
||||||
sobj,mat,shape = obj[0].getSubObject(obj[1],2,transform=transform)
|
shape,mat,sobj = Part.getShape(obj[0],subname=obj[1],
|
||||||
|
needSubElement=True,retType=2,transform=transform)
|
||||||
if not sobj:
|
if not sobj:
|
||||||
|
logger.trace('no sub object {}'.format(obj))
|
||||||
return
|
return
|
||||||
if not shape:
|
if shape.isNull():
|
||||||
if sobj.TypeId == 'App::Line':
|
if sobj.TypeId == 'App::Line':
|
||||||
if tp not in (Part.Shape,Part.Edge):
|
if tp not in (None,Part.Shape,Part.Edge):
|
||||||
|
logger.trace('wrong type of shape {}'.format(obj))
|
||||||
return
|
return
|
||||||
shape = Part.makeLine(
|
size = sobj.ViewObject.Size
|
||||||
FreeCAD.Vector(-1,0,0),FreeCAD.Vector(-1,0,0))
|
shape = Part.makeLine(FreeCAD.Vector(-size,0,0),
|
||||||
|
FreeCAD.Vector(size,0,0))
|
||||||
shape.transformShape(mat,False,True)
|
shape.transformShape(mat,False,True)
|
||||||
return shape
|
return shape
|
||||||
elif sobj.TypeId == 'App::Plane':
|
elif sobj.TypeId == 'App::Plane':
|
||||||
if tp not in (Part.Shape, Part.Face):
|
if tp not in (None, Part.Shape, Part.Face):
|
||||||
|
logger.trace('wrong type of shape {}'.format(obj))
|
||||||
return
|
return
|
||||||
shape = Part.makePlane(2,2,FreeCAD.Vector(-1,-1,0))
|
size = sobj.ViewObject.Size
|
||||||
|
shape = Part.makePlane(size*2,size*2,
|
||||||
|
FreeCAD.Vector(-size,-size,0))
|
||||||
shape.transformShape(mat,False,True)
|
shape.transformShape(mat,False,True)
|
||||||
return shape
|
return shape
|
||||||
else:
|
else:
|
||||||
|
logger.trace('no shape {}'.format(obj))
|
||||||
return
|
return
|
||||||
|
|
||||||
if not isinstance(shape,Part.Shape) or shape.isNull():
|
if not isinstance(shape,Part.Shape) or shape.isNull():
|
||||||
|
logger.trace('null shape {}'.format(obj))
|
||||||
return
|
return
|
||||||
|
|
||||||
if not tp or isinstance(shape,tp):
|
if not tp or isinstance(shape,tp):
|
||||||
return shape
|
return shape
|
||||||
elif isinstance(shape,(Part.Vertex,Part.Edge,Part.Face)):
|
elif isinstance(shape,(Part.Vertex,Part.Edge,Part.Face)):
|
||||||
|
logger.trace('wrong shape type {}'.format(obj))
|
||||||
return
|
return
|
||||||
elif tp is Part.Vertex:
|
elif tp is Part.Vertex:
|
||||||
if len(Part.Edges):
|
if len(shape.Edges):
|
||||||
return
|
return
|
||||||
v = shape.Vertexes
|
v = shape.Vertexes
|
||||||
if len(v)==1:
|
if len(v)==1:
|
||||||
return v[0]
|
return v[0]
|
||||||
elif tp is Part.Edge:
|
elif tp is Part.Edge:
|
||||||
if len(Part.Faces):
|
if len(shape.Faces):
|
||||||
return
|
return
|
||||||
e = shape.Edges
|
e = shape.Edges
|
||||||
if len(e)==1:
|
if len(e)==1:
|
||||||
|
@ -126,6 +136,8 @@ def getElementShape(obj,tp=None,transform=False):
|
||||||
f = shape.Faces
|
f = shape.Faces
|
||||||
if len(f)==1:
|
if len(f)==1:
|
||||||
return f[0]
|
return f[0]
|
||||||
|
else:
|
||||||
|
logger.trace('wrong shape type {}'.format(obj))
|
||||||
|
|
||||||
def isDraftWire(obj):
|
def isDraftWire(obj):
|
||||||
proxy = getattr(obj,'Proxy',None)
|
proxy = getattr(obj,'Proxy',None)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user