BOOL CConfigDisplay::OnSkinChoose(CString skin) { if (verifySkin(skin)) { m_sSkinName = skin; } else { // CString tmp = "Bad skin:" + skin + ", see " + (*m_callbacks->mbdir)(); // tmp += "\\muzikbrowzer.log"; // MBMessageBox("Corrupt skin", tmp, FALSE, FALSE); return FALSE; } m_sSkinName = skin; // Read skin def CString skindef = getSkin(MB_SKIN_DEF); m_regSD.init(skindef); m_regSD.ReadFile(); // read skin def custom CString save = m_sSkinName; CString skindefcustom = getSkin(MB_SKIN_DEF_CUSTOM); RegistryKey regSDCustom(skindefcustom); regSDCustom.ReadFile(); // overwrite custom on skin def m_regSD.Copy(regSDCustom); ReadReg(m_regSD); m_sSkinName = save; RegistryKey reg( HKEY_LOCAL_MACHINE, RegKey ); reg.Write(RegWindowsSkinName, m_sSkinName); return TRUE; // initFontSels(); }
Model* Model::clone(NodeCloneContext &context) { Model* model = Model::create(getMesh()); if (getSkin()) { model->setSkin(getSkin()->clone(context)); } Material* materialClone = getMaterial()->clone(context); model->setMaterial(materialClone); // TODO: Don't forget material parts materialClone->release(); return model; }
ActionBase::ResultE SkeletonSkinningAlgorithm::intersectEnter(Action *action) { SkinnedGeometry *skinGeo = getSkin(); return skinGeo->intersect(action); }
CRCitesMenu::CRCitesMenu(CRGUIWindowManager * wm, LVDocView * docview, int numItems, lvRect & rc) : CRFullScreenMenu( wm, MCMD_CITES_LIST, lString16(_("Citations")), numItems, rc ) , _docview(docview) { CRGUIAcceleratorTableRef acc = _wm->getAccTables().get("bookmarks"); if ( acc.isNull() ) acc = _wm->getAccTables().get("menu"); setAccelerators( acc ); setSkinName(lString16("#cites-list"), lString16("#bookmarks")); int mc = getSkin()->getMinItemCount(); if ( _pageItems < mc ) _pageItems = mc; CRFileHistRecord * rec = docview->getCurrentFileHistRecord(); LVPtrVector < CRBookmark > &bookmarks = rec->getBookmarks(); for ( int i=0; i < bookmarks.length(); i++ ) { CRBookmark * bmk = bookmarks[i]; if (!bmk || ((bmk->getType() != bmkt_comment && bmk->getType() != bmkt_correction))) continue; ldomXPointer p = docview->getDocument()->createXPointer( bmk->getStartPos() ); if ( p.isNull() ) continue; int page = docview->getBookmarkPage( p ); /// get bookmark position text if ( page<0 ) continue; CRBookmarkMenuItem * item = new CRBookmarkMenuItem( this, i, bmk, page ); addItem( item ); } #ifdef CR_POCKETBOOK citesDialog = this; #endif if (_items.length() == 0) createDefaultItem(); }
Action::ResultE SkeletonSkinningAlgorithm::intersectEnter(Action *action) { SkinnedGeometry *skinGeo = getSkin(); return skinGeo->SkinnedGeometry::Inherited::intersectEnter(action); }
void CRBookmarkMenu::showContextMenu() { CRBookmarkMenuItem *item = static_cast<CRBookmarkMenuItem *>(_items[_selectedItem]); CRMenuSkinRef skin = getSkin(); CRRectSkinRef separatorSkin = skin->getSeparatorSkin(); int separatorHeight = 0; if ( !separatorSkin.isNull() ) separatorHeight = separatorSkin->getMinSize().y; lvRect clientRect; getClientRect(clientRect); lvPoint itemSize = getMaxItemSize(); _contextMenu[2].type = item->getBookmark() ? ITEM_ACTIVE : ITEM_INACTIVE; int y = clientRect.top + (itemSize.y + separatorHeight) * (_selectedItem - _topItem) + ((itemSize.y + separatorHeight)/4); if (_contextMenu[0].text == NULL) { _contextMenu[0].text = (char *)_("Set bookmark"); _contextMenu[1].text = (char *)_("Go to bookmark"); _contextMenu[2].text = (char *)_("Delete bookmark"); } OpenMenu(_contextMenu, _goToMode ? DCMD_BOOKMARK_GO_N : DCMD_BOOKMARK_SAVE_N, ScreenWidth()/4, y, handle_contextMenu); }
Action::ResultE CPUSkinningAlgorithm::intersectEnter(Action *action) { Action::ResultE res = Action::Continue; SkinnedGeometry *skinGeo = getSkin (); Skeleton *skel = getSkeleton(); IntersectAction *iact = boost::polymorphic_downcast<IntersectAction *>(action); CPUSkinningDataAttachmentUnrecPtr data = getCPUSkinningData(skinGeo); if(data == NULL) { data = CPUSkinningDataAttachment::create(); skinGeo->addAttachment(data); } skel->intersectEnter(action, skinGeo); if(data->getDataValid() == false) { transformGeometry(skinGeo, skel, data); data->setDataValid(true); } intersectGeometry(iact, skinGeo, data); return res; }
Action::ResultE CPUSkinningAlgorithm::renderEnter(Action *action) { Action::ResultE res = Action::Continue; SkinnedGeometry *skinGeo = getSkin (); Skeleton *skel = getSkeleton(); RenderAction *ract = boost::polymorphic_downcast<RenderAction *>(action); OSG_ASSERT(skinGeo != NULL); OSG_ASSERT(skel != NULL); CPUSkinningDataAttachmentUnrecPtr data = getCPUSkinningData(skinGeo); if(data == NULL) { data = CPUSkinningDataAttachment::create(); skinGeo->addAttachment(data); } skel->renderEnter(action, skinGeo); if(data->getDataValid() == false) { transformGeometry(skinGeo, skel, data); data->setDataValid(true); } renderGeometry(ract, skinGeo, data); return res; }
void CConfigDisplay::init() { CString dir; dir = (*m_callbacks->mbdir)(); setDefaults(); m_SkinDir = dir; m_SkinDir += "\\skins"; RegistryKey reg( HKEY_LOCAL_MACHINE, RegKey ); AutoBuf buf(1000); reg.Read("SkinsDir", buf.p,999,m_SkinDir); CString tmp = buf.p; if (tmp.GetLength()) { m_SkinDir = tmp; } RegistryKey realreg( HKEY_LOCAL_MACHINE, RegKey ); realreg.Read(RegWindowsSkinName, buf.p, 999,m_sSkinName.GetBuffer(0)); m_sSkinName = buf.p; if (IsWindow(m_SkinList.m_hWnd)) { int sel = m_SkinList.SelectString(-1, m_sSkinName); if (sel > -1) { m_SkinList.SetCurSel(sel); } } // Read skin def CString skindef = getSkin(MB_SKIN_DEF); if (skindef.GetLength() == 0) { return; } m_regSD.init(skindef); m_regSD.ReadFile(); // read skin def custom CString save = m_sSkinName; CString skindefcustom = getSkin(MB_SKIN_DEF_CUSTOM); RegistryKey regSDCustom(skindefcustom); regSDCustom.ReadFile(); // custom overlays standard m_regSD.Copy(regSDCustom); ReadReg(m_regSD); m_sSkinName = save; }
const CString CConfigDisplay::getSkin(const CString skinname, const CString key) { CString saveit = m_sSkinName; m_sSkinName = skinname; CString skin = getSkin(key); m_sSkinName = saveit; return skin; }
void CommentableObjectViewer::renderPosts(shared_ptr<XMLPortalExporter> exporter) { if(getObject() == nullptr || getObject()->allowChild(portalObjectTypePost) == false) return; // Calcola il numero totale di posts uint32 total_posts = getEntity()->getChildsCount(getDatabase(), portalObjectTypePost); if(total_posts == 0) return; // Numero di posts da visualizzare per pagina uint32 posts_to_show = getSkin()->getPagerItems(); // Inizializza l'offset di estrazione uint32 offset = conversions::from_utf16<uint32>(getRequest()->getUrlParam(OS_URL_PARAM_OFFSET)); // Corregge l'offset se necessario adjustOffset(total_posts, posts_to_show, offset); objects_posts_list posts; // Estrae le risposte nell'intervallo richiesto shared_ptr<EntitiesEntities> post_childs = getEntity()->getChilds(getDatabase(), portalObjectTypePost, RangeUint32(offset, posts_to_show)); for(EntitiesEntities::iterator i = post_childs->begin(); i != post_childs->end(); ++i) { // Carica la riposta corrente shared_ptr<EntitiesEntity> post_entity = post_childs->get(getDatabase(), *i); if(post_entity != nullptr) { // Calcola la revisione corrente della risposta shared_ptr<ObjectsPost> current_post = objects_post_cast(post_entity->getCurrent()); if(current_post != nullptr) posts.push_back(current_post); } } if(posts.empty() == false) { shared_ptr<XMLNode> posts_node = exporter->getNode(OS_PORTAL_OBJECT_POST_GROUPNAME); for(objects_posts_list::const_iterator i = posts.begin(); i != posts.end(); ++i) { shared_ptr<XMLPortalExporter> postExporter(OS_NEW XMLPortalExporter(posts_node->addChild(OS_PORTAL_OBJECT_POST_TYPENAME), exporter->getPage(), exporter->getMode())); renderPost(postExporter, *i); } } createPager(getSkin(), exporter->getRoot(), total_posts, posts_to_show, offset); }
void CPUSkinningAlgorithm::adjustVolume(Volume &volume) { SkinnedGeometry *skinGeo = getSkin(); if(skinGeo != NULL) { skinGeo->SkinnedGeometry::Inherited::adjustVolume(volume); } }
Action::ResultE SkeletonSkinningAlgorithm::renderLeave(Action *action) { SkinnedGeometry *skinGeo = getSkin(); Skeleton *skel = getSkeleton(); skel->renderLeave(action, skinGeo); return Action::Continue; }
Drawable* Model::clone(NodeCloneContext& context) { Model* model = Model::create(getMesh()); if (!model) { GP_ERROR("Failed to clone model."); return NULL; } if (getSkin()) { model->setSkin(getSkin()->clone(context)); } if (getMaterial()) { Material* materialClone = getMaterial()->clone(context); if (!materialClone) { GP_ERROR("Failed to clone material for model."); return model; } model->setMaterial(materialClone); materialClone->release(); } if (_partMaterials) { GP_ASSERT(_partCount == model->_partCount); for (unsigned int i = 0; i < _partCount; ++i) { if (_partMaterials[i]) { Material* materialClone = _partMaterials[i]->clone(context); model->setMaterial(materialClone, i); materialClone->release(); } } } return model; }
Action::ResultE GPUSkinningAlgorithm::renderLeave(Action *action) { Action::ResultE res = Action::Continue; SkinnedGeometry *skinGeo = getSkin(); Skeleton *skel = getSkeleton(); skel->renderLeave(action, skinGeo); res = skinGeo->SkinnedGeometry::Inherited::renderLeave(action); return res; }
void CConfigDisplay::OnMakedefault() { // For internal use only. Copies Custom settings into // default skindef. CString skindef = getSkin(MB_SKIN_DEF); RegistryKey regSD(skindef); regSD.ReadFile(); StoreReg(regSD); regSD.WriteFile(); }
void Jobs::onInit() { PageBase::onInit(); m_showAll->setID("showAll"); m_showAll->setAutoPostBack(true); m_showAll->setCaption(getText("main.pages.jobs.show_all")); shared_ptr<XMLDocument> document(OS_NEW XMLDocument()); m_pageTemplate.reset(OS_NEW HtmlXSLControl(loadStylesheet(getSkin()->getTemplatePath(_S("jobs.xsl"))), document)); getArea(pageAreaContent)->getControls()->add(m_pageTemplate); m_pageTemplate->addChildParam(m_showAll); }
void JobDetail::onLoad() { PageBase::onLoad(); // Ottiene l'id dell'utente richiesto int id = conversions::from_utf16<uint32>(getUrlID()); shared_ptr<XMLDocument> document(OS_NEW XMLDocument()); shared_ptr<XMLExporter> exporter(OS_NEW XMLExporter(document->create(_S("job")))); // VERYURGENT: abolire il ciclo for Engine::BackgroundJobs::const_iterator i; shared_ptr<Engine::BackgroundJobs> jobs = Engine::instance()->getBackgroundJobs(); if(jobs != nullptr) { for(i = jobs->begin(); i != jobs->end(); ++i) { shared_ptr<IBackgroundJob> job = *i; if(job->getID() == id) { Jobs::exportJob(exporter, job, false); } } } jobs = Engine::instance()->getLastCompletedBackgroundJobs(); if(jobs != nullptr) { for(i = jobs->begin(); i != jobs->end(); ++i) { shared_ptr<IBackgroundJob> job = *i; if(job->getID() == id) { Jobs::exportJob(exporter, job, true); } } } String path = getSkin()->getTemplatePath(_S("job_detail.xsl")); shared_ptr<HtmlXSLControl> pageTemplate(OS_NEW HtmlXSLControl(loadStylesheet(path), document)); // Carica il template di riferimento getControls()->add(pageTemplate); }
void CConfigDisplay::OnOK() { m2v(); copy2lf(m_lfTitles, m_lfPanel, m_lfColHdr/*,m_lfCurPlay*/); int sel = m_SkinList.GetCurSel(); if (sel > -1) { m_SkinList.GetLBText(sel, m_sSkinName); } else { m_SkinList.GetWindowText(m_sSkinName); } sel = m_BorderWidth.GetCurSel(); if (sel > -1) { CString tmp; m_BorderWidth.GetLBText(sel, tmp); m_vBorderWidth = atoi(tmp); } RegistryKey realreg( HKEY_LOCAL_MACHINE, RegKey ); realreg.Write(RegWindowsSkinName, m_sSkinName); CString skindefcustom = getSkin(MB_SKIN_DEF_CUSTOM, FALSE); RegistryKey regSDCustom(skindefcustom); // This ReadFile() preserves any extra settings in SkinDefCustom file // which may have been put there manually. regSDCustom.ReadFile(); StoreReg(regSDCustom); regSDCustom.WriteFile(); if (m_Modified) { init(); readSkins(); (*m_callbacks->redraw)(); } m_Modified = FALSE; modified(FALSE); sel = m_SkinList.SelectString(-1, m_sSkinName); m_SkinList.SetCurSel(sel); CPropertyPage::OnOK(); }
void CConfigDisplay::OnSwapSettingsButton() { CString msg ="Choosing \"Ok\" will restore the skin default\r\ncolor/bold/size/font settings. If you then\r\nclick Apply or Ok you will lose any custom\r\nsettings you have made.\r\nClick Ok to proceed or Cancel."; int r = MBMessageBox("Caution", msg, FALSE, TRUE); if (1 == r) { CString skindef = getSkin(MB_SKIN_DEF); m_regSD.init(skindef); m_regSD.ReadFile(); ReadReg(m_regSD); UpdateData(FALSE); initFontSels(); showSample(); modified(TRUE); RedrawWindow(); } // else 0 }
void CommentableObjectViewer::_createLastPosts() { // Calcola il numero di posts totali uint32 total_posts = getEntity()->getChildsCount(getDatabase(), portalObjectTypePost); // Calcola il numero di risposte da visualizzare uint32 posts_count = utils::min<uint32>(total_posts, getSkin()->getPagerItems()); // Carica i posts shared_ptr<EntitiesEntities> posts = getEntity()->getChilds(getDatabase(), portalObjectTypePost, RangeUint32(total_posts - posts_count, posts_count)); if(posts->empty() == false) { shared_ptr<PostViewer> posts_viewer(OS_NEW PostViewer()); getControls()->add(posts_viewer); // Scorre gli ultimi posts dal pi recente for(EntitiesEntities::reverse_iterator i = posts->rbegin(); i != posts->rend(); ++i) { posts_viewer->addPost(posts->get(getDatabase(), *i)); } } }
void Maintenance::onLoad() { PageBase::onLoad(); /* shared_ptr<Portal> portal = getPortalFromUrl(); if(portal == nullptr) { showError(_S("Invalid portal")); return; } */ if(getRequest()->hasUrlParam(_W("crash"))) // TEMP, x test crash report { int32 *pI=nullptr; *pI = 5; } /* for(int i=0;i<100;i++) { shared_ptr<HtmlDiv> div(OS_NEW HtmlDiv()); getArea(pageAreaContent)->getControls()->add(div); } */ shared_ptr<XMLDocument> document(OS_NEW XMLDocument()); shared_ptr<XMLNode> root = document->create(_S("maintenance")); String path = getSkin()->getTemplatePath(_S("maintenance.xsl")); shared_ptr<HtmlXSLControl> pageTemplate(OS_NEW HtmlXSLControl(loadStylesheet(path), document)); getArea(pageAreaContent)->getControls()->add(pageTemplate); root->setAttributeString(_S("stability_restart_href"), getEventCommand(EVENT_ONSTABILITYRESTART)); root->setAttributeString(_S("stability_rebuild_href"), getEventCommand(EVENT_ONSTABILITYREBUILD)); root->setAttributeString(_S("lucene_rebuild_href"), getEventCommand(EVENT_ONLUCENEREBUILD)); root->setAttributeString(_S("lucene_optimize_href"), getEventCommand(EVENT_ONLUCENEOPTIMIZE)); root->setAttributeString(_S("database_vacuum_href"), getEventCommand(EVENT_ONDATABASEVACUUM)); root->setAttributeString(_S("database_rebuild_indexes_href"), getEventCommand(EVENT_ONDATABASEREBUILDINDEXES)); root->setAttributeString(_S("database_analyze_href"), getEventCommand(EVENT_ONDATABASEANALYZE)); }
void Form::update(float elapsedTime) { if (isDirty()) { updateBounds(); // Cache themed attributes for performance. _skin = getSkin(_state); _opacity = getOpacity(_state); GP_ASSERT(_layout); if (_scroll != SCROLL_NONE) { updateScroll(); } else { _layout->update(this, Vector2::zero()); } } }
String CommentableObjectViewer::localizePost(const EntityID &id) { String href; shared_ptr<EntitiesEntity> entity = getPortal()->getEntity(getDatabase(), id); if(entity != nullptr) { shared_ptr<ObjectsPost> post = objects_post_cast(entity->getCurrent()); if(post != nullptr) { shared_ptr<EntitiesEntity> parent_entity = getPortal()->getEntity(getDatabase(), post->getParent()); if(parent_entity != nullptr) { shared_ptr<DbSqlSelect> select; // Ottiene la select per l'estrazione dei posts parent_entity->getChildsStatement(getDatabase(), portalObjectTypePost, RangeUint32::EMPTY, true, false, false, select); // Aggiunge come limite la data del post specificato per localizzarne l'indice select->where.add(DbSqlField(DBTABLES::SNAPSHOT_OBJECTS::SUBMIT_DATE, DBTABLES::SNAPSHOT_OBJECTS_TABLE), Convert::toSQL(entity->getEntitySubmitDate()), DbSqlCondition::cfMinor | DbSqlCondition::cfEqual | DbSqlCondition::cfAnd); ordered_map<std::wstring, std::wstring> params; // Calcola il numero di posts fino a quello specificato uint32 count = parent_entity->getChildsCount(getDatabase(), portalObjectTypePost, select); if(count > 0) { // Ottiene il numero uint32 pager_items = getSkin()->getPagerItems(); // Calcola l'offset per la visualizzazione del post uint32 offset = static_cast<uint32>(count/pager_items)*pager_items; if(offset > 0) params.set(OS_URL_PARAM_OFFSET, conversions::to_wstring(offset)); } // Genera un link al padre con ancora l'id del post href = HttpParser::createAnchor(parent_entity->getViewLink(getPortal(), params), entity->getEntityID().getString()); } } } return href; }
CRBookmarkMenu::CRBookmarkMenu(CRGUIWindowManager * wm, LVDocView * docview, int numItems, lvRect & rc, bool goToMode) : CRFullScreenMenu( wm, MCMD_BOOKMARK_LIST, lString16(_("Bookmarks")), numItems, rc ) , _docview(docview) { CRFileHistRecord * bookmarks = docview->getCurrentFileHistRecord(); CRGUIAcceleratorTableRef acc = _wm->getAccTables().get("bookmarks"); if ( acc.isNull() ) acc = _wm->getAccTables().get("menu"); setAccelerators( acc ); setSkinName(lString16("#bookmarks")); int mc = getSkin()->getMinItemCount(); if ( _pageItems < mc ) _pageItems = mc; int n = bookmarks->getLastShortcutBookmark()+1; n = (n + _pageItems - 1) / _pageItems * _pageItems; int minitems = (MIN_BOOKMARK_ITEMS + _pageItems - 1) / _pageItems * _pageItems; if ( n<minitems ) n = minitems; for ( int i=1; i<=n; i++ ) { CRBookmark * bm = bookmarks->getShortcutBookmark(i); int page = 0; if ( bm ) { ldomXPointer p = docview->getDocument()->createXPointer( bm->getStartPos() ); if ( !p.isNull() ) { /// get page number by bookmark page = docview->getBookmarkPage( p ); /// get bookmark position text if ( page<0 ) bm = NULL; } } CRBookmarkMenuItem * item = new CRBookmarkMenuItem( this, i, bm, page ); addItem( item ); } setMode( goToMode ); #ifdef CR_POCKETBOOK bmkDialog = this; #endif }
void CRCitesMenu::showContextMenu() { CRBookmarkMenuItem *item = static_cast<CRBookmarkMenuItem *>(_items[_selectedItem]); if (item->getBookmark() == NULL) return; CRMenuSkinRef skin = getSkin(); CRRectSkinRef separatorSkin = skin->getSeparatorSkin(); int separatorHeight = 0; if ( !separatorSkin.isNull() ) separatorHeight = separatorSkin->getMinSize().y; lvRect clientRect; getClientRect(clientRect); lvPoint itemSize = getMaxItemSize(); int y = clientRect.top + (itemSize.y + separatorHeight) * (_selectedItem - _topItem) + ((itemSize.y + separatorHeight)/4); if (_cites_contextMenu[0].text == NULL) { _cites_contextMenu[0].text = (char *)_("Go to citation"); _cites_contextMenu[1].text = (char *)_("Delete citation"); } OpenMenu(_cites_contextMenu, DCMD_BOOKMARK_GO_N, ScreenWidth()/4, y, handle_citesContextMenu); }
void ObjectDetail::onLoad() { PageBase::onLoad(); // Ottiene l'id dell'utente richiesto EntityID id = getUrlID().to_ascii(); shared_ptr<XMLDocument> document(OS_NEW XMLDocument()); shared_ptr<XMLNode> nodeRoot = document->create(_S("object")); shared_ptr<EntitiesEntity> entity = getPortal()->getEntity(getDatabase(), id); if(entity != nullptr) { shared_ptr<XMLPortalExporter> exporter(OS_NEW XMLPortalExporter(nodeRoot, get_this_ptr<IPortalPage>(), XMLPortalExporter::emFull, true)); entity->exportXML(exporter); } String path = getSkin()->getTemplatePath(_S("object_detail.xsl")); shared_ptr<HtmlXSLControl> pageTemplate(OS_NEW HtmlXSLControl(loadStylesheet(path), document)); // Carica il template di riferimento getControls()->add(pageTemplate); }
void CRRecentBooksMenu::showContextMenu() { CRRecentBookMenuItem *item = static_cast<CRRecentBookMenuItem *>(getItems()[_selectedItem]); CRMenuSkinRef skin = getSkin(); CRRectSkinRef separatorSkin = skin->getSeparatorSkin(); int separatorHeight = 0; if ( !separatorSkin.isNull() ) separatorHeight = separatorSkin->getMinSize().y; lvRect clientRect; getClientRect(clientRect); lvPoint itemSize = getMaxItemSize(); int y = clientRect.top + (itemSize.y + separatorHeight) * (_selectedItem - _topItem) + ((itemSize.y + separatorHeight)/4); if (_contextMenu[0].text == NULL) { _contextMenu[0].text = (char *)_("Open book"); _contextMenu[1].text = (char *)_("Delete record"); } OpenMenu(_contextMenu, MCMD_OPEN_RECENT_BOOK, ScreenWidth()/4, y, handle_contextMenu); }
String FileEditor::getTemplatePath() { return getSkin()->getTemplatePath(_S("file_editor.xsl")); }
Action::ResultE SkeletonSkinningAlgorithm::renderEnter(Action *action) { Action::ResultE res = Action::Continue; RenderAction *ract = boost::polymorphic_downcast<RenderAction *>(action); SkinnedGeometry *skinGeo = getSkin(); Skeleton *skel = skinGeo->getSkeleton(); skel->renderEnter(action, skinGeo); const Skeleton::MFJointsType *joints = skel->getMFJoints(); const Skeleton::MFParentJointsType *parentJoints = skel->getMFParentJoints(); const Skeleton::MFJointMatricesType *jointMats = skel->getMFJointMatrices(); UInt32 numJoints = joints->size32(); #ifndef OSG_SKELETON_SKINNING_ALGO_DRAW_AXIS _mfDrawPositions.resize(numJoints); _mfDrawIndex .clear ( ); for(UInt32 i = 0; i < numJoints; ++i) { (*jointMats)[i].mult(Pnt3f(0.f, 0.f, 0.f), _mfDrawPositions[i] ); if((*parentJoints)[i] != NULL) { _mfDrawIndex.push_back(i ); _mfDrawIndex.push_back((*parentJoints)[i]->getJointId()); } } #else Real32 axisLen = 1.f; _mfDrawPositions.resize(4 * numJoints); _mfDrawIndex .clear ( ); for(UInt32 i = 0; i < numJoints; ++i) { (*jointMats)[i].mult(Pnt3f(0.f, 0.f, 0.f), _mfDrawPositions[4 * i + 0]); if((*parentJoints)[i] != NULL) { _mfDrawIndex.push_back(4 * i + 0); _mfDrawIndex.push_back(4 * (*parentJoints)[i]->getJointId() + 0); Vec3f vec = _mfDrawPositions[4 * i + 0] - _mfDrawPositions[4 * (*parentJoints)[i]->getJointId() + 0]; axisLen = 0.2f * vec.length(); axisLen = 1.f; } else { axisLen = 1.f; } (*jointMats)[i].mult( Pnt3f(axisLen, 0.f, 0.f ), _mfDrawPositions[4 * i + 1]); (*jointMats)[i].mult( Pnt3f(0.f, axisLen, 0.f ), _mfDrawPositions[4 * i + 2]); (*jointMats)[i].mult( Pnt3f(0.f, 0.f, axisLen), _mfDrawPositions[4 * i + 3]); _mfDrawIndex.push_back(4 * i + 0); _mfDrawIndex.push_back(4 * i + 1); _mfDrawIndex.push_back(4 * i + 0); _mfDrawIndex.push_back(4 * i + 2); _mfDrawIndex.push_back(4 * i + 0); _mfDrawIndex.push_back(4 * i + 3); } #endif // #ifndef OSG_SKELETON_SKINNING_ALGO_DRAW_AXIS DrawEnv::DrawFunctor drawFuncSkinAlgo = boost::bind(&SkeletonSkinningAlgorithm::drawFunc, this, _1); PrimeMaterial *skelMat = getDefaultUnlitMaterial(); State *state = skelMat->getState (); ract->dropFunctor(drawFuncSkinAlgo, state, skelMat->getSortKey()); return res; }