コード例 #1
0
ファイル: widgets.py プロジェクト: kateliev/TypeRig
	def getTransform(self, obj_rect=QtCore.QRectF(.0, .0, .0, .0)):
		# - Init
		origin_transform = QtGui.QTransform()
		rev_origin_transform = QtGui.QTransform()
		return_transform = QtGui.QTransform()
		
		m11 = float(self.spb_scale_x.value)/100.
		m13 = float(self.spb_translate_x.value)
		m22 = float(self.spb_scale_y.value)/100.
		m23 = float(self.spb_translate_y.value)

		# - Transform
		if self.rad_or.isChecked():	transform_origin = QtCore.QPointF(.0, .0)
		if self.rad_bl.isChecked():	transform_origin = obj_rect.topLeft()
		if self.rad_br.isChecked():	transform_origin = obj_rect.topRight()
		if self.rad_tl.isChecked():	transform_origin = obj_rect.bottomLeft()
		if self.rad_tr.isChecked():	transform_origin = obj_rect.bottomRight()
		if self.rad_ce.isChecked():	transform_origin = obj_rect.center()
		
		origin_transform.translate(-transform_origin.x(), -transform_origin.y())
		rev_origin_transform.translate(transform_origin.x(), transform_origin.y())

		return_transform.scale(m11, m22)
		return_transform.rotate(-float(self.spb_rotate.value))
		return_transform.shear(radians(float(self.spb_shear.value)), 0.)
		return_transform.translate(m13, m23)

		return return_transform, origin_transform, rev_origin_transform
コード例 #2
0
ファイル: Layer.py プロジェクト: twardoch/TypeRig
    def transform(self, shapes=False):
        if self.aux.doCheck() and len(self.aux.lst_layers.selectedItems()):

            # - Init
            wGlyph = self.aux.glyph

            inpShift = self.edt_shift.text.split(',') if len(
                self.edt_shift.text
            ) and ',' in self.edt_shift.text else '0.0, 0.0'
            inpScale = self.edt_scale.text.split(',') if len(
                self.edt_scale.text
            ) and ',' in self.edt_scale.text else '100, 100'

            wSift_x = float(inpShift[0].strip())
            wSift_y = float(inpShift[1].strip())

            wScale_x = float(inpScale[0].strip()) / 100
            wScale_y = float(inpScale[1].strip()) / 100

            wSlant = radians(float(self.edt_slant.text.strip())) if len(
                self.edt_slant.text) else 0.
            wRotate = -float(self.edt_rotate.text.strip()) if len(
                self.edt_rotate.text) else 0.

            # m11, m12, m13, m21, m22, m23, m31, m32, m33 = 1
            # ! Note: wrong but will do...
            new_transform = QtGui.QTransform().scale(
                wScale_x,
                wScale_y).rotate(wRotate).shear(wSlant,
                                                0).translate(wSift_x, wSift_y)

            for item in self.aux.lst_layers.selectedItems():
                wLayer = wGlyph.layer(item.text())

                if not shapes:
                    # - Transform at origin
                    wBBox = wLayer.boundingBox
                    wCenter = (wBBox.width() / 2 + wBBox.x(),
                               wBBox.height() / 2 + wBBox.y())
                    transform_to_origin = QtGui.QTransform().translate(
                        -wCenter[0], -wCenter[1])
                    transform_from_origin = QtGui.QTransform().translate(
                        *wCenter)

                    # - Transform
                    wLayer.applyTransform(transform_to_origin)
                    wLayer.applyTransform(new_transform)
                    wLayer.applyTransform(transform_from_origin)
                else:
                    wShapes = wGlyph.shapes(item.text())

                    for shape in wShapes:
                        # - Transform at origin and move to new location according to transformation
                        wBBox = shape.boundingBox
                        wCenter = (wBBox.width() / 2 + wBBox.x(),
                                   wBBox.height() / 2 + wBBox.y())
                        newCenter = new_transform.map(QtCore.QPointF(*wCenter))

                        transform_to_origin = QtGui.QTransform().translate(
                            -wCenter[0], -wCenter[1])
                        transform_from_origin = QtGui.QTransform().translate(
                            newCenter.x(), wCenter[1])
                        #transform_from_origin = QtGui.QTransform().translate(*wCenter)

                        # - Transform
                        shape.applyTransform(transform_to_origin)
                        shape.applyTransform(new_transform)
                        shape.applyTransform(transform_from_origin)

            self.aux.glyph.updateObject(
                self.aux.glyph.fl, ' Glyph: %s; Transform Layers: %s' %
                (self.aux.glyph.fl.name, '; '.join([
                    item.text()
                    for item in self.aux.lst_layers.selectedItems()
                ])))
            self.aux.glyph.update()