1 //
2 // Copyright 2018 Pixar
3 //
4 // Licensed under the Apache License, Version 2.0 (the "Apache License")
5 // with the following modification; you may not use this file except in
6 // compliance with the Apache License and the following modification to it:
7 // Section 6. Trademarks. is deleted and replaced with:
8 //
9 // 6. Trademarks. This License does not grant permission to use the trade
10 // names, trademarks, service marks, or product names of the Licensor
11 // and its affiliates, except as required to comply with Section 4(c) of
12 // the License and to reproduce the content of the NOTICE file.
13 //
14 // You may obtain a copy of the Apache License at
15 //
16 // http://www.apache.org/licenses/LICENSE-2.0
17 //
18 // Unless required by applicable law or agreed to in writing, software
19 // distributed under the Apache License with the above modification is
20 // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21 // KIND, either express or implied. See the Apache License for the specific
22 // language governing permissions and limitations under the Apache License.
23 //
24
25 #include "pxr/pxr.h"
26 #include "pxr/usd/ndr/node.h"
27 #include "pxr/usd/ndr/nodeDiscoveryResult.h"
28 #include "pxr/usd/ndr/property.h"
29 #include "pxr/usd/sdf/types.h"
30
31 PXR_NAMESPACE_OPEN_SCOPE
32
NdrProperty(const TfToken & name,const TfToken & type,const VtValue & defaultValue,bool isOutput,size_t arraySize,bool isDynamicArray,const NdrTokenMap & metadata)33 NdrProperty::NdrProperty(
34 const TfToken& name,
35 const TfToken& type,
36 const VtValue& defaultValue,
37 bool isOutput,
38 size_t arraySize,
39 bool isDynamicArray,
40 const NdrTokenMap& metadata)
41 : _name(name), _type(type), _defaultValue(defaultValue),
42 _isOutput(isOutput), _arraySize(arraySize),
43 _isDynamicArray(isDynamicArray), _isConnectable(true), _metadata(metadata)
44 {
45 }
46
~NdrProperty()47 NdrProperty::~NdrProperty()
48 {
49 // nothing yet
50 }
51
52 std::string
GetInfoString() const53 NdrProperty::GetInfoString() const
54 {
55 return TfStringPrintf(
56 "%s (type: '%s'); %s",
57 _name.GetText(), _type.GetText(), _isOutput ? "output" : "input"
58 );
59 }
60
61 bool
IsConnectable() const62 NdrProperty::IsConnectable() const
63 {
64 // Specialized nodes can define more complex rules here. Assume that all
65 // inputs can accept connections.
66 return _isConnectable && !_isOutput;
67 }
68
69 bool
CanConnectTo(const NdrProperty & other) const70 NdrProperty::CanConnectTo(const NdrProperty& other) const
71 {
72 // Outputs cannot connect to outputs and vice versa
73 if (_isOutput == other.IsOutput()) {
74 return false;
75 }
76
77 // The simplest implementation of this is to compare the types and see if
78 // they are the same. Specialized nodes can define more complicated rules.
79 return _type == other.GetType();
80 }
81
82 const NdrSdfTypeIndicator
GetTypeAsSdfType() const83 NdrProperty::GetTypeAsSdfType() const {
84 return std::make_pair(
85 SdfValueTypeNames->Token,
86 _type
87 );
88 }
89
90 const VtValue&
GetDefaultValueAsSdfType() const91 NdrProperty::GetDefaultValueAsSdfType() const {
92 static const VtValue& emptyValue = VtValue();
93 return emptyValue;
94 }
95
96 PXR_NAMESPACE_CLOSE_SCOPE
97