SheafSystem  0.0.0.0
visualization_iterator_1_1.cc
1 
2 //
3 // Copyright (c) 2014 Limit Point Systems, Inc.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 
18 // Implementation for class visualization_iterator_1_1
19 
20 
21 #include "SheafSystem/visualization_iterator_1_1.h"
22 
23 #include "SheafSystem/assert_contract.h"
24 #include "SheafSystem/base_space_member.h"
25 #include "SheafSystem/binary_section_space_schema_member.h"
26 #include "SheafSystem/eval_family.h"
27 #include "SheafSystem/int_set.h"
28 #include "SheafSystem/sec_rep_descriptor.h"
29 #include "SheafSystem/sec_vd.h"
30 #include "SheafSystem/section_evaluator.h"
31 #include "SheafSystem/section_space_schema_member.h"
32 #include "SheafSystem/std_limits.h"
33 #include "SheafSystem/structured_block_1d.h"
34 #include "SheafSystem/structured_block_2d.h"
35 #include "SheafSystem/structured_block_3d.h"
36 #include "SheafSystem/subposet_member_iterator.h"
37 #include "SheafSystem/uniform_eval_family.h"
38 #include "vtkDoubleArray.h"
39 #include "vtkIdTypeArray.h"
40 
41 //#define DIAGNOSTIC_OUTPUT 1
42 
43 // Workaround for MS Visual C++
44 using namespace tool;
45 using namespace std;
46 using namespace unordered;
47 
48 // ===========================================================
49 // ANY FACET
50 // ===========================================================
51 
52 bool
54 is_ancestor_of(const any* xother) const
55 {
56  // Preconditions:
57 
58  // Body:
59 
60  bool result = dynamic_cast<const visualization_iterator_1_1*>(xother) != 0;
61 
62  // Postconditions:
63 
64  // Exit
65 
66  return result;
67 }
68 
71 clone() const
72 {
73  // Preconditions:
74 
75  // Body:
76 
78  const_cast<visualization_iterator_1_1*>(this);
79 
82  cthis->property_schema());
83 
84  // Postconditions:
85 
86  // ensure(invariant());
87  ensure(result != 0);
88 
89  // Exit
90 
91  return result;
92 }
93 
94 bool
96 invariant() const
97 {
98  bool result = true;
99 
100  // Preconditions:
101 
102  // Body:
103 
104  if(invariant_check())
105  {
106  invariance(visualization_iterator::invariant());
107 
108  disable_invariant_check();
109 
110  invariance(order() == BIORDER);
111 
112  invariance((is_initialized() && has_property()) ?
113  property_schema().rep().is_same_state(&coordinates_schema().rep()) :
114  true);
115 
116  // Finished, turn invariant checking back on.
117 
118  enable_invariant_check();
119  }
120 
121  // Postconditions:
122 
123  // Exit
124 
125  return result;
126 }
127 
128 
129 // ===========================================================
130 // DEPTH_FIRST_ITERATOR FACET
131 // ===========================================================
132 
133 void
135 next(bool xtruncate)
136 {
137  // Preconditions:
138 
139  require(!is_done());
140 
141  // Body:
142 
143  // A set to contain discretization ids.
144 
145  int_set lvisited;
146 
147  bool ltruncate = xtruncate;
148 
149  // Traverse the graph gathering coord and prop disc members until
150  // we have enough context to evaluate the coordinates at the
151  // the property disc points or until the traversal is done.
152 
153  visualization_iterator::next(ltruncate);
154 
155  while(!is_done())
156  {
157 
158 #ifdef DIAGNOSTIC_OUTPUT
159  cout << "vis_itr_1_1: current item: " << _index << " name: " << anchor().host()->member_name(_index) << endl;
160 #endif
161 
162  if(action() == PREVISIT_ACTION)
163  {
164  // The coord and prop eval are both the element subposet and
165  // the coord disc is the vertices. The prop disc is strictly below
166  // the elements, but not necessarily equal to the vertices.
167 
168  _at.vis_eval = _vis_state.eval_sp.contains_member(_index);
169  _at.vis_disc = _vis_state.disc_sp.contains_member(_index);
170 
171  if(!_maximal_eval_id.is_valid() && _at.vis_eval)
172  {
173  _above.vis_eval = false;
174  _maximal_eval_id = _index;
175 
176  // Turn off put_visit_once.
177 
178  put_visit_once(false);
179 
180  _vis_state.set_evaluation_member(_index);
181  _vis_state.initialize_order_correction();
182  _vis_state.discretization_members.set_ct(0);
183  }
184 
185  if(_at.vis_disc)
186  {
187  _above.vis_disc = false;
188 
189  //$$SCRIBBLE: We need a way to prevent the discretization member from being
190  // entered into _vis_state.discretization_members more than once.
191  // we could search the discretization_members (type block<scoped_index> )
192  // directly or just save them in a local int_set.
193  //$$ISSUE: Isn't there a better way to handle this?
194 
195  int lid = _index.hub_pod();
196  if(!lvisited.contains(lid))
197  {
198  lvisited.insert(lid);
199  _vis_state.gather_discretization_member(_index, greater_index());
200  _vis_state.local_id++;
201  }
202 
203  ltruncate = true;
204  }
205  }
206  else if(action() == POSTVISIT_ACTION)
207  {
208  if(_maximal_eval_id ==~ index())
209  {
210  _maximal_eval_id.invalidate();
211 
212  // Turn on put_visit_once.
213 
214  put_visit_once(true);
215 
216  _above.vis_eval = true;
217 
218  break;
219  }
220 
221  // If we invoke visualization_iterator::next() from the postvisit action,
222  // the truncation flag will be ignored, since you can only truncate
223  // in the previsit action. But just to be specific, we'll set it false no
224  // matter what we've done here.
225 
226  ltruncate = false;
227  }
228  else
229  {
230  post_fatal_error_message("unrecognized action");
231  }
232 
233  visualization_iterator::next(ltruncate);
234 
235  } // end while(!is_done())
236 
237  // Postconditions:
238 
239  ensure(invariant());
240  ensure(!is_done() ? action() == POSTVISIT_ACTION : true);
241 
242  // Exit
243 
244  return;
245 }
246 
247 // ===========================================================
248 // VISUALIZATION_ITERATOR FACET
249 // ===========================================================
250 
251 void
253 set_vtk_data(const sec_vd& xcoords,
254  const sec_vd& xprop,
255  vtkDoubleArray* xvtk_pt_coords,
256  vtkDoubleArray* xvtk_prop,
257  int xprop_tensor_rank,
258  block<int>& xvtk_cell_types,
259  block<vtkIdType>& xvtk_cell_connectivity,
260  block<int>& xvtk_cell_type_map,
261  vtkIdTypeArray* xvtk_pt_label_ids,
262  vtkIdTypeArray* xvtk_cell_label_ids)
263 {
264  // Preconditions:
265 
266  require(xcoords.state_is_read_accessible());
267  require(xcoords.schema().is_same_state(&coordinates_schema()));
268 
269  require(has_property());
270  require(xprop.state_is_read_accessible());
271  require(xprop.schema().is_same_state(&property_schema()));
272 
274 
275  require(xcoords.schema().df() <= 3);
276 
277 
278  // Body:
279 
280 #ifdef DIAGNOSTIC_OUTPUT
281  cout << "id: " << index()
282  << " eval_id: " << _vis_state.eval_id
283  << endl;
284 #endif
285 
286  typedef unordered_map<pod_index_type, pod_index_type> map_type;
287  typedef map_type::const_iterator iterator_type;
288 
289  int lprop_df = xprop.schema().df();
290  block<discretization_context>& ldisc_mbrs = _vis_state.discretization_members;
291  size_type ldisc_ct = ldisc_mbrs.ct();
292  map_type* lmap = _vis_state.disc_to_seq_map;
293 
294  const index_space_handle& ldisc_id_space =
295  xcoords.schema().discretization_id_space();
296 
297  // Transfer the cell label id.
298 
299  pod_index_type lvtk_cell_id =
300  _use_cell_top_ids ?
301  _vis_state.eval_id.hub_pod() :
302  xcoords.schema().evaluation().id_space().pod(_vis_state.eval_id);
303 
304  xvtk_cell_label_ids->InsertNextValue(lvtk_cell_id);
305 
306  // Transfer the cell type.
307 
308  xvtk_cell_types.push_back(xvtk_cell_type_map[_vis_state.eval_type_id]);
309 
310  // Transfer the connectivity count.
311 
312  xvtk_cell_connectivity.push_back(ldisc_ct);
313 
314  for(size_type i=0; i<ldisc_ct; ++i)
315  {
316  scoped_index ldisc_id = ldisc_mbrs[i].disc_id;
317  pod_index_type ldisc_pod = ldisc_id.hub_pod();
318  iterator_type lmap_itr = lmap->find(ldisc_pod);
319 
320 #ifdef DIAGNOSTIC_OUTPUT
321  cout << "\tdisc_id: " << setw(6) << ldisc_id;
322 #endif
323 
324  pod_index_type lseq_id;
325 
326  if(lmap_itr == lmap->end())
327  {
328  // Haven't visited this vertex before.
329  // Create a seq id for it.
330 
331  lseq_id = _vis_state.next_seq_id++;
332  (*lmap)[ldisc_pod] = lseq_id;
333 
334 #ifdef DIAGNOSTIC_OUTPUT
335  cout << " seq_id:" << setw(6) << lseq_id;
336 #endif
337 
338  // Transfer the coordinate data
339 
340  xcoords.get_fiber(ldisc_id, _coord_dofs,
341  static_cast<size_type>(COORD_DOFS_UB)*sizeof(sec_vd_dof_type), false);
342 
343  xvtk_pt_coords->SetTuple(lseq_id, _coord_dofs);
344 
345  // Transfer the point label ids.
346 
347  pod_index_type lvtk_pt_id =
348  _use_point_top_ids ?
349  ldisc_id.hub_pod() : ldisc_id_space.pod(ldisc_id);
350 
351  xvtk_pt_label_ids->SetValue(lseq_id, lvtk_pt_id);
352 
353 
354 #ifdef DIAGNOSTIC_OUTPUT
355  cout << " coords: "
356  << setw(6) << _coord_dofs[0]
357  << setw(6) << _coord_dofs[1]
358  << setw(6) << _coord_dofs[2];
359 #endif
360 
361  // Transfer the property data
362 
363  xprop.get_fiber(ldisc_id, _prop_dofs,
364  static_cast<size_type>(PROP_DOFS_UB)*sizeof(sec_vd_dof_type), false);
365 
366  put_prop_dofs(_prop_dofs, lprop_df, xprop_tensor_rank, xvtk_prop, lseq_id);
367 
368 #ifdef DIAGNOSTIC_OUTPUT
369  cout << " prop: " << setw(10) << _prop_dofs[0];
370 #endif
371  }
372  else
373  {
374  lseq_id = lmap_itr->second;
375 
376 #ifdef DIAGNOSTIC_OUTPUT
377 
378  cout << " seq_id:" << setw(6) << lseq_id;
379 #endif
380 
381  }
382 
383  // Transfer the connectivity.
384 
385  xvtk_cell_connectivity.push_back(lseq_id);
386 
387 #ifdef DIAGNOSTIC_OUTPUT
388  cout << endl;
389 #endif
390 
391  }
392 
393  // Postconditions:
394 
395 
396  // Exit:
397 
398  return;
399 }
400 
401 void
403 set_vtk_data(const sec_vd& xcoords,
404  vtkDoubleArray* xvtk_pt_coords,
405  block<int>& xvtk_cell_types,
406  block<vtkIdType>& xvtk_cell_connectivity,
407  block<int>& xvtk_cell_type_map,
408  vtkIdTypeArray* xvtk_pt_label_ids,
409  vtkIdTypeArray* xvtk_cell_label_ids)
410 {
411  // Preconditions:
412 
413  require(xcoords.state_is_read_accessible());
414  require(xcoords.schema().is_same_state(&coordinates_schema()));
415 
418 
419  require(xcoords.schema().df() <= 3);
420 
421 
422  // Body:
423 
424 #ifdef DIAGNOSTIC_OUTPUT
425  cout << "id: " << index()
426  << " eval_id: " << _vis_state.eval_id
427  << endl;
428 #endif
429 
430  typedef unordered_map<pod_index_type, pod_index_type> map_type;
431  typedef map_type::const_iterator iterator_type;
432 
433  block<discretization_context>& ldisc_mbrs = _vis_state.discretization_members;
434  size_type ldisc_ct = ldisc_mbrs.ct();
435  map_type* lmap = _vis_state.disc_to_seq_map;
436 
437  const index_space_handle& ldisc_id_space =
438  xcoords.schema().discretization_id_space();
439 
440  // Transfer the cell label ids.
441 
442  pod_index_type lvtk_cell_id =
443  _use_cell_top_ids ?
444  _vis_state.eval_id.hub_pod() :
445  xcoords.schema().evaluation().id_space().pod(_vis_state.eval_id);
446 
447  xvtk_cell_label_ids->InsertNextValue(lvtk_cell_id);
448 
449  // Transfer the cell type.
450 
451  xvtk_cell_types.push_back(xvtk_cell_type_map[_vis_state.eval_type_id]);
452 
453  // Transfer the connectivity count.
454 
455  xvtk_cell_connectivity.push_back(ldisc_ct);
456 
457  for(size_type i=0; i<ldisc_ct; ++i)
458  {
459  scoped_index ldisc_id = ldisc_mbrs[i].disc_id;
460  pod_index_type ldisc_pod = ldisc_id.hub_pod();
461  iterator_type lmap_itr = lmap->find(ldisc_pod);
462 
463 #ifdef DIAGNOSTIC_OUTPUT
464  cout << "\tdisc_id: " << setw(6) << ldisc_id;
465 #endif
466 
467  pod_index_type lseq_id;
468 
469  if(lmap_itr == lmap->end())
470  {
471  // Haven't visited this vertex before.
472  // Create a seq id for it.
473 
474  lseq_id = _vis_state.next_seq_id++;
475  (*lmap)[ldisc_pod] = lseq_id;
476 
477 #ifdef DIAGNOSTIC_OUTPUT
478  cout << " seq_id:" << setw(6) << lseq_id;
479 #endif
480 
481  // Transfer the coordinate data
482 
483  xcoords.get_fiber(ldisc_id, _coord_dofs,
484  static_cast<size_type>(COORD_DOFS_UB)*sizeof(sec_vd_dof_type), false);
485 
486  xvtk_pt_coords->SetTuple(lseq_id, _coord_dofs);
487 
488  // Transfer the point label ids.
489 
490  pod_index_type lvtk_pt_id =
491  _use_point_top_ids ?
492  ldisc_id.hub_pod() : ldisc_id_space.pod(ldisc_id);
493 
494  xvtk_pt_label_ids->SetValue(lseq_id, lvtk_pt_id);
495 
496 #ifdef DIAGNOSTIC_OUTPUT
497  cout << " coords: "
498  << setw(6) << _coord_dofs[0]
499  << setw(6) << _coord_dofs[1]
500  << setw(6) << _coord_dofs[2];
501 #endif
502  }
503  else
504  {
505  lseq_id = lmap_itr->second;
506 
507 #ifdef DIAGNOSTIC_OUTPUT
508  cout << " seq_id:" << setw(6) << lseq_id;
509 #endif
510 
511  }
512 
513  // Transfer the connectivity.
514 
515  xvtk_cell_connectivity.push_back(lseq_id);
516 
517 #ifdef DIAGNOSTIC_OUTPUT
518  cout << endl;
519 #endif
520 
521  }
522 
523  // Postconditions:
524 
525 
526  // Exit:
527 
528  return;
529 }
530 
531 void
533 set_vtk_data(const sec_vd& xprop,
534  vtkDoubleArray* xvtk_prop,
535  int xprop_tensor_rank)
536 {
537  // Preconditions:
538 
539  require(has_property());
540  require(xprop.state_is_read_accessible());
541  require(xprop.schema().is_same_state(&property_schema()));
542 
543 
544  // Body:
545 
546 #ifdef DIAGNOSTIC_OUTPUT
547  cout << "id: " << index() << " eval_id: " << _vis_state.eval_id << endl;
548 #endif
549 
550  int lprop_df = xprop.schema().df();
551  block<discretization_context>& ldisc_mbrs = _vis_state.discretization_members;
552  size_type ldisc_ct = ldisc_mbrs.ct();
553 
554  for(size_type i=0; i<ldisc_ct; ++i)
555  {
556  scoped_index ldisc_id = ldisc_mbrs[i].disc_id;
557  pod_index_type ldisc_pod = ldisc_id.hub_pod();
558 
559 #ifdef DIAGNOSTIC_OUTPUT
560  cout << "\tdisc_id: " << setw(6) << ldisc_id;
561 #endif
562 
563  if(!_vis_state.visited[ldisc_pod])
564  {
565  // Haven't visited this vertex before.
566  // Transfer the property data and increment the pt seq id.
567 
568  xprop.get_fiber(ldisc_id, _prop_dofs,
569  static_cast<size_type>(PROP_DOFS_UB)*sizeof(sec_vd_dof_type), false);
570 
571 #ifdef DIAGNOSTIC_OUTPUT
572  cout << " seq_id:" << setw(6) << _pt_seq_id;
573  cout << " prop: " << setw(10) << _prop_dofs[0];
574 #endif
575 
576  put_prop_dofs(_prop_dofs, lprop_df, xprop_tensor_rank, xvtk_prop,
577  _pt_seq_id++);
578 
579  _vis_state.visited.put(ldisc_pod, true);
580  }
581 
582 #ifdef DIAGNOSTIC_OUTPUT
583  cout << endl;
584 #endif
585 
586  }
587 
588  // Postconditions:
589 
590  // Exit:
591 
592  return;
593 }
594 
595 // ===========================================================
596 // VISUALIZATION_ITERATOR_1_1 FACET
597 // ===========================================================
598 
602 {
603  // Preconditions:
604 
605 
606  // Body:
607 
608  // Postconditions:
609 
610  ensure(!is_initialized());
611 
612  // Exit:
613 
614  return;
615 }
616 
619  const section_space_schema_member& xproperty_schema)
621 {
622 
623  // Preconditions:
624 
625  require(xcoordinates_schema.state_is_read_accessible());
626  require(xcoordinates_schema.base_space().schema().\ conforms_to(base_space_member::standard_schema_path()));
627  require(xproperty_schema.state_is_read_accessible());
628  require(xproperty_schema.rep().is_same_state(&xcoordinates_schema.rep()));
629 
630  // Body:
631 
632  put_anchor(xcoordinates_schema, xproperty_schema);
633  reset();
634 
635  // Postconditions:
636 
637  ensure(invariant());
638  ensure(is_initialized());
639  ensure(coordinates_schema().is_same_state(&xcoordinates_schema));
640  ensure(coordinates_schema().is_same_type(&xcoordinates_schema));
641  ensure(coordinates_schema().version() == xcoordinates_schema.version());
642  ensure(has_property());
643  ensure(property_schema().is_same_state(&xproperty_schema));
644  ensure(property_schema().is_same_type(&xproperty_schema));
645  ensure(property_schema().version() == xproperty_schema.version());
646  ensure(descending());
647  ensure(!strict());
648  ensure(unexecutable(!is_done() implies this is first member));
649 
650  // Exit:
651 
652  return;
653 }
654 
655 
659 {
660 
661  // Preconditions:
662 
663  require(xcoordinates_schema.state_is_read_accessible());
664  require(xcoordinates_schema.base_space().schema().\ conforms_to(base_space_member::standard_schema_path()));
665 
666  // Body:
667 
668  put_anchor(xcoordinates_schema);
669  reset();
670 
671  // Postconditions:
672 
673  ensure(invariant());
674  ensure(is_initialized());
675  ensure(coordinates_schema().is_same_state(&xcoordinates_schema));
676  ensure(coordinates_schema().is_same_type(&xcoordinates_schema));
677  ensure(coordinates_schema().version() == xcoordinates_schema.version());
678  ensure(!has_property());
679  ensure(descending());
680  ensure(!strict());
681  ensure(unexecutable(!is_done() implies this is first member));
682 
683  // Exit:
684 
685  return;
686 }
687 
690 {
691  // Preconditions:
692 
693  // Body:
694 
695  // Postconditions:
696 
697  // Exit:
698 
699 }
700 
701 // ===========================================================
702 // PROTECTED MEMBER FUNCTIONS
703 // ===========================================================
704 
705 // =============================================================================
706 // PRIVATE MEMBER FUNCTIONS
707 // =============================================================================
708 
709 
An STL set representation for a set of integers.
Definition: int_set.h:47
bool contains(int xindex) const
True if this set contains xindex Deprecated - use contains_member(int xindex)
Definition: int_set.h:104
virtual visualization_iterator_1_1 * clone() const
Make a new instance of the same type as this.
int version(bool xunalias=true) const
The (possibly aliased) version of this component. The version of the host used when evaluating proper...
size_type ct() const
The number of items currently in use.
virtual bool is_initialized() const
True if this has been initialized for iteration with respect to a specific anchor.
bool state_is_read_accessible() const
True if this is attached and if the state is accessible for read or access control is disabled...
void get_fiber(pod_index_type xdisc_id, vd_lite &xfiber) const
Sets xfiber to the fiber referred to by discretization id xdisc_id.
Definition: sec_vd.cc:1087
subposet & evaluation()
The evaluation subposet for section spaces on this schema (mutable version).
bool has_property() const
True if this visualization has a property section.
STL namespace.
bool is_same_state(const poset_state_handle *xhost, pod_index_type xhub_id) const
True is this is attached to state with hub id xhub_id in host xhost.
An abstract handle to a space of alternate integer identifiers (aliases) for a subset of a hub set of...
virtual pod_type pod(pod_type xid) const
The pod index in this space equivalent to xid in the hub id space.
Namespace for the tools component of the sheaf system.
Abstract base class with useful features for all objects.
Definition: any.h:39
A visualization iterator for coordinate and property section representations both having discretizati...
void push_back(const_reference_type item)
Insert item at the end of the items in the auto_block.
const section_space_schema_member & coordinates_schema() const
The coordinates field schema member which is being iterated over.
An index within the external ("client") scope of a given id space.
Definition: scoped_index.h:116
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
Definition: sheaf.h:52
bool descending() const
True if iterating over down set of anchor.
void next()
Makes this the next member of the subset.
bool invariant() const
The class invariant.
virtual pod_type pod(pod_type xid) const =0
The pod index in this space equivalent to xid in the hub id space.
bool invariant() const
The class invariant.
A section of a fiber bundle with a d-dimensional vector space fiber.
Definition: sec_vd.h:54
bool is_done() const
True if iteration finished.
const scattered_insertion_index_space_handle & id_space() const
The id space for the members of with this (const version).
Definition: subposet.cc:508
static const poset_path & standard_schema_path()
The path of the schema required by this class.
pod_type hub_pod(pod_type xid) const
The pod index in the unglued hub id space equivalent to xid in this id space; synonym for unglued_hub...
void first()
Moves this to the first member of the iteration.
Abstract iterator over the schema of both the coordinates and property sections of a visualization...
virtual void put_anchor(const section_space_schema_member &xcoords_schema, const section_space_schema_member &xprop_schema)
Reinitializes anchor() to iterate over xcoord_schema and xprop_schema.
total_poset_member & base_space()
The base space component of this (mutable version).
const index_space_handle & discretization_id_space() const
The id space for the discretization members in the down set of the base space of this (const version)...
virtual section_space_schema_member & schema()
The restricted schema for this (mutable version).
int_type pod_index_type
The plain old data index type.
Definition: pod_types.h:49
A client handle for a poset member which has been prepared for use as a schema for a section space...
virtual void reset(bool xreset_markers=true)
Restarts the iteration over the down set of anchor().
const section_space_schema_member & property_schema() const
The property field schema member which is being iterated over.
visualization_iterator_1_1()
Creates an uninitialized iterator.
int df() const
The dimension of the fiber space component.
double sec_vd_dof_type
The type of degree of freedom in the section space.
Definition: fiber_bundle.h:78
sec_rep_descriptor & rep()
The representation for section spaces on this schema (mutable version).
virtual bool is_ancestor_of(const any *xother) const
True if other conforms to this.
virtual schema_poset_member & schema()
The schema for this member (mutable version).
virtual void set_vtk_data(const sec_vd &xcoords, const sec_vd &xprop, vtkDoubleArray *xvtk_pt_coords, vtkDoubleArray *xvtk_prop, int xprop_tensor_rank, block< int > &xvtk_cell_types, block< vtkIdType > &xvtk_cell_connectivity, block< int > &xvtk_cell_type_map, vtkIdTypeArray *xvtk_pt_label_ids, vtkIdTypeArray *xvtk_cell_label_ids)
Transfers coordinate and property data to vtk data structures.
bool is_same_type(const any *other) const
True if other is the same type as this.
Definition: any.cc:79
bool strict() const
True if iterating over xstrict up/down set of anchor.
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.
Definition: scoped_index.h:710