git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@2 fdac6126-5c0c-442c-9429-916003d36597
176 lines
5.3 KiB
Bash
176 lines
5.3 KiB
Bash
#!/bin/bash
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
# generate_iterator( TargetType, n_elements, has_element_status )
|
|
function generate_iterator
|
|
{
|
|
NonConstIter=$1"IterT"
|
|
ConstIter="Const"$NonConstIter
|
|
TargetType="typename Mesh::"$1
|
|
TargetHandle="typename Mesh::"$1"Handle"
|
|
|
|
|
|
cat iterators_template.hh \
|
|
| sed -e "s/IteratorT/$NonConstIter/; s/IteratorT/$NonConstIter/;
|
|
s/NonConstIterT/$NonConstIter/;
|
|
s/ConstIterT/$ConstIter/;
|
|
s/TargetType/$TargetType/;
|
|
s/TargetHandle/$TargetHandle/;
|
|
s/IsConst/0/;
|
|
s/n_elements/$2/;
|
|
s/has_element_status/$3/;"
|
|
|
|
|
|
cat iterators_template.hh \
|
|
| sed -e "s/IteratorT/$ConstIter/; s/IteratorT/$ConstIter/;
|
|
s/NonConstIterT/$NonConstIter/;
|
|
s/ConstIterT/$ConstIter/;
|
|
s/TargetType/$TargetType/;
|
|
s/TargetHandle/$TargetHandle/;
|
|
s/IsConst/1/;
|
|
s/n_elements/$2/;
|
|
s/has_element_status/$3/;"
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
# generate_circulator( NonConstName, SourceType, TargetType,
|
|
# post_init,
|
|
# increment, decrement,
|
|
# get_handle,
|
|
# [Name] )
|
|
function generate_circulator
|
|
{
|
|
NonConstCirc=$1
|
|
ConstCirc="Const"$NonConstCirc
|
|
SourceHandle="typename Mesh::"$2"Handle"
|
|
TargetHandle="typename Mesh::"$3"Handle"
|
|
TargetType="typename Mesh::"$3
|
|
|
|
|
|
cat circulators_template.hh \
|
|
| sed -e "s/CirculatorT/$NonConstCirc/; s/CirculatorT/$NonConstCirc/;
|
|
s/NonConstCircT/$NonConstCirc/;
|
|
s/ConstCircT/$ConstCirc/;
|
|
s/SourceHandle/$SourceHandle/;
|
|
s/TargetHandle/$TargetHandle/;
|
|
s/TargetType/$TargetType/;
|
|
s/IsConst/0/;
|
|
s/post_init/$4/;
|
|
s/increment/$5/;
|
|
s/decrement/$6/;
|
|
s/get_handle/$7/;"
|
|
|
|
|
|
cat circulators_template.hh \
|
|
| sed -e "s/CirculatorT/$ConstCirc/; s/CirculatorT/$ConstCirc/;
|
|
s/NonConstCircT/$NonConstCirc/;
|
|
s/ConstCircT/$ConstCirc/;
|
|
s/SourceHandle/$SourceHandle/;
|
|
s/TargetHandle/$TargetHandle/;
|
|
s/TargetType/$TargetType/;
|
|
s/IsConst/1/;
|
|
s/post_init/$4/;
|
|
s/increment/$5/;
|
|
s/decrement/$6/;
|
|
s/get_handle/$7/;"
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
### Generate IteratorsT.hh
|
|
|
|
cat iterators_header.hh > IteratorsT.hh
|
|
|
|
generate_iterator Vertex n_vertices has_vertex_status >> IteratorsT.hh
|
|
generate_iterator Halfedge n_halfedges has_halfedge_status >> IteratorsT.hh
|
|
generate_iterator Edge n_edges has_edge_status >> IteratorsT.hh
|
|
generate_iterator Face n_faces has_face_status >> IteratorsT.hh
|
|
|
|
cat footer.hh >> IteratorsT.hh
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
### Generate CirculatorsT.hh
|
|
|
|
cat circulators_header.hh > CirculatorsT.hh
|
|
|
|
|
|
generate_circulator VertexVertexIterT Vertex Vertex \
|
|
" " \
|
|
"heh_=mesh_->cw_rotated_halfedge_handle(heh_);" \
|
|
"heh_=mesh_->ccw_rotated_halfedge_handle(heh_);" \
|
|
"mesh_->to_vertex_handle(heh_);" \
|
|
>> CirculatorsT.hh
|
|
|
|
generate_circulator VertexOHalfedgeIterT Vertex Halfedge \
|
|
" " \
|
|
"heh_=mesh_->cw_rotated_halfedge_handle(heh_);" \
|
|
"heh_=mesh_->ccw_rotated_halfedge_handle(heh_);" \
|
|
"heh_" \
|
|
>> CirculatorsT.hh
|
|
|
|
generate_circulator VertexIHalfedgeIterT Vertex Halfedge \
|
|
" " \
|
|
"heh_=mesh_->cw_rotated_halfedge_handle(heh_);" \
|
|
"heh_=mesh_->ccw_rotated_halfedge_handle(heh_);" \
|
|
"mesh_->opposite_halfedge_handle(heh_)" \
|
|
>> CirculatorsT.hh
|
|
|
|
generate_circulator VertexEdgeIterT Vertex Edge \
|
|
" " \
|
|
"heh_=mesh_->cw_rotated_halfedge_handle(heh_);" \
|
|
"heh_=mesh_->ccw_rotated_halfedge_handle(heh_);" \
|
|
"mesh_->edge_handle(heh_)" \
|
|
>> CirculatorsT.hh
|
|
|
|
generate_circulator VertexFaceIterT Vertex Face \
|
|
"if (heh_.is_valid() \&\& !handle().is_valid()) operator++();" \
|
|
"do heh_=mesh_->cw_rotated_halfedge_handle(heh_); while ((*this) \&\& (!handle().is_valid()));" \
|
|
"do heh_=mesh_->ccw_rotated_halfedge_handle(heh_); while ((*this) \&\& (!handle().is_valid()));" \
|
|
"mesh_->face_handle(heh_)" \
|
|
>> CirculatorsT.hh
|
|
|
|
|
|
generate_circulator FaceVertexIterT Face Vertex \
|
|
" " \
|
|
"heh_=mesh_->next_halfedge_handle(heh_);" \
|
|
"heh_=mesh_->prev_halfedge_handle(heh_);" \
|
|
"mesh_->to_vertex_handle(heh_)" \
|
|
>> CirculatorsT.hh
|
|
|
|
generate_circulator FaceHalfedgeIterT Face Halfedge \
|
|
" " \
|
|
"heh_=mesh_->next_halfedge_handle(heh_);" \
|
|
"heh_=mesh_->prev_halfedge_handle(heh_);" \
|
|
"heh_" \
|
|
>> CirculatorsT.hh
|
|
|
|
generate_circulator FaceEdgeIterT Face Edge \
|
|
" " \
|
|
"heh_=mesh_->next_halfedge_handle(heh_);" \
|
|
"heh_=mesh_->prev_halfedge_handle(heh_);" \
|
|
"mesh_->edge_handle(heh_)" \
|
|
>> CirculatorsT.hh
|
|
|
|
generate_circulator FaceFaceIterT Face Face \
|
|
"if (heh_.is_valid() \&\& !handle().is_valid()) operator++();" \
|
|
"do heh_=mesh_->next_halfedge_handle(heh_); while ((*this) \&\& (!handle().is_valid()));" \
|
|
"do heh_=mesh_->prev_halfedge_handle(heh_); while ((*this) \&\& (!handle().is_valid()));" \
|
|
"mesh_->face_handle(mesh_->opposite_halfedge_handle(heh_))" \
|
|
>> CirculatorsT.hh
|
|
|
|
|
|
cat footer.hh >> CirculatorsT.hh
|
|
|
|
|
|
#------------------------------------------------------------------------------
|