HSelectionSet.h
Go to the documentation of this file.
1 // Copyright (c) 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 
138  virtual void Select(HC_KEY key, int num_include_keys, HC_KEY include_keys[], bool emit_message = false);
139 
152  virtual void Select(HSelectionItem * new_sel, bool emit_message = false);
153 
170  virtual void SelectRegion(HShellObject const & oShell, int num_include_keys, HC_KEY include_keys[], int region, bool emit_message);
171 
172 
195  virtual void SelectSubentity(HC_KEY key, int num_include_keys, HC_KEY include_keys[],
196  int count, const int faces[]=0, const int vertex1[]=0, const int vertex2[]=0, bool emit_message=false);
197 
210  virtual void Select(HC_KEY key, const char* segpath, HC_KEY include_key, HC_KEY includer_key, bool emit_message = false);
211 
226  virtual void DeSelect(HC_KEY key, bool emit_message = false);
227 
244  virtual void DeSelect(HC_KEY key, int num_include_keys, HC_KEY include_keys[], bool emit_message = false);
245 
255  virtual void DeSelect(HSelectionItem * remove_sel, bool emit_message = false);
256 
271  virtual void DeSelectRegion(HShellObject const & oShell, int region, bool emit_messag);
272 
292  virtual void DeSelectRegion(HShellObject const & oShell, int num_include_keys, HC_KEY include_keys[], int region, bool emit_message = false);
293 
294 
301  virtual void DeSelectSubentity(HC_KEY key, int num_include_keys, HC_KEY include_keys[],
302  int count, const int faces[], const int vertex1[], const int vertex2[], bool emit_message = false);
303 
304 
305 
306 
307 
308  virtual bool SelectSubentityOOC (
309  HC_KEY key, int num_include_keys, HC_KEY include_keys[],
310  int count, int const faces[] = 0, int const vertex1[] = 0, int const vertex2[] = 0,
311  bool emit_message = false);
312 
313  virtual bool DeSelectOOC (
314  HC_KEY key, int num_include_keys, HC_KEY include_keys[],
315  bool emit_message = false);
316 
317 
318 
319 
321  virtual bool HighlightRegionEdges() {return m_bHighlightRegionEdges;};
322 
324  virtual void HighlightRegionEdges(bool yesno) {m_bHighlightRegionEdges = yesno;};
325 
327  virtual bool HighlightAnnotations() {return m_bHighlightAnnotations;};
328 
330  virtual void HighlightAnnotations(bool yesno) {m_bHighlightAnnotations = yesno;};
331 
333  virtual HRegionEdgeHighlightMode HighlightRegionEdgesAutoVisibility() {return m_bHighlightRegionEdgesAutoVisibility;};
334 
336  virtual void HighlightRegionEdgesAutoVisibility(bool yesno) {m_bHighlightRegionEdgesAutoVisibility = yesno ? AllEdges : NoEdges;};
337 
339  virtual void HighlightRegionEdgesAutoVisibility(HRegionEdgeHighlightMode edge_state) {m_bHighlightRegionEdgesAutoVisibility = edge_state;};
340 
342  virtual void HighlightRegionFacesAutoVisibility(HRegionFaceHighlightMode face_state) {m_bHighlightRegionFacesAutoVisibility = face_state;};
343 
345  virtual HRegionFaceHighlightMode HighlightRegionFacesAutoVisibility() {return m_bHighlightRegionFacesAutoVisibility;};
346 
354  virtual void DeSelectAll();
355 
366  virtual bool IsSelected(HC_KEY key) const;
367 
385  virtual bool IsSelected(HC_KEY key, int num_include_keys, const HC_KEY include_keys[]) const;
386 
398  virtual bool IsSelected(const HSelectionItem * item) const;
399 
418  virtual bool IsRegionSelected(HC_KEY key, int num_include_keys, const HC_KEY include_keys[], int region) const;
419 
425  virtual bool IsHighlightSegment(HC_KEY segment_key) const;
426 
431  virtual void SetSelectionFaceColor(HPixelRGBA &rgba){m_selectedFaceColor = rgba; UpdateHighlightStyle();}
432 
437  virtual void SetGrayScale(bool grayScale);
438 
439 
444  virtual void SetInvisible(bool Invisible);
445 
449  virtual bool GetInvisible() { return m_bForceInvisible; }
450 
451 
455  virtual void SetAllowDisplacement(bool allowDisplacement) { m_bAllowDisplacement = allowDisplacement; }
456 
460  virtual bool GetAllowDisplacement() { return m_bAllowDisplacement; }
461 
466  virtual HSelList * GetSelectionList();
467 
472  virtual void GetSelectionFaceColor(HPixelRGBA &rgba){ rgba = m_selectedFaceColor; };
473 
474 
479  virtual void SetSelectionEdgeColor(HPixelRGBA &rgb){m_selectedEdgeColor = rgb; UpdateHighlightStyle();}
480 
485  virtual void GetSelectionEdgeColor(HPixelRGBA &rgba){ rgba = m_selectedEdgeColor; };
486 
487 
492  virtual void SetSelectionCutEdgeColor(HPixelRGBA &rgb){m_selectedCutEdgeColor = rgb; UpdateHighlightStyle();}
493 
498  virtual void GetSelectionCutEdgeColor(HPixelRGBA &rgba){ rgba = m_selectedCutEdgeColor; };
499 
504  virtual void SetSelectionCutFaceColor(HPixelRGBA &rgb){m_selectedCutFaceColor = rgb; UpdateHighlightStyle();}
505 
510  virtual void GetSelectionCutFaceColor(HPixelRGBA &rgba){ rgba = m_selectedCutFaceColor; };
511 
516  virtual void SetSelectionMarkerColor(HPixelRGBA &rgb){m_selectedMarkerColor = rgb; UpdateHighlightStyle();}
517 
518 
523  virtual void GetSelectionMarkerColor(HPixelRGBA &rgba){ rgba = m_selectedMarkerColor; };
524 
529  virtual void SetSelectionEdgeWeight(float weight){m_fselectedEdgeWeight= weight; UpdateHighlightStyle();}
530 
531 
536  virtual float GetSelectionEdgeWeight(){return m_fselectedEdgeWeight;}
537 
538 
543  virtual void SetSelectionMarkerSize(float size){m_fselectedMarkerSize = size; UpdateHighlightStyle();}
544 
549  virtual float GetSelectionMarkerSize(){return m_fselectedMarkerSize;}
550 
556  virtual HC_KEY GetAt(unsigned int index);
557 
563  virtual bool GetAll(HC_KEY out_array[]);
564 
565 
570  const HSelectionItem * GetSelectionItemAt(unsigned int index);
571 
572 
577  const HSelectionItem * GetSelectionItem(HC_KEY key);
578 
579 
581  unsigned int GetSize() const;
582 
586  virtual void Reset();
587 
588 
594  virtual bool DeleteSelection(bool emit_message=false);
595 
599  HC_KEY GetHighlightStyle() const{ return m_keyHighlightStyle; };
600 
601 
602  void SetHighlightStyle(HC_KEY key) { m_keyHighlightStyle = key; };
603 
604  const char * GetHighlightStyleName() const{ return m_keyHighlightStyleName; };
605 
620  bool DeInstance(HSelectionItem * sel_item);
621 
622 
627  bool DeInstance(unsigned int index);
628 
633  virtual bool GetSubwindowPenetration() { return m_bSubwindowPenetration; }
634 
642  virtual void SetSubwindowPenetration(bool allow);
643 
645  virtual bool GetAllowSubentitySelection() { return m_selection_level == HSelectSubentity; }
646 
651  virtual void SetAllowSubentitySelection(bool allow);
652 
654  virtual HSelectLevel GetSelectionLevel() const { return m_selection_level; }
655 
658  virtual void SetSelectionLevel(HSelectLevel level);
659 
661  virtual bool GetAllowEntitySelection() { return m_selection_level == HSelectEntity; }
662 
663 
668  virtual void SetAllowEntitySelection(bool allow);
669 
671  virtual bool GetAllowRegionSelection() const { return m_selection_level == HSelectRegion; }
672 
677  virtual void SetAllowRegionSelection(bool allow);
678 
683  void RegisterHighlightSeg(HC_KEY seg_key);
684 
689  void UnRegisterHighlightSeg(HC_KEY seg_key);
690 
694  virtual const HSelectionHighlightMode GetHighlightMode() { return m_HighlightMode; }
695 
722  virtual void SetHighlightMode(HSelectionHighlightMode m);
723 
727  virtual void SetHighlightTransparency(float trans);
728 
733  virtual HC_KEY GetSelectionSegment() {return m_SelectionSegment;}
734 
740  void ToggleHighlightStyle();
741 
746  virtual bool GetIsSelection(HC_KEY key);
747 
753  virtual bool GetReferenceSelection() const {return m_HighlightMode!=HighlightDefault
754  || m_selection_level == HSelectSubentity;}
755 
761  virtual void SetReferenceSelection(bool ref_sel) {
762  m_HighlightMode = ref_sel ? HighlightQuickmoves : HighlightDefault;
763  }
764 
769  void SetUseDefinedHighlight(bool use_defined_highlight);
770 
776  return m_bUseDefinedHighlight;
777  }
778 
779 
784  virtual void SetReferenceSelectionType(HRefSelType type);
785  virtual HRefSelType GetReferenceSelectionType() {return m_quickmoves_type;}
786 
790  virtual void UpdateHighlightStyle();
791 
797  HVHashPShowCache * GetPShowCache(){ return m_pshow_cache; }
798 
804  void SetPShowCache(HVHashPShowCache * new_cache){ m_pshow_cache=new_cache; }
805 
809  void FlushPShowCache();
810 
814  void UpdateHighlighting();
815 
816  HBaseView * GetView() { return m_pView; }
817 
821  void SetSortSelectionList(bool sort) { m_list_last_updated=0; m_bSortSelectionList=sort;}
822 
826  bool GetSortSelectionList() {return m_bSortSelectionList;}
827 
831  virtual bool GetSubentityFaceSelection() { return m_subentity_face; }
832 
836  virtual void SetSubentityFaceSelection(bool select) { m_subentity_face=select; }
837 
841  virtual bool GetSubentityEdgeSelection() { return m_subentity_edge; }
842 
846  virtual void SetSubentityEdgeSelection(bool select) { m_subentity_edge=select; }
847 
851  virtual bool GetSubentityVertexSelection() { return m_subentity_vertex; }
852 
856  virtual void SetSubentityVertexSelection(bool select) { m_subentity_vertex=select; }
857 
861  virtual void SetAllowSubentityDeselection(bool allow) { SetSubentityTracking(allow); }
862 
866  virtual bool GetAllowSubentityDeselection() { return GetSubentityTracking(); }
867 
875  virtual void SetSubentityTracking(bool allow) { m_subentity_maintain_maps = allow; }
876 
880  virtual bool GetSubentityTracking() { return m_subentity_maintain_maps; }
881 
887  void GetSelectionBounding(HPoint * minimum, HPoint * maximum) const;
888 
889 
893  virtual void SetSelectWillNotify(bool notify) {m_bNotify = notify;}
894 
896  virtual bool GetSelectWillNotify() const { return m_bNotify; }
897 
898 
899  // internal use only
900  int GetAttrLookupID(const char * attribute_string);
901  HSelectionSegmentConditionInfo * GetSelectionSegmentConditionInfo();
902  HConditionStyleKeyInfoHash * GetConditionStyleKeyInfo();
903 
904 
905 private:
906  void HoopsRemove( HC_KEY key );
907  void DeselectSegment( HC_KEY key, char const *keytype );
908  void DeselectGeometry( HC_KEY key );
909 
913  inline bool is_selected(HC_KEY key) const;
914 
915  void ensure_is_segment(HC_KEY &key) const;
916 
917 
918  int m_AttrID;
919  struct vhash_s *m_pAttrLookupHash;
920 
921  HSelectionSegmentConditionInfo * m_pSelectionSegmentConditionInfo;
922  HConditionStyleKeyInfoHash * m_pConditionStyleKeyInfoHash;
923 
924 
925  HVHashPShowCache * m_pshow_cache;
926  HSelHash * m_selected_hash;
927  float m_hash_last_updated;
928  float m_list_last_updated;
929  HRefSelType m_quickmoves_type;
930 
931  HC_KEY m_keyHighlightStyle;
932  char m_keyHighlightStyleName[32];
933 
934  HSelectLevel m_selection_level;
935 
936  bool m_subentity_face;
937  bool m_subentity_edge;
938  bool m_subentity_vertex;
939  bool m_subentity_maintain_maps;
940 
941  bool m_bSubwindowPenetration;
942 
943  bool m_currently_in_DeleteSelection;
944 };
945 
946 
947 #ifdef H_PACK_8
948 #pragma pack(pop)
949 #endif
950 
951 #endif
952 
953 
954 
virtual void SetSelectWillNotify(bool notify)
Definition: HSelectionSet.h:893
void SetPShowCache(HVHashPShowCache *new_cache)
Definition: HSelectionSet.h:804
virtual void SetSubentityFaceSelection(bool select)
Definition: HSelectionSet.h:836
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:201
virtual const HSelectionHighlightMode GetHighlightMode()
Definition: HSelectionSet.h:694
virtual void GetSelectionEdgeColor(HPixelRGBA &rgba)
Definition: HSelectionSet.h:485
virtual bool GetSelectWillNotify() const
Definition: HSelectionSet.h:896
HPixelRGBA m_selectedCutEdgeColor
The color used for selected cut edges.
Definition: HSelectionSet.h:80
virtual void SetSelectionFaceColor(HPixelRGBA &rgba)
Definition: HSelectionSet.h:431
Definition: HPShowCache.h:159
virtual void SetSelectionMarkerColor(HPixelRGBA &rgb)
Definition: HSelectionSet.h:516
bool GetUseDefinedHighlight()
Definition: HSelectionSet.h:775
bool m_bHighlightRegionEdges
This indicates whether edges in a region should be highlighted.
Definition: HSelectionSet.h:90
HVHashPShowCache * GetPShowCache()
Definition: HSelectionSet.h:797
virtual void SetSelectionMarkerSize(float size)
Definition: HSelectionSet.h:543
struct vhash_s * m_pHighlightSegsHash
The list of highlighted segment keys.
Definition: HSelectionSet.h:74
virtual bool GetSubwindowPenetration()
Definition: HSelectionSet.h:633
virtual HSelectLevel GetSelectionLevel() const
Definition: HSelectionSet.h:654
virtual void GetSelectionCutEdgeColor(HPixelRGBA &rgba)
Definition: HSelectionSet.h:498
HRefSelType
Definition: HGlobals.h:579
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:856
The HPixelRGBA class is the data type of a rgba pixel.
Definition: HGlobals.h:511
The HSelectionSet class manages a list of selected items.
Definition: HSelectionSet.h:66
HSelectionHighlightMode
Definition: HGlobals.h:549
virtual HRegionEdgeHighlightMode HighlightRegionEdgesAutoVisibility()
Definition: HSelectionSet.h:333
virtual HRegionFaceHighlightMode HighlightRegionFacesAutoVisibility()
Definition: HSelectionSet.h:345
HSelList * m_pSelItemsList
The list of selected HOOPS entities (HSelectionItem pointers).
Definition: HSelectionSet.h:73
HRegionEdgeHighlightMode
Definition: HGlobals.h:563
use default conditional highlighting
Definition: HGlobals.h:550
virtual bool HighlightAnnotations()
Definition: HSelectionSet.h:327
virtual bool GetAllowSubentitySelection()
Definition: HSelectionSet.h:645
select on an entity (piece of geometry, cutting plane or light)
Definition: HSelectionSet.h:36
virtual float GetSelectionEdgeWeight()
Definition: HSelectionSet.h:536
virtual void SetSelectionEdgeWeight(float weight)
Definition: HSelectionSet.h:529
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:492
virtual bool GetSubentityFaceSelection()
Definition: HSelectionSet.h:831
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:861
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:342
use quick move reference highlighting
Definition: HGlobals.h:551
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:761
virtual bool GetAllowRegionSelection() const
Definition: HSelectionSet.h:671
virtual bool GetReferenceSelection() const
Definition: HSelectionSet.h:753
virtual void SetSubentityEdgeSelection(bool select)
Definition: HSelectionSet.h:846
bool GetSortSelectionList()
Definition: HSelectionSet.h:826
Definition: HPShowCache.h:182
float m_fselectedMarkerSize
The marker size used for selected markers.
Definition: HSelectionSet.h:85
virtual void GetSelectionFaceColor(HPixelRGBA &rgba)
Definition: HSelectionSet.h:472
HC_KEY m_SelectionSegment
The key of the reference selection segment.
Definition: HSelectionSet.h:75
virtual bool GetAllowDisplacement()
Definition: HSelectionSet.h:460
virtual float GetSelectionMarkerSize()
Definition: HSelectionSet.h:549
Definition: HPShowCache.h:180
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:661
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:875
HSelectionHighlightMode m_HighlightMode
Stores the current highlighting mode.
Definition: HSelectionSet.h:95
virtual void HighlightRegionEdgesAutoVisibility(HRegionEdgeHighlightMode edge_state)
Definition: HSelectionSet.h:339
void SetSortSelectionList(bool sort)
Definition: HSelectionSet.h:821
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:336
virtual bool GetSubentityEdgeSelection()
Definition: HSelectionSet.h:841
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:733
virtual bool GetInvisible()
Definition: HSelectionSet.h:449
HPixelRGBA m_selectedFaceColor
The color used for selected faces.
Definition: HSelectionSet.h:78
virtual void SetSelectionEdgeColor(HPixelRGBA &rgb)
Definition: HSelectionSet.h:479
float m_fTransmission
the transmission value used in Inverse Transparency highlighting
Definition: HSelectionSet.h:96
virtual void HighlightAnnotations(bool yesno)
Definition: HSelectionSet.h:330
HSelectLevel
Definition: HSelectionSet.h:33
virtual void HighlightRegionEdges(bool yesno)
Definition: HSelectionSet.h:324
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:866
bool m_bForceGrayScale
This flag indicating whether to use gray scale selection.
Definition: HSelectionSet.h:87
virtual void SetAllowDisplacement(bool allowDisplacement)
Definition: HSelectionSet.h:455
HC_KEY GetHighlightStyle() const
Definition: HSelectionSet.h:599
virtual bool GetSubentityVertexSelection()
Definition: HSelectionSet.h:851
virtual bool HighlightRegionEdges()
Definition: HSelectionSet.h:321
virtual void GetSelectionCutFaceColor(HPixelRGBA &rgba)
Definition: HSelectionSet.h:510
virtual void SetSelectionCutFaceColor(HPixelRGBA &rgb)
Definition: HSelectionSet.h:504
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:523
virtual bool GetSubentityTracking()
Definition: HSelectionSet.h:880
bool m_bHighlightAnnotations
This indicates whether MVO annotations should be highlighted.
Definition: HSelectionSet.h:91