MCPcopy Create free account
hub / github.com/FreeCAD/FreeCAD / create

Method create

src/Mod/MeshPart/App/Mesher.cpp:137–215  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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) {

Callers 1

createStandardMethod · 0.45

Calls 15

reserveMethod · 0.80
cbeginMethod · 0.80
cendMethod · 0.80
AdoptMethod · 0.80
createSegmentsMethod · 0.80
addIndicesMethod · 0.80
asHexStringMethod · 0.80
transformFunction · 0.50
MeshFacetClass · 0.50
getFacesFromDomainsMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected