| 1145 | } |
| 1146 | |
| 1147 | void RibbonMenu::cloneSelectedPart( const std::shared_ptr<Object>& object ) |
| 1148 | { |
| 1149 | SCOPED_HISTORY( _t( "Clone Selection" ) ); |
| 1150 | std::shared_ptr<VisualObject> newObj; |
| 1151 | std::string name; |
| 1152 | if ( auto selectedMesh = std::dynamic_pointer_cast< ObjectMesh >( object ) ) |
| 1153 | { |
| 1154 | if ( !selectedMesh->mesh() ) |
| 1155 | return; |
| 1156 | newObj = cloneRegion( selectedMesh, selectedMesh->getSelectedFaces() ); |
| 1157 | name = "ObjectMesh"; |
| 1158 | } |
| 1159 | else if ( auto selectedPoints = std::dynamic_pointer_cast< ObjectPoints >( object ) ) |
| 1160 | { |
| 1161 | if ( !selectedPoints->pointCloud() ) |
| 1162 | return; |
| 1163 | newObj = cloneRegion( selectedPoints, selectedPoints->getSelectedPoints() ); |
| 1164 | name = "ObjectPoints"; |
| 1165 | } |
| 1166 | |
| 1167 | AppendHistory<ChangeObjectSelectedAction>( "unselect original", object, false ); |
| 1168 | AppendHistory<ChangeObjectVisibilityAction>( "hide original", object, ViewportMask() ); |
| 1169 | |
| 1170 | newObj->setName( object->name() + " Partial" ); |
| 1171 | newObj->setXf( object->xf() ); |
| 1172 | newObj->select( true ); |
| 1173 | AppendHistory<ChangeSceneAction>( "Selection to New object: add " + name, newObj, ChangeSceneAction::Type::AddObject ); |
| 1174 | object->parent()->addChild( newObj ); |
| 1175 | } |
| 1176 | |
| 1177 | bool RibbonMenu::drawCloneButton( const std::vector<std::shared_ptr<Object>>& selected ) |
| 1178 | { |
nothing calls this directly
no test coverage detected