utils: fix getElementShape()

The mover can now support whole object selection
This commit is contained in:
Zheng, Lei 2018-03-26 15:35:51 +08:00
parent 508fcd7713
commit 6b98f8c7b6

View File

@ -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)