| 80 | } |
| 81 | |
| 82 | PyObject* ComplexGeoDataPy::getFacesFromSubElement(PyObject* args) const |
| 83 | { |
| 84 | char* type; |
| 85 | unsigned long index; |
| 86 | if (!PyArg_ParseTuple(args, "sk", &type, &index)) { |
| 87 | return nullptr; |
| 88 | } |
| 89 | |
| 90 | std::vector<Base::Vector3d> points; |
| 91 | std::vector<Base::Vector3d> normals; |
| 92 | std::vector<Data::ComplexGeoData::Facet> facets; |
| 93 | try { |
| 94 | std::unique_ptr<Data::Segment> segm(getComplexGeoDataPtr()->getSubElement(type, index)); |
| 95 | getComplexGeoDataPtr()->getFacesFromSubElement(segm.get(), points, normals, facets); |
| 96 | } |
| 97 | catch (...) { |
| 98 | PyErr_SetString(PyExc_RuntimeError, "failed to get sub-element from object"); |
| 99 | return nullptr; |
| 100 | } |
| 101 | |
| 102 | Py::Tuple tuple(2); |
| 103 | Py::List vertex; |
| 104 | for (const auto& it : points) { |
| 105 | vertex.append(Py::asObject(new Base::VectorPy(it))); |
| 106 | } |
| 107 | tuple.setItem(0, vertex); |
| 108 | Py::List facet; |
| 109 | for (const auto& it : facets) { |
| 110 | Py::Tuple f(3); |
| 111 | f.setItem(0, Py::Long(int(it.I1))); |
| 112 | f.setItem(1, Py::Long(int(it.I2))); |
| 113 | f.setItem(2, Py::Long(int(it.I3))); |
| 114 | facet.append(f); |
| 115 | } |
| 116 | tuple.setItem(1, facet); |
| 117 | return Py::new_reference_to(tuple); |
| 118 | } |
| 119 | |
| 120 | PyObject* ComplexGeoDataPy::getLinesFromSubElement(PyObject* args) const |
| 121 | { |
nothing calls this directly
no test coverage detected