def pasteNodes(self, clipboard): # if DEBUG_MODE: print('>> WorkArea.pasteNodes ...') nodes = [] links = [] dom = QtXml.QDomDocument('clipboard') dom.setContent(clipboard.text()) root = dom.documentElement() if root.nodeName() == 'node': nodes.append(self.nodeNet.addNodeFromXML(root)) self.nodeNet.correct_id(nodes, links) elif root.nodeName() == 'nodenet': #print ':: parsing nodenet from XML ...' nodeNet = NodeNetwork('tmp', root) (nodes, links) = self.nodeNet.add(nodeNet) else: print '!! unknown XML document format' return offsetPos = QtCore.QPointF(self.minGap, self.minGap / 2) self.deselectAllNodes() for node in nodes: self.addGfxNode(node, offsetPos) for link in links: self.addGfxLink(link)
def insertNodeNet(self, filename, pos=None): # if DEBUG_MODE: print('>> WorkArea.insertNodeNet filename = ' + filename) if DEBUG_MODE: print(">> WorkArea.insertNodeNet (before) nodes = %d links = %d" % (len(self.nodeNet.nodes.values()), len(self.nodeNet.links.values()))) (nodes, links) = self.nodeNet.insert(normPath(filename)) if pos == None: # on dblclk -- insert node at left border of sceneBound sceneBound = self.scene().itemsBoundingRect() if not sceneBound.isNull(): x_offset = sceneBound.x() - self.minGap pos = QtCore.QPointF(x_offset, 0) self.deselectAllNodes() for node in nodes: self.addGfxNode(node, pos) for link in links: self.addGfxLink(link) if DEBUG_MODE: print('>> WorkArea.insertNodeNet (after) nodes = %d links = %d' % (len(self.nodeNet.nodes.values()), len(self.nodeNet.links.values())))
def duplicateNodes(self, preserveLinks=False): # if DEBUG_MODE: print('>> WorkArea.duplicateNode ( preserveLinks = %s )' % str(preserveLinks)) dupNodeNet = NodeNetwork('duplicate') for gfxNode in self.selectedNodes: dupNode = gfxNode.node.copy() dupNodeNet.addNode(dupNode) for gfxNode in self.selectedNodes: for link in gfxNode.node.getInputLinks(): #link.printInfo () dupLink = link.copy() dupDstNode = dupNodeNet.getNodeByID(gfxNode.node.id) if dupDstNode is not None: dupDstParam = dupDstNode.getInputParamByName( link.dstParam.name) dupLink.setDst(dupDstNode, dupDstParam) (srcNode, srcParam) = dupLink.getSrc() dupSrcNode = dupNodeNet.getNodeByID(srcNode.id) if dupSrcNode is not None: # if srcNode is inside dupNodeNet dupSrcParam = dupSrcNode.getOutputParamByName( srcParam.name) dupLink.setSrc(dupSrcNode, dupSrcParam) dupNodeNet.addLink(dupLink) else: # if this is outside links if preserveLinks: dupNodeNet.addLink(dupLink) else: dupLink.setSrc(None, None) dupLink.setDst(None, None) #if DEBUG_MODE : dupNodeNet.printInfo () (nodes, links) = self.nodeNet.add(dupNodeNet) offsetPos = QtCore.QPointF(self.minGap, self.minGap / 2) self.deselectAllNodes() for node in nodes: self.addGfxNode(node, offsetPos) for link in links: self.addGfxLink(link)
def adjust ( self ) : # from meShaderEd import getDefaultValue self.isStraight = getDefaultValue ( app_settings, 'WorkArea', 'straight_links' ) if self.srcConnector is not None : self.srcPoint = self.srcConnector.getCenterPoint () if self.dstConnector is not None : self.dstPoint = self.dstConnector.getCenterPoint () self.prepareGeometryChange () del self.points [ : ] # clear bezier points self.path = None if self.srcPoint is not None and self.dstPoint is not None : self.path = QtGui.QPainterPath () # first point self.points.append ( self.srcPoint ) self.path.moveTo ( self.points [ 0 ] ) # draw curved spline if isStraight is False if not self.isStraight : # hull spline hull = QtCore.QRectF ( self.srcPoint, self.dstPoint ) centerX = hull.center ().x () centerY = hull.center ().y () # second point offsetVX = min ( abs ( hull.topRight ().x () - hull.topLeft ().x () ) * 0.1, 40 ) offsetVY = 0.0 p1 = self.srcPoint + QtCore.QPointF ( offsetVX, offsetVY ) self.points.append ( p1 ) # third point p2 = QtCore.QPointF ( centerX, self.srcPoint.y() ) self.points.append ( p2 ) # fourth point p3 = QtCore.QPointF ( centerX, centerY ) self.points.append ( p3 ) # fifth point (bezier tangent) p4 = QtCore.QPointF ( centerX, centerY ) self.points.append ( p4 ) # sixth point p5 = QtCore.QPointF ( centerX, self.dstPoint.y() ) self.points.append ( p5 ) # seventh point p6 = self.dstPoint - QtCore.QPointF ( offsetVX, offsetVY ) self.points.append ( p6 ) # last point self.points.append ( self.dstPoint ) if self.isStraight : #if DEBUG_MODE : print '* GfxLink: Straight mode' self.path.lineTo ( self.dstPoint ) else: #if DEBUG_MODE : print '* GfxLink: Curved mode' #self.path.cubicTo ( self.points[1], self.points[2], self.points[3] ) #self.path.cubicTo ( self.points[5], self.points[6], self.points[7] ) self.path.cubicTo ( p1, p1, p3 ) self.path.cubicTo ( p6, p6, self.dstPoint ) self.rect = self.path.boundingRect ()