void P3DPlantModelTreeCtrl::OnSetStemModelWingsClick (wxCommandEvent &event) { P3DBranchModel *BranchModel; P3DBranchModel *ParentBranchModel; const P3DStemModelTube *ParentStemModel; P3DStemModel *StemModel; P3DBranchingAlg *BranchingAlg; wxTreeItemId ParentId; ParentId = GetItemParent(GetSelection()); if (!ParentId.IsOk()) { return; } ParentBranchModel = ((P3DPlantModelTreeCtrlItemData*)(GetItemData(ParentId)))->GetBranchModel(); ParentStemModel = dynamic_cast<const P3DStemModelTube*>(ParentBranchModel->GetStemModel()); if (ParentStemModel == 0) { return; } BranchModel = ((P3DPlantModelTreeCtrlItemData*)(GetItemData(GetSelection())))->GetBranchModel(); StemModel = new P3DStemModelWings(ParentStemModel); BranchingAlg = new P3DBranchingAlgWings(); unsigned int SubBranchIndex; wxTreeItemId ItemId; wxTreeItemId ParentItemId; SubBranchIndex = 0; ItemId = GetSelection(); ParentItemId = GetItemParent(ItemId); while ((ItemId = GetPrevSibling(ItemId)).IsOk()) { SubBranchIndex++; } P3DApp::GetApp()->ExecEditCmd (new ChangeStemModelCommand (ParentBranchModel, SubBranchIndex, BranchModel, StemModel, BranchingAlg, this, BranchPanel)); }
void P3DPlantModelTreeCtrl::OnAppendBranchCopyClick (wxCommandEvent &event) { P3DListDialog SourceSelectionDialog(NULL,wxID_ANY,wxT("Select group to copy")); bool Done; P3DPlantModel *PlantModel; P3DBranchModel *BranchModel; unsigned int BranchIndex; PlantModel = P3DApp::GetApp()->GetModel(); BranchIndex = 0; BranchModel = P3DPlantModel::GetBranchModelByIndex(PlantModel,BranchIndex); while (BranchModel != 0) { SourceSelectionDialog.AddChoice(BranchModel->GetName()); BranchModel = P3DPlantModel::GetBranchModelByIndex(PlantModel,++BranchIndex); } SourceSelectionDialog.SetSelection(0); if (SourceSelectionDialog.ShowModal() == wxID_OK) { int SourceBranchIndex; SourceBranchIndex = SourceSelectionDialog.GetSelection(); if (SourceBranchIndex >= 0) { const P3DBranchModel *SourceBranchModel; P3DBranchModel *ParentBranchModel; P3DBranchModel *ChildBranchModel; P3DStemModelWings *WingsStemModel; const P3DBranchingAlg *SourceBranchingAlg; P3DStemModel *NewStemModel; P3DBranchingAlg *NewBranchingAlg; P3DVisRangeState *NewVisRange; float MinRange,MaxRange; SourceBranchModel = P3DPlantModel::GetBranchModelByIndex(PlantModel,SourceBranchIndex); ParentBranchModel = ((P3DPlantModelTreeCtrlItemData*)(GetItemData(GetSelection())))->GetBranchModel(); if (dynamic_cast<const P3DStemModelWings*>(SourceBranchModel->GetStemModel()) != 0) { if (ParentBranchModel->GetStemModel() == 0) /* trunk */ { ::wxMessageBox(wxT("\"Wings\" stem can be added to \"Tube\" stems only"), wxT("Error"), wxICON_ERROR | wxOK); return; } } ChildBranchModel = new P3DBranchModel(); ChildBranchModel->SetName (GenerateClonedBranchName (P3DApp::GetApp()->GetModel(),SourceBranchModel).c_str()); NewStemModel = SourceBranchModel->GetStemModel()->CreateCopy(); WingsStemModel = dynamic_cast<P3DStemModelWings*>(NewStemModel); if (WingsStemModel != 0) { WingsStemModel->SetParent((P3DStemModelTube*)ParentBranchModel->GetStemModel()); } ChildBranchModel->SetStemModel(NewStemModel); if ((dynamic_cast<const P3DBranchingAlgBase*>(SourceBranchModel->GetBranchingAlg())) != 0) { if (ParentBranchModel->GetStemModel() == 0) { NewBranchingAlg = SourceBranchModel->GetBranchingAlg()->CreateCopy(); } else { NewBranchingAlg = P3DApp::GetApp()->CreateBranchingAlgStd(); } } else { if (ParentBranchModel->GetStemModel() == 0) { NewBranchingAlg = new P3DBranchingAlgBase(); } else { NewBranchingAlg = SourceBranchModel->GetBranchingAlg()->CreateCopy(); } } ChildBranchModel->SetBranchingAlg(NewBranchingAlg); ChildBranchModel->SetMaterialInstance(SourceBranchModel->GetMaterialInstance()->CreateCopy()); NewVisRange = ChildBranchModel->GetVisRangeState(); NewVisRange->SetState(SourceBranchModel->GetVisRangeState()->IsEnabled()); SourceBranchModel->GetVisRangeState()->GetRange(&MinRange,&MaxRange); NewVisRange->SetRange(MinRange,MaxRange); P3DApp::GetApp()->ExecEditCmd (new AppendBranchCommand(ParentBranchModel,ChildBranchModel,this)); } } }
void P3DPlantModelTreeCtrl::OnItemRightClick (wxTreeEvent &event) { P3DBranchModel *BranchModel; P3DMaterialInstanceSimple *MaterialSimple; if (event.GetItem() != GetSelection()) { SelectItem(event.GetItem()); } BranchModel = ((P3DPlantModelTreeCtrlItemData*)(GetItemData(GetSelection())))->GetBranchModel(); wxMenu PopupMenu; wxMenu *StemModelMenu; wxMenu *AppendBranchMenu; P3DStemModel *StemModel = BranchModel->GetStemModel(); if (StemModel == 0) { } else { StemModelMenu = new wxMenu(); StemModelMenu->Append(P3D_SET_STEM_MODEL_TUBE_ID,wxT("Tube")); StemModelMenu->Append(P3D_SET_STEM_MODEL_QUAD_ID,wxT("Quad")); StemModelMenu->Append(P3D_SET_STEM_MODEL_WINGS_ID,wxT("Wings")); if (dynamic_cast<P3DStemModelTube*>(StemModel) != 0) { StemModelMenu->Enable(P3D_SET_STEM_MODEL_TUBE_ID,false); } else if (dynamic_cast<P3DStemModelQuad*>(StemModel) != 0) { StemModelMenu->Enable(P3D_SET_STEM_MODEL_QUAD_ID,false); } else if (dynamic_cast<P3DStemModelWings*>(StemModel) != 0) { StemModelMenu->Enable(P3D_SET_STEM_MODEL_WINGS_ID,false); } const P3DPluginInfoVector &GMeshPlugins = P3DApp::GetApp()->GetGMeshPlugins(); if (GMeshPlugins.size() > 0) { wxMenu *GMeshPluginsMenu = new wxMenu(); int MenuItemId = wxID_GMESH_PLUGIN_FIRST; for (unsigned int Index = 0; Index < GMeshPlugins.size(); Index++) { GMeshPluginsMenu->Append(MenuItemId++,wxString(GMeshPlugins[Index].GetMenuName(),wxConvUTF8)); } StemModelMenu->Append(P3D_SET_STEM_MODEL_GMESH_ID,wxT("G-Mesh"),GMeshPluginsMenu); } else { StemModelMenu->Append(P3D_SET_STEM_MODEL_GMESH_ID,wxT("G-Mesh")); StemModelMenu->Enable(P3D_SET_STEM_MODEL_GMESH_ID,false); } if (BranchModel->GetSubBranchCount() > 0) { StemModelMenu->Enable(P3D_SET_STEM_MODEL_QUAD_ID,false); StemModelMenu->Enable(P3D_SET_STEM_MODEL_WINGS_ID,false); StemModelMenu->Enable(P3D_SET_STEM_MODEL_GMESH_ID,false); } if (GetItemParent(GetSelection()) == GetRootItem()) { StemModelMenu->Enable(P3D_SET_STEM_MODEL_WINGS_ID,false); } } MaterialSimple = dynamic_cast<P3DMaterialInstanceSimple*>(BranchModel->GetMaterialInstance()); AppendBranchMenu = new wxMenu(); AppendBranchMenu->Append(PLANT_TREE_APPEND_BRANCH_NEW_ID,wxT("New branch")); AppendBranchMenu->Append(PLANT_TREE_APPEND_BRANCH_COPY_ID,wxT("Copy branch...")); PopupMenu.Append(PLANT_TREE_APPEND_BRANCH_ID,wxT("Append branch"),AppendBranchMenu); PopupMenu.Append(PLANT_TREE_REMOVE_STEM_ID,wxT("Delete stem")); if (GetItemParent(GetSelection()).IsOk()) { PopupMenu.AppendSeparator(); PopupMenu.Append(P3D_SET_STEM_MODEL_ID,wxT("Stem model"),StemModelMenu); wxMenuItem *DummyModeMenuItem = PopupMenu.AppendCheckItem(P3D_SET_STEM_DUMMY_MODE,wxT("Dummy")); DummyModeMenuItem->Check(BranchModel->IsDummy()); PopupMenu.AppendSeparator(); if (!BranchModel->IsDummy()) { if (MaterialSimple->IsHidden()) { PopupMenu.Append(PLANT_TREE_HIDESHOW_STEM_ID,wxT("Show")); } else { PopupMenu.Append(PLANT_TREE_HIDESHOW_STEM_ID,wxT("Hide")); } } } PopupMenu.Append(PLANT_TREE_RENAME_STEM_ID,wxT("Rename...")); if (GetRootItem() == GetSelection()) { PopupMenu.Enable(PLANT_TREE_REMOVE_STEM_ID,false); } if (BranchModel->GetSubBranchCount() < P3DBranchModelSubBranchMaxCount) { } else { PopupMenu.Enable(PLANT_TREE_APPEND_BRANCH_ID,false); } if (dynamic_cast<P3DStemModelQuad*>(StemModel) != 0) { PopupMenu.Enable(PLANT_TREE_APPEND_BRANCH_ID,false); } else if (dynamic_cast<P3DStemModelWings*>(StemModel) != 0) { PopupMenu.Enable(PLANT_TREE_APPEND_BRANCH_ID,false); } this->PopupMenu(&PopupMenu,event.GetPoint()); }