| 135 | {} |
| 136 | |
| 137 | Mesh::MeshObject* create(const std::vector<Part::TopoShape::Domain>& domains) const |
| 138 | { |
| 139 | std::vector<Base::Vector3d> points; |
| 140 | std::vector<Part::TopoShape::Facet> facets; |
| 141 | Part::BRepMesh mesh; |
| 142 | mesh.getFacesFromDomains(domains, points, facets); |
| 143 | |
| 144 | MeshCore::MeshFacetArray faces; |
| 145 | faces.reserve(facets.size()); |
| 146 | std::transform( |
| 147 | facets.cbegin(), |
| 148 | facets.cend(), |
| 149 | std::back_inserter(faces), |
| 150 | [](const Part::TopoShape::Facet& face) { |
| 151 | return MeshCore::MeshFacet(face.I1, face.I2, face.I3); |
| 152 | } |
| 153 | ); |
| 154 | |
| 155 | MeshCore::MeshPointArray verts; |
| 156 | verts.reserve(points.size()); |
| 157 | for (const auto& it : points) { |
| 158 | verts.emplace_back(float(it.x), float(it.y), float(it.z)); |
| 159 | } |
| 160 | |
| 161 | MeshCore::MeshKernel kernel; |
| 162 | kernel.Adopt(verts, faces, true); |
| 163 | |
| 164 | // mesh segments |
| 165 | std::vector<std::vector<MeshCore::FacetIndex>> meshSegments; |
| 166 | |
| 167 | std::map<uint32_t, std::vector<std::size_t>> colorMap; |
| 168 | for (std::size_t i = 0; i < colors.size(); i++) { |
| 169 | colorMap[colors[i]].push_back(i); |
| 170 | } |
| 171 | |
| 172 | bool createSegm = (colors.size() == domains.size()); |
| 173 | |
| 174 | // add a segment for the face |
| 175 | if (createSegm || this->segments) { |
| 176 | auto segments = mesh.createSegments(); |
| 177 | meshSegments.reserve(segments.size()); |
| 178 | std::transform( |
| 179 | segments.cbegin(), |
| 180 | segments.cend(), |
| 181 | std::back_inserter(meshSegments), |
| 182 | [](const Part::BRepMesh::Segment& segm) { |
| 183 | std::vector<MeshCore::FacetIndex> faces; |
| 184 | faces.insert(faces.end(), segm.cbegin(), segm.cend()); |
| 185 | return faces; |
| 186 | } |
| 187 | ); |
| 188 | } |
| 189 | |
| 190 | Mesh::MeshObject* meshdata = new Mesh::MeshObject(); |
| 191 | meshdata->swap(kernel); |
| 192 | if (createSegm) { |
| 193 | int index = 0; |
| 194 | for (const auto& it : colorMap) { |
no test coverage detected