Exemple #1
0
 def boundingbox(self, start, end, divid):
     step = (end - start) / divid
     cuts = [
         point_on_vector(self.a, self.b, self.c, self.d, start + t * step)
         for t in range(divid + 1)
     ]
     return get_boundingbox(cuts)
Exemple #2
0
def get_verts_body(spline,ssegs,scale):
	verts = []
	for index in range(len(spline.bezier_points)):
		a,b,c,d = spline.get_segment(index)
		for j in range(ssegs):
			t = (1/ssegs)*j
			newvert = point_on_vector(a,b,c,d,t)
			verts.append(newvert*scale)
	return verts
Exemple #3
0
def get_inout_segments(me, targ):
	inner,outer = [],[]
	for index in range(len(me.bezier_points)):
		a,b,c,d = me.get_segment(index)
		p = point_on_vector(a, b, c, d, 0.5)
		if is_point_in_spline(p, targ):
			inner.append(index)
		else:
			outer.append(index)
	return inner,outer
Exemple #4
0
def get_verts_pipe(spline,ssegs,scale):
	verts = []
	if spline.use_cyclic_u:
		for index in range(len(spline.bezier_points)):
			a,b,c,d = spline.get_segment(index)
			for j in range(ssegs):
				t = (1/ssegs)*j
				newvert = point_on_vector(a,b,c,d,t)
				verts.append(newvert*scale)
	else:
		for index in range(len(spline.bezier_points)-1):
			a,b,c,d = spline.get_segment(index)
			for j in range(ssegs):
				t = (1/ssegs)*j
				newvert = point_on_vector(a,b,c,d,t)
				verts.append(newvert*scale)
			if index == len(spline.bezier_points)-2:
				verts.append(d*scale)
	return verts
Exemple #5
0
 def get_length(self, steps=100):
     points = [self.a]
     s = 1 / steps
     for i in range(1, steps + 1):
         t = i * s
         p = point_on_vector(self.a, self.b, self.c, self.d, t)
         points.append(p)
     lenght = 0
     for i in range(len(points) - 1):
         lenght += get_distance(points[i], points[i - 1])
     return lenght
Exemple #6
0
    def get_point_on_spline(self, time):
        # if time == 1:
        # 	return self.bezier_points[-1].co
        # lengthes, full_length = [], 0
        # for seg in self.get_as_segments():
        # 	length = self.get_segment_length(seg.index, steps=25)
        # 	lengthes.append(length)
        # 	full_length += length
        # length = full_length * time
        # index = 0
        # for i in range(0, len(lengthes)):
        # 	if length < lengthes[i]:
        # 		index = i
        # 		break
        # 	else:
        # 		length -= lengthes[i]
        # time_on_segment = length / lengthes[index]
        # return self.get_point_on_segment(index, time_on_segment)

        lengths, total_length = [], 0
        if time <= 0:
            return self.bezier_points[0].co.copy()
        if time >= 1:
            return self.bezier_points[-1].co.copy()
        else:
            segs = [point for point in self.bezier_points]
            if self.use_cyclic_u:
                segs.append(self.bezier_points[0])
            # collect the segment length
            for i in range(len(segs) - 1):
                a = segs[i].co
                b = segs[i].handle_right
                c = segs[i + 1].handle_left
                d = segs[i + 1].co
                l = get_segment_length(a, b, c, d, 100)
                lengths.append(l)
                total_length += l
            length = total_length * time
            for i in range(len(lengths)):
                if length >= lengths[i]:
                    length -= lengths[i]
                else:
                    index = i
                    break
            a = segs[index].co
            b = segs[index].handle_right
            c = segs[index + 1].handle_left
            d = segs[index + 1].co
            t = length / lengths[index]
        return point_on_vector(a, b, c, d, t)
Exemple #7
0
	def get_segment_length(self, index, steps=100):
		if index <= len(self.bezier_points)-2:
			a,b,c,d = self.get_segment(index)
			points = [a]
			s = 1 / steps
			for i in range(1, steps + 1):
				t = i * s
				p = point_on_vector(a, b, c, d, t)
				points.append(p)
			lenght = 0
			for i in range(len(points) - 1):
				lenght += get_distance(points[i], points[i - 1])
			return lenght
			#bpy.context.active_object.data.splines[0].calc_length()
		return 0
Exemple #8
0
	def get_section_line(self, start, end):
		a = point_on_vector(self.a,self.b,self.c,self.d,start)
		b = point_on_vector(self.a,self.b,self.c,self.d,end)
		return Line(a,b)