ErrorCode WriteDamsel::write_vertices(RangeSeqIntersectIter &rsi) { // write the vertices; these vertices will be in the same sequence and will be contiguous, guaranteed EntityHandle start_vert = rsi.get_start_handle(), end_vert = rsi.get_end_handle(); // create a damsel container for these vertex handles damsel_container vertex_cont = DMSLcontainer_create_sequence(dU.dmslModel, start_vert, (int)(end_vert-start_vert+1), 1); std::cerr << "MOAB: created model container: vertex_cont = " << vertex_cont <<std::endl; if (DAMSEL_CONTAINER_INVALID == vertex_cont) CHK_MB_ERR_2(MB_FAILURE, "Failed to create vertex sequence for vertices starting with handle %lu.", rsi.get_start_handle()); damsel_err_t err = DMSLmodel_map_handles_inventing_file_handles(vertex_cont); CHK_DMSL_ERR(err, "Failed to map handles."); // define the entities to damsel err = DMSLentity_define(vertex_cont, DAMSEL_ENTITY_TYPE_VERTEX, 1, vertex_cont); CHK_DMSL_ERR_2(err, "Failure in DMSLentity_define for vertices starting with handle %lu.", rsi.get_start_handle()); // get the vertex coordinates storage locations and pass to damsel Range vert_range(start_vert, end_vert); double *xcoords = NULL, *ycoords = NULL, *zcoords = NULL; int count; ErrorCode rval = mbImpl->coords_iterate(vert_range.begin(), vert_range.end(), xcoords, ycoords, zcoords, count); CHK_MB_ERR_2(rval, "Failed to get coordinate iterator for vertices starting with handle %lu.", rsi.get_start_handle()); if (count != (int)vert_range.size()) { CHK_MB_ERR_2(MB_FAILURE, "Vertex subrange not in the same sequence for vertices starting with handle %lu.", rsi.get_start_handle()); } if (xcoords && !ycoords && !zcoords) { // interleaved // map the data to damsel err = DMSLmodel_map_tag(xcoords, vertex_cont, (damsel_handle_ptr)&dU.xcoordsTag.mTagh); CHK_DMSL_ERR_2(err, "Failed to assign vertex coordinates tag for vertices starting with handle %lu.", rsi.get_start_handle()); } else { // map the data to damsel err = DMSLmodel_map_tag(xcoords, vertex_cont, (damsel_handle_ptr)&dU.xcoordsTag.mTagh); CHK_DMSL_ERR_2(err, "Failed to assign vertex x coordinates tag for vertices starting with handle %lu.", rsi.get_start_handle()); err = DMSLmodel_map_tag(ycoords, vertex_cont, (damsel_handle_ptr)&dU.ycoordsTag.mTagh); CHK_DMSL_ERR_2(err, "Failed to assign vertex y coordinates tag for vertices starting with handle %lu.", rsi.get_start_handle()); err = DMSLmodel_map_tag(zcoords, vertex_cont, (damsel_handle_ptr)&dU.zcoordsTag.mTagh); CHK_DMSL_ERR_2(err, "Failed to assign vertex z coordinates tag for vertices starting with handle %lu.", rsi.get_start_handle()); } // write/map dense tags rval = map_dense_tags(rsi, vertex_cont); CHK_MB_ERR(rval, NULL); err = DMSLcontainer_release(vertex_cont); CHK_DMSL_ERR(err, "Problem releasing vertex handle container."); return MB_SUCCESS; }