Example #1
0
 def count_bbox(self, objs):
     bbox = []
     for obj in objs:
         if obj.is_selectable():
             bbox = libgeom.sum_bbox(bbox, obj.cache_bbox)
         elif obj.childs:
             bbox = libgeom.sum_bbox(bbox, self.count_bbox(obj.childs))
     return bbox
Example #2
0
 def count_bbox(self, objs):
     bbox = []
     for obj in objs:
         if obj.is_selectable:
             bbox = libgeom.sum_bbox(bbox, obj.cache_bbox)
         elif obj.childs:
             bbox = libgeom.sum_bbox(bbox, self.count_bbox(obj.childs))
     return bbox
Example #3
0
	def create_jobs(self):
		if self.obj_stack:
			m11, m21, m12, m22, dx, dy = SK2_to_PLT_TRAFO

			if self.plt_doc.config.force_zero:
				bbox = []
				bbox += self.obj_stack[0].cache_bbox
				for obj in self.obj_stack:
					bbox = libgeom.sum_bbox(bbox, obj.cache_bbox)

				dx = -bbox[0] * m11
				dy = -bbox[1] * m22

			trafo = [m11, m21, m12, m22, dx, dy]

			obj_num = len(self.obj_stack)
			for obj in self.obj_stack:

				self.counter += 1
				position = float(self.counter) / obj_num
				if position - self.position > 0.05:
					msg = _('Saving in process...')
					events.emit(events.FILTER_INFO, msg, position)
					self.position = position

				paths = libgeom.get_flattened_path(obj, trafo,
									self.plt_doc.config.tolerance)
				if paths is None: continue

				for path in paths:
					if path and path[1]:
						self.jobs.append(plt_model.PltJob('', path))
 def update_bbox(self):
     self.bbox = []
     if self.objs:
         self.bbox += self.objs[0].cache_bbox
         for obj in self.objs:
             self.bbox = sum_bbox(self.bbox, obj.cache_bbox)
     self.update_markers()
Example #5
0
 def cdc_draw_move_frame(self, trafo):
     bbox = self.presenter.selection.bbox
     if bbox:
         cpath = libcairo.convert_bbox_to_cpath(bbox)
         libcairo.apply_trafo(cpath, trafo)
         libcairo.apply_trafo(cpath, self.canvas.trafo)
         bbox = self.cdc_to_int(*libcairo.get_cpath_bbox(cpath))
         frame = self.cdc_bbox_to_frame(bbox)
         if self.frame and frame == self.frame:
             return
         if not self.frame:
             self.frame = frame
         bbox2 = self.cdc_frame_to_bbox(self.frame)
         frame_sum = self.cdc_bbox_to_frame(libgeom.sum_bbox(bbox, bbox2))
         x, y, w, h = self.cdc_normalize_rect(*frame_sum)
         self.frame = frame
         surface = cairo.ImageSurface(cairo.FORMAT_RGB24, w + 2, h + 2)
         ctx = cairo.Context(surface)
         ctx.set_source_surface(self.surface, -x + 1, -y + 1)
         ctx.paint()
         ctx.set_matrix(cairo.Matrix(1.0, 0.0, 0.0, 1.0, -x + 1, -y + 1))
         self._cdc_draw_cpath(ctx, cpath)
         dc = wx.ClientDC(self.canvas)
         dc.DrawBitmap(copy_surface_to_bitmap(surface), x - 1, y - 1)
         self.cdc_reflect_snapping()
Example #6
0
 def cdc_draw_frame(self, start, end, temp_surfase=False):
     if start and end:
         if self.frame:
             if start == self.frame[0] and end == self.frame[1]:
                 return
         cpath = libcairo.convert_bbox_to_cpath(start + end)
         bbox = self.cdc_to_int(*libcairo.get_cpath_bbox(cpath))
         frame = self.cdc_bbox_to_frame(bbox)
         if not self.frame:
             self.frame = frame
         bbox2 = self.cdc_frame_to_bbox(self.frame)
         frame_sum = self.cdc_bbox_to_frame(libgeom.sum_bbox(bbox, bbox2))
         x, y, w, h = self.cdc_normalize_rect(*frame_sum)
         self.frame = frame
         surface = cairo.ImageSurface(cairo.FORMAT_RGB24, w + 2, h + 2)
         ctx = cairo.Context(surface)
         if temp_surfase:
             ctx.set_source_surface(self.temp_surface, -x + 1, -y + 1)
         else:
             ctx.set_source_surface(self.surface, -x + 1, -y + 1)
         ctx.paint()
         ctx.set_matrix(cairo.Matrix(1.0, 0.0, 0.0, 1.0, -x + 1, -y + 1))
         self._cdc_draw_cpath(ctx, cpath)
         self.canvas.dc.put_surface(surface, x - 1, y - 1)
         self.cdc_reflect_snapping()
Example #7
0
	def update_bbox(self):
		self.bbox = []
		if self.objs:
			self.bbox += self.objs[0].cache_bbox
			for obj in self.objs:
				self.bbox = libgeom.sum_bbox(self.bbox, obj.cache_bbox)
		self.update_markers()
Example #8
0
    def create_jobs(self):
        if self.obj_stack:
            m11, m21, m12, m22, dx, dy = SK2_to_PLT_TRAFO

            if self.plt_doc.config.force_zero:
                bbox = []
                bbox += self.obj_stack[0].cache_bbox
                for obj in self.obj_stack:
                    bbox = libgeom.sum_bbox(bbox, obj.cache_bbox)

                dx = -bbox[0] * m11
                dy = -bbox[1] * m22

            trafo = [m11, m21, m12, m22, dx, dy]

            obj_num = len(self.obj_stack)
            for obj in self.obj_stack:

                self.counter += 1
                position = float(self.counter) / obj_num
                if position - self.position > 0.05:
                    msg = _('Saving in process...')
                    events.emit(events.FILTER_INFO, msg, position)
                    self.position = position

                paths = libgeom.get_flattened_path(
                    obj, trafo, self.plt_doc.config.tolerance)
                if paths is None: continue

                for path in paths:
                    if path and path[1]:
                        self.jobs.append(plt_model.PltJob('', path))
Example #9
0
    def do_cutting(self):
        cut_bbox = None
        ret = get_cut_dialog(self.app)
        if ret == gtk.RESPONSE_ACCEPT:
            #Collect all objects

            page = self.doc_presenter.methods.get_pages()[-1]
            objs = []
            for layer in page.childs:
                for obj in layer.childs:
                    objs.append(obj)

            if not objs:
                first = _('Cannot cutting in file')
                sec = _('There are no objects in document.')
                msg = ("%s '%s'.") % (first, config.output_file)
                msg_dialog(self.app.mw, self.app.appdata.app_name, msg, sec)
                return

            try:
                saver = get_saver('file.plt')

                if config.cut_bbox:
                    bbox = []
                    bbox += objs[0].cache_bbox
                    for obj in objs:
                        bbox = libgeom.sum_bbox(bbox, obj.cache_bbox)

                    layer = page.childs[-1]
                    cut_bbox = model.Rectangle(layer.config, layer, bbox)
                    layer.childs.append(cut_bbox)
                    cut_bbox.update()

                pd = ProgressDialog(_('Cutting...'), self.app.mw)
                ret = pd.run(saver, [
                    self.doc_presenter, config.output_file, True, {
                        'tolerance': config.tolerance
                    }
                ])
                if ret == gtk.RESPONSE_OK:
                    if not pd.error_info is None:
                        pd.destroy()
                        raise IOError(*pd.error_info)
                    pd.destroy()
                else:
                    pd.destroy()
                    raise IOError(_('Error while saving'), config.output_file)

            except IOError:
                details = sys.exc_info()[1].__str__() + sys.exc_info(
                )[2].__str__()
                first = _('Cannot cutting!')
                sec = _('Please check file name and write permissions')
                msg = ("%s '%s'.") % (first, config.output_file)

                msg_dialog(self.app.mw, self.app.appdata.app_name, msg, sec,
                           details)
        if not cut_bbox is None:
            self.doc_presenter.methods.delete_object(cut_bbox)
Example #10
0
 def _sum_bbox(bbox0, bbox1):
     if bbox0 is None and bbox1 is None:
         return None
     if bbox0 is None:
         return [] + bbox1
     if bbox1 is None:
         return [] + bbox0
     return libgeom.sum_bbox(bbox0, bbox1)
Example #11
0
	def do_cutting(self):
		cut_bbox = None
		ret = get_cut_dialog(self.app)
		if ret == gtk.RESPONSE_ACCEPT:
			#Collect all objects

			page = self.doc_presenter.methods.get_pages()[-1]
			objs = []
			for layer in page.childs:
				for obj in layer.childs:
					objs.append(obj)

			if not objs:
				first = _('Cannot cutting in file')
				sec = _('There are no objects in document.')
				msg = ("%s '%s'.") % (first, config.output_file)
				msg_dialog(self.app.mw, self.app.appdata.app_name, msg, sec)
				return

			try:
				saver = get_saver('file.plt')

				if config.cut_bbox:
					bbox = []
					bbox += objs[0].cache_bbox
					for obj in objs:
						bbox = libgeom.sum_bbox(bbox, obj.cache_bbox)

					layer = page.childs[-1]
					cut_bbox = model.Rectangle(layer.config, layer, bbox)
					layer.childs.append(cut_bbox)
					cut_bbox.update()

				pd = ProgressDialog(_('Cutting...'), self.app.mw)
				ret = pd.run(saver, [self.doc_presenter,
									config.output_file,
									True,
									{'tolerance':config.tolerance}])
				if ret == gtk.RESPONSE_OK:
					if not pd.error_info is None:
						pd.destroy()
						raise IOError(*pd.error_info)
					pd.destroy()
				else:
					pd.destroy()
					raise IOError(_('Error while saving'), config.output_file)

			except IOError:
				details = sys.exc_info()[1].__str__() + sys.exc_info()[2].__str__()
				first = _('Cannot cutting!')
				sec = _('Please check file name and write permissions')
				msg = ("%s '%s'.") % (first, config.output_file)

				msg_dialog(self.app.mw, self.app.appdata.app_name, msg, sec, details)
		if not cut_bbox is None:
			self.doc_presenter.methods.delete_object(cut_bbox)
Example #12
0
    def create_jobs(self):
        if self.obj_stack:
            m11, m21, m12, m22, dx, dy = SK2_to_PLT_TRAFO

            if self.plt_doc.config.plt_force_zero:
                bbox = []
                bbox += self.obj_stack[0].cache_bbox
                for obj in self.obj_stack:
                    bbox = libgeom.sum_bbox(bbox, obj.cache_bbox)

                dx = -bbox[0] * m11
                dy = -bbox[1] * m22

            trafo = [
                m11 * self.plt_doc.config.plt_scale, m21, m12,
                m22 * self.plt_doc.config.plt_scale, dx, dy
            ]

            obj_num = len(self.obj_stack)
            for obj in self.obj_stack:

                self.counter += 1
                position = float(self.counter) / obj_num
                if position - self.position > 0.05:
                    msg = _('Saving in progress...')
                    events.emit(events.FILTER_INFO, msg, position)
                    self.position = position

                paths = libgeom.get_flattened_paths(
                    obj, trafo, self.plt_doc.config.plt_tolerance)
                if paths is None:
                    continue
                for path in paths:
                    if self.plt_doc.config.plt_optimize:
                        rl = self.plt_doc.config.plt_rounding_level
                        path[0] = [round(x / rl) * rl for x in path[0]]
                        start0, start1 = [], path[0]
                        points = []
                        for point in path[1]:
                            point = [round(x / rl) * rl for x in point]
                            if not point == start1:
                                if point == start0:
                                    points = points[:-1]
                                    if len(points) > 1:
                                        start0, start1 = points[-1], start0
                                    elif points:
                                        start0, start1 = [], start0
                                    continue
                                start0, start1 = start1, point
                                points.append(point)
                        path[1] = points

                    if path and path[1]:
                        self.jobs.append(plt_model.PltJob('', path))
Example #13
0
 def _ellipse(self, element):
     center, chunk = self.read_point(element.params)
     cdp1, chunk = self.read_point(chunk)
     cdp2, chunk = self.read_point(chunk)
     cdp3 = libgeom.contra_point(cdp1, center)
     cdp4 = libgeom.contra_point(cdp2, center)
     bbox = libgeom.sum_bbox(cdp1 + cdp2, cdp3 + cdp4)
     bbox = libgeom.apply_trafo_to_bbox(bbox, self.get_trafo())
     rect = libgeom.bbox_to_rect(bbox)
     circle = sk2_model.Circle(self.layer.config, self.layer, rect,
                               style=self.get_style(fill=True))
     self.layer.childs.append(circle)
Example #14
0
    def fill_radial_tr_gradient(self, obj, pdfpath, fill_trafo, gradient):
        if not fill_trafo:
            fill_trafo = [1.0, 0.0, 0.0, 1.0, 0.0, 0.0]
        stops = gradient[2]
        sp, ep = gradient[1]
        dx, dy = sp
        l = libgeom.distance(sp, ep)
        trafo = [1.0, 0.0, 0.0, 1.0, dx, dy]
        inv_trafo = libgeom.multiply_trafo(libgeom.invert_trafo(fill_trafo),
                                           libgeom.invert_trafo(trafo))
        cv_trafo = libgeom.multiply_trafo(trafo, fill_trafo)
        paths = libgeom.apply_trafo_to_paths(obj.paths, obj.trafo)
        paths = libgeom.apply_trafo_to_paths(paths, inv_trafo)
        bbox = libgeom.sum_bbox(libgeom.get_paths_bbox(paths),
                                [0.0, 0.0, l, 0.0])
        bbox = libgeom.normalize_bbox(bbox)
        d = libgeom.distance(*libgeom.apply_trafo_to_points([[0.0, 0.0],
                                                             [0.0, 1.0]],
                                                            inv_trafo))

        circle_paths = libgeom.get_circle_paths(0.0, 0.0, sk2const.ARC_CHORD)
        trafo = [2.0, 0.0, 0.0, 2.0, -1.0, -1.0]
        circle_paths = libgeom.apply_trafo_to_paths(circle_paths, trafo)

        inner_paths = []
        r = 0.0
        self.canvas.saveState()
        self.canvas.clipPath(pdfpath, 0, 0)
        self.canvas.transform(*cv_trafo)
        while r < l:
            point = r / l
            self.canvas.setFillColor(self.get_grcolor_at_point(stops, point))
            if r + d < l:
                coef = (r + d)
            else:
                coef = l
            trafo = [coef, 0.0, 0.0, coef, 0.0, 0.0]
            paths = libgeom.apply_trafo_to_paths(circle_paths, trafo)
            ring = self.make_pdfpath(inner_paths + paths)[0]
            inner_paths = paths
            self.canvas.drawPath(ring, stroke=0, fill=1)
            r += d

        self.canvas.setFillColor(self.get_grcolor_at_point(stops, 1.0))
        r = max(bbox[2] - bbox[0], bbox[3] - bbox[1])
        trafo = [2.0 * r, 0.0, 0.0, 2.0 * r, 0.0, 0.0]
        paths = libgeom.apply_trafo_to_paths(circle_paths, trafo)
        ring = self.make_pdfpath(inner_paths + paths)[0]
        self.canvas.drawPath(ring, stroke=0, fill=1)

        self.canvas.restoreState()
Example #15
0
    def fill_linear_tr_gradient(self, obj, pdfpath, fill_trafo, gradient):
        if not fill_trafo:
            fill_trafo = [1.0, 0.0, 0.0, 1.0, 0.0, 0.0]
        stops = gradient[2]
        sp, ep = gradient[1]
        dx, dy = sp
        l = libgeom.distance(sp, ep)
        angle = libgeom.get_point_angle(ep, sp)
        m21 = math.sin(angle)
        m11 = m22 = math.cos(angle)
        m12 = -m21
        trafo = [m11, m21, m12, m22, dx, dy]
        inv_trafo = libgeom.multiply_trafo(libgeom.invert_trafo(fill_trafo),
                                           libgeom.invert_trafo(trafo))
        cv_trafo = libgeom.multiply_trafo(trafo, fill_trafo)
        paths = libgeom.apply_trafo_to_paths(obj.paths, obj.trafo)
        paths = libgeom.apply_trafo_to_paths(paths, inv_trafo)
        bbox = libgeom.sum_bbox(libgeom.get_paths_bbox(paths),
                                [0.0, 0.0, l, 0.0])
        bbox = libgeom.normalize_bbox(bbox)

        y = bbox[1]
        d = libgeom.distance(*libgeom.apply_trafo_to_points([[0.0, 0.0],
                                                             [0.0, 1.0]],
                                                            inv_trafo))
        height = bbox[3] - bbox[1]

        self.canvas.saveState()
        self.canvas.clipPath(pdfpath, 0, 0)
        self.canvas.transform(*cv_trafo)

        self.canvas.setFillColor(self.get_grcolor_at_point(stops, 0.0))
        self.canvas.rect(bbox[0], y, 0.0 - bbox[0], height, stroke=0, fill=1)

        x = 0.0
        while x < l:
            point = x / l
            self.canvas.setFillColor(self.get_grcolor_at_point(stops, point))
            if x + d < l:
                width = d
            else:
                width = l - x
            self.canvas.rect(x, y, width, height, stroke=0, fill=1)
            x += d

        self.canvas.setFillColor(self.get_grcolor_at_point(stops, 1.0))
        self.canvas.rect(l, y, bbox[2] - l, height, stroke=0, fill=1)

        self.canvas.restoreState()
Example #16
0
	def fill_radial_tr_gradient(self, obj, pdfpath, fill_trafo, gradient):
		if not fill_trafo:
			fill_trafo = [1.0, 0.0, 0.0, 1.0, 0.0, 0.0]
		stops = gradient[2]
		sp, ep = gradient[1]
		dx, dy = sp
		l = libgeom.distance(sp, ep)
		trafo = [1.0, 0.0, 0.0, 1.0, dx, dy]
		inv_trafo = libgeom.multiply_trafo(libgeom.invert_trafo(fill_trafo),
										libgeom.invert_trafo(trafo))
		cv_trafo = libgeom.multiply_trafo(trafo, fill_trafo)
		paths = libgeom.apply_trafo_to_paths(obj.paths, obj.trafo)
		paths = libgeom.apply_trafo_to_paths(paths, inv_trafo)
		bbox = libgeom.sum_bbox(libgeom.get_paths_bbox(paths),
							[0.0, 0.0, l, 0.0])
		bbox = libgeom.normalize_bbox(bbox)
		d = libgeom.distance(*libgeom.apply_trafo_to_points([[0.0, 0.0],
													[0.0, 1.0]], inv_trafo))

		circle_paths = libgeom.get_circle_paths(0.0, 0.0, sk2_const.ARC_CHORD)
		trafo = [2.0, 0.0, 0.0, 2.0, -1.0, -1.0]
		circle_paths = libgeom.apply_trafo_to_paths(circle_paths, trafo)

		inner_paths = []
		r = 0.0
		self.canvas.saveState()
		self.canvas.clipPath(pdfpath, 0, 0)
		self.canvas.transform(*cv_trafo)
		while r < l:
			point = r / l
			self.canvas.setFillColor(self.get_grcolor_at_point(stops, point))
			if r + d < l: coef = (r + d)
			else: coef = l
			trafo = [coef, 0.0, 0.0, coef, 0.0, 0.0]
			paths = libgeom.apply_trafo_to_paths(circle_paths, trafo)
			ring = self.make_pdfpath(inner_paths + paths)[0]
			inner_paths = paths
			self.canvas.drawPath(ring, stroke=0, fill=1)
			r += d

		self.canvas.setFillColor(self.get_grcolor_at_point(stops, 1.0))
		r = max(bbox[2] - bbox[0], bbox[3] - bbox[1])
		trafo = [2.0 * r, 0.0, 0.0, 2.0 * r, 0.0, 0.0]
		paths = libgeom.apply_trafo_to_paths(circle_paths, trafo)
		ring = self.make_pdfpath(inner_paths + paths)[0]
		self.canvas.drawPath(ring, stroke=0, fill=1)

		self.canvas.restoreState()
Example #17
0
 def update_bbox(self):
     bp = libgeom.apply_trafo_to_point([0.0, 0.0], self.trafo)
     self.cache_bbox = 2 * bp
     index = 0
     for item in self.cache_cpath:
         if not item:
             data = self.cache_layout_data[index]
             bp = [data[0], data[4]]
             bbox = 2 * libgeom.apply_trafo_to_point(bp, self.trafo)
         else:
             bbox = libgeom.get_cpath_bbox(item)
         if not self.cache_bbox:
             self.cache_bbox = bbox
         else:
             self.cache_bbox = libgeom.sum_bbox(self.cache_bbox, bbox)
         index += 1
Example #18
0
	def update_bbox(self):
		bp = libgeom.apply_trafo_to_point([0.0, 0.0], self.trafo)
		self.cache_bbox = 2 * bp
		index = 0
		for item in self.cache_cpath:
			if not item:
				data = self.cache_layout_data[index]
				bp = [data[0], data[4]]
				bbox = 2 * libgeom.apply_trafo_to_point(bp, self.trafo)
			else:
				bbox = libgeom.get_cpath_bbox(item)
			if not self.cache_bbox:
				self.cache_bbox = bbox
			else:
				self.cache_bbox = libgeom.sum_bbox(self.cache_bbox, bbox)
			index += 1
Example #19
0
	def fill_linear_tr_gradient(self, obj, pdfpath, fill_trafo, gradient):
		if not fill_trafo:
			fill_trafo = [1.0, 0.0, 0.0, 1.0, 0.0, 0.0]
		stops = gradient[2]
		sp, ep = gradient[1]
		dx, dy = sp
		l = libgeom.distance(sp, ep)
		angle = libgeom.get_point_angle(ep, sp)
		m21 = math.sin(angle)
		m11 = m22 = math.cos(angle)
		m12 = -m21
		trafo = [m11, m21, m12, m22, dx, dy]
		inv_trafo = libgeom.multiply_trafo(libgeom.invert_trafo(fill_trafo),
										libgeom.invert_trafo(trafo))
		cv_trafo = libgeom.multiply_trafo(trafo, fill_trafo)
		paths = libgeom.apply_trafo_to_paths(obj.paths, obj.trafo)
		paths = libgeom.apply_trafo_to_paths(paths, inv_trafo)
		bbox = libgeom.sum_bbox(libgeom.get_paths_bbox(paths),
							[0.0, 0.0, l, 0.0])
		bbox = libgeom.normalize_bbox(bbox)

		y = bbox[1]
		d = libgeom.distance(*libgeom.apply_trafo_to_points([[0.0, 0.0],
													[0.0, 1.0]], inv_trafo))
		height = bbox[3] - bbox[1]

		self.canvas.saveState()
		self.canvas.clipPath(pdfpath, 0, 0)
		self.canvas.transform(*cv_trafo)

		self.canvas.setFillColor(self.get_grcolor_at_point(stops, 0.0))
		self.canvas.rect(bbox[0], y, 0.0 - bbox[0], height, stroke=0, fill=1)

		x = 0.0
		while x < l:
			point = x / l
			self.canvas.setFillColor(self.get_grcolor_at_point(stops, point))
			if x + d < l: width = d
			else: width = l - x
			self.canvas.rect(x, y, width, height, stroke=0, fill=1)
			x += d

		self.canvas.setFillColor(self.get_grcolor_at_point(stops, 1.0))
		self.canvas.rect(l, y, bbox[2] - l, height, stroke=0, fill=1)

		self.canvas.restoreState()
Example #20
0
def render(objs, cms):
    bbox = reduce(lambda a, b: libgeom.sum_bbox(a, b.cache_bbox), objs, [])
    w, h = libgeom.bbox_size(bbox)
    x, y = libgeom.bbox_center(bbox)
    trafo = (1.0, 0, 0, -1.0, w / 2.0 - x, h / 2.0 + y)
    canvas_matrix = cairo.Matrix(*trafo)

    surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(w), int(h))
    ctx = cairo.Context(surface)
    ctx.set_matrix(canvas_matrix)
    rend = crenderer.CairoRenderer(cms)
    rend.antialias_flag = True
    rend.render(ctx, objs)

    image_stream = StringIO()
    surface.write_to_png(image_stream)
    return image_stream
 def _get_fixed_bbox(self, obj):
     bbox = obj.cache_bbox
     if obj.is_curve and obj.cache_arrows:
         for pair in obj.cache_arrows:
             for item in pair:
                 if item:
                     arrow_bbox = libgeom.get_cpath_bbox(item)
                     bbox = libgeom.sum_bbox(bbox, arrow_bbox)
     bbox = self.presenter.canvas.bbox_doc_to_win(bbox)
     bbox = libgeom.normalize_bbox(bbox)
     if not bbox[2] - bbox[0]:
         bbox[2] += 4
         bbox[0] -= 4
     if not bbox[3] - bbox[1]:
         bbox[3] += 4
         bbox[1] -= 4
     return bbox
Example #22
0
def simplify_doc(doc):
    #Other pages deleting
    page = doc.methods.get_page()
    page.parent.childs = [
        page,
    ]

    #Master layers merging
    master_layers = doc.methods.get_master_layers()
    if master_layers:
        page.childs += master_layers
        master_layers[0].parent.childs = []

    #Model update
    doc.update()

    #Unsupported and empty objects removing
    for layer in [] + page.childs:
        for obj in [] + layer.childs:
            _check_object(doc, obj)
        if not layer.childs and len(page.childs) > 1:
            doc.methods.delete_object(layer)

    #Collect all objects
    objs = []
    for layer in page.childs:
        for obj in layer.childs:
            objs.append(obj)

    if not objs: return False

    #Move to origin
    bbox = []
    bbox += objs[0].cache_bbox
    for obj in objs:
        bbox = libgeom.sum_bbox(bbox, obj.cache_bbox)

    dx = -bbox[0]
    dy = -bbox[1]

    trafo = [1.0, 0.0, 0.0, 1.0, dx, dy]
    for obj in objs:
        obj.apply_trafo(trafo)

    return True
    def make_template(self):
        self.rifx = self.cmx_cfg.rifx
        cont_obj = self.make_el(cmx_const.CONT_ID)
        self.cmx_model.add(cont_obj)
        self.cmx_model.add(self.make_el(cmx_const.CCMM_ID))
        if self.cmx_cfg.save_preview:
            self.cmx_model.add(
                self.make_el(cmx_const.DISP_ID, bmp=self._make_preview()))
        if self.cmx_cfg.pack:
            self.root = self.make_el(cmx_const.PACK_ID)
            self.cmx_model.add(self.root)

        objs = []
        for page in self.sk2_mtds.get_pages():
            self.root.add(self.make_el(cmx_const.PAGE_ID))
            self.root.add(self.make_el(cmx_const.RLST_ID))
            if not self.cmx_cfg.v1:
                self.root.add(self.make_el(cmx_const.RLST_ID))
            for layer in page.childs:
                objs.extend(layer.childs)

        cmx_ids = [
            cmx_const.ROTL_ID, cmx_const.ROTT_ID, cmx_const.RPEN_ID,
            cmx_const.RDOT_ID, cmx_const.ROTA_ID, cmx_const.RCLR_ID,
            cmx_const.RSCR_ID, cmx_const.INDX_ID
        ]
        for cmx_id in cmx_ids:
            self.root.add(self.make_el(cmx_id))
        self.cmx_model.update_map()

        self.coef = uc2const.pt_to_in * 1000.0
        factor = 0.001

        if objs:
            bbox = [] + objs[0].cache_bbox
            for obj in objs[1:]:
                bbox = libgeom.sum_bbox(bbox, obj.cache_bbox)
            max_value = max([abs(item) for item in bbox])
            frame = 255 * 255 / 2.0
            self.coef = uc2const.pt_to_in * frame / max_value
            factor = max_value / frame

        cont_obj.set('factor', utils.py_float2double(factor, self.rifx))
        cont_obj.set('unit', cmx_const.CONT_UNIT_IN)
Example #24
0
def simplify_doc(doc):
	#Other pages deleting
	page = doc.methods.get_page()
	page.parent.childs = [page, ]

	#Master layers merging
	master_layers = doc.methods.get_master_layers()
	if master_layers:
		page.childs += master_layers
		master_layers[0].parent.childs = []

	#Model update
	doc.update()

	#Unsupported and empty objects removing
	for layer in [] + page.childs:
		for obj in [] + layer.childs:
			_check_object(doc, obj)
		if not layer.childs and len(page.childs) > 1:
			doc.methods.delete_object(layer)

	#Collect all objects
	objs = []
	for layer in page.childs:
		for obj in layer.childs:
			objs.append(obj)

	if not objs: return False

	#Move to origin
	bbox = []
	bbox += objs[0].cache_bbox
	for obj in objs:
		bbox = libgeom.sum_bbox(bbox, obj.cache_bbox)

	dx = -bbox[0]
	dy = -bbox[1]

	trafo = [1.0, 0.0, 0.0, 1.0, dx, dy]
	for obj in objs:
		obj.apply_trafo(trafo)

	return True
Example #25
0
	def cdc_draw_move_frame(self, trafo):
		bbox = self.presenter.selection.bbox
		if bbox:
			cpath = libcairo.convert_bbox_to_cpath(bbox)
			libcairo.apply_trafo(cpath, trafo)
			libcairo.apply_trafo(cpath, self.canvas.trafo)
			bbox = self.cdc_to_int(*libcairo.get_cpath_bbox(cpath))
			frame = self.cdc_bbox_to_frame(bbox)
			if self.frame and frame == self.frame:return
			if not self.frame:self.frame = frame
			bbox2 = self.cdc_frame_to_bbox(self.frame)
			frame_sum = self.cdc_bbox_to_frame(libgeom.sum_bbox(bbox, bbox2))
			x, y, w, h = self.cdc_normalize_rect(*frame_sum)
			self.frame = frame
			surface = cairo.ImageSurface(cairo.FORMAT_RGB24, w + 2, h + 2)
			ctx = cairo.Context(surface)
			ctx.set_source_surface(self.surface, -x + 1, -y + 1)
			ctx.paint()
			ctx.set_matrix(cairo.Matrix(1.0, 0.0, 0.0, 1.0, -x + 1, -y + 1))
			self._cdc_draw_cpath(ctx, cpath)
			dc = wx.ClientDC(self.canvas)
			dc.DrawBitmap(copy_surface_to_bitmap(surface), x - 1, y - 1)
			self.cdc_reflect_snapping()
Example #26
0
	def cdc_draw_frame(self, start, end, temp_surfase=False):
		if start and end:
			if self.frame:
				if start == self.frame[0] and end == self.frame[1]:return
			cpath = libcairo.convert_bbox_to_cpath(start + end)
			bbox = self.cdc_to_int(*libcairo.get_cpath_bbox(cpath))
			frame = self.cdc_bbox_to_frame(bbox)
			if not self.frame:self.frame = frame
			bbox2 = self.cdc_frame_to_bbox(self.frame)
			frame_sum = self.cdc_bbox_to_frame(libgeom.sum_bbox(bbox, bbox2))
			x, y, w, h = self.cdc_normalize_rect(*frame_sum)
			self.frame = frame
			surface = cairo.ImageSurface(cairo.FORMAT_RGB24, w + 2, h + 2)
			ctx = cairo.Context(surface)
			if temp_surfase:
				ctx.set_source_surface(self.temp_surface, -x + 1, -y + 1)
			else:
				ctx.set_source_surface(self.surface, -x + 1, -y + 1)
			ctx.paint()
			ctx.set_matrix(cairo.Matrix(1.0, 0.0, 0.0, 1.0, -x + 1, -y + 1))
			self._cdc_draw_cpath(ctx, cpath)
			dc = wx.ClientDC(self.canvas)
			dc.DrawBitmap(copy_surface_to_bitmap(surface), x - 1, y - 1)
			self.cdc_reflect_snapping()
Example #27
0
	def update_bbox(self):
		if self.childs:
			self.cache_bbox = deepcopy(self.childs[0].cache_bbox)
			for child in self.childs[1:]:
				self.cache_bbox = libgeom.sum_bbox(self.cache_bbox,
												child.cache_bbox)