Transformation Transformation::newRotation(double thetaX, double thetaY, double thetaZ, const Coordinate& p) { return newTranslation(-p.x, -p.y, -p.z) * newRx(thetaX) * newRy(thetaY) * newRz(thetaZ) * newTranslation(p.x, p.y, p.z); }
hkResult HavokDisplayManager::addGeometry(const hkArrayBase<hkDisplayGeometry*>& geometries, const hkTransform& transform, hkUlong id, int tag, hkUlong shapeIdHint, hkGeometry::GeometryType createDyanamicGeometry /*= hkGeometry::GEOMETRY_STATIC*/) { auto& a = m_geometries[id]; vec3 newTranslation(DO_NOT_INITIALIZE); Quaternion newRotation(DO_NOT_INITIALIZE); gep::conversion::hk::fromHkTransform(transform, newTranslation, newRotation); mat4 newTransform = mat4::translationMatrix(newTranslation) * newRotation.toMat4() ; m_transformations[id] = newTransform; for (auto geom : geometries) { geom->buildGeometry(); auto pGeom = geom->getGeometry(); auto pDataHolder = GEP_NEW(g_stdAllocator, HavokDataHolder)(geom, pGeom->m_triangles); auto vertices = ArrayPtr<vec4>((vec4*)&pGeom->m_vertices[0], pGeom->m_vertices.getSize()); auto indices = pDataHolder->getIndices(); auto pModel = g_globalManager.getRenderer()->loadModel(pDataHolder, vertices, indices); a.append(pModel); } return HK_SUCCESS; }
void ActionZone::sendTranslation() { if (noDictionaries) { displayNoDictionariesMessage(); return; } emit newTranslation(searchedTerm_->text()); }
hkResult HavokDisplayManager::updateGeometry(const hkTransform& transform, hkUlong id, int tag) { vec3 newTranslation(DO_NOT_INITIALIZE); Quaternion newRotation(DO_NOT_INITIALIZE); gep::conversion::hk::fromHkTransform(transform, newTranslation, newRotation); mat4 newTransform = mat4::translationMatrix(newTranslation) * newRotation.toMat4(); m_transformations[id] = newTransform; return HK_SUCCESS; }
TransformDialog::TransformDialog(QWidget* parent, ScribusDoc *doc) : QDialog(parent) { setupUi(this); setModal(true); setWindowIcon(QIcon(loadIcon ( "AppIcon.png" ))); transformStack->setCurrentIndex(0); newTransformMenu = new QMenu(buttonAdd); newTransformMenu->addAction( tr("Scaling"), this, SLOT(newScaling())); newTransformMenu->addAction( tr("Translation"), this, SLOT(newTranslation())); newTransformMenu->addAction( tr("Rotation"), this, SLOT(newRotation())); newTransformMenu->addAction( tr("Skewing"), this, SLOT(newSkewing())); buttonAdd->setMenu(newTransformMenu); scaleLink->setChecked(true); buttonUp->setText( "" ); buttonUp->setIcon(loadIcon("16/go-up.png")); buttonDown->setText( "" ); buttonDown->setIcon(loadIcon("16/go-down.png")); buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); m_doc = doc; m_unitRatio = unitGetRatioFromIndex(m_doc->unitIndex()); m_suffix = unitGetSuffixFromIndex(m_doc->unitIndex()); translateHorizontal->setSuffix(m_suffix); translateVertical->setSuffix(m_suffix); rotationValue->setWrapping( true ); rotationValue->setValues( -180.0, 180.0, 1, 0); rotationValue->setSuffix(unitGetSuffixFromIndex(6)); horizontalSkew->setSuffix(unitGetSuffixFromIndex(6)); verticalSkew->setSuffix(unitGetSuffixFromIndex(6)); linkSkew->setChecked(true); numberOfCopies->setValue(0); basePoint->setCheckedId(m_doc->RotMode); connect(transformSelector, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(setCurrentTransform(QListWidgetItem*))); connect(horizontalScale, SIGNAL(valueChanged(double)), this, SLOT(changeHScale(double))); connect(verticalScale, SIGNAL(valueChanged(double)), this, SLOT(changeVScale(double))); connect(scaleLink, SIGNAL(clicked()), this, SLOT(toggleLink())); connect(translateHorizontal, SIGNAL(valueChanged(double)), this, SLOT(changeHTranslation(double))); connect(translateVertical, SIGNAL(valueChanged(double)), this, SLOT(changeVTranslation(double))); connect(rotationValue, SIGNAL(valueChanged(double)), this, SLOT(changeRotation(double))); connect(horizontalSkew, SIGNAL(valueChanged(double)), this, SLOT(changeHSkew(double))); connect(verticalSkew, SIGNAL(valueChanged(double)), this, SLOT(changeVSkew(double))); connect(linkSkew, SIGNAL(clicked()), this, SLOT(toggleLinkSkew())); connect(buttonUp, SIGNAL(clicked()), this, SLOT(moveTransformUp())); connect(buttonDown, SIGNAL(clicked()), this, SLOT(moveTransformDown())); connect(buttonRemove, SIGNAL(clicked()), this, SLOT(removeTransform())); }
Transformation Transformation::newRotationAroundPoint(double graus, const Coordinate& p){ return newTranslation(-p.x, -p.y) * newRotation(graus) * newTranslation(p.x, p.y); }
Transformation Transformation::newScalingAroundObjCenter(double sx, double sy, const Coordinate& center){ return newTranslation(-center.x, -center.y) * newScaling(sx, sy) * newTranslation(center.x, center.y); }
static TCA emitFuncPrologueImpl(Func* func, int argc, TransKind kind) { if (!newTranslation()) { return nullptr; } const int nparams = func->numNonVariadicParams(); const int paramIndex = argc <= nparams ? argc : nparams + 1; auto const funcBody = SrcKey{func, func->getEntryForNumArgs(argc), false}; profileSetHotFuncAttr(); auto codeLock = lockCode(); auto codeView = code().view(kind); TCA mainOrig = codeView.main().frontier(); CGMeta fixups; // If we're close to a cache line boundary, just burn some space to // try to keep the func and its body on fewer total lines. align(codeView.main(), &fixups, Alignment::CacheLineRoundUp, AlignContext::Dead); TransLocMaker maker(codeView); maker.markStart(); // Careful: this isn't necessarily the real entry point. For funcIsMagic // prologues, this is just a possible prologue. TCA aStart = codeView.main().frontier(); // Give the prologue a TransID if we have profiling data. auto const transID = [&]{ if (kind == TransKind::ProfPrologue) { auto const profData = jit::profData(); auto const id = profData->allocTransID(); profData->addTransProfPrologue(id, funcBody, paramIndex); return id; } if (profData() && transdb::enabled()) { return profData()->allocTransID(); } return kInvalidTransID; }(); TCA start = genFuncPrologue(transID, kind, func, argc, codeView, fixups); auto loc = maker.markEnd(); auto metaLock = lockMetadata(); if (RuntimeOption::EvalEnableReusableTC) { TCA UNUSED ms = loc.mainStart(), me = loc.mainEnd(), cs = loc.coldStart(), ce = loc.coldEnd(), fs = loc.frozenStart(), fe = loc.frozenEnd(), oldStart = start; auto const did_relocate = relocateNewTranslation(loc, codeView, fixups, &start); if (did_relocate) { FTRACE_MOD(Trace::reusetc, 1, "Relocated prologue for func {} (id = {}) " "from M[{}, {}], C[{}, {}], F[{}, {}] to M[{}, {}] " "C[{}, {}] F[{}, {}] orig start @ {} new start @ {}\n", func->fullName()->data(), func->getFuncId(), ms, me, cs, ce, fs, fe, loc.mainStart(), loc.mainEnd(), loc.coldStart(), loc.coldEnd(), loc.frozenStart(), loc.frozenEnd(), oldStart, start); } else { FTRACE_MOD(Trace::reusetc, 1, "Created prologue for func {} (id = {}) at " "M[{}, {}], C[{}, {}], F[{}, {}] start @ {}\n", func->fullName()->data(), func->getFuncId(), ms, me, cs, ce, fs, fe, oldStart); } recordFuncPrologue(func, loc); if (loc.mainStart() != aStart) { codeView.main().setFrontier(mainOrig); // we may have shifted to align } } if (RuntimeOption::EvalPerfRelocate) { GrowableVector<IncomingBranch> incomingBranches; recordPerfRelocMap(loc.mainStart(), loc.mainEnd(), loc.coldCodeStart(), loc.coldEnd(), funcBody, paramIndex, incomingBranches, fixups); } fixups.process(nullptr); assertx(funcGuardMatches(funcGuardFromPrologue(start, func), func)); assertx(code().isValidCodeAddress(start)); TRACE(2, "funcPrologue %s(%d) setting prologue %p\n", func->fullName()->data(), argc, start); func->setPrologue(paramIndex, start); assertx(kind == TransKind::LivePrologue || kind == TransKind::ProfPrologue || kind == TransKind::OptPrologue); auto tr = maker.rec(funcBody, transID, kind); transdb::addTranslation(tr); if (RuntimeOption::EvalJitUseVtuneAPI) { reportTraceletToVtune(func->unit(), func, tr); } recordGdbTranslation(funcBody, func, codeView.main(), loc.mainStart(), false, true); recordBCInstr(OpFuncPrologue, loc.mainStart(), loc.mainEnd(), false); return start; }