diff --git a/rocolib/api/ports/DecorationPort.py b/rocolib/api/ports/DecorationPort.py new file mode 100644 index 0000000000000000000000000000000000000000..aa3f2b236e3f3404f0fcffd2b35f79ea0ace21d2 --- /dev/null +++ b/rocolib/api/ports/DecorationPort.py @@ -0,0 +1,44 @@ +from rocolib.api.ports import Port, FacePort +from rocolib.utils.utils import decorateGraph +import numpy as np + + +class DecorationPort(Port): + def __init__(self, parent, decoration): + Port.__init__(self, parent, {}) + self.decoration = decoration + + def getDecoration(self): + return self.decoration + + def toString(self): + return str(self.decoration) + + def canMate(self, otherPort): + return (otherPort.getFaceName() is not None) + + def attachFrom(self, fromPort, graph, **kwargs): + # If from face to decoration, we can decorate the face + if isinstance(fromPort, FacePort): + face = graph.getFace(fromPort.getFaceName()) + deco = self.getDecoration() + if face is not None: + decorateGraph(face, decoration=deco, **kwargs) + + +class AnchorPort(FacePort): + def __init__(self, parent, graph, face, transform): + FacePort.__init__(self, parent, graph, face) + self.transform = transform + + def getTransform(self): + return self.transform + + def canMate(self, otherPort): + return False + + def attachFrom(self, fromPort, graph, **kwargs): + if isinstance(fromPort, DecorationPort): + deco = fromPort.getDecoration().faces[0] + face = self.getFaceName() + graph.mergeFace(deco.joinedFaces[0][0].name, face, np.dot(self.getTransform(), deco.transform2D))