@@ -13,15 +13,6 @@ uint32_t dracoMeshNumFaces(const draco_mesh *mesh) {
1313 return reinterpret_cast <const draco::Mesh*>(mesh)->num_faces ();
1414}
1515
16-
17- uint32_t dracoMeshNumPoints (const draco_mesh *mesh) {
18- return reinterpret_cast <const draco::Mesh*>(mesh)->num_points ();
19- }
20-
21- int32_t dracoMeshNumAttrs (const draco_mesh *mesh) {
22- return reinterpret_cast <const draco::Mesh*>(mesh)->num_attributes ();
23- }
24-
2516template <typename T>
2617bool GetTrianglesArray (const draco::Mesh *m, const size_t out_size,
2718 T *out_values) {
@@ -58,102 +49,3 @@ bool dracoMeshGetTrianglesUint32(const draco_mesh *mesh, const size_t out_size,
5849
5950 return GetTrianglesArray (m, out_size, out_values);
6051}
61-
62- const draco_point_attr* dracoMeshGetAttribute (const draco_mesh *mesh, int32_t att_id) {
63- auto m = reinterpret_cast <const draco::Mesh*>(mesh);
64- if (att_id < 0 || att_id > m->num_attributes ()) {
65- return nullptr ;
66- }
67- auto attr = m->attribute (att_id);
68- return reinterpret_cast <const draco_point_attr*>(attr);
69- }
70-
71- const draco_point_attr* dracoMeshGetAttributeByUniqueId (const draco_mesh *mesh, uint32_t unique_id) {
72- auto m = reinterpret_cast <const draco::Mesh*>(mesh);
73- auto attr = m->GetAttributeByUniqueId (unique_id);
74- return reinterpret_cast <const draco_point_attr*>(attr);
75- }
76-
77-
78- int32_t dracoMeshGetNamedAttributeId (const draco_mesh *mesh, draco_geometry_type geo_type) {
79- auto type = static_cast <draco::GeometryAttribute::Type>(geo_type);
80- return reinterpret_cast <const draco::Mesh*>(mesh)->GetNamedAttributeId (type);
81- }
82-
83- template <class T >
84- static bool GetAttributeDataArrayForAllPoints (const draco::PointCloud *pc,
85- const draco::PointAttribute *pa,
86- draco::DataType type,
87- size_t out_size,
88- void *out_values) {
89- const int components = pa->num_components ();
90- const int num_points = pc->num_points ();
91- const int data_size = num_points * components * sizeof (T);
92- if (data_size != out_size) {
93- return false ;
94- }
95- const bool requested_type_matches = pa->data_type () == type;
96- if (requested_type_matches && pa->is_mapping_identity ()) {
97- // Copy values directly to the output vector.
98- const auto ptr = pa->GetAddress (draco::AttributeValueIndex (0 ));
99- ::memcpy (out_values, ptr, data_size);
100- return true ;
101- }
102-
103- // Copy values one by one.
104- std::vector<T> values (components);
105- int entry_id = 0 ;
106-
107- T *const typed_output = reinterpret_cast <T *>(out_values);
108- for (draco::PointIndex i (0 ); i < num_points; ++i) {
109- const draco::AttributeValueIndex val_index = pa->mapped_index (i);
110- if (requested_type_matches) {
111- pa->GetValue (val_index, values.data ());
112- } else {
113- if (!pa->ConvertValue <T>(val_index, values.data ())) {
114- return false ;
115- }
116- }
117- for (int j = 0 ; j < components; ++j) {
118- typed_output[entry_id++] = values[j];
119- }
120- }
121- return true ;
122- }
123-
124- bool dracoMeshGetAttributeData (const draco_mesh *pc,
125- const draco_point_attr *pa,
126- draco_data_type data_type,
127- const size_t out_size,
128- void *out_values) {
129- auto pcc = reinterpret_cast <const draco::Mesh*>(pc);
130- auto pac = reinterpret_cast <const draco::PointAttribute*>(pa);
131- switch (data_type) {
132- case DT_INT8:
133- return GetAttributeDataArrayForAllPoints<int8_t >(pcc, pac, draco::DT_INT8,
134- out_size, out_values);
135- case DT_INT16:
136- return GetAttributeDataArrayForAllPoints<int16_t >(pcc, pac, draco::DT_INT16,
137- out_size, out_values);
138- case DT_INT32:
139- return GetAttributeDataArrayForAllPoints<int32_t >(pcc, pac, draco::DT_INT32,
140- out_size, out_values);
141- case DT_UINT8:
142- return GetAttributeDataArrayForAllPoints<uint8_t >(pcc, pac, draco::DT_UINT8,
143- out_size, out_values);
144- case DT_UINT16:
145- return GetAttributeDataArrayForAllPoints<uint16_t >(pcc, pac, draco::DT_UINT16,
146- out_size, out_values);
147- case DT_UINT32:
148- return GetAttributeDataArrayForAllPoints<uint32_t >(pcc, pac, draco::DT_UINT32,
149- out_size, out_values);
150- case DT_FLOAT32:
151- return GetAttributeDataArrayForAllPoints<float >(pcc, pac, draco::DT_FLOAT32,
152- out_size, out_values);
153- case DT_FLOAT64:
154- return GetAttributeDataArrayForAllPoints<double >(pcc, pac, draco::DT_FLOAT64,
155- out_size, out_values);
156- default :
157- return false ;
158- }
159- }
0 commit comments