106 "Selection control is not supported in this mode");
107 params.set_output(
"Geometry", std::move(geometry));
112 const AttrDomain domain = AttrDomain(
params.node().custom1);
116 bke::MutableAttributeAccessor attributes = mesh->attributes_for_write();
117 remove_with_wrong_domain(attributes,
".select_vert", AttrDomain::Point);
118 remove_with_wrong_domain(attributes,
".select_edge", AttrDomain::Edge);
119 remove_with_wrong_domain(attributes,
".select_poly", AttrDomain::Face);
122 const Field<bool> field = conversions.try_convert(selection, CPPType::get<bool>());
124 case AttrDomain::Point:
125 bke::try_capture_field_on_geometry(geometry.get_component_for_write<MeshComponent>(),
129 bke::mesh_select_vert_flush(*mesh);
131 case AttrDomain::Edge:
132 bke::try_capture_field_on_geometry(geometry.get_component_for_write<MeshComponent>(),
136 bke::mesh_select_edge_flush(*mesh);
138 case AttrDomain::Face:
139 bke::try_capture_field_on_geometry(geometry.get_component_for_write<MeshComponent>(),
143 bke::mesh_select_face_flush(*mesh);
151 case OB_MODE_SCULPT: {
152 GField on_domain = GField(
153 std::make_shared<bke::EvaluateOnDomainInput>(selection, domain));
154 GField clamped_and_inverted = invert_selection(clamp_selection(std::move(on_domain)));
155 const Field<float> field = conversions.try_convert(std::move(clamped_and_inverted),
156 CPPType::get<float>());
157 bke::try_capture_field_on_geometry(geometry.get_component_for_write<MeshComponent>(),
169 const GField field = clamp_selection(selection);
170 if (ELEM(domain, AttrDomain::Point, AttrDomain::Curve)) {
171 bke::try_capture_field_on_geometry(
172 geometry.get_component_for_write<CurveComponent>(),
".selection", domain, field);
175 if (geometry.has_pointcloud()) {
176 const GField field = clamp_selection(selection);
177 if (domain == AttrDomain::Point) {
178 bke::try_capture_field_on_geometry(
179 geometry.get_component_for_write<PointCloudComponent>(),
".selection", domain, field);
182 if (geometry.has_grease_pencil()) {
184 const Field<bool> field = conversions.try_convert(selection, CPPType::get<bool>());
185 if (ELEM(domain, AttrDomain::Point, AttrDomain::Curve)) {
186 bke::try_capture_field_on_geometry(
187 geometry.get_component_for_write<GreasePencilComponent>(),
194 params.set_output(
"Geometry", std::move(geometry));