SMTK
@SMTK_VERSION@
Simulation Modeling Tool Kit
|
14 #ifndef smtk_attribute_Attribute_h
15 #define smtk_attribute_Attribute_h
17 #include "smtk/CoreExports.h"
19 #include "smtk/resource/Component.h"
21 #include "smtk/attribute/CopyAssignmentOptions.h"
22 #include "smtk/attribute/ReferenceItem.h"
23 #include "smtk/attribute/SearchStyle.h"
24 #include "smtk/attribute/ValueItem.h"
26 #include "smtk/common/UUID.h"
64 return lhs->name() < rhs->name();
71 auto left = lhs.lock();
76 auto right = rhs.lock();
81 return left->name() < right->name();
86 const std::string& myName,
93 const std::string& myName,
100 ~Attribute()
override;
104 return static_pointer_cast<Attribute>(Component::shared_from_this());
107 std::shared_ptr<const Attribute> shared_from_this()
const
109 return static_pointer_cast<const Attribute>(Component::shared_from_this());
113 std::string
name()
const override {
return m_name; }
115 const std::string& type()
const;
116 std::vector<std::string> types()
const;
120 const double* color()
const;
121 void setColor(
double r,
double g,
double b,
double alpha);
122 void setColor(
const double* l_color)
124 this->setColor(l_color[0], l_color[1], l_color[2], l_color[3]);
126 bool isColorSet()
const {
return m_isColorSet; }
127 void unsetColor() { m_isColorSet =
false; }
136 unsigned int advanceLevel(
int mode = 0)
const;
137 void setLocalAdvanceLevel(
int mode,
unsigned int level);
138 unsigned int localAdvanceLevel(
int mode = 0)
const
140 return (mode == 1 ? m_localAdvanceLevel[1] : m_localAdvanceLevel[0]);
145 void unsetLocalAdvanceLevel(
int mode = 0);
148 bool hasLocalAdvanceLevelInfo(
int mode = 0)
const
150 return (mode == 1 ? m_hasLocalAdvanceLevelInfo[1] : m_hasLocalAdvanceLevelInfo[0]);
153 const std::vector<smtk::attribute::ItemPtr>& items()
const {
return m_items; }
158 : (static_cast<unsigned int>(ith) >= m_items.size() ?
smtk::attribute::
ItemPtr()
159 : m_items[static_cast<std::size_t>(ith)]);
173 itemAtPath(
const std::string& path,
const std::string& seps =
"/",
bool activeOnly =
false)
const;
175 itemAtPath(
const std::string& path,
const std::string& seps =
"/",
bool activeOnly =
false);
178 typename T::ConstPtr itemAtPathAs(
179 const std::string& path,
180 const std::string& seps =
"/",
181 bool activeOnly =
false)
const;
184 itemAtPathAs(
const std::string& path,
const std::string& seps =
"/",
bool activeOnly =
false);
189 std::string itemPath(
const ItemPtr& item,
const std::string& seps =
"/")
const;
195 std::size_t numberOfItems()
const {
return m_items.size(); }
216 std::function<
bool(
typename T::value_type)> test,
217 bool activeChildren =
true);
249 T entityRefsAs(
const std::string& name)
const;
274 T associatedModelEntities()
const;
277 T associatedObjects()
const;
294 const CopyAssignmentOptions& options = CopyAssignmentOptions());
298 const CopyAssignmentOptions& options,
313 void detachItemsFromOwningResource();
326 bool removeAllAssociations(
bool partialRemovalOk =
false);
338 bool appliesToBoundaryNodes()
const {
return m_appliesToBoundaryNodes; }
339 void setAppliesToBoundaryNodes(
bool appliesValue) { m_appliesToBoundaryNodes = appliesValue; }
340 bool appliesToInteriorNodes()
const {
return m_appliesToInteriorNodes; }
341 void setAppliesToInteriorNodes(
bool appliesValue) { m_appliesToInteriorNodes = appliesValue; }
347 bool isValid(
bool useActiveCategories =
true)
const;
348 bool isValid(
const std::set<std::string>& categories)
const;
359 bool requestCatagories =
true,
360 bool includeReadAccess =
false,
361 unsigned int readAccessLevel = 0)
const;
368 m_userData[key] = value;
371 void clearUserData(
const std::string& key) { m_userData.erase(key); }
372 void clearAllUserData() { m_userData.clear(); }
374 bool isAboutToBeDeleted()
const {
return m_aboutToBeDeleted; }
386 void setIncludeIndex(std::size_t index) { m_includeIndex = index; }
388 std::size_t includeIndex()
const {
return m_includeIndex; }
393 bool canEvaluate()
const;
397 bool doesEvalaute()
const;
401 std::unique_ptr<smtk::attribute::Evaluator> createEvaluator()
const;
420 std::unique_lock<std::mutex> m_guard;
435 const std::string& myName,
443 void removeAllItems();
449 void setName(
const std::string& newname) { m_name = newname; }
452 std::vector<smtk::attribute::ItemPtr> m_items;
455 bool m_appliesToBoundaryNodes;
456 bool m_appliesToInteriorNodes;
458 std::map<std::string, smtk::simulation::UserDataPtr> m_userData;
462 bool m_aboutToBeDeleted;
465 std::size_t m_includeIndex;
466 bool m_hasLocalAdvanceLevelInfo[2];
467 unsigned int m_localAdvanceLevel[2];
472 std::map<std::string, smtk::simulation::UserDataPtr>::const_iterator it = m_userData.find(key);
476 inline void Attribute::setColor(
double r,
double g,
double b,
double a)
486 T Attribute::entityRefsAs(
const std::string& iname)
const
495 for (
auto it = itm->begin(); it != itm->end(); ++it)
502 typename T::value_type entry = std::dynamic_pointer_cast<smtk::model::Entity>(*it);
505 result.insert(result.end(), entry);
512 T Attribute::associatedObjects()
const
515 if (!m_associatedObjects)
520 for (
auto it = m_associatedObjects->begin(); it != m_associatedObjects->end(); ++it)
527 auto entry = std::dynamic_pointer_cast<typename T::value_type::element_type>(*it);
530 result.insert(result.end(), entry);
540 if (!m_associatedObjects)
545 for (
auto it = m_associatedObjects->begin(); it != m_associatedObjects->end(); ++it)
552 typename T::value_type entry = std::dynamic_pointer_cast<smtk::model::Entity>(*it);
555 result.insert(result.end(), entry);
567 return smtk::dynamic_pointer_cast<T>(this->
itemAtPath(path, seps, activeOnly));
574 return smtk::dynamic_pointer_cast<const T>(this->
itemAtPath(path, seps, activeOnly));
578 typename T::Ptr Attribute::findAs(
const std::string& iname,
SearchStyle style)
580 return smtk::dynamic_pointer_cast<T>(this->
find(iname, style));
584 typename T::ConstPtr Attribute::findAs(
const std::string& iname,
SearchStyle style)
const
586 return smtk::dynamic_pointer_cast<const T>(this->
find(iname, style));
592 std::function<
bool(
typename T::value_type)> test,
596 std::function<void(
ItemPtr,
bool)> visitor =
598 typename T::value_type testItem =
599 smtk::dynamic_pointer_cast<typename T::value_type::element_type>(item);
601 if (testItem && test(testItem))
603 filtered.insert(filtered.end(), testItem);
606 item->visitChildren(visitor, activeChildrenLocal);
609 for (std::size_t index = 0; index < this->numberOfItems(); ++index)
611 visitor(this->item(
static_cast<int>(index)), activeChildren);
The main namespace for the Simulation Modeling Tool Kit (SMTK).
Definition: doc.h:33
smtk::attribute::ConstItemPtr itemAtPath(const std::string &path, const std::string &seps="/", bool activeOnly=false) const
Find an item via its path with respects to the attribute.
Definition: Attribute.cxx:194
Stores the definition of an attribute.
Definition: Definition.h:45
smtk::shared_ptr< smtk::attribute::Definition > DefinitionPtr
Definition: PublicPointerDefs.h:450
SearchStyle
How should searches for items be conducted?
Definition: SearchStyle.h:24
smtk::shared_ptr< smtk::attribute::FileItem > FileItemPtr
Definition: PublicPointerDefs.h:499
smtk::shared_ptr< const smtk::attribute::ComponentItem > ConstComponentItemPtr
Definition: PublicPointerDefs.h:594
smtk::shared_ptr< smtk::simulation::UserData > UserDataPtr
Definition: PublicPointerDefs.h:671
std::set< smtk::common::UUID > UUIDs
Definition: PublicPointerDefs.h:31
smtk::shared_ptr< const smtk::attribute::ModelEntityItem > ConstModelEntityItemPtr
Definition: PublicPointerDefs.h:579
smtk::shared_ptr< smtk::attribute::ComponentItem > ComponentItemPtr
Definition: PublicPointerDefs.h:539
smtk::shared_ptr< const smtk::attribute::GroupItem > ConstGroupItemPtr
Definition: PublicPointerDefs.h:567
Log messages for later presentation to a user or a file.
Definition: Logger.h:94
smtk::shared_ptr< smtk::attribute::GroupItem > GroupItemPtr
Definition: PublicPointerDefs.h:507
smtk::attribute::ItemPtr find(const std::string &name, SearchStyle style=RECURSIVE_ACTIVE)
Return the item with the given inName, searching in the given style.
Definition: Attribute.cxx:923
Definition: Attribute.h:403
The ComponentLinks class is a component-specific API for maninpulating unidirectional links from a co...
Definition: ComponentLinks.h:40
smtk::shared_ptr< smtk::attribute::StringItem > StringItemPtr
Definition: PublicPointerDefs.h:516
smtk::shared_ptr< const smtk::attribute::ResourceItem > ConstResourceItemPtr
Definition: PublicPointerDefs.h:589
smtk::shared_ptr< smtk::attribute::ResourceItem > ResourceItemPtr
Definition: PublicPointerDefs.h:535
smtk::shared_ptr< const smtk::attribute::StringItem > ConstStringItemPtr
Definition: PublicPointerDefs.h:575
void filterItems(T &values, std::function< bool(typename T::value_type)> test, bool activeChildren=true)
Given a container, filter items in the attribute by a lambda function.
Definition: Attribute.h:590
const common::UUID & id() const override
Return a unique identifier for the object which will be persistent across sessions.
Definition: Attribute.h:376
smtk::shared_ptr< const smtk::attribute::ReferenceItem > ConstReferenceItemPtr
Definition: PublicPointerDefs.h:584
#define smtkTypeMacro(...)
Add typedefs to a class for identifcation.
Definition: SharedFromThis.h:128
smtk::shared_ptr< smtk::attribute::IntItem > IntItemPtr
Definition: PublicPointerDefs.h:512
smtk::shared_ptr< smtk::attribute::DirectoryItem > DirectoryItemPtr
Definition: PublicPointerDefs.h:491
smtk::shared_ptr< smtk::attribute::Attribute > AttributePtr
Definition: PublicPointerDefs.h:456
smtk::shared_ptr< const smtk::attribute::DateTimeItem > ConstDateTimeItemPtr
Definition: PublicPointerDefs.h:544
bool setId(const common::UUID &uid) override
Assign an ID to this object (used by readers; not for arbitrary reuse).
Definition: Attribute.h:377
@ RECURSIVE_ACTIVE
Recursively search for an active item.
Definition: SearchStyle.h:32
smtk::shared_ptr< smtk::attribute::ReferenceItem > ReferenceItemPtr
Definition: PublicPointerDefs.h:531
smtk::shared_ptr< smtk::attribute::ModelEntityItem > ModelEntityItemPtr
Definition: PublicPointerDefs.h:520
smtk::shared_ptr< const smtk::attribute::Item > ConstItemPtr
Definition: PublicPointerDefs.h:469
smtk::shared_ptr< smtk::attribute::VoidItem > VoidItemPtr
Definition: PublicPointerDefs.h:527
Store information about attribute definitions and instances.
Definition: Resource.h:76
smtk::shared_ptr< smtk::attribute::DateTimeItem > DateTimeItemPtr
Definition: PublicPointerDefs.h:487
#define smtkSuperclassMacro(...)
Add a typedef to the superclass of this class.
Definition: SharedFromThis.h:147
Represent a (possibly composite) value according to a definition.
Definition: Attribute.h:49
T::ConstPtr itemAtPathAs(const std::string &path, const std::string &seps="/", bool activeOnly=false) const
Find an item via its path with respects to the attribute.
Definition: Attribute.h:572
Represents the category constraints associated with an Attribute, Attribute Definition,...
Definition: Categories.h:32
T associatedModelEntities() const
Return a container of associated entityref-subclass instances.
Definition: Attribute.h:537
smtk::shared_ptr< const smtk::attribute::DoubleItem > ConstDoubleItemPtr
Definition: PublicPointerDefs.h:554
smtk::shared_ptr< smtk::attribute::DoubleItem > DoubleItemPtr
Definition: PublicPointerDefs.h:495
Component is the base class for records stored in an smtk::resource::Resource.
Definition: Component.h:43
smtk::shared_ptr< smtk::resource::PersistentObject > PersistentObjectPtr
Definition: PublicPointerDefs.h:285
std::string name() const override
Return the name of the object - by default it will return the UUID but that can be overridden.
Definition: Attribute.h:113
smtk::shared_ptr< const smtk::attribute::FileItem > ConstFileItemPtr
Definition: PublicPointerDefs.h:558
smtk::shared_ptr< smtk::attribute::Item > ItemPtr
Definition: PublicPointerDefs.h:467
smtk::shared_ptr< const smtk::attribute::IntItem > ConstIntItemPtr
Definition: PublicPointerDefs.h:571
smtk::shared_ptr< const smtk::attribute::VoidItem > ConstVoidItemPtr
Definition: PublicPointerDefs.h:599
Definition: Attribute.h:58
smtk::weak_ptr< smtk::attribute::Attribute > WeakAttributePtr
Definition: PublicPointerDefs.h:460
std::set< smtk::model::EntityRef > EntityRefs
Definition: PublicPointerDefs.h:162
A lightweight entityref pointing to a model entity's resource.
Definition: EntityRef.h:112
smtk::shared_ptr< const smtk::attribute::DirectoryItem > ConstDirectoryItemPtr
Definition: PublicPointerDefs.h:549
smtk::shared_ptr< smtk::attribute::Resource > ResourcePtr
Definition: PublicPointerDefs.h:604
smtk::shared_ptr< smtk::resource::Resource > ResourcePtr
Definition: PublicPointerDefs.h:295