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
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()