MCPcopy Create free account
hub / github.com/PyMesh/PyMesh / save_elements

Method save_elements

src/IO/MshSaver.cpp:93–153  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

91}
92
93void MshSaver::save_elements(
94 const VectorI& elements, MshSaver::ElementType type) {
95 size_t nodes_per_element = 0;
96 switch (type) {
97 case TRI:
98 nodes_per_element = 3;
99 break;
100 case QUAD:
101 nodes_per_element = 4;
102 break;
103 case TET:
104 nodes_per_element = 4;
105 break;
106 case HEX:
107 nodes_per_element = 8;
108 break;
109 default:
110 {
111 std::stringstream err_msg;
112 err_msg << "Unsupported element type " << type;
113 throw NotImplementedError(err_msg.str());
114 }
115 }
116 m_num_elements = elements.size() / nodes_per_element;
117
118 // Save elements.
119 fout << "$Elements" << std::endl;
120 fout << m_num_elements << std::endl;
121
122 if (m_num_elements > 0) {
123 int elem_type = type;
124 int num_elems = m_num_elements;
125 int tags = 0;
126 if (!m_binary) {
127 for (size_t i=0; i<elements.size(); i+=nodes_per_element) {
128 int elem_num = i/nodes_per_element + 1;
129 VectorI elem = elements.segment(i, nodes_per_element) +
130 VectorI::Ones(nodes_per_element);
131
132 fout << elem_num << " " << elem_type << " " << tags << " ";
133 for (size_t j=0; j<nodes_per_element; j++) {
134 fout << elem[j] << " ";
135 }
136 fout << std::endl;
137 }
138 } else {
139 fout.write((char*)&elem_type, sizeof(int));
140 fout.write((char*)&num_elems, sizeof(int));
141 fout.write((char*)&tags, sizeof(int));
142 for (size_t i=0; i<elements.size(); i+=nodes_per_element) {
143 int elem_num = i/nodes_per_element + 1;
144 VectorI elem = elements.segment(i, nodes_per_element) +
145 VectorI::Ones(nodes_per_element);
146 fout.write((char*)&elem_num, sizeof(int));
147 fout.write((char*)elem.data(), sizeof(int)*nodes_per_element);
148 }
149 }
150 }

Callers

nothing calls this directly

Calls 4

NotImplementedErrorClass · 0.85
strMethod · 0.45
sizeMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected