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