Пример #1
0
	def traverse(self, iter):
		winner = None
		winnerOrientation = 0
		#print(self.current_edge.id.first, self.current_edge.id.second)
		it = AdjacencyIterator(iter)
		tvertex = self.next_vertex
		if type(tvertex) is TVertex:
			mateVE = tvertex.get_mate(self.current_edge)
			while not it.is_end:
				ve = it.object
				if ve.id == mateVE.id:
					winner = ve
					if not it.is_incoming:
						winnerOrientation = 1
					else:
						winnerOrientation = 0
					break
				it.increment()
		else:
			## case of NonTVertex
			natures = [Nature.SILHOUETTE,Nature.BORDER,Nature.CREASE,Nature.SUGGESTIVE_CONTOUR,Nature.VALLEY,Nature.RIDGE]
			for nat in natures:
				if (self.current_edge.nature & nat) != 0:
					count=0
					while not it.is_end:
						ve = it.object
						if (ve.nature & nat) != 0:
							count = count+1
							winner = ve
							if not it.is_incoming:
								winnerOrientation = 1
							else:
								winnerOrientation = 0
						it.increment()
					if count != 1:
						winner = None
					break
		if winner is not None:
			# check whether this edge was part of the selection
			if winner.time_stamp != CF.get_time_stamp():
				#print("---", winner.id.first, winner.id.second)
				# nw let's compute the length of this connex non selected part:
				connexl = 0
				_cit = pyChainSilhouetteGenericIterator(0,0)
				_cit.begin = winner
				_cit.current_edge = winner
				_cit.orientation = winnerOrientation
				_cit.init()
				while _cit.is_end == 0 and _cit.object.time_stamp != CF.get_time_stamp():
					ve = _cit.object
					#print("-------- --------", ve.id.first, ve.id.second)
					connexl = connexl + ve.length_2d
					_cit.increment()
				if connexl > self._length:
					winner = None
		return winner
Пример #2
0
 def checkViewEdge(self, ve, orientation):
     if orientation != 0:
         vertex = ve.second_svertex()
     else:
         vertex = ve.first_svertex()
     it = AdjacencyIterator(vertex, 1, 1)
     while not it.is_end:
         ave = it.object
         if self._isExternalContour(ave):
             return 1
         it.increment()
     print("pyExternlContourChainingIterator : didn't find next edge")
     return 0
Пример #3
0
	def checkViewEdge(self, ve, orientation):
		if orientation != 0:
			vertex = ve.second_svertex()
		else:
			vertex = ve.first_svertex()
		it = AdjacencyIterator(vertex,1,1)
		while not it.is_end:
			ave = it.object
			if self._isExternalContour(ave):
				return 1
			it.increment()
		print("pyExternlContourChainingIterator : didn't find next edge")
		return 0
Пример #4
0
 def traverse(self, iter):
     winner = None
     it = AdjacencyIterator(iter)
     while not it.is_end:
         ve = it.object
         if ve.id == self.current_edge.id:
             it.increment()
             continue
         winner = ve
         it.increment()
     if winner is None:
         winner = self.current_edge
     if winner.chaining_time_stamp == self._timeStamp:
         return None
     return winner
Пример #5
0
 def traverse(self, iter):
     winner = None
     it = AdjacencyIterator(iter)
     tvertex = self.next_vertex
     if type(tvertex) is TVertex:
         mateVE = tvertex.get_mate(self.current_edge)
         while not it.is_end:
             ve = it.object
             if ve.id == mateVE.id:
                 winner = ve
                 break
             it.increment()
     else:
         ## case of NonTVertex
         natures = [
             Nature.SILHOUETTE,
             Nature.BORDER,
             Nature.CREASE,
             Nature.SUGGESTIVE_CONTOUR,
             Nature.VALLEY,
             Nature.RIDGE,
         ]
         for i in range(len(natures)):
             currentNature = self.current_edge.nature
             if (natures[i] & currentNature) != 0:
                 count = 0
                 while not it.is_end:
                     visitNext = 0
                     oNature = it.object.nature
                     if (oNature & natures[i]) != 0:
                         if natures[i] != oNature:
                             for j in range(i):
                                 if (natures[j] & oNature) != 0:
                                     visitNext = 1
                                     break
                             if visitNext != 0:
                                 break
                         count = count + 1
                         winner = it.object
                     it.increment()
                 if count != 1:
                     winner = None
                 break
     return winner
Пример #6
0
 def findOrientation(self, tv, ve):
     mateVE = tv.get_mate(ve)
     if ve.qi != 0 or mateVE.qi != 0:
         ait = AdjacencyIterator(tv, 1, 0)
         winner = None
         incoming = True
         while not ait.is_end:
             ave = ait.object
             if ave.id != ve.id and ave.id != mateVE.id:
                 winner = ait.object
                 if not ait.isIncoming():  # FIXME
                     incoming = False
                     break
             ait.increment()
         if winner is not None:
             if not incoming:
                 direction = self._Get2dDirection(winner.last_fedge)
             else:
                 direction = self._Get2dDirection(winner.first_fedge)
             return direction
     return None
Пример #7
0
	def findOrientation(self, tv, ve):
		mateVE = tv.get_mate(ve)
		if ve.qi != 0 or mateVE.qi != 0:
			ait = AdjacencyIterator(tv,1,0)
			winner = None
			incoming = True
			while not ait.is_end:
				ave = ait.object
				if  ave.id != ve.id and ave.id != mateVE.id:
					winner = ait.object
					if not ait.isIncoming(): # FIXME
						incoming = False
						break
				ait.increment()
			if winner is not None:
				if not incoming:
					direction = self._Get2dDirection(winner.last_fedge)
				else:
					direction = self._Get2dDirection(winner.first_fedge)
				return direction
		return None
Пример #8
0
 def traverse(self, iter):
     winner = None
     winnerOrientation = 0
     #print(self.current_edge.id.first, self.current_edge.id.second)
     it = AdjacencyIterator(iter)
     tvertex = self.next_vertex
     if type(tvertex) is TVertex:
         mateVE = tvertex.get_mate(self.current_edge)
         while not it.is_end:
             ve = it.object
             if ve.id == mateVE.id:
                 winner = ve
                 if not it.is_incoming:
                     winnerOrientation = 1
                 else:
                     winnerOrientation = 0
                 break
             it.increment()
     else:
         ## case of NonTVertex
         natures = [
             Nature.SILHOUETTE, Nature.BORDER, Nature.CREASE,
             Nature.SUGGESTIVE_CONTOUR, Nature.VALLEY, Nature.RIDGE
         ]
         for nat in natures:
             if (self.current_edge.nature & nat) != 0:
                 count = 0
                 while not it.is_end:
                     ve = it.object
                     if (ve.nature & nat) != 0:
                         count = count + 1
                         winner = ve
                         if not it.is_incoming:
                             winnerOrientation = 1
                         else:
                             winnerOrientation = 0
                     it.increment()
                 if count != 1:
                     winner = None
                 break
     if winner is not None:
         # check whether this edge was part of the selection
         if winner.time_stamp != CF.get_time_stamp():
             #print("---", winner.id.first, winner.id.second)
             # nw let's compute the length of this connex non selected part:
             connexl = 0
             _cit = pyChainSilhouetteGenericIterator(0, 0)
             _cit.begin = winner
             _cit.current_edge = winner
             _cit.orientation = winnerOrientation
             _cit.init()
             while _cit.is_end == 0 and _cit.object.time_stamp != CF.get_time_stamp(
             ):
                 ve = _cit.object
                 #print("-------- --------", ve.id.first, ve.id.second)
                 connexl = connexl + ve.length_2d
                 _cit.increment()
             if connexl > self._length:
                 winner = None
     return winner
Пример #9
0
 def traverse(self, iter):
     winner = None
     it = AdjacencyIterator(iter)
     tvertex = self.next_vertex
     if type(tvertex) is TVertex:
         mateVE = tvertex.get_mate(self.current_edge)
         while not it.is_end:
             ve = it.object
             if ve.id == mateVE.id:
                 winner = ve
                 break
             it.increment()
     else:
         ## case of NonTVertex
         natures = [
             Nature.SILHOUETTE, Nature.BORDER, Nature.CREASE,
             Nature.SUGGESTIVE_CONTOUR, Nature.VALLEY, Nature.RIDGE
         ]
         for i in range(len(natures)):
             currentNature = self.current_edge.nature
             if (natures[i] & currentNature) != 0:
                 count = 0
                 while not it.is_end:
                     visitNext = 0
                     oNature = it.object.nature
                     ve = it.object
                     if ve.id == self.current_edge.id:
                         it.increment()
                         continue
                     if (oNature & natures[i]) != 0:
                         if (natures[i] != oNature) != 0:
                             for j in range(i):
                                 if (natures[j] & oNature) != 0:
                                     visitNext = 1
                                     break
                             if visitNext != 0:
                                 break
                         count = count + 1
                         winner = ve
                     it.increment()
                 if count != 1:
                     winner = None
                 break
     if winner is None:
         winner = self.current_edge
     if winner.chaining_time_stamp == self._timeStamp:
         winner = None
     return winner
Пример #10
0
	def traverse(self, iter):
		winner = None
		found = False
		it = AdjacencyIterator(iter)
		while not it.is_end:
			ve = it.object
			if ve.id == self.current_edge.id:
				found = True
				it.increment()
				continue
			winner = ve
			it.increment()
		if not found:
			# This is a fatal error condition: self.current_edge must be found
			# among the edges seen by the AdjacencyIterator [bug #35695].
			if bpy.app.debug_freestyle:
				print('pySketchyChainingIterator: current edge not found')
			return None
		if winner is None:
			winner = self.current_edge
		if winner.chaining_time_stamp == self._timeStamp:
			return None
		return winner
Пример #11
0
 def traverse(self, iter):
     winner = None
     it = AdjacencyIterator(iter)
     while not it.is_end:
         ve = it.object
         if ve.id == self.current_edge.id:
             it.increment()
             continue
         winner = ve
         it.increment()
     if winner is None:
         winner = self.current_edge
     if winner.chaining_time_stamp == self._timeStamp:
         return None
     return winner
Пример #12
0
    def traverse(self, iter):
        winner = None
        it = AdjacencyIterator(iter)
        while not it.is_end:
            ve = it.object
            if self._isExternalContour(ve):
                if ve.time_stamp == CF.get_time_stamp():
                    winner = ve
            it.increment()

        self._nEdges = self._nEdges + 1
        if winner is None:
            orient = 1
            it = AdjacencyIterator(iter)
            while not it.is_end:
                ve = it.object
                if it.is_incoming:
                    orient = 0
                good = self.checkViewEdge(ve, orient)
                if good != 0:
                    winner = ve
                it.increment()
        return winner
Пример #13
0
	def traverse(self, iter):
		winner = None
		it = AdjacencyIterator(iter)
		while not it.is_end:
			ve = it.object
			if self._isExternalContour(ve):
				if ve.time_stamp == CF.get_time_stamp():
					winner = ve
			it.increment()
		
		self._nEdges = self._nEdges+1
		if winner is None:
			orient = 1
			it = AdjacencyIterator(iter)
			while not it.is_end:
				ve = it.object
				if it.is_incoming:
					orient = 0
				good = self.checkViewEdge(ve,orient)
				if good != 0:
					winner = ve
				it.increment()
		return winner
Пример #14
0
 def traverse(self, iter):
     winner = None
     found = False
     it = AdjacencyIterator(iter)
     while not it.is_end:
         ve = it.object
         if ve.id == self.current_edge.id:
             found = True
             it.increment()
             continue
         winner = ve
         it.increment()
     if not found:
         # This is a fatal error condition: self.current_edge must be found
         # among the edges seen by the AdjacencyIterator [bug #35695].
         if bpy.app.debug_freestyle:
             print('pySketchyChainingIterator: current edge not found')
         return None
     if winner is None:
         winner = self.current_edge
     if winner.chaining_time_stamp == self._timeStamp:
         return None
     return winner
Пример #15
0
    def traverse(self, iter):
        winner = None
        winnerOrientation = 0
        print(self.current_edge.id.first, self.current_edge.id.second)
        it = AdjacencyIterator(iter)
        tvertex = self.next_vertex
        if type(tvertex) is TVertex:
            mateVE = tvertex.get_mate(self.current_edge)
            while not it.is_end:
                ve = it.object
                if ve.id == mateVE.id:
                    winner = ve
                    if not it.is_incoming:
                        winnerOrientation = 1
                    else:
                        winnerOrientation = 0
                    break
                it.increment()
        else:
            ## case of NonTVertex
            natures = [
                Nature.SILHOUETTE, Nature.BORDER, Nature.CREASE,
                Nature.SUGGESTIVE_CONTOUR, Nature.VALLEY, Nature.RIDGE
            ]
            for nat in natures:
                if (self.current_edge.nature & nat) != 0:
                    count = 0
                    while not it.is_end:
                        ve = it.object
                        if (ve.nature & nat) != 0:
                            count = count + 1
                            winner = ve
                            if not it.is_incoming:
                                winnerOrientation = 1
                            else:
                                winnerOrientation = 0
                        it.increment()
                    if count != 1:
                        winner = None
                    break
        if winner is not None:
            # check whether this edge was part of the selection
            if winner.qi != 0:
                #print("---", winner.id.first, winner.id.second)
                # if not, let's check whether it's short enough with
                # respect to the chain made without staying in the selection
                #------------------------------------------------------------
                # Did we compute the prospective chain length already ?
                if self._length == 0:
                    #if not, let's do it
                    _it = pyChainSilhouetteGenericIterator(0, 0)
                    _it.begin = winner
                    _it.current_edge = winner
                    _it.orientation = winnerOrientation
                    _it.init()
                    while not _it.is_end:
                        ve = _it.object
                        #print("--------", ve.id.first, ve.id.second)
                        self._length = self._length + ve.length_2d
                        _it.increment()
                        if _it.is_begin:
                            break
                    _it.begin = winner
                    _it.current_edge = winner
                    _it.orientation = winnerOrientation
                    if not _it.is_begin:
                        _it.decrement()
                        while (not _it.is_end) and (not _it.is_begin):
                            ve = _it.object
                            #print("--------", ve.id.first, ve.id.second)
                            self._length = self._length + ve.length_2d
                            _it.decrement()

                # let's do the comparison:
                # nw let's compute the length of this connex non selected part:
                connexl = 0
                _cit = pyChainSilhouetteGenericIterator(0, 0)
                _cit.begin = winner
                _cit.current_edge = winner
                _cit.orientation = winnerOrientation
                _cit.init()
                while not _cit.is_end and _cit.object.qi != 0:
                    ve = _cit.object
                    #print("-------- --------", ve.id.first, ve.id.second)
                    connexl = connexl + ve.length_2d
                    _cit.increment()
                if (connexl > self._percent * self._length) or (
                        connexl > self._absLength):
                    winner = None
        return winner
Пример #16
0
 def traverse(self, iter):
     winner = None
     it = AdjacencyIterator(iter)
     tvertex = self.next_vertex
     if type(tvertex) is TVertex:
         mateVE = tvertex.get_mate(self.current_edge)
         while not it.is_end:
             ve = it.object
             feB = self.current_edge.last_fedge
             feA = ve.first_fedge
             vB = feB.second_svertex
             vA = feA.first_svertex
             if vA.id.first == vB.id.first:
                 winner = ve
                 break
             feA = self.current_edge.first_fedge
             feB = ve.last_fedge
             vB = feB.second_svertex
             vA = feA.first_svertex
             if vA.id.first == vB.id.first:
                 winner = ve
                 break
             feA = self.current_edge.last_fedge
             feB = ve.last_fedge
             vB = feB.second_svertex
             vA = feA.second_svertex
             if vA.id.first == vB.id.first:
                 winner = ve
                 break
             feA = self.current_edge.first_fedge
             feB = ve.first_fedge
             vB = feB.first_svertex
             vA = feA.first_svertex
             if vA.id.first == vB.id.first:
                 winner = ve
                 break
             it.increment()
     else:
         ## case of NonTVertex
         natures = [
             Nature.SILHOUETTE, Nature.BORDER, Nature.CREASE,
             Nature.SUGGESTIVE_CONTOUR, Nature.VALLEY, Nature.RIDGE
         ]
         for i in range(len(natures)):
             currentNature = self.current_edge.nature
             if (natures[i] & currentNature) != 0:
                 count = 0
                 while not it.is_end:
                     visitNext = 0
                     oNature = it.object.nature
                     if (oNature & natures[i]) != 0:
                         if natures[i] != oNature:
                             for j in range(i):
                                 if (natures[j] & oNature) != 0:
                                     visitNext = 1
                                     break
                             if visitNext != 0:
                                 break
                         count = count + 1
                         winner = it.object
                     it.increment()
                 if count != 1:
                     winner = None
                 break
     return winner
Пример #17
0
	def traverse(self, iter):
		winner = None
		winnerOrientation = 0
		#print(self.current_edge.id.first, self.current_edge.id.second)
		it = AdjacencyIterator(iter)
		tvertex = self.next_vertex
		if type(tvertex) is TVertex:
			mateVE = tvertex.get_mate(self.current_edge)
			while not it.is_end:
				ve = it.object
				if ve.id == mateVE.id:
					winner = ve
					if not it.is_incoming:
						winnerOrientation = 1
					else:
						winnerOrientation = 0
					break
				it.increment()
		else:
			## case of NonTVertex
			natures = [Nature.SILHOUETTE,Nature.BORDER,Nature.CREASE,Nature.SUGGESTIVE_CONTOUR,Nature.VALLEY,Nature.RIDGE]
			for nat in natures:
				if (self.current_edge.nature & nat) != 0:
					count=0
					while not it.is_end:
						ve = it.object
						if (ve.nature & nat) != 0:
							count = count+1
							winner = ve
							if not it.is_incoming:
								winnerOrientation = 1
							else:
								winnerOrientation = 0
						it.increment()
					if count != 1:
						winner = None
					break
		if winner is not None:
			# check whether this edge was part of the selection
			if winner.qi != 0:
				#print("---", winner.id.first, winner.id.second)
				# if not, let's check whether it's short enough with
				# respect to the chain made without staying in the selection
				#------------------------------------------------------------
				# Did we compute the prospective chain length already ?
				if self._length == 0:
					#if not, let's do it
					_it = pyChainSilhouetteGenericIterator(0,0)
					_it.begin = winner
					_it.current_edge = winner
					_it.orientation = winnerOrientation
					_it.init()
					while not _it.is_end:
						ve = _it.object
						#print("--------", ve.id.first, ve.id.second)
						self._length = self._length + ve.length_2d
						_it.increment()
						if _it.is_begin:
							break;
					_it.begin = winner
					_it.current_edge = winner
					_it.orientation = winnerOrientation
					if not _it.is_begin:
						_it.decrement()
						while (not _it.is_end) and (not _it.is_begin):
							ve = _it.object
							#print("--------", ve.id.first, ve.id.second)
							self._length = self._length + ve.length_2d
							_it.decrement()

				# let's do the comparison:
				# nw let's compute the length of this connex non selected part:
				connexl = 0
				_cit = pyChainSilhouetteGenericIterator(0,0)
				_cit.begin = winner
				_cit.current_edge = winner
				_cit.orientation = winnerOrientation
				_cit.init()
				while not _cit.is_end and _cit.object.qi != 0:
					ve = _cit.object
					#print("-------- --------", ve.id.first, ve.id.second)
					connexl = connexl + ve.length_2d
					_cit.increment()
				if (connexl > self._percent * self._length) or (connexl > self._absLength):
					winner = None
		return winner