25 #include <Eigen/Dense>
27 #include <pcl/PointIndices.h>
28 #include <pcl/point_cloud.h>
29 #include <pcl/point_types.h>
38 #include <VisionX/gui-plugins/UserAssistedSegmenterGui/ui_UserAssistedSegmenterGuiWidget.h>
39 #include <VisionX/interface/components/UserAssistedSegmenter.h>
46 class UserAssistedSegmenterConfigDialog;
74 UserAssistedSegmenterGuiWidgetController>,
75 public visionx::UserAssistedSegmenterListener
79 using PointT = pcl::PointXYZRGBL;
80 using PointCloudT = pcl::PointCloud<PointT>;
92 virtual void loadSettings(QSettings* settings)
override;
95 virtual void saveSettings(QSettings* settings)
override;
98 virtual QPointer<QDialog> getConfigDialog(QWidget* parent)
override;
100 virtual void configured()
override;
104 static QString GetWidgetName();
108 virtual void onInitComponent()
override;
111 virtual void onConnectComponent()
override;
115 virtual void reportSegmentation(
const visionx::ColoredLabeledPointCloud& pointCloud,
116 const Ice::Current&)
override;
123 void onNewSourcePointCloud();
126 void onFilterSmallSegmentsNumEdited();
127 void updateFilters();
130 void onRadioButtonShowInputToggled(
bool checked);
131 void onRadioButtonShowResultToggle(
bool checked);
134 void onShowIDsToggled(
bool checked);
135 void updateSegmentIDs();
137 void clearVisualization();
140 void updateUserGroupingRows(
int numRows);
141 void onUserGroupingChanged(uint32_t groupID, std::vector<uint32_t> segmentIDs);
142 void onTableGroupingCellChanged(
int row,
int col);
144 void publishSegmentation();
149 void newSourcePointCloud();
153 static std::vector<armarx::DrawColor> makeColorList();
157 void applyFilters(PointCloudT& pointCloud,
158 std::map<uint32_t, pcl::PointIndices>& segmentIndex);
161 void updatePointCloud(
const PointCloudT& pointCloud,
162 const std::map<uint32_t, pcl::PointIndices>& segmentIndex);
164 void computeSegmentIndex(
const PointCloudT& pointCloud);
165 void computeCenters(
const PointCloudT& pointCloud,
166 const std::map<uint32_t, pcl::PointIndices>& segmentIndex);
168 void updateTableOverview();
169 void drawSegmentIDs(
bool onlyIfChecked =
false);
170 void drawInputPointCloud(
bool onlyIfChecked =
false);
171 void drawResultPointCloud(
bool onlyIfChecked =
false);
173 armarx::DrawColor dcolor(std::size_t
id)
const;
174 QColor qcolor(std::size_t
id)
const;
179 Ui::UserAssistedSegmenterGuiWidget widget;
180 QPointer<UserAssistedSegmenterConfigDialog> configDialog;
185 std::string userAssistedSegmenterProxyName =
"UserAssistedSegmenter";
186 std::string userAssistedSegmenterTopicName =
"UserAssistedSegmenterUpdates";
190 visionx::UserAssistedSegmenterInterfacePrx segmenterProxy;
193 PointCloudT sourcePointCloud;
194 PointCloudT pointCloud;
196 std::map<uint32_t, pcl::PointIndices> segmentIndex;
197 std::map<uint32_t, Eigen::Vector3f> centers;
200 std::vector<std::vector<std::uint32_t>> userGrouping;
202 std::string layerPointCloud =
"UserAssistedSegmenter_PointCloud";
203 std::string layerSegmentIDs =
"UserAssistedSegmenter_SegmentIDs";