Esempio n. 1
0
    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)
Esempio n. 2
0
    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())))
Esempio n. 3
0
    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)
Esempio n. 4
0
	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 ()