vtkSMProxy.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: ParaView
4  Module: vtkSMProxy.h
5 
6  Copyright (c) Kitware, Inc.
7  All rights reserved.
8  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
130 #ifndef vtkSMProxy_h
131 #define vtkSMProxy_h
132 
133 #include "vtkClientServerID.h" // needed for vtkClientServerID
134 #include "vtkPVServerManagerCoreModule.h" //needed for exports
135 #include "vtkSMRemoteObject.h"
136 
137 struct vtkSMProxyInternals;
138 
140 class vtkPVInformation;
141 class vtkSMLoadStateContext;
142 class vtkPVXMLElement;
143 class vtkSMDocumentation;
144 class vtkSMProperty;
145 class vtkSMPropertyGroup;
147 class vtkSMProxyLocator;
148 class vtkSMProxyManager;
150 class vtkSMProxyObserver;
151 
152 class VTKPVSERVERMANAGERCORE_EXPORT vtkSMProxy : public vtkSMRemoteObject
153 {
154 public:
155  static vtkSMProxy* New();
157  void PrintSelf(ostream& os, vtkIndent indent) override;
158 
159  // Description:
160  // Set or override a key/value pair as annotation to that proxy.
161  // If the value is NULL, this method is equivalent to RemoveAnnotation(key)
162  void SetAnnotation(const char* key, const char* value);
163 
168  const char* GetAnnotation(const char* key);
169 
173  void RemoveAnnotation(const char* key);
174 
178  void RemoveAllAnnotations();
179 
183  bool HasAnnotation(const char* key);
184 
188  int GetNumberOfAnnotations();
189 
193  const char* GetAnnotationKeyAt(int index);
194 
199  void SetLocation(vtkTypeUInt32) override;
200 
205  virtual vtkSMProperty* GetProperty(const char* name)
206  {
207  return this->GetProperty(name, /*self-only*/ 0);
208  }
209 
215  virtual vtkSMProperty* GetProperty(const char* name, int selfOnly);
216 
224  const char* GetPropertyName(vtkSMProperty* prop);
225 
231  virtual void UpdateVTKObjects();
232 
238  virtual void RecreateVTKObjects();
239 
241 
247  bool UpdateProperty(const char* name) { return this->UpdateProperty(name, 0); }
248  bool UpdateProperty(const char* name, int force);
250 
254  void InvokeCommand(const char* name) { this->UpdateProperty(name, 1); }
255 
257 
260  vtkGetStringMacro(VTKClassName);
262 
264 
269  vtkSetStringMacro(VTKClassName);
271 
275  virtual vtkSMPropertyIterator* NewPropertyIterator();
276 
282  unsigned int GetNumberOfConsumers();
283 
289  vtkSMProxy* GetConsumerProxy(unsigned int idx);
290 
296  vtkSMProperty* GetConsumerProperty(unsigned int idx);
297 
302  unsigned int GetNumberOfProducers();
303 
307  vtkSMProxy* GetProducerProxy(unsigned int idx);
308 
314  vtkSMProperty* GetProducerProperty(unsigned int idx);
315 
317 
322  vtkGetStringMacro(XMLName);
324 
326 
331  vtkGetStringMacro(XMLGroup);
333 
335 
341  vtkGetStringMacro(XMLLabel);
343 
348  virtual void UpdatePropertyInformation();
349 
354  virtual void UpdatePropertyInformation(vtkSMProperty* prop);
355 
363  virtual void MarkAllPropertiesAsModified();
364 
371  virtual void ResetPropertiesToXMLDefaults();
372 
379  virtual void ResetPropertiesToDomainDefaults();
380 
382  {
383  DEFAULT = 0,
384  ONLY_XML = 1,
385  ONLY_DOMAIN = 2
386  };
387 
397  virtual void ResetPropertiesToDefault(ResetPropertiesMode mode = DEFAULT);
398 
402  enum
403  {
404  COPY_PROXY_PROPERTY_VALUES_BY_REFERENCE = 0,
405 
406  COPY_PROXY_PROPERTY_VALUES_BY_CLONING // < No longer supported!!!
407  };
408 
410 
423  void Copy(vtkSMProxy* src);
424  void Copy(vtkSMProxy* src, const char* exceptionClass);
425  virtual void Copy(vtkSMProxy* src, const char* exceptionClass, int proxyPropertyCopyFlag);
427 
431  virtual void MarkModified(vtkSMProxy* modifiedProxy);
432 
434 
437  vtkGetObjectMacro(Documentation, vtkSMDocumentation);
439 
441 
449  vtkGetObjectMacro(Hints, vtkPVXMLElement);
451 
453 
456  vtkGetMacro(ObjectsCreated, int);
458 
467  void InitializeAndCopyFromProxy(vtkSMProxy* source);
468 
473  virtual void MarkDirty(vtkSMProxy* modifiedProxy);
474 
479  vtkObjectBase* GetClientSideObject();
480 
482 
487  bool GatherInformation(vtkPVInformation* information);
488  bool GatherInformation(vtkPVInformation* information, vtkTypeUInt32 location);
490 
499  virtual vtkPVXMLElement* SaveXMLState(vtkPVXMLElement* root);
503  virtual vtkPVXMLElement* SaveXMLState(vtkPVXMLElement* root, vtkSMPropertyIterator* iter);
504 
512  virtual int LoadXMLState(vtkPVXMLElement* element, vtkSMProxyLocator* locator);
513 
515 
520  void PrototypeOn() override;
521  void PrototypeOff() override;
522  void SetPrototype(bool undo) override;
524 
530  void UpdateSelfAndAllInputs();
531 
536  bool GetIsSubProxy();
537 
542  vtkSMProxy* GetParentProxy();
543 
549  vtkSMProxy* GetTrueParentProxy();
550 
558  void EnableLocalPushOnly() override;
559 
564  void DisableLocalPushOnly() override;
565 
572  const vtkSMMessage* GetFullState() override;
573 
581  void LoadState(const vtkSMMessage* msg, vtkSMProxyLocator* locator) override;
582 
586  vtkSMPropertyGroup* GetPropertyGroup(size_t index) const;
587 
591  size_t GetNumberOfPropertyGroups() const;
592 
594 
609  void SetLogName(const char* name);
610  vtkGetStringMacro(LogName);
612 
616  const char* GetLogNameOrDefault();
617 
618 protected:
619  vtkSMProxy();
620  ~vtkSMProxy() override;
621 
625  void ExecuteStream(
626  const vtkClientServerStream& msg, bool ignore_errors = false, vtkTypeUInt32 location = 0);
627 
628  // Any method changing the annotations will trigger this method that will
629  // update the local full state as well as sending the annotation state part
630  // to the session.
631  virtual void UpdateAndPushAnnotationState();
632 
634 
637  virtual const vtkClientServerStream& GetLastResult();
638  virtual const vtkClientServerStream& GetLastResult(vtkTypeUInt32 location);
640 
647  virtual void AddProperty(const char* name, vtkSMProperty* prop);
648 
652  virtual void MarkConsumersAsDirty(vtkSMProxy* modifiedProxy);
653 
662  virtual void MarkDirtyFromProducer(
663  vtkSMProxy* modifiedProxy, vtkSMProxy* producer, vtkSMProperty* property);
664 
666 
672  friend class vtkSMCameraLink;
673  friend class vtkSMCompoundProxy;
675  friend class vtkSMInputProperty;
677  friend class vtkSMPart;
678  friend class vtkSMProperty;
679  friend class vtkSMPropertyIterator;
682  friend class vtkSMProxyObserver;
683  friend class vtkSMProxyProperty;
684  friend class vtkSMProxyRegisterUndoElement;
685  friend class vtkSMProxyUnRegisterUndoElement;
686  friend class vtkSMSourceProxy;
687  friend class vtkSMUndoRedoStateLoader;
689  friend class vtkSMStateLocator;
691  friend class vtkSMStateLoader;
693 
695 
700  vtkSetStringMacro(XMLName);
702 
704 
709  vtkSetStringMacro(XMLGroup);
711 
713 
719  vtkSetStringMacro(XMLLabel);
721 
723 
730  vtkSetStringMacro(XMLSubProxyName);
732 
738  virtual void CreateVTKObjects();
739 
745  void RemoveAllObservers();
746 
768  virtual void SetPropertyModifiedFlag(const char* name, int flag);
769 
775  void AddSubProxy(const char* name, vtkSMProxy* proxy, int overrideOK = 0);
776 
780  void RemoveSubProxy(const char* name);
781 
785  vtkSMProxy* GetSubProxy(const char* name);
786 
790  vtkSMProxy* GetSubProxy(unsigned int index);
791 
796  const char* GetSubProxyName(unsigned int index);
797 
802  const char* GetSubProxyName(vtkSMProxy*);
803 
807  unsigned int GetNumberOfSubProxies();
808 
813  virtual void AddConsumer(vtkSMProperty* property, vtkSMProxy* proxy);
814 
818  virtual void RemoveConsumer(vtkSMProperty* property, vtkSMProxy* proxy);
819 
823  virtual void RemoveAllConsumers();
824 
829  void AddProducer(vtkSMProperty* property, vtkSMProxy* proxy);
830 
834  void RemoveProducer(vtkSMProperty* property, vtkSMProxy* proxy);
835 
841  virtual void PostUpdateData();
842 
846  bool WarnIfDeprecated();
847 
853  virtual void UpdatePipelineInformation();
854 
855  // When an algorithm proxy is marked modified, NeedsUpdate is
856  // set to true. In PostUpdateData(), NeedsUpdate is set to false.
857  // This is used to keep track of data information validity.
859 
861 
865  vtkSMProperty* NewProperty(const char* name);
866  vtkSMProperty* NewProperty(const char* name, vtkPVXMLElement* propElement);
868 
873  void LinkProperty(vtkSMProperty* inputProperty, vtkSMProperty* outputProperty);
874 
880  vtkSMPropertyGroup* NewPropertyGroup(vtkPVXMLElement* propElement);
881 
883 
886  virtual int ReadXMLAttributes(vtkSMSessionProxyManager* pm, vtkPVXMLElement* element);
887  void SetupExposedProperties(const char* subproxy_name, vtkPVXMLElement* element);
888  void SetupSharedProperties(vtkSMProxy* subproxy, vtkPVXMLElement* element);
890 
898  void ExposeSubProxyProperty(const char* subproxy_name, const char* property_name,
899  const char* exposed_name, int overrideOK = 0);
900 
904  virtual void ExecuteSubProxyEvent(vtkSMProxy* o, unsigned long event, void* data);
905 
906  virtual int CreateSubProxiesAndProperties(vtkSMSessionProxyManager* pm, vtkPVXMLElement* element);
907 
914  virtual void UpdatePropertyInformationInternal(vtkSMProperty* prop = NULL);
915 
924  void RebuildStateForProperties();
925 
929  virtual void SetLogNameInternal(
930  const char* name, bool propagate_to_subproxies, bool propagate_to_proxylistdomains);
931 
933 
936  vtkSetStringMacro(SIClassName);
937  vtkGetStringMacro(SIClassName);
938  char* SIClassName;
940 
942  char* XMLGroup;
943  char* XMLName;
944  char* XMLLabel;
949 
956 
962 
966  bool ArePropertiesModified();
967 
968  void SetHints(vtkPVXMLElement* hints);
969  void SetDeprecated(vtkPVXMLElement* deprecated);
970 
971  void SetXMLElement(vtkPVXMLElement* element);
973 
977 
978  // Cached version of State
980 
981  // Flag used to break consumer loops.
983 
985 
986 protected:
988  vtkSMProxyObserver* SubProxyObserver;
989  vtkSMProxy(const vtkSMProxy&) = delete;
990  void operator=(const vtkSMProxy&) = delete;
991 
992 private:
993  vtkSMProperty* SetupExposedProperty(vtkPVXMLElement* propertyElement, const char* subproxy_name);
994 
995  friend class vtkSMProxyInfo;
996 
997  char* LogName;
998  std::string DefaultLogName;
999 };
1000 
1014 class VTKPVSERVERMANAGERCORE_EXPORT SIPROXY : public SIOBJECT
1015 {
1016 public:
1018  : SIOBJECT(proxy)
1019  {
1020  }
1021 };
1022 
1037 class VTKPVSERVERMANAGERCORE_EXPORT VTKOBJECT
1038 {
1039  vtkSMProxy* Reference;
1040  friend VTKPVSERVERMANAGERCORE_EXPORT vtkClientServerStream& operator<<(
1041  vtkClientServerStream& stream, const VTKOBJECT& manipulator);
1042 
1043 public:
1045  : Reference(proxy)
1046  {
1047  }
1048 };
1049 VTKPVSERVERMANAGERCORE_EXPORT vtkClientServerStream& operator<<(
1050  vtkClientServerStream& stream, const VTKOBJECT& manipulator);
1051 
1052 #endif
bool UpdateProperty(const char *name)
Update the value of one property (pushed to the server) if it is modified.
Definition: vtkSMProxy.h:247
This defines a stream manipulator for the vtkClientServerStream that can be used to indicate to the i...
Definition: vtkSMProxy.h:1037
void RemoveAllObservers()
iterates over a subset of a proxy&#39;s properties
virtual void PrototypeOff()
Allow user to set the remote object to be discard for Undo/Redo action.
property representing pointer(s) to vtkObject(s)
VTKOBJECT(vtkSMProxy *proxy)
Definition: vtkSMProxy.h:1044
virtual void LoadState(const vtkSMMessage *msg, vtkSMProxyLocator *locator)
This method is used to initialise the object to the given state If the definitionOnly Flag is set to ...
virtual void PrototypeOn()
Allow user to set the remote object to be discard for Undo/Redo action.
virtual void EnableLocalPushOnly()
Allow to switch off any push of state change to the server for that particular object.
virtual void SetLocation(vtkTypeUInt32)
Get/Set the location where the underlying VTK-objects are created.
This defines a stream manipulator for the vtkClientServerStream that can be used to indicate to the i...
Definition: vtkSMProxy.h:1014
superclass for all SM properties
char * XMLGroup
Definition: vtkSMProxy.h:942
iterates over the properties of a proxy
Store messages for the interpreter.
singleton/facade to vtkSMSessionProxyManager
char * XMLSubProxyName
Definition: vtkSMProxy.h:945
VTKPVSERVERMANAGERCORE_EXPORT vtkClientServerStream & operator<<(vtkClientServerStream &stream, const VTKOBJECT &manipulator)
int InMarkModified
Definition: vtkSMProxy.h:982
SIPROXY(vtkSMProxy *proxy)
Definition: vtkSMProxy.h:1017
int DoNotUpdateImmediately
Definition: vtkSMProxy.h:947
name
vtkSMMessage * State
Definition: vtkSMProxy.h:979
vtkSMDocumentation * Documentation
Definition: vtkSMProxy.h:974
Header class that setup every thing in order to use Protobuf messages in a transparent manner...
This defines a manipulator for the vtkClientServerStream that can be used to indicate to the interpre...
virtual void DisableLocalPushOnly()
Enable the given remote object to communicate its state normally to the server location.
int ObjectsCreated
Definition: vtkSMProxy.h:946
proxy for a VTK source on a server
vtkWeakPointer< vtkSMProxy > ParentProxy
Definition: vtkSMProxy.h:984
deserializes proxies from their Protobuf states.
The vtkSMSessionProxyManager is esponsible for creating and managing proxies for a given session...
char * XMLName
Definition: vtkSMProxy.h:943
a proxy excapsulation a pipeline of proxies.
proxy for a VTK object(s) on a server
Definition: vtkSMProxy.h:152
int InUpdateVTKObjects
Avoids calls to UpdateVTKObjects in UpdateVTKObjects.
Definition: vtkSMProxy.h:955
void InvokeCommand(const char *name)
Convenience method equivalent to UpdateProperty(name, 1).
Definition: vtkSMProxy.h:254
virtual const vtkSMMessage * GetFullState()
This method return the full object state that can be used to create that object from scratch...
is used to locate proxies referred to in state xmls while loading state files.
vtkSMProxyObserver * SubProxyObserver
Definition: vtkSMProxy.h:988
bool NeedsUpdate
Definition: vtkSMProxy.h:858
int DoNotModifyProperty
Definition: vtkSMProxy.h:948
class providing access to the documentation for a vtkSMProxy.
virtual vtkSMProperty * GetProperty(const char *name)
Return the property with the given name.
Definition: vtkSMProxy.h:205
vtkPVXMLElement * XMLElement
Definition: vtkSMProxy.h:972
vtkSMProxyInternals * Internals
Definition: vtkSMProxy.h:987
char * VTKClassName
Definition: vtkSMProxy.h:941
Utility class to load state from XML.
baseclass for all proxy-objects that have counter parts on server as well as client processes...
This is used by vtkPVXMLParser to represent an XML document starting at the root element.
virtual void SetPrototype(bool)
Allow user to set the remote object to be discard for Undo/Redo action.
static vtkSMSessionObject * New()
bool PropertiesModified
Flag used to help speed up UpdateVTKObjects and ArePropertiesModified calls.
Definition: vtkSMProxy.h:961
Superclass for information objects.
char * XMLLabel
Definition: vtkSMProxy.h:944
void PrintSelf(ostream &os, vtkIndent indent) override
iterates over the properties of a proxy
proxy representing inputs to a filter
vtkPVXMLElement * Deprecated
Definition: vtkSMProxy.h:976
Class used to retrieve a given message state based on its GlobalID.
char * SIClassName
SIClassName identifies the classname for the helper on the server side.
Definition: vtkSMProxy.h:937
vtkPVXMLElement * Hints
Definition: vtkSMProxy.h:975