Alphabetical Class Index  Class Hierarchy   File Members   Compound Members   File List  

HSelectionSet.h
Go to the documentation of this file.
1 // Copyright (c) 1998-2014 by Tech Soft 3D, Inc.
2 //
3 // The information contained herein is confidential and proprietary to Tech Soft 3D, Inc.,
4 // and considered a trade secret as defined under civil and criminal statutes.
5 // Tech Soft 3D, Inc. shall pursue its civil and criminal remedies in the event of
6 // unauthorized use or misappropriation of its trade secrets. Use of this information
7 // by anyone other than authorized employees of Tech Soft 3D, Inc. is granted only under
8 // a written non-disclosure agreement, expressly prescribing the scope and manner of such use.
9 
16 #ifndef _HSELECTIONSET_H
17 #define _HSELECTIONSET_H
18 
19 #ifdef H_PACK_8
20 #pragma pack(push)
21 #pragma pack(8)
22 #endif
23 
24 #include "HTools.h"
25 #include "HGlobals.h"
26 
27 
34 {
39 };
44 //forward declaration
45 class HBaseView;
46 class HSelectionItem;
47 class HShellObject;
48 class HVHashPShowCache;
49 class HSelHash;
50 class HSelList;
53 
54 
55 
56 
58 
66 class MVO_API HSelectionSet
67 {
68  friend class HBaseView;
69 
70 
71 protected:
73  HSelList * m_pSelItemsList;
74  struct vhash_s *m_pHighlightSegsHash;
77 
83 
86 
93  HRegionFaceHighlightMode m_bHighlightRegionFacesAutoVisibility;
94 
98 
99  bool m_bNotify;
100 
101  bool m_bUseDefinedHighlight;
102 
103 
107  virtual void UpdateTransparency(bool force_flush=false);
108 
109 public:
111  HSelectionSet(HBaseView* view, bool bReferenceSelection = false);
112 
113  virtual ~HSelectionSet();
114 
118  virtual void Init();
119 
120 
139  virtual void Select(HC_KEY key, int num_include_keys, HC_KEY include_keys[], bool emit_message = false);
140 
154  virtual void Select(HSelectionItem * new_sel, bool emit_message = false);
155 
173  virtual void SelectRegion(HShellObject const & oShell, int num_include_keys, HC_KEY include_keys[], int region, bool emit_message);
174 
175 
199  virtual void SelectSubentity(HC_KEY key, int num_include_keys, HC_KEY include_keys[],
200  int count, const int faces[]=0, const int vertex1[]=0, const int vertex2[]=0, bool emit_message=false);
201 
215  virtual void Select(HC_KEY key, const char* segpath, HC_KEY include_key, HC_KEY includer_key, bool emit_message = false);
216 
232  virtual void DeSelect(HC_KEY key, bool emit_message = false);
233 
251  virtual void DeSelect(HC_KEY key, int num_include_keys, HC_KEY include_keys[], bool emit_message = false);
252 
263  virtual void DeSelect(HSelectionItem * remove_sel, bool emit_message = false);
264 
279  virtual void DeSelectRegion(HShellObject const & oShell, int region, bool emit_messag);
280 
300  virtual void DeSelectRegion(HShellObject const & oShell, int num_include_keys, HC_KEY include_keys[], int region, bool emit_message = false);
301 
302 
309  virtual void DeSelectSubentity(HC_KEY key, int num_include_keys, HC_KEY include_keys[],
310  int count, const int faces[], const int vertex1[], const int vertex2[], bool emit_message = false);
311 
313  virtual bool HighlightRegionEdges() {return m_bHighlightRegionEdges;};
314 
316  virtual void HighlightRegionEdges(bool yesno) {m_bHighlightRegionEdges = yesno;};
317 
319  virtual bool HighlightAnnotations() {return m_bHighlightAnnotations;};
320 
322  virtual void HighlightAnnotations(bool yesno) {m_bHighlightAnnotations = yesno;};
323 
325  virtual HRegionEdgeHighlightMode HighlightRegionEdgesAutoVisibility() {return m_bHighlightRegionEdgesAutoVisibility;};
326 
328  virtual void HighlightRegionEdgesAutoVisibility(bool yesno) {m_bHighlightRegionEdgesAutoVisibility = yesno ? AllEdges : NoEdges;};
329 
331  virtual void HighlightRegionEdgesAutoVisibility(HRegionEdgeHighlightMode edge_state) {m_bHighlightRegionEdgesAutoVisibility = edge_state;};
332 
334  virtual void HighlightRegionFacesAutoVisibility(HRegionFaceHighlightMode face_state) {m_bHighlightRegionFacesAutoVisibility = face_state;};
335 
337  virtual HRegionFaceHighlightMode HighlightRegionFacesAutoVisibility() {return m_bHighlightRegionFacesAutoVisibility;};
338 
346  virtual void DeSelectAll();
347 
358  virtual bool IsSelected(HC_KEY key) const;
359 
377  virtual bool IsSelected(HC_KEY key, int num_include_keys, const HC_KEY include_keys[]) const;
378 
390  virtual bool IsSelected(const HSelectionItem * item) const;
391 
410  virtual bool IsRegionSelected(HC_KEY key, int num_include_keys, const HC_KEY include_keys[], int region) const;
411 
417  virtual bool IsHighlightSegment(HC_KEY segment_key) const;
418 
423  virtual void SetSelectionFaceColor(HPixelRGBA &rgba){m_selectedFaceColor = rgba; UpdateHighlightStyle();}
424 
429  virtual void SetGrayScale(bool grayScale);
430 
431 
436  virtual void SetInvisible(bool Invisible);
437 
441  virtual bool GetInvisible() { return m_bForceInvisible; }
442 
443 
447  virtual void SetAllowDisplacement(bool allowDisplacement) { m_bAllowDisplacement = allowDisplacement; }
448 
452  virtual bool GetAllowDisplacement() { return m_bAllowDisplacement; }
453 
458  virtual HSelList * GetSelectionList();
459 
464  virtual void GetSelectionFaceColor(HPixelRGBA &rgba){ rgba = m_selectedFaceColor; };
465 
466 
471  virtual void SetSelectionEdgeColor(HPixelRGBA &rgb){m_selectedEdgeColor = rgb; UpdateHighlightStyle();}
472 
477  virtual void GetSelectionEdgeColor(HPixelRGBA &rgba){ rgba = m_selectedEdgeColor; };
478 
479 
484  virtual void SetSelectionCutEdgeColor(HPixelRGBA &rgb){m_selectedCutEdgeColor = rgb; UpdateHighlightStyle();}
485 
490  virtual void GetSelectionCutEdgeColor(HPixelRGBA &rgba){ rgba = m_selectedCutEdgeColor; };
491 
496  virtual void SetSelectionCutFaceColor(HPixelRGBA &rgb){m_selectedCutFaceColor = rgb; UpdateHighlightStyle();}
497 
502  virtual void GetSelectionCutFaceColor(HPixelRGBA &rgba){ rgba = m_selectedCutFaceColor; };
503 
508  virtual void SetSelectionMarkerColor(HPixelRGBA &rgb){m_selectedMarkerColor = rgb; UpdateHighlightStyle();}
509 
510 
515  virtual void GetSelectionMarkerColor(HPixelRGBA &rgba){ rgba = m_selectedMarkerColor; };
516 
521  virtual void SetSelectionEdgeWeight(float weight){m_fselectedEdgeWeight= weight; UpdateHighlightStyle();}
522 
523 
528  virtual float GetSelectionEdgeWeight(){return m_fselectedEdgeWeight;}
529 
530 
535  virtual void SetSelectionMarkerSize(float size){m_fselectedMarkerSize = size; UpdateHighlightStyle();}
536 
541  virtual float GetSelectionMarkerSize(){return m_fselectedMarkerSize;}
542 
548  virtual HC_KEY GetAt(unsigned int index);
549 
550 
555  const HSelectionItem * GetSelectionItemAt(unsigned int index);
556 
557 
562  const HSelectionItem * GetSelectionItem(HC_KEY key);
563 
564 
566  unsigned int GetSize() const;
567 
571  virtual void Reset();
572 
573 
579  virtual bool DeleteSelection(bool emit_message=false);
580 
584  HC_KEY GetHighlightStyle() const{ return m_keyHighlightStyle; };
585 
586 
587  void SetHighlightStyle(HC_KEY key) { m_keyHighlightStyle = key; };
588 
589  const char * GetHighlightStyleName() const{ return m_keyHighlightStyleName; };
590 
605  bool DeInstance(HSelectionItem * sel_item);
606 
607 
612  bool DeInstance(unsigned int index);
613 
618  virtual bool GetSubwindowPenetration() { return m_bSubwindowPenetration; }
619 
627  virtual void SetSubwindowPenetration(bool allow);
628 
630  virtual bool GetAllowSubentitySelection() { return m_selection_level == HSelectSubentity; }
631 
636  virtual void SetAllowSubentitySelection(bool allow);
637 
639  virtual HSelectLevel GetSelectionLevel() const { return m_selection_level; }
640 
643  virtual void SetSelectionLevel(HSelectLevel level);
644 
646  virtual bool GetAllowEntitySelection() { return m_selection_level == HSelectEntity; }
647 
648 
653  virtual void SetAllowEntitySelection(bool allow);
654 
656  virtual bool GetAllowRegionSelection() const { return m_selection_level == HSelectRegion; }
657 
662  virtual void SetAllowRegionSelection(bool allow);
663 
668  void RegisterHighlightSeg(HC_KEY seg_key);
669 
674  void UnRegisterHighlightSeg(HC_KEY seg_key);
675 
679  virtual const HSelectionHighlightMode GetHighlightMode() { return m_HighlightMode; }
680 
707  virtual void SetHighlightMode(HSelectionHighlightMode m);
708 
712  virtual void SetHighlightTransparency(float trans);
713 
718  virtual HC_KEY GetSelectionSegment() {return m_SelectionSegment;}
719 
725  void ToggleHighlightStyle();
726 
731  virtual bool GetIsSelection(HC_KEY key);
732 
738  virtual bool GetReferenceSelection() const {return m_HighlightMode!=HighlightDefault
739  || m_selection_level == HSelectSubentity;}
740 
746  virtual void SetReferenceSelection(bool ref_sel) {
747  m_HighlightMode = ref_sel ? HighlightQuickmoves : HighlightDefault;
748  }
749 
754  void SetUseDefinedHighlight(bool use_defined_highlight);
755 
761  return m_bUseDefinedHighlight;
762  }
763 
764 
769  virtual void SetReferenceSelectionType(HRefSelType type);
770  virtual HRefSelType GetReferenceSelectionType() {return m_quickmoves_type;}
771 
775  virtual void UpdateHighlightStyle();
776 
782  HVHashPShowCache * GetPShowCache(){ return m_pshow_cache; }
783 
789  void SetPShowCache(HVHashPShowCache * new_cache){ m_pshow_cache=new_cache; }
790 
794  void FlushPShowCache();
795 
799  void UpdateHighlighting();
800 
801  HBaseView * GetView() { return m_pView; }
802 
806  void SetSortSelectionList(bool sort) { m_list_last_updated=0; m_bSortSelectionList=sort;}
807 
811  bool GetSortSelectionList() {return m_bSortSelectionList;}
812 
816  virtual bool GetSubentityFaceSelection() { return m_subentity_face; }
817 
821  virtual void SetSubentityFaceSelection(bool select) { m_subentity_face=select; }
822 
826  virtual bool GetSubentityEdgeSelection() { return m_subentity_edge; }
827 
831  virtual void SetSubentityEdgeSelection(bool select) { m_subentity_edge=select; }
832 
836  virtual bool GetSubentityVertexSelection() { return m_subentity_vertex; }
837 
841  virtual void SetSubentityVertexSelection(bool select) { m_subentity_vertex=select; }
842 
846  virtual void SetAllowSubentityDeselection(bool allow) { SetSubentityTracking(allow); }
847 
851  virtual bool GetAllowSubentityDeselection() { return GetSubentityTracking(); }
852 
860  virtual void SetSubentityTracking(bool allow) { m_subentity_maintain_maps = allow; }
861 
865  virtual bool GetSubentityTracking() { return m_subentity_maintain_maps; }
866 
872  void GetSelectionBounding(HPoint * minimum, HPoint * maximum) const;
873 
874 
878  virtual void SetSelectWillNotify(bool notify) {m_bNotify = notify;}
879 
881  virtual bool GetSelectWillNotify() const { return m_bNotify; }
882 
883 
884  // internal use only
885  int GetAttrLookupID(const char * attribute_string);
886  HSelectionSegmentConditionInfo * GetSelectionSegmentConditionInfo();
887  HConditionStyleKeyInfoHash * GetConditionStyleKeyInfo();
888 
889 
890 private:
891  void HoopsRemove( HC_KEY key );
892  void DeselectSegment( HC_KEY key, char const *keytype );
893  void DeselectGeometry( HC_KEY key );
894 
898  inline bool is_selected(HC_KEY key) const;
899 
900  void ensure_is_segment(HC_KEY &key) const;
901 
902 
903  int m_AttrID;
904  struct vhash_s *m_pAttrLookupHash;
905 
906  HSelectionSegmentConditionInfo * m_pSelectionSegmentConditionInfo;
907  HConditionStyleKeyInfoHash * m_pConditionStyleKeyInfoHash;
908 
909 
910  HVHashPShowCache * m_pshow_cache;
911  HSelHash * m_selected_hash;
912  float m_hash_last_updated;
913  float m_list_last_updated;
914  HRefSelType m_quickmoves_type;
915 
916  HC_KEY m_keyHighlightStyle;
917  char m_keyHighlightStyleName[32];
918 
919  HSelectLevel m_selection_level;
920 
921  bool m_subentity_face;
922  bool m_subentity_edge;
923  bool m_subentity_vertex;
924  bool m_subentity_maintain_maps;
925 
926  bool m_bSubwindowPenetration;
927 
928  bool m_currently_in_DeleteSelection;
929 };
930 
931 
932 #ifdef H_PACK_8
933 #pragma pack(pop)
934 #endif
935 
936 #endif
937 
938 
939 
virtual void SetSelectWillNotify(bool notify)
Definition: HSelectionSet.h:878
void SetPShowCache(HVHashPShowCache *new_cache)
Definition: HSelectionSet.h:789
virtual void SetSubentityFaceSelection(bool select)
Definition: HSelectionSet.h:821
float m_fselectedEdgeWeight
The line thickness used for selected edges.
Definition: HSelectionSet.h:84
The HShellObject class is a simple wrapper for a shell.
Definition: HUtility.h:198
virtual const HSelectionHighlightMode GetHighlightMode()
Definition: HSelectionSet.h:679
virtual void GetSelectionEdgeColor(HPixelRGBA &rgba)
Definition: HSelectionSet.h:477
HPixelRGBA m_selectedCutEdgeColor
The color used for selected cut edges.
Definition: HSelectionSet.h:80
virtual void SetSelectionFaceColor(HPixelRGBA &rgba)
Definition: HSelectionSet.h:423
Definition: HPShowCache.h:187
virtual void SetSelectionMarkerColor(HPixelRGBA &rgb)
Definition: HSelectionSet.h:508
bool GetUseDefinedHighlight()
Definition: HSelectionSet.h:760
bool m_bHighlightRegionEdges
This indicates whether edges in a region should be highlighted.
Definition: HSelectionSet.h:90
HVHashPShowCache * GetPShowCache()
Definition: HSelectionSet.h:782
virtual void SetSelectionMarkerSize(float size)
Definition: HSelectionSet.h:535
struct vhash_s * m_pHighlightSegsHash
The list of highlighted segment keys.
Definition: HSelectionSet.h:74
virtual bool GetSubwindowPenetration()
Definition: HSelectionSet.h:618
virtual bool GetSelectWillNotify() const
Definition: HSelectionSet.h:881
#define HC_KEY
virtual void GetSelectionCutEdgeColor(HPixelRGBA &rgba)
Definition: HSelectionSet.h:490
virtual bool GetReferenceSelection() const
Definition: HSelectionSet.h:738
HRefSelType
Definition: HGlobals.h:577
HBaseView * m_pView
The HOOPS HBaseView associated with to this HSelectionSet.
Definition: HSelectionSet.h:72
select on a segment
Definition: HSelectionSet.h:35
virtual void SetSubentityVertexSelection(bool select)
Definition: HSelectionSet.h:841
The HPixelRGBA class is the data type of a rgba pixel.
Definition: HGlobals.h:509
The HSelectionSet class manages a list of selected items.
Definition: HSelectionSet.h:66
HSelectionHighlightMode
Definition: HGlobals.h:547
virtual bool GetAllowRegionSelection() const
Definition: HSelectionSet.h:656
virtual HRegionEdgeHighlightMode HighlightRegionEdgesAutoVisibility()
Definition: HSelectionSet.h:325
virtual HRegionFaceHighlightMode HighlightRegionFacesAutoVisibility()
Definition: HSelectionSet.h:337
HSelList * m_pSelItemsList
The list of selected HOOPS entities (HSelectionItem pointers).
Definition: HSelectionSet.h:73
HRegionEdgeHighlightMode
Definition: HGlobals.h:561
use default conditional highlighting
Definition: HGlobals.h:548
virtual bool HighlightAnnotations()
Definition: HSelectionSet.h:319
virtual bool GetAllowSubentitySelection()
Definition: HSelectionSet.h:630
select on an entity (piece of geometry, cutting plane or light)
Definition: HSelectionSet.h:36
virtual float GetSelectionEdgeWeight()
Definition: HSelectionSet.h:528
virtual void SetSelectionEdgeWeight(float weight)
Definition: HSelectionSet.h:521
select on arbitrary subentities (face, edge, or vertex)
Definition: HSelectionSet.h:38
HPixelRGBA m_selectedEdgeColor
The color used for selected edges.
Definition: HSelectionSet.h:79
virtual void SetSelectionCutEdgeColor(HPixelRGBA &rgb)
Definition: HSelectionSet.h:484
virtual bool GetSubentityFaceSelection()
Definition: HSelectionSet.h:816
bool m_bForceInvisible
This flag indicating whether to make the selected items invisible.
Definition: HSelectionSet.h:88
virtual void SetAllowSubentityDeselection(bool allow)
Definition: HSelectionSet.h:846
HRegionFaceHighlightMode m_bHighlightRegionFacesAutoVisibility
This indicates whether faces in a region should be automatically made visible when highlighted...
Definition: HSelectionSet.h:93
virtual void HighlightRegionFacesAutoVisibility(HRegionFaceHighlightMode face_state)
Definition: HSelectionSet.h:334
use quick move reference highlighting
Definition: HGlobals.h:549
bool m_bSortSelectionList
If this is set, the selection list will be sorted before returning it.
Definition: HSelectionSet.h:97
virtual void SetReferenceSelection(bool ref_sel)
Definition: HSelectionSet.h:746
virtual void SetSubentityEdgeSelection(bool select)
Definition: HSelectionSet.h:831
bool GetSortSelectionList()
Definition: HSelectionSet.h:811
Definition: HPShowCache.h:210
float m_fselectedMarkerSize
The marker size used for selected markers.
Definition: HSelectionSet.h:85
virtual void GetSelectionFaceColor(HPixelRGBA &rgba)
Definition: HSelectionSet.h:464
HC_KEY m_SelectionSegment
The key of the reference selection segment.
Definition: HSelectionSet.h:75
virtual bool GetAllowDisplacement()
Definition: HSelectionSet.h:452
virtual float GetSelectionMarkerSize()
Definition: HSelectionSet.h:541
Definition: HPShowCache.h:208
The HPoint class is the data type of a three-dimensional point.
Definition: HGlobals.h:121
HPixelRGBA m_selectedCutFaceColor
The color used for selected cut faces.
Definition: HSelectionSet.h:81
virtual bool GetAllowEntitySelection()
Definition: HSelectionSet.h:646
The HBaseView class defines and manages a view of model information.
Definition: HBaseView.h:332
The HSelectionItem class is an interface definition for a selection item.
Definition: HSelectionItem.h:40
virtual void SetSubentityTracking(bool allow)
Definition: HSelectionSet.h:860
HSelectionHighlightMode m_HighlightMode
Stores the current highlighting mode.
Definition: HSelectionSet.h:95
virtual void HighlightRegionEdgesAutoVisibility(HRegionEdgeHighlightMode edge_state)
Definition: HSelectionSet.h:331
void SetSortSelectionList(bool sort)
Definition: HSelectionSet.h:806
bool m_bNotify
If this is set Select() will send HSignalSelected for each item.
Definition: HSelectionSet.h:99
HC_KEY m_TransparencyStyle
The key to a style used in inverse transparency highlighting.
Definition: HSelectionSet.h:76
virtual void HighlightRegionEdgesAutoVisibility(bool yesno)
Definition: HSelectionSet.h:328
virtual bool GetSubentityEdgeSelection()
Definition: HSelectionSet.h:826
bool m_bAllowDisplacement
This indicates whether selected segments should be drawn in front of coincident geometry.
Definition: HSelectionSet.h:89
virtual HC_KEY GetSelectionSegment()
Definition: HSelectionSet.h:718
virtual bool GetInvisible()
Definition: HSelectionSet.h:441
HPixelRGBA m_selectedFaceColor
The color used for selected faces.
Definition: HSelectionSet.h:78
HC_KEY GetHighlightStyle() const
Definition: HSelectionSet.h:584
virtual void SetSelectionEdgeColor(HPixelRGBA &rgb)
Definition: HSelectionSet.h:471
float m_fTransmission
the transmission value used in Inverse Transparency highlighting
Definition: HSelectionSet.h:96
virtual void HighlightAnnotations(bool yesno)
Definition: HSelectionSet.h:322
HSelectLevel
Definition: HSelectionSet.h:33
virtual void HighlightRegionEdges(bool yesno)
Definition: HSelectionSet.h:316
HPixelRGBA m_selectedMarkerColor
The color used for selected markers.
Definition: HSelectionSet.h:82
select on pre-defined regions of an entity
Definition: HSelectionSet.h:37
virtual bool GetAllowSubentityDeselection()
Definition: HSelectionSet.h:851
bool m_bForceGrayScale
This flag indicating whether to use gray scale selection.
Definition: HSelectionSet.h:87
virtual void SetAllowDisplacement(bool allowDisplacement)
Definition: HSelectionSet.h:447
virtual HSelectLevel GetSelectionLevel() const
Definition: HSelectionSet.h:639
virtual bool GetSubentityVertexSelection()
Definition: HSelectionSet.h:836
virtual bool HighlightRegionEdges()
Definition: HSelectionSet.h:313
virtual void GetSelectionCutFaceColor(HPixelRGBA &rgba)
Definition: HSelectionSet.h:502
virtual void SetSelectionCutFaceColor(HPixelRGBA &rgb)
Definition: HSelectionSet.h:496
HRegionEdgeHighlightMode m_bHighlightRegionEdgesAutoVisibility
This indicates whether edges in a region should be automatically made visible when highlighted...
Definition: HSelectionSet.h:92
virtual void GetSelectionMarkerColor(HPixelRGBA &rgba)
Definition: HSelectionSet.h:515
virtual bool GetSubentityTracking()
Definition: HSelectionSet.h:865
bool m_bHighlightAnnotations
This indicates whether MVO annotations should be highlighted.
Definition: HSelectionSet.h:91