File: vtkSMSelectionLink.h

package info (click to toggle)
paraview 5.4.1%2Bdfsg4-3.1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 218,616 kB
  • sloc: cpp: 2,331,508; ansic: 322,365; python: 111,051; xml: 79,203; tcl: 47,013; yacc: 4,877; java: 4,438; perl: 3,238; sh: 2,920; lex: 1,908; f90: 748; makefile: 273; pascal: 228; objc: 83; fortran: 31
file content (142 lines) | stat: -rw-r--r-- 4,201 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*=========================================================================

  Program:   ParaView
  Module:    vtkSMSelectionLink.h

  Copyright (c) Kitware, Inc.
  All rights reserved.
  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.

    This software is distributed WITHOUT ANY WARRANTY; without even
    the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
/**
 * @class   vtkSMSelectionLink
 *
 * Creates a link between two properties. Can create M->N links.
 * At the time when the link is created every output Selection is synchronized
 * with the first input Selection.
*/

#ifndef vtkSMSelectionLink_h
#define vtkSMSelectionLink_h

#include "vtkPVServerManagerRenderingModule.h" //needed for exports
#include "vtkSMLink.h"

class vtkSMSourceProxy;
class vtkSMSelectionLinkInternals;
class vtkSMSelectionLinkObserver;

class VTKPVSERVERMANAGERRENDERING_EXPORT vtkSMSelectionLink : public vtkSMLink
{
public:
  static vtkSMSelectionLink* New();
  vtkTypeMacro(vtkSMSelectionLink, vtkSMLink);
  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;

  //@{
  /**
   * Add a selection to the link. updateDir determines whether
   * the proxy used is an input or an output. When a selection of an input proxy
   * changes, it's selection is set to all other output proxies in the link.
   * A selection can be set to be both input and output by adding 2 links, one
   * to INPUT and the other to OUTPUT
   * When a link is added, all output Selection values are
   * synchronized with that of the input.
   */
  void AddLinkedSelection(vtkSMProxy* proxy, int updateDir);
  void RemoveLinkedSelection(vtkSMProxy* proxy);
  //@}

  /**
   * Get the number of properties that are involved in this link.
   */
  unsigned int GetNumberOfLinkedObjects() VTK_OVERRIDE;

  /**
   * Get a proxy involved in this link.
   */
  vtkSMProxy* GetLinkedProxy(int index) VTK_OVERRIDE;

  /**
   * Get the direction of a Selection involved in this link
   * (see vtkSMLink::UpdateDirections)
   */
  int GetLinkedObjectDirection(int index) VTK_OVERRIDE;

  /**
   * Remove all links.
   */
  virtual void RemoveAllLinks() VTK_OVERRIDE;

  /**
   * This method is used to initialize the object to the given protobuf state
   */
  virtual void LoadState(const vtkSMMessage* msg, vtkSMProxyLocator* locator) VTK_OVERRIDE;

  /**
   * Set/Get the convert to indices flag. When on, the input selection
   * will always be converted into an indices based selection
   * before being applied to outputs
   */
  vtkSetMacro(ConvertToIndices, bool);
  vtkGetMacro(ConvertToIndices, bool);

protected:
  vtkSMSelectionLink();
  ~vtkSMSelectionLink();

  friend class vtkSMSelectionLinkInternals;
  friend class vtkSMSelectionLinkObserver;

  /**
   * Load the link state.
   */
  virtual int LoadXMLState(vtkPVXMLElement* linkElement, vtkSMProxyLocator* locator) VTK_OVERRIDE;

  /**
   * Save the state of the link.
   */
  virtual void SaveXMLState(const char* linkname, vtkPVXMLElement* parent) VTK_OVERRIDE;

  /**
   * Not implemented
   */
  virtual void UpdateVTKObjects(vtkSMProxy* vtkNotUsed(caller)) VTK_OVERRIDE{};

  /**
   * Not implemented
   */
  virtual void PropertyModified(
    vtkSMProxy* vtkNotUsed(caller), const char* vtkNotUsed(pname)) VTK_OVERRIDE{};

  /**
   * Not implemented
   */
  virtual void UpdateProperty(
    vtkSMProxy* vtkNotUsed(caller), const char* vtkNotUsed(pname)) VTK_OVERRIDE{};

  /**
   * This method find the caller in the link and update selection output accordingly
   */
  virtual void SelectionModified(vtkSMSourceProxy* caller, unsigned int portIndex);

  /**
   * Update the internal protobuf state
   */
  virtual void UpdateState() VTK_OVERRIDE;

private:
  vtkSMSelectionLinkInternals* Internals;

  // lock flag to prevent multiple selection modification at the same time
  bool ModifyingSelection;
  bool ConvertToIndices;

  vtkSMSelectionLink(const vtkSMSelectionLink&) VTK_DELETE_FUNCTION;
  void operator=(const vtkSMSelectionLink&) VTK_DELETE_FUNCTION;
};
#endif