├── .gitignore
├── DynamoRebar.dll
├── LICENSE
├── README.md
├── TestFiles
├── DynamoDefinitions
│ ├── CreateContainer.dyn
│ ├── Cut.dyn
│ ├── FollowingSurface.dyn
│ ├── Generic Foundation.dyn
│ ├── MaterialProperties.dyn
│ ├── Morphed.dyn
│ ├── Perpendicular.dyn
│ ├── Shorten.dyn
│ ├── SimpleLine.dyn
│ ├── Stirrup.dyn
│ ├── Tag.dyn
│ └── TagElements.dyn
├── RevitProject
│ ├── RevitProject.0024.rvt
│ └── RevitProject.rvt
└── TestingFamilies
│ ├── Bridge Deck - curved with crossfall no end skew.rfa
│ ├── Bridge Deck - curved with super and end skew.rfa
│ ├── Bridge Deck - curved with super no end skew.rfa
│ ├── Caltrans CIP 4 cell Box Girder r6 - simple and straight.rfa
│ ├── Caltrans CIP 4 cell Box Girder r6 -end skews and curved in plan.rfa
│ └── Caltrans CIP 4 cell Box Girder r6 -end skews, curved in plan and variable depth.rfa
└── src
├── Dynamo.Rebar.sln
├── Dynamo.Rebar_Debug.bat
├── DynamoRebar
├── Diagrams
│ ├── 2015-06-22_16h00_33.png
│ ├── Activity.dgml
│ ├── Morphing.png
│ ├── Offset.png
│ ├── Perpendicular.png
│ └── Structure.cd
├── DynamoRebar.csproj
├── DynamoRebarImages.resources
├── DynamoRebarImages.resx
├── Extensions
│ ├── CurveExtensions.cs
│ ├── Extensions.cs
│ ├── PolyCurve.cs
│ ├── SurfaceExtensions.cs
│ └── UnitConversion.cs
├── Nodes.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ └── Resources.resx
├── Revit
│ ├── HorizontalAlignment.cs
│ ├── Rebar.cs
│ ├── RebarBarType.cs
│ ├── RebarContainer.cs
│ ├── RebarHookOrientation.cs
│ ├── RebarHookType.cs
│ ├── RebarStyle.cs
│ ├── Tag.cs
│ └── VerticalAlignment.cs
└── TrimmedSurface.cs
├── DynamoRebarTest
├── Class1.cs
├── DynamoRebarTest.csproj
└── Properties
│ └── AssemblyInfo.cs
├── DynamoRebarUI
├── DynamoRebarUI.csproj
├── DynamoRebarUIImages.resources
├── DynamoRebarUIImages.resx
├── GenericClasses.cs
├── Properties
│ └── AssemblyInfo.cs
├── RevitTypes.cs
├── SelectEdges.cs
├── app.config
└── packages.config
├── Resources
└── DynamoRebar.Images
│ ├── DynamoRebar.Rebar.Cut.Large.png
│ ├── DynamoRebar.Rebar.Cut.Small.png
│ ├── DynamoRebar.Rebar.Following.Large.png
│ ├── DynamoRebar.Rebar.Following.Small.png
│ ├── DynamoRebar.Rebar.Morphed.Large.png
│ ├── DynamoRebar.Rebar.Morphed.Small.png
│ ├── DynamoRebar.Rebar.Perpendicular.Large.png
│ ├── DynamoRebar.Rebar.Perpendicular.Small.png
│ ├── DynamoRebar.Rebar.Shorten.Large.png
│ ├── DynamoRebar.Rebar.Shorten.Small.png
│ ├── DynamoRebar.Revit.Elements.Rebar.Large.png
│ ├── DynamoRebar.Revit.Elements.Rebar.Small.png
│ ├── DynamoRebar.Revit.Elements.RebarContainer.AppendBar.Large.png
│ ├── DynamoRebar.Revit.Elements.RebarContainer.AppendBar.Small.png
│ ├── DynamoRebar.Revit.Elements.RebarContainer.ByCurves.Large.png
│ ├── DynamoRebar.Revit.Elements.RebarContainer.ByCurves.Small.png
│ ├── DynamoRebar.Revit.Elements.Tag.ByElement.Large.png
│ ├── DynamoRebar.Revit.Elements.Tag.ByElement.Small.png
│ ├── DynamoRebarUI.RebarStyle.Large.png
│ ├── DynamoRebarUI.RebarStyle.Small.png
│ ├── Icons.ai
│ ├── Revit.Elements.Select.png
│ ├── examples
│ ├── 2015-08-26_17h31_23.png
│ ├── 2015-08-26_17h32_51.png
│ ├── 2015-08-26_17h40_39.png
│ ├── 2015-08-26_17h40_47.png
│ ├── 2015-09-02_09h10_39.png
│ ├── 2015-09-02_09h10_58.png
│ ├── Capture.png
│ └── Capture1.png
│ └── icons-10.png
└── config
└── CS.props
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | # User-specific files (MonoDevelop/Xamarin Studio)
11 | *.userprefs
12 |
13 | # Build results
14 | [Dd]ebug/
15 | [Dd]ebugPublic/
16 | [Rr]elease/
17 | [Rr]eleases/
18 | x64/
19 | x86/
20 | build/
21 | bld/
22 | [Bb]in/
23 | [Oo]bj/
24 |
25 | # Visual Studo 2015 cache/options directory
26 | .vs/
27 |
28 | # MSTest test Results
29 | [Tt]est[Rr]esult*/
30 | [Bb]uild[Ll]og.*
31 |
32 | # NUNIT
33 | *.VisualState.xml
34 | TestResult.xml
35 |
36 | # Build Results of an ATL Project
37 | [Dd]ebugPS/
38 | [Rr]eleasePS/
39 | dlldata.c
40 |
41 | *_i.c
42 | *_p.c
43 | *_i.h
44 | *.ilk
45 | *.meta
46 | *.obj
47 | *.pch
48 | *.pdb
49 | *.pgc
50 | *.pgd
51 | *.rsp
52 | *.sbr
53 | *.tlb
54 | *.tli
55 | *.tlh
56 | *.tmp
57 | *.tmp_proj
58 | *.log
59 | *.vspscc
60 | *.vssscc
61 | .builds
62 | *.pidb
63 | *.svclog
64 | *.scc
65 |
66 | # Chutzpah Test files
67 | _Chutzpah*
68 |
69 | # Visual C++ cache files
70 | ipch/
71 | *.aps
72 | *.ncb
73 | *.opensdf
74 | *.sdf
75 | *.cachefile
76 |
77 | # Visual Studio profiler
78 | *.psess
79 | *.vsp
80 | *.vspx
81 |
82 | # TFS 2012 Local Workspace
83 | $tf/
84 |
85 | # Guidance Automation Toolkit
86 | *.gpState
87 |
88 | # ReSharper is a .NET coding add-in
89 | _ReSharper*/
90 | *.[Rr]e[Ss]harper
91 | *.DotSettings.user
92 |
93 | # JustCode is a .NET coding addin-in
94 | .JustCode
95 |
96 | # TeamCity is a build add-in
97 | _TeamCity*
98 |
99 | # DotCover is a Code Coverage Tool
100 | *.dotCover
101 |
102 | # NCrunch
103 | _NCrunch_*
104 | .*crunch*.local.xml
105 |
106 | # MightyMoose
107 | *.mm.*
108 | AutoTest.Net/
109 |
110 | # Web workbench (sass)
111 | .sass-cache/
112 |
113 | # Installshield output folder
114 | [Ee]xpress/
115 |
116 | # DocProject is a documentation generator add-in
117 | DocProject/buildhelp/
118 | DocProject/Help/*.HxT
119 | DocProject/Help/*.HxC
120 | DocProject/Help/*.hhc
121 | DocProject/Help/*.hhk
122 | DocProject/Help/*.hhp
123 | DocProject/Help/Html2
124 | DocProject/Help/html
125 |
126 | # Click-Once directory
127 | publish/
128 |
129 | # Publish Web Output
130 | *.[Pp]ublish.xml
131 | *.azurePubxml
132 | # TODO: Comment the next line if you want to checkin your web deploy settings
133 | # but database connection strings (with potential passwords) will be unencrypted
134 | *.pubxml
135 | *.publishproj
136 |
137 | # NuGet Packages
138 | *.nupkg
139 | # The packages folder can be ignored because of Package Restore
140 | **/packages/*
141 | # except build/, which is used as an MSBuild target.
142 | !**/packages/build/
143 | # Uncomment if necessary however generally it will be regenerated when needed
144 | #!**/packages/repositories.config
145 |
146 | # Windows Azure Build Output
147 | csx/
148 | *.build.csdef
149 |
150 | # Windows Store app package directory
151 | AppPackages/
152 |
153 | # Others
154 | *.[Cc]ache
155 | ClientBin/
156 | [Ss]tyle[Cc]op.*
157 | ~$*
158 | *~
159 | *.dbmdl
160 | *.dbproj.schemaview
161 | *.pfx
162 | *.publishsettings
163 | node_modules/
164 | bower_components/
165 |
166 | # RIA/Silverlight projects
167 | Generated_Code/
168 |
169 | # Backup & report files from converting an old project file
170 | # to a newer Visual Studio version. Backup files are not needed,
171 | # because we have git ;-)
172 | _UpgradeReport_Files/
173 | Backup*/
174 | UpgradeLog*.XML
175 | UpgradeLog*.htm
176 |
177 | # SQL Server files
178 | *.mdf
179 | *.ldf
180 |
181 | # Business Intelligence projects
182 | *.rdl.data
183 | *.bim.layout
184 | *.bim_*.settings
185 |
186 | # Microsoft Fakes
187 | FakesAssemblies/
188 |
189 | # Node.js Tools for Visual Studio
190 | .ntvs_analysis.dat
191 |
192 | # Visual Studio 6 build log
193 | *.plg
194 |
195 | # Visual Studio 6 workspace options file
196 | *.opt
197 |
--------------------------------------------------------------------------------
/DynamoRebar.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/DynamoRebar.dll
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright 2015 Autodesk, Inc.
2 |
3 | Licensed under the Apache License, Version 2.0 (the "License");
4 | you may not use this file except in compliance with the License.
5 | You may obtain a copy of the License at
6 |
7 | http://www.apache.org/licenses/LICENSE-2.0
8 |
9 | Unless required by applicable law or agreed to in writing, software
10 | distributed under the License is distributed on an "AS IS" BASIS,
11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | See the License for the specific language governing permissions and
13 | limitations under the License.
14 |
15 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # Important Note for the latest release for Dynamo 2.0
3 | Please download the latest package and then replace the DynamoRebar.dll in
4 | %AppData%\Dynamo\Dynamo Revit\2.0\packages\Dynamo for Rebar\bin
5 | with this DLL:
6 | https://github.com/tt-acm/DynamoForRebar/blob/master/DynamoRebar.dll?raw=true 4
7 | We’ll update the package again soon. Until its up to date, please replace the file manually and make sure the dll is not blocked (Properties > unblock)
8 |
9 | # DynamoForRebar
10 | A Dynamo package for authoring geometrically complex rebar models in Revit 2016.
11 |
12 | Dynamo for Rebar is an Open-Source project available on github and [Dynamo’s package manager](http://dynamobim.org/). The library contains a set of nodes helping you to create bars and containers in Revit, and provides a set of nodes for creating the base curvature of single bars or entire rebar containers.
13 |
14 | The project is being developed in C# using Visual Studio, and will work with Dynamo 0.8.0, and Revit 2016. The project consists of two libraries; one is a [zero-touch library](https://github.com/DynamoDS/Dynamo/wiki/Zero-Touch-Plugin-Development) containing most of the nodes, the other is a UI library containing a few nodes with dropdown elements.
15 |
16 | ### Rebar Nodes
17 | The nodes in this group are specific to the [Revit](http://www.autodesk.com/products/revit-family/overview) 2016 Rebar API. They are the core nodes in the package that allow for parametric rebar design in Dynamo. The utility nodes and nodes for curve generation (outlined below) are designed to work well with these rebar nodes.
18 |
19 | #### Create Rebar
20 | Creates one single bar element in Revit from a curve and and a series of rebar properties.
21 |
22 | #### Create Rebar Container
23 | Creates a rebar container element from a list of curves and a series of rebar properties. The use of containers is highly encouraged as Revit can get bogged down by thousands of rebar family instances in your model. Containers are like groups of rebars in a single family instance.
24 |
25 | #### Rebar Property Dropdown Nodes
26 | Select Rebar Style - Select available Rebar Styles from the Revit document
27 | Select Rebar Hook Type - Select available Rebar Hook Types from the Revit document
28 | Select Rebar Hook Orientation - Select available Rebar Hook Orientations from the Revit document
29 | Select Rebar Bar Type - Select available Rebar Bar Types from the Revit document
30 |
31 | ### Nodes for Curve Generation
32 | The nodes in this package for creating curves are powerful tools on their own; they allow the user to parameterize any surface in Dynamo, and create curves along it for any use downstream. Of course one good downstream use is the creation of rebar containers, but it’s up to you!
33 |
34 | #### Curves following a surface
35 | This node creates a set of curves following the geometry of a selected surface (most polysurfaces will also work). It divides the surface in one dimension - either U or V - regularly. You can define the number of divisions (or optionally, a distance to divide the surface by), and the direction of the curves.
36 |
37 | #### Curves morphing between two curves
38 | This node creates a set of morphed curves between two border curves. It requires two curves to blend between, and creates either a fixed number of curves between them or divides by a defined distance.
39 |
40 | #### Curves perpendicular to one surface
41 | This node creates a set of linear curves normal to a surface. It requires the selection of a driving surface and a set of bounding faces to define the end of the projection. According to a selected height, the node will divide the surface along this height into a selected number points. It will then draw lines along the normals at this points, break the line at any obstacle and continue until the bounding surfaces.
42 |
43 | ### Utility Nodes
44 | These nodes in this group are mostly designed for use downstream of the rebar nodes.
45 |
46 | #### Cut Rebar Container by Plane
47 | The cut rebar node cuts a selected rebar container at a selected surface. The result will be either the left or the right side of the division.
48 |
49 | #### Shorten Curve from both ends
50 | This node shortens a selected curve from both ends by the same distance.
51 |
52 | #### Tag (any) Revit Element
53 | The tag element node creates a tag of any taggable revit element in the current Revit view. It requires a revit element as an input and if the tag should be horizontal or vertical or having a leader or not.
54 |
55 | #### Select Nodes
56 | This set of nodes also comes with a very generic one: A node to select multiple edges. This allows you to select any number of edges from your Revit model and use them in Dynamo to create bars or even place adaptive components along them (see Image).
57 |
58 | Dynamo For Rebar is developed and maintained by [Thornton Tomasetti](http://www.thorntontomasetti.com/)’s [CORE studio](http://core.thorntontomasetti.com/). The main developers are:
59 | - [Maximilian Thumfart](https://github.com/moethu)
60 |
--------------------------------------------------------------------------------
/TestFiles/DynamoDefinitions/Generic Foundation.dyn:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/TestFiles/DynamoDefinitions/MaterialProperties.dyn:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | False
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/TestFiles/DynamoDefinitions/Morphed.dyn:
--------------------------------------------------------------------------------
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 | PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDAuOS4wLjMwNjclMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwVFpYSnBZV3hwZW1GaWJHVkpaQ0JwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMUpsZG1sMFUyVnlkbWxqWlhNdVVHVnljMmx6ZEdWdVkyVXZVbVYyYVhSVFpYSjJhV05sY3lVeVF5VXlNRlpsY25OcGIyNGxNMFF3TGprdU1TNHpNRFkzSlRKREpUSXdRM1ZzZEhWeVpTVXpSRzVsZFhSeVlXd2xNa01sTWpCUWRXSnNhV05MWlhsVWIydGxiaVV6Ukc1MWJHd2lQZzBLUEhOMGNtbHVaMGxFSUdsa1BTSnlaV1l0TXlJK05qWTJOakZoTnpJdE5qQTRNUzAwTlRneUxXSm1OVEF0WkRSalpEVXhOVGM1TlRjeUxUQXdNRFF4T0RFMFBDOXpkSEpwYm1kSlJENE5DanhwYm5SSlJENHlOamd6TURnOEwybHVkRWxFUGcwS1BDOWhNVHBUWlhKcFlXeHBlbUZpYkdWSlpENE5Dand2VTA5QlVDMUZUbFk2UW05a2VUNE5Dand2VTA5QlVDMUZUbFk2Ulc1MlpXeHZjR1UrRFFvPTwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K
68 |
69 |
70 |
--------------------------------------------------------------------------------
/TestFiles/DynamoDefinitions/Perpendicular.dyn:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | False
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 | PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDAuOS4wLjMwNjclMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPmZhbHNlPC9CYXNlLTBfSGFzRGF0YT4NCjxCYXNlLTBfSGFzTmVzdGVkRGF0YT50cnVlPC9CYXNlLTBfSGFzTmVzdGVkRGF0YT4NCjxCYXNlLTBfTmVzdGVkRGF0YUNvdW50PjE8L0Jhc2UtMF9OZXN0ZWREYXRhQ291bnQ+DQo8QmFzZS0wLTBfSGFzRGF0YT50cnVlPC9CYXNlLTAtMF9IYXNEYXRhPg0KPEJhc2UtMC0wX0RhdGEgaWQ9InJlZi0zIj5QRk5QUVZBdFJVNVdPa1Z1ZG1Wc2IzQmxJSGh0Ykc1ek9uaHphVDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRXRhVzV6ZEdGdVkyVWlJSGh0Ykc1ek9uaHpaRDBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01TOVlUVXhUWTJobGJXRWlJSGh0Ykc1ek9sTlBRVkF0UlU1RFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJZ2VHMXNibk02VTA5QlVDMUZUbFk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbmh0YkhOdllYQXViM0puTDNOdllYQXZaVzUyWld4dmNHVXZJaUI0Yld4dWN6cGpiSEk5SW1oMGRIQTZMeTl6WTJobGJXRnpMbTFwWTNKdmMyOW1kQzVqYjIwdmMyOWhjQzlsYm1OdlpHbHVaeTlqYkhJdk1TNHdJaUJUVDBGUUxVVk9WanBsYm1OdlpHbHVaMU4wZVd4bFBTSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OXpiMkZ3TDJWdVkyOWthVzVuTHlJK0RRbzhVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqeGhNVHBUWlhKcFlXeHBlbUZpYkdWSlpDQnBaRDBpY21WbUxURWlJSGh0Ykc1ek9tRXhQU0pvZEhSd09pOHZjMk5vWlcxaGN5NXRhV055YjNOdlpuUXVZMjl0TDJOc2NpOXVjMkZ6YzJWdEwxSmxkbWwwVTJWeWRtbGpaWE11VUdWeWMybHpkR1Z1WTJVdlVtVjJhWFJUWlhKMmFXTmxjeVV5UXlVeU1GWmxjbk5wYjI0bE0wUXdMamt1TVM0ek1EWTNKVEpESlRJd1EzVnNkSFZ5WlNVelJHNWxkWFJ5WVd3bE1rTWxNakJRZFdKc2FXTkxaWGxVYjJ0bGJpVXpSRzUxYkd3aVBnMEtQSE4wY21sdVowbEVJR2xrUFNKeVpXWXRNeUkrTmpZMk5qRmhOekl0TmpBNE1TMDBOVGd5TFdKbU5UQXRaRFJqWkRVeE5UYzVOVGN5TFRBd01EUXhPREppUEM5emRISnBibWRKUkQ0TkNqeHBiblJKUkQ0eU5qZ3pNekU4TDJsdWRFbEVQZzBLUEM5aE1UcFRaWEpwWVd4cGVtRmliR1ZKWkQ0TkNqd3ZVMDlCVUMxRlRsWTZRbTlrZVQ0TkNqd3ZVMDlCVUMxRlRsWTZSVzUyWld4dmNHVStEUW89PC9CYXNlLTAtMF9EYXRhPg0KPEJhc2UtMC0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMC0wX0hhc05lc3RlZERhdGE+DQo8L2ExOkNhbGxTaXRlX3gwMDJCX1RyYWNlU2VyaWFsaXNlckhlbHBlcj4NCjwvU09BUC1FTlY6Qm9keT4NCjwvU09BUC1FTlY6RW52ZWxvcGU+DQo=
86 |
87 |
88 |
--------------------------------------------------------------------------------
/TestFiles/DynamoDefinitions/SimpleLine.dyn:
--------------------------------------------------------------------------------
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 | PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDAuOC4yLjIzOTIlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwVFpYSnBZV3hwZW1GaWJHVkpaQ0JwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMUpsZG1sMFUyVnlkbWxqWlhNdVVHVnljMmx6ZEdWdVkyVXZVbVYyYVhSVFpYSjJhV05sY3lVeVF5VXlNRlpsY25OcGIyNGxNMFF3TGpndU1pNHlNemt5SlRKREpUSXdRM1ZzZEhWeVpTVXpSRzVsZFhSeVlXd2xNa01sTWpCUWRXSnNhV05MWlhsVWIydGxiaVV6Ukc1MWJHd2lQZzBLUEhOMGNtbHVaMGxFSUdsa1BTSnlaV1l0TXlJK1pUUTBZMk0yWlRFdE9HTm1OUzAwWVdWakxXRmtORE10TVdSbVlqQmhaRGxqTnpRNExUQXdNRFUxTmprMVBDOXpkSEpwYm1kSlJENE5DanhwYm5SSlJENHpORGs0TkRVOEwybHVkRWxFUGcwS1BDOWhNVHBUWlhKcFlXeHBlbUZpYkdWSlpENE5Dand2VTA5QlVDMUZUbFk2UW05a2VUNE5Dand2VTA5QlVDMUZUbFk2Ulc1MlpXeHZjR1UrRFFvPTwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K
73 |
74 |
75 |
--------------------------------------------------------------------------------
/TestFiles/DynamoDefinitions/TagElements.dyn:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | True
7 |
8 |
9 | True
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | False
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 | PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDAuOS4wLjMwNjclMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwVFpYSnBZV3hwZW1GaWJHVkpaQ0JwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMUpsZG1sMFUyVnlkbWxqWlhNdVVHVnljMmx6ZEdWdVkyVXZVbVYyYVhSVFpYSjJhV05sY3lVeVF5VXlNRlpsY25OcGIyNGxNMFF3TGprdU1TNHpNRFkzSlRKREpUSXdRM1ZzZEhWeVpTVXpSRzVsZFhSeVlXd2xNa01sTWpCUWRXSnNhV05MWlhsVWIydGxiaVV6Ukc1MWJHd2lQZzBLUEhOMGNtbHVaMGxFSUdsa1BTSnlaV1l0TXlJK05qWTJOakZoTnpJdE5qQTRNUzAwTlRneUxXSm1OVEF0WkRSalpEVXhOVGM1TlRjeUxUQXdNRFF4T0RVNVBDOXpkSEpwYm1kSlJENE5DanhwYm5SSlJENHlOamd6TnpjOEwybHVkRWxFUGcwS1BDOWhNVHBUWlhKcFlXeHBlbUZpYkdWSlpENE5Dand2VTA5QlVDMUZUbFk2UW05a2VUNE5Dand2VTA5QlVDMUZUbFk2Ulc1MlpXeHZjR1UrRFFvPTwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K
56 | PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDAuOS4wLjMwNjclMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwVFpYSnBZV3hwZW1GaWJHVkpaQ0JwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMUpsZG1sMFUyVnlkbWxqWlhNdVVHVnljMmx6ZEdWdVkyVXZVbVYyYVhSVFpYSjJhV05sY3lVeVF5VXlNRlpsY25OcGIyNGxNMFF3TGprdU1TNHpNRFkzSlRKREpUSXdRM1ZzZEhWeVpTVXpSRzVsZFhSeVlXd2xNa01sTWpCUWRXSnNhV05MWlhsVWIydGxiaVV6Ukc1MWJHd2lQZzBLUEhOMGNtbHVaMGxFSUdsa1BTSnlaV1l0TXlJK05qWTJOakZoTnpJdE5qQTRNUzAwTlRneUxXSm1OVEF0WkRSalpEVXhOVGM1TlRjeUxUQXdNRFF4T0RVNVBDOXpkSEpwYm1kSlJENE5DanhwYm5SSlJENHlOamd6TnpjOEwybHVkRWxFUGcwS1BDOWhNVHBUWlhKcFlXeHBlbUZpYkdWSlpENE5Dand2VTA5QlVDMUZUbFk2UW05a2VUNE5Dand2VTA5QlVDMUZUbFk2Ulc1MlpXeHZjR1UrRFFvPTwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K
57 | PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDAuOS4wLjMwNjclMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwVFpYSnBZV3hwZW1GaWJHVkpaQ0JwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMUpsZG1sMFUyVnlkbWxqWlhNdVVHVnljMmx6ZEdWdVkyVXZVbVYyYVhSVFpYSjJhV05sY3lVeVF5VXlNRlpsY25OcGIyNGxNMFF3TGprdU1TNHpNRFkzSlRKREpUSXdRM1ZzZEhWeVpTVXpSRzVsZFhSeVlXd2xNa01sTWpCUWRXSnNhV05MWlhsVWIydGxiaVV6Ukc1MWJHd2lQZzBLUEhOMGNtbHVaMGxFSUdsa1BTSnlaV1l0TXlJK05qWTJOakZoTnpJdE5qQTRNUzAwTlRneUxXSm1OVEF0WkRSalpEVXhOVGM1TlRjeUxUQXdNRFF4T0RVNVBDOXpkSEpwYm1kSlJENE5DanhwYm5SSlJENHlOamd6TnpjOEwybHVkRWxFUGcwS1BDOWhNVHBUWlhKcFlXeHBlbUZpYkdWSlpENE5Dand2VTA5QlVDMUZUbFk2UW05a2VUNE5Dand2VTA5QlVDMUZUbFk2Ulc1MlpXeHZjR1UrRFFvPTwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K
58 |
59 |
60 |
--------------------------------------------------------------------------------
/TestFiles/RevitProject/RevitProject.0024.rvt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/TestFiles/RevitProject/RevitProject.0024.rvt
--------------------------------------------------------------------------------
/TestFiles/RevitProject/RevitProject.rvt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/TestFiles/RevitProject/RevitProject.rvt
--------------------------------------------------------------------------------
/TestFiles/TestingFamilies/Bridge Deck - curved with crossfall no end skew.rfa:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/TestFiles/TestingFamilies/Bridge Deck - curved with crossfall no end skew.rfa
--------------------------------------------------------------------------------
/TestFiles/TestingFamilies/Bridge Deck - curved with super and end skew.rfa:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/TestFiles/TestingFamilies/Bridge Deck - curved with super and end skew.rfa
--------------------------------------------------------------------------------
/TestFiles/TestingFamilies/Bridge Deck - curved with super no end skew.rfa:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/TestFiles/TestingFamilies/Bridge Deck - curved with super no end skew.rfa
--------------------------------------------------------------------------------
/TestFiles/TestingFamilies/Caltrans CIP 4 cell Box Girder r6 - simple and straight.rfa:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/TestFiles/TestingFamilies/Caltrans CIP 4 cell Box Girder r6 - simple and straight.rfa
--------------------------------------------------------------------------------
/TestFiles/TestingFamilies/Caltrans CIP 4 cell Box Girder r6 -end skews and curved in plan.rfa:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/TestFiles/TestingFamilies/Caltrans CIP 4 cell Box Girder r6 -end skews and curved in plan.rfa
--------------------------------------------------------------------------------
/TestFiles/TestingFamilies/Caltrans CIP 4 cell Box Girder r6 -end skews, curved in plan and variable depth.rfa:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/TestFiles/TestingFamilies/Caltrans CIP 4 cell Box Girder r6 -end skews, curved in plan and variable depth.rfa
--------------------------------------------------------------------------------
/src/Dynamo.Rebar.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 2013
4 | VisualStudioVersion = 12.0.30723.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DynamoRebar", "DynamoRebar\DynamoRebar.csproj", "{09E303FE-0A2F-49B0-878F-870C90C8F40B}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DynamoRebarUI", "DynamoRebarUI\DynamoRebarUI.csproj", "{272F3BD5-23D2-41BE-81C9-31BB3047DBBD}"
9 | EndProject
10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DynamoRebarTest", "DynamoRebarTest\DynamoRebarTest.csproj", "{0A983B75-FE12-4E25-AE43-38C0FE03842D}"
11 | EndProject
12 | Global
13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
14 | Debug|Any CPU = Debug|Any CPU
15 | Release|Any CPU = Release|Any CPU
16 | EndGlobalSection
17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
18 | {09E303FE-0A2F-49B0-878F-870C90C8F40B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19 | {09E303FE-0A2F-49B0-878F-870C90C8F40B}.Debug|Any CPU.Build.0 = Debug|Any CPU
20 | {09E303FE-0A2F-49B0-878F-870C90C8F40B}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {09E303FE-0A2F-49B0-878F-870C90C8F40B}.Release|Any CPU.Build.0 = Release|Any CPU
22 | {272F3BD5-23D2-41BE-81C9-31BB3047DBBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23 | {272F3BD5-23D2-41BE-81C9-31BB3047DBBD}.Debug|Any CPU.Build.0 = Debug|Any CPU
24 | {272F3BD5-23D2-41BE-81C9-31BB3047DBBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
25 | {272F3BD5-23D2-41BE-81C9-31BB3047DBBD}.Release|Any CPU.Build.0 = Release|Any CPU
26 | {0A983B75-FE12-4E25-AE43-38C0FE03842D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27 | {0A983B75-FE12-4E25-AE43-38C0FE03842D}.Debug|Any CPU.Build.0 = Debug|Any CPU
28 | {0A983B75-FE12-4E25-AE43-38C0FE03842D}.Release|Any CPU.ActiveCfg = Release|Any CPU
29 | {0A983B75-FE12-4E25-AE43-38C0FE03842D}.Release|Any CPU.Build.0 = Release|Any CPU
30 | EndGlobalSection
31 | GlobalSection(SolutionProperties) = preSolution
32 | HideSolutionNode = FALSE
33 | EndGlobalSection
34 | EndGlobal
35 |
--------------------------------------------------------------------------------
/src/Dynamo.Rebar_Debug.bat:
--------------------------------------------------------------------------------
1 | set DYNAMO_API="C:\Program Files\Dynamo 0.9"
2 | set REVIT_API="C:\Program Files\Autodesk\Revit 2016"
3 | set REVIT_VERSION=Revit_2016
4 | "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe" "Dynamo.Rebar.sln"
--------------------------------------------------------------------------------
/src/DynamoRebar/Diagrams/2015-06-22_16h00_33.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/DynamoRebar/Diagrams/2015-06-22_16h00_33.png
--------------------------------------------------------------------------------
/src/DynamoRebar/Diagrams/Activity.dgml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Diagrams/Morphing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/DynamoRebar/Diagrams/Morphing.png
--------------------------------------------------------------------------------
/src/DynamoRebar/Diagrams/Offset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/DynamoRebar/Diagrams/Offset.png
--------------------------------------------------------------------------------
/src/DynamoRebar/Diagrams/Perpendicular.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/DynamoRebar/Diagrams/Perpendicular.png
--------------------------------------------------------------------------------
/src/DynamoRebar/Diagrams/Structure.cd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | CAAAAEAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
7 | Extensions.cs
8 |
9 |
10 |
11 |
12 |
13 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAA=
14 | RebarMorphing.cs
15 |
16 |
17 |
18 |
19 |
20 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAA=
21 | RebarPerpendicular.cs
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/DynamoRebar/DynamoRebar.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Debug
9 | AnyCPU
10 | {09E303FE-0A2F-49B0-878F-870C90C8F40B}
11 | Library
12 | Properties
13 | DynamoRebar
14 | DynamoRebar
15 | v4.7.2
16 | 512
17 |
18 |
19 |
20 | true
21 | full
22 | false
23 | ..\..\bin\AnyCPU\Debug\
24 | DEBUG;TRACE
25 | prompt
26 | 4
27 | false
28 | ..\..\bin\AnyCPU\Debug\DynamoRebar.xml
29 |
30 |
31 | pdbonly
32 | true
33 | bin\Release\
34 | TRACE
35 | prompt
36 | 4
37 | false
38 |
39 |
40 |
41 | $(DYNAMO_API)\DynamoCore.dll
42 | False
43 |
44 |
45 | $(DYNAMO_API)\DynamoCoreWpf.dll
46 | False
47 |
48 |
49 | $(DYNAMO_API)\DynamoServices.dll
50 | False
51 |
52 |
53 | $(DYNAMO_API)\ProtoCore.dll
54 | False
55 |
56 |
57 | $(DYNAMO_API)\ProtoGeometry.dll
58 | False
59 |
60 |
61 | False
62 | ..\..\..\..\..\..\..\Program Files\Autodesk\Revit 2019\RevitAPI.dll
63 | False
64 |
65 |
66 | False
67 | ..\..\..\..\..\..\..\Program Files\Autodesk\Revit 2019\RevitAPIUI.dll
68 | False
69 |
70 |
71 | ..\..\..\..\..\..\..\Program Files\Dynamo\Dynamo Revit\2\Revit_2018\RevitNodes.dll
72 | False
73 |
74 |
75 | ..\..\..\..\..\..\..\Program Files\Dynamo\Dynamo Revit\2\Revit_2018\RevitServices.dll
76 | False
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | True
100 | True
101 | Resources.resx
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 | Designer
114 |
115 |
116 | ResXFileCodeGenerator
117 | Resources.Designer.cs
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 |
143 |
--------------------------------------------------------------------------------
/src/DynamoRebar/DynamoRebarImages.resources:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/DynamoRebar/DynamoRebarImages.resources
--------------------------------------------------------------------------------
/src/DynamoRebar/Extensions/Extensions.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.Text;
21 | using Autodesk.DesignScript.Geometry;
22 | using Autodesk.DesignScript.Runtime;
23 | using Revit.GeometryConversion;
24 |
25 | namespace DynamoRebar
26 | {
27 | ///
28 | /// Extensions
29 | ///
30 | public static class Extensions
31 | {
32 |
33 | ///
34 | /// Compares the direction of two vectors
35 | ///
36 | ///
37 | /// vector to compare
38 | /// tolerance
39 | ///
40 | [IsVisibleInDynamoLibrary(false)]
41 | public static bool Parallel(this Vector thisVector, Vector vector, double tolerance)
42 | {
43 | double angle = thisVector.AngleWithVector(vector);
44 |
45 | if (Math.Abs(angle) < tolerance || Math.Abs(180 - angle) < tolerance) return true;
46 | else return false;
47 |
48 | }
49 |
50 |
51 | ///
52 | /// Remove Duplicates from double List
53 | ///
54 | ///
55 | ///
56 | [IsVisibleInDynamoLibrary(false)]
57 | public static List RemoveDuplicates(this List list)
58 | {
59 | // If the list contains one element return it
60 | if (list.Count == 1)
61 | return list;
62 |
63 | // If it contains two points return only one of them
64 | else if (list.Count == 2)
65 | {
66 | list.RemoveAt(1);
67 | return list;
68 | }
69 |
70 | else return list;
71 | }
72 |
73 | ///
74 | /// Flip Coordinates
75 | ///
76 | ///
77 | /// Flipped UV
78 | [IsVisibleInDynamoLibrary(false)]
79 | public static UV Flip(this UV uv)
80 | {
81 | double u = uv.U;
82 | double v = uv.V;
83 | return UV.ByCoordinates(v, u);
84 | }
85 |
86 |
87 | ///
88 | /// Flips the Array
89 | ///
90 | [IsVisibleInDynamoLibrary(false)]
91 | public static T[][] TransposeRowsAndColumns(this T[][] arr)
92 | {
93 | int rowCount = arr.Length;
94 | int columnCount = arr[0].Length;
95 | T[][] transposed = new T[columnCount][];
96 | if (rowCount == columnCount)
97 | {
98 | transposed = (T[][])arr.Clone();
99 | for (int i = 1; i < rowCount; i++)
100 | {
101 | for (int j = 0; j < i; j++)
102 | {
103 | T temp = transposed[i][j];
104 | transposed[i][j] = transposed[j][i];
105 | transposed[j][i] = temp;
106 | }
107 | }
108 | }
109 | else
110 | {
111 | for (int column = 0; column < columnCount; column++)
112 | {
113 | transposed[column] = new T[rowCount];
114 | for (int row = 0; row < rowCount; row++)
115 | {
116 | transposed[column][row] = arr[row][column];
117 | }
118 | }
119 | }
120 | return transposed;
121 | }
122 |
123 | }
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 | }
133 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Extensions/PolyCurve.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.Text;
21 | using Autodesk.Revit.DB;
22 | using Revit.GeometryConversion;
23 | using Autodesk.DesignScript.Runtime;
24 |
25 | namespace DynamoRebar
26 | {
27 | ///
28 | /// PolyCurve Class for Revit
29 | ///
30 | [IsVisibleInDynamoLibrary(false)]
31 | public class RevitPolyCurve
32 | {
33 | ///
34 | /// Curves
35 | ///
36 | public List Curves;
37 |
38 | ///
39 | /// Constructor using a DS Polycurve
40 | ///
41 | /// Input Curve
42 | public RevitPolyCurve(Autodesk.DesignScript.Geometry.PolyCurve polycurve)
43 | {
44 | this.Curves = new List();
45 |
46 | foreach (Autodesk.DesignScript.Geometry.Curve curve in polycurve.Curves())
47 | {
48 | this.Curves.Add((Curve)curve.ApproximateToRvt());
49 | }
50 |
51 | CurveExtensions.SortCurvesContiguous(this.Curves);
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Extensions/SurfaceExtensions.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.Text;
21 | using Autodesk.DesignScript.Geometry;
22 | using Autodesk.DesignScript.Runtime;
23 | using Revit.GeometryConversion;
24 | namespace DynamoRebar
25 | {
26 | ///
27 | /// Extensions
28 | ///
29 | public static class SurfaceExtensions
30 | {
31 | ///
32 | /// Returns Distance between two points on the surface
33 | ///
34 | ///
35 | /// Horizontal or Vertical extends
36 | /// Distance as double
37 | [IsVisibleInDynamoLibrary(false)]
38 | public static double DistanceBetweenPoints(this Surface surface, UV point1, UV point2)
39 | {
40 | Point A = surface.PointAtParameter(point1.U, point1.V);
41 | Point B = surface.PointAtParameter(point2.U, point2.V);
42 |
43 | return A.DistanceTo(B);
44 | }
45 |
46 |
47 | ///
48 | /// Returns a point evaluated by parameter and direction
49 | ///
50 | ///
51 | /// Parameter to evaluate
52 | /// U or V
53 | /// Evaluated Point
54 | [IsVisibleInDynamoLibrary(false)]
55 | public static Point PointAtParameterAndDirection(this Surface surface, double parameter, bool directionIsHorizontal)
56 | {
57 | if (directionIsHorizontal)
58 | return surface.PointAtParameter(0, parameter);
59 | else
60 | return surface.PointAtParameter(parameter, 0);
61 | }
62 |
63 | ///
64 | /// Create a set of horizontal Normal Curves on a line along a surface
65 | ///
66 | /// Surface
67 | /// Boundary conditions (length of normals)
68 | /// Number of normals to create
69 | /// Offset from surface
70 | /// Height parameter of the line along the surface
71 | /// Horizontal or Vertical position
72 | /// List of Curves
73 | [IsVisibleInDynamoLibrary(false)]
74 | public static List NormalCurves(this Surface face, List surfaces, int numberOfLines, double offset, double height, bool horizontal)
75 | {
76 | // List of return curves
77 | List curves = new List();
78 |
79 | numberOfLines++;
80 |
81 | // Array of points for a set of points to create the curve from
82 | Point[] points = new Point[numberOfLines - 1];
83 |
84 | // assume parameter V is in Y direction
85 | bool VisY = true;
86 |
87 | // Check if start and endpoint of the curve along the surface is vertical
88 | // If yes, V follows X direction
89 | if (face.PointAtParameter(0, height).X == face.PointAtParameter(1, height).X) VisY = false;
90 |
91 | // Invert V direction if the user wants a vertical direction
92 | if (!horizontal) VisY = !VisY;
93 |
94 | // Get points along the surface forming a set of points to create a new curve from
95 | for (int i = 1; i < numberOfLines; i++)
96 | {
97 | // get the parameter to use
98 | double parameter = (double)i / (double)numberOfLines;
99 |
100 | // Get the point according to the matching U or V setting
101 | if (VisY)
102 | points[i - 1] = face.PointAtParameter(parameter, height);
103 | else
104 | points[i - 1] = face.PointAtParameter(height, parameter);
105 | }
106 |
107 | // Create Normals for each Point
108 | for (int i = 0; i < points.Length; i++)
109 | {
110 | int intersections = GetIntersection(face, surfaces, points[i], offset, ref curves, false);
111 |
112 | if (intersections == 0)
113 | GetIntersection(face, surfaces, points[i], offset, ref curves, true);
114 |
115 | }
116 |
117 | List crvs = new List();
118 |
119 | foreach (Curve curve in curves)
120 | {
121 | Curve[] splitted = curve.DivideByLengthFromParameter(curve.Length - offset, 0);
122 | crvs.Add(splitted[0]);
123 | }
124 |
125 |
126 | return crvs;
127 | }
128 |
129 | ///
130 | /// Creates a set of Curves following a Surface
131 | ///
132 | /// Surface to follow
133 | /// Precision facotr for curves
134 | /// Offset from surface
135 | /// Distance between curves
136 | /// Number of curves to create
137 | /// Flip direction
138 | /// Set of Curves
139 | [IsVisibleInDynamoLibrary(false)]
140 | public static List Follow(this Surface surface, int precision, double offset, double distanceBetweenLinesInMM, int numberOfLines, bool flip)
141 | {
142 |
143 | Vector normal = surface.NormalAtParameter(0.5, 0.5);
144 | Surface myface = (Surface)surface.Offset(offset);
145 |
146 | // Create return value collection
147 | List curves = new List();
148 |
149 | // Get a reference curve from the surface
150 | UV p1 = UV.ByCoordinates(0, 0);
151 | UV p2 = UV.ByCoordinates(1, 0);
152 |
153 | double length = (!flip) ? myface.DistanceBetweenPoints(p1, p2) : myface.DistanceBetweenPoints(p1.Flip(), p2.Flip());
154 |
155 | // If there is a distance applied use it to determine the number of lines to create
156 | if (distanceBetweenLinesInMM > 0) numberOfLines = (int)(length / (distanceBetweenLinesInMM));
157 |
158 | numberOfLines++;
159 |
160 |
161 | // Walk thru the amount of lines to create
162 | for (int j = 1; j < numberOfLines; j++)
163 | {
164 | // Create a set of points for createing a curve
165 | List points = new List();
166 |
167 | // Get the height parameter
168 | double height = (double)j / (double)numberOfLines;
169 |
170 |
171 | UV startPoint = UV.ByCoordinates(0, height);
172 | UV endPoint = UV.ByCoordinates(1, height);
173 |
174 | if (flip)
175 | {
176 | startPoint = startPoint.Flip();
177 | endPoint = endPoint.Flip();
178 | }
179 |
180 | Curve nurbsCurve = Curve.ByParameterLineOnSurface(myface, startPoint, endPoint);
181 |
182 | curves.Add(nurbsCurve);
183 | }
184 |
185 | return curves;
186 | }
187 |
188 | [IsVisibleInDynamoLibrary(false)]
189 | private static int GetIntersection(Surface face, List surfaces, Point point, double offset, ref List curves, bool reverse)
190 | {
191 | Surface my = face;
192 |
193 | if (face.GetType() == typeof(PolySurface))
194 | {
195 | PolySurface poly = (PolySurface)face;
196 | foreach (Surface s in poly.Surfaces())
197 | {
198 | UV coords = s.UVParameterAtPoint(point);
199 | if (coords != null && coords.U >= 0 && coords.U <= 1 && coords.V >= 0 && coords.V <= 1)
200 | {
201 | my = s;
202 | }
203 | }
204 | }
205 |
206 | // Get the Normal at that point
207 | Vector normal = my.NormalAtPoint(point);
208 |
209 |
210 |
211 |
212 | // Remove Z Value in order to create horizontal normals
213 | Vector optimizedNormal = (reverse) ? normal.Reverse() : normal;
214 | // Vector.ByCoordinates(normal.X, normal.Y, 0).Reverse() : Vector.ByCoordinates(normal.X, normal.Y, 0);
215 |
216 | // Get an startpoint offset if it applies
217 | Point startPoint = point;
218 | if (offset != 0)
219 | {
220 | Line offsetLine = Line.ByStartPointDirectionLength(point, optimizedNormal, offset);
221 | startPoint = offsetLine.EndPoint;
222 | }
223 |
224 | // Create an almost endless line
225 | Line line = Line.ByStartPointDirectionLength(startPoint, optimizedNormal, 100000000);
226 |
227 | // Get intersection points with boundary surfaces
228 | List intersections = line.Insersection(surfaces);
229 |
230 | // If there are any intersections
231 | if (intersections.Count > 1)
232 | {
233 | // trim the curve into segments if there are gaps or holes
234 | Curve[] segments = line.TrimSegmentsByParameter(intersections.ToArray(), false);
235 |
236 | // Walk through trimmed curves and add only those to the return collection
237 | // which are of a reasonable length
238 | foreach (Curve segment in segments)
239 | //if (segment.Length < 100000)
240 | curves.Add(segment);
241 | }
242 | else if (intersections.Count == 1)
243 | {
244 | Curve[] segments = line.SplitByParameter(intersections[0]);
245 | curves.Add(segments[0]);
246 | }
247 |
248 | return intersections.Count;
249 |
250 | }
251 |
252 | }
253 | }
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Extensions/UnitConversion.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using RVT = Autodesk.Revit.DB;
7 | using RevitServices.Persistence;
8 | using Autodesk.DesignScript.Runtime;
9 |
10 | namespace DynamoRebar
11 | {
12 | [IsVisibleInDynamoLibrary(false)]
13 | public static class UnitConversion
14 | {
15 | [IsVisibleInDynamoLibrary(false)]
16 | public static double ToRvtLength(this double length)
17 | {
18 | Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument;
19 | var getDocUnits = doc.GetUnits();
20 | var getDisplayUnits = getDocUnits.GetFormatOptions(RVT.UnitType.UT_Length).DisplayUnits;
21 | return RVT.UnitUtils.ConvertToInternalUnits(length, getDisplayUnits);
22 | }
23 |
24 | [IsVisibleInDynamoLibrary(false)]
25 | public static double FromRvtLength(this double length)
26 | {
27 | Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument;
28 | var getDocUnits = doc.GetUnits();
29 | var getDisplayUnits = getDocUnits.GetFormatOptions(RVT.UnitType.UT_Length).DisplayUnits;
30 | return RVT.UnitUtils.ConvertFromInternalUnits(length, getDisplayUnits);
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System.Reflection;
18 | using System.Runtime.CompilerServices;
19 | using System.Runtime.InteropServices;
20 | using System.Resources;
21 |
22 | // General Information about an assembly is controlled through the following
23 | // set of attributes. Change these attribute values to modify the information
24 | // associated with an assembly.
25 | [assembly: AssemblyTitle("Dynamo Rebar")]
26 | [assembly: AssemblyDescription("Dynamo Rebar")]
27 | [assembly: AssemblyConfiguration("")]
28 | [assembly: AssemblyCompany("Autodesk, Inc.")]
29 | [assembly: AssemblyProduct("Dynamo Rebar")]
30 | [assembly: AssemblyCopyright("Copyright © Autodesk, Inc. 2015")]
31 | [assembly: AssemblyTrademark("")]
32 | [assembly: AssemblyCulture("")]
33 |
34 | // Setting ComVisible to false makes the types in this assembly not visible
35 | // to COM components. If you need to access a type in this assembly from
36 | // COM, set the ComVisible attribute to true on that type.
37 | [assembly: ComVisible(false)]
38 |
39 | // The following GUID is for the ID of the typelib if this project is exposed to COM
40 | [assembly: Guid("3aa18499-8a30-4df7-8c42-fb2ac4dfd7b7")]
41 |
42 | // Version information for an assembly consists of the following four values:
43 | //
44 | // Major Version
45 | // Minor Version
46 | // Build Number
47 | // Revision
48 | //
49 | // You can specify all the values or you can default the Build and Revision Numbers
50 | // by using the '*' as shown below:
51 | // [assembly: AssemblyVersion("1.0.*")]
52 | [assembly: AssemblyVersion("0.3.4.0")]
53 | [assembly: AssemblyFileVersion("0.3.4.0")]
54 | [assembly: NeutralResourcesLanguageAttribute("en")]
55 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace DynamoRebar.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DynamoRebar.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 | text/microsoft-resx
91 |
92 |
93 | 1.3
94 |
95 |
96 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
97 |
98 |
99 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
100 |
101 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Revit/HorizontalAlignment.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.Text;
21 | using System.Threading.Tasks;
22 |
23 | namespace Revit.Elements
24 | {
25 | public class HorizontalAlignment
26 | {
27 | #region private constructors
28 |
29 | private HorizontalAlignment(Autodesk.Revit.DB.HorizontalAlignmentStyle rebarStyle)
30 | {
31 | internalElement = rebarStyle;
32 | }
33 |
34 | #endregion
35 |
36 | #region private members
37 |
38 | private readonly Autodesk.Revit.DB.HorizontalAlignmentStyle internalElement;
39 |
40 | #endregion
41 |
42 | #region public properties
43 |
44 | ///
45 | /// The name of the Category.
46 | ///
47 | public string Name
48 | {
49 | get
50 | {
51 | return internalElement.ToString();
52 | }
53 | }
54 |
55 |
56 | #endregion
57 |
58 | internal Autodesk.Revit.DB.HorizontalAlignmentStyle InternalElement
59 | {
60 | get { return internalElement; }
61 | }
62 |
63 | #region public static constructors
64 |
65 | ///
66 | /// Gets a Revit category by the built-in category name.
67 | ///
68 | /// The built in category name.
69 | ///
70 | public static HorizontalAlignment ByName(string name)
71 | {
72 | if (name == null)
73 | {
74 | throw new ArgumentNullException("name");
75 | }
76 |
77 | Autodesk.Revit.DB.HorizontalAlignmentStyle style = Autodesk.Revit.DB.HorizontalAlignmentStyle.Center;
78 |
79 | if (!Enum.TryParse(name, out style))
80 | throw new Exception("Cannot parse " + name);
81 |
82 | return new HorizontalAlignment(style);
83 | }
84 |
85 | #endregion
86 |
87 | public override string ToString()
88 | {
89 | return internalElement.ToString();
90 | }
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Revit/RebarBarType.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using Autodesk.Revit.DB;
19 | using DynamoServices;
20 | using Autodesk.DesignScript.Runtime;
21 | using Revit.GeometryConversion;
22 | using RevitServices.Persistence;
23 | using RevitServices.Transactions;
24 | using System.Collections.Generic;
25 |
26 |
27 | namespace Revit.Elements
28 | {
29 | [DynamoServices.RegisterForTrace]
30 | public class RebarBarType : Element
31 | {
32 | #region Internal Properties
33 |
34 | ///
35 | /// Internal reference to the Revit Element
36 | ///
37 | internal Autodesk.Revit.DB.Structure.RebarBarType InternalRebar
38 | {
39 | get;
40 | private set;
41 | }
42 |
43 | ///
44 | /// Reference to the Element
45 | ///
46 | public override Autodesk.Revit.DB.Element InternalElement
47 | {
48 | get { return InternalRebar; }
49 | }
50 |
51 | #endregion
52 |
53 | #region Private constructors
54 |
55 | ///
56 | /// Create from an existing Revit Element
57 | ///
58 | ///
59 | private RebarBarType(Autodesk.Revit.DB.Structure.RebarBarType rebarBarType)
60 | {
61 | SafeInit(() => InitRebarBarType(rebarBarType));
62 | }
63 |
64 |
65 | private RebarBarType(double diameter, Autodesk.Revit.DB.Structure.RebarDeformationType deformationType)
66 | {
67 | SafeInit(() => InitRebarBarType(diameter, deformationType));
68 | }
69 |
70 | #endregion
71 |
72 | #region Helpers for private constructors
73 |
74 | ///
75 | /// Initialize a Rebar element
76 | ///
77 | ///
78 | private void InitRebarBarType(Autodesk.Revit.DB.Structure.RebarBarType rebar)
79 | {
80 | InternalSetRebarBarType(rebar);
81 | }
82 |
83 |
84 | private void InitRebarBarType(double diameter, Autodesk.Revit.DB.Structure.RebarDeformationType deformationType)
85 | {
86 | Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument;
87 |
88 | TransactionManager.Instance.EnsureInTransaction(document);
89 |
90 | var barTypeElem = ElementBinder.GetElementFromTrace(document);
91 |
92 | if (barTypeElem == null)
93 | {
94 | barTypeElem = Autodesk.Revit.DB.Structure.RebarBarType.Create(document);
95 | }
96 |
97 | barTypeElem.BarDiameter = diameter;
98 | barTypeElem.DeformationType = deformationType;
99 |
100 | TransactionManager.Instance.TransactionTaskDone();
101 |
102 |
103 | if (barTypeElem != null)
104 | {
105 | ElementBinder.CleanupAndSetElementForTrace(document, this.InternalElement);
106 | }
107 | else
108 | {
109 | ElementBinder.SetElementForTrace(this.InternalElement);
110 | }
111 |
112 | }
113 |
114 | #endregion
115 |
116 | #region Private mutators
117 |
118 | ///
119 | /// Set the internal Element, ElementId, and UniqueId
120 | ///
121 | ///
122 | private void InternalSetRebarBarType(Autodesk.Revit.DB.Structure.RebarBarType rebarBarType)
123 | {
124 | InternalRebar = rebarBarType;
125 | InternalElementId = rebarBarType.Id;
126 | InternalUniqueId = rebarBarType.UniqueId;
127 | }
128 |
129 | #endregion
130 |
131 | #region Public static constructors
132 |
133 | ///
134 | /// Create Rebar by Curve
135 | ///
136 | /// Set of Curves
137 | /// Host Element Id
138 | public static RebarBarType ByAngle(double diameter, bool deformed)
139 | {
140 | if (diameter == null) throw new ArgumentNullException("diameter");
141 | if (deformed == null) throw new ArgumentNullException("deformed");
142 |
143 | Autodesk.Revit.DB.Structure.RebarDeformationType type = (deformed) ? Autodesk.Revit.DB.Structure.RebarDeformationType.Deformed : Autodesk.Revit.DB.Structure.RebarDeformationType.Plain;
144 |
145 | return new RebarBarType(diameter, type);
146 | }
147 |
148 | public static RebarBarType ByName(string name)
149 | {
150 | if (name == null) throw new ArgumentNullException("name");
151 |
152 | FilteredElementCollector collector = new FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument).OfClass(typeof(Autodesk.Revit.DB.Structure.RebarBarType));
153 | foreach (Autodesk.Revit.DB.Structure.RebarBarType type in collector.ToElements())
154 | {
155 | if (type.Name == name) return new RebarBarType(type);
156 | }
157 |
158 | return null;
159 | }
160 |
161 | #endregion
162 |
163 | #region Internal static constructors
164 |
165 | ///
166 | /// Create a Rebar from an existing reference
167 | ///
168 | ///
169 | ///
170 | ///
171 | internal static RebarBarType FromExisting(Autodesk.Revit.DB.Structure.RebarBarType rebarBarType, bool isRevitOwned)
172 | {
173 | return new RebarBarType(rebarBarType)
174 | {
175 | // Cannot access base classes internal bool IsRevitOwned
176 | //IsRevitOwned = isRevitOwned
177 | };
178 | }
179 |
180 | #endregion
181 | }
182 |
183 | }
184 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Revit/RebarHookOrientation.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.Text;
21 | using System.Threading.Tasks;
22 |
23 | namespace Revit.Elements
24 | {
25 | public class RebarHookOrientation
26 | {
27 | #region private constructors
28 |
29 | private RebarHookOrientation(Autodesk.Revit.DB.Structure.RebarHookOrientation hookOrientation)
30 | {
31 | internalElement = hookOrientation;
32 | }
33 |
34 | #endregion
35 |
36 | #region private members
37 |
38 | private readonly Autodesk.Revit.DB.Structure.RebarHookOrientation internalElement;
39 |
40 | #endregion
41 |
42 | #region public properties
43 |
44 | ///
45 | /// The name of the Category.
46 | ///
47 | public string Name
48 | {
49 | get
50 | {
51 | return internalElement.ToString();
52 | }
53 | }
54 |
55 |
56 | #endregion
57 |
58 | internal Autodesk.Revit.DB.Structure.RebarHookOrientation InternalElement
59 | {
60 | get { return internalElement; }
61 | }
62 |
63 | #region public static constructors
64 |
65 | ///
66 | /// Gets a Revit category by the built-in category name.
67 | ///
68 | /// The built in category name.
69 | ///
70 | public static RebarHookOrientation ByName(string name)
71 | {
72 | if (name == null)
73 | {
74 | throw new ArgumentNullException("name");
75 | }
76 |
77 | Autodesk.Revit.DB.Structure.RebarHookOrientation hook = Autodesk.Revit.DB.Structure.RebarHookOrientation.Left;
78 |
79 | if (!Enum.TryParse(name, out hook))
80 | throw new Exception("Cannot parse " + name);
81 |
82 | return new RebarHookOrientation(hook);
83 | }
84 |
85 | #endregion
86 |
87 | public override string ToString()
88 | {
89 | return internalElement.ToString();
90 | }
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Revit/RebarHookType.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using Autodesk.Revit.DB;
19 | using DynamoServices;
20 | using Autodesk.DesignScript.Runtime;
21 | using Revit.GeometryConversion;
22 | using RevitServices.Persistence;
23 | using RevitServices.Transactions;
24 | using System.Collections.Generic;
25 |
26 |
27 | namespace Revit.Elements
28 | {
29 | [DynamoServices.RegisterForTrace]
30 | public class RebarHookType : Element
31 | {
32 | #region Internal Properties
33 |
34 | ///
35 | /// Internal reference to the Revit Element
36 | ///
37 | internal Autodesk.Revit.DB.Structure.RebarHookType InternalRebar
38 | {
39 | get;
40 | private set;
41 | }
42 |
43 | ///
44 | /// Reference to the Element
45 | ///
46 | public override Autodesk.Revit.DB.Element InternalElement
47 | {
48 | get { return InternalRebar; }
49 | }
50 |
51 | #endregion
52 |
53 | #region Private constructors
54 |
55 | ///
56 | /// Create from an existing Revit Element
57 | ///
58 | ///
59 | private RebarHookType(Autodesk.Revit.DB.Structure.RebarHookType rebarHookType)
60 | {
61 | SafeInit(() => InitRebarHookType(rebarHookType));
62 | }
63 |
64 |
65 | private RebarHookType(double angle, double multiplier)
66 | {
67 | SafeInit(() => InitRebarHookType(angle, multiplier));
68 | }
69 |
70 | #endregion
71 |
72 | #region Helpers for private constructors
73 |
74 | ///
75 | /// Initialize a Rebar element
76 | ///
77 | ///
78 | private void InitRebarHookType(Autodesk.Revit.DB.Structure.RebarHookType rebar)
79 | {
80 | InternalSetRebarHookType(rebar);
81 | }
82 |
83 |
84 | private void InitRebarHookType(double angle, double multiplier)
85 | {
86 | Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument;
87 |
88 | TransactionManager.Instance.EnsureInTransaction(document);
89 |
90 | var hookTypeElem = ElementBinder.GetElementFromTrace(document);
91 |
92 | if (hookTypeElem == null)
93 | {
94 | hookTypeElem = Autodesk.Revit.DB.Structure.RebarHookType.Create(document, angle, multiplier);
95 | }
96 |
97 | TransactionManager.Instance.TransactionTaskDone();
98 |
99 |
100 | if (hookTypeElem != null)
101 | {
102 | ElementBinder.CleanupAndSetElementForTrace(document, this.InternalElement);
103 | }
104 | else
105 | {
106 | ElementBinder.SetElementForTrace(this.InternalElement);
107 | }
108 |
109 | }
110 |
111 | #endregion
112 |
113 | #region Private mutators
114 |
115 | ///
116 | /// Set the internal Element, ElementId, and UniqueId
117 | ///
118 | ///
119 | private void InternalSetRebarHookType(Autodesk.Revit.DB.Structure.RebarHookType rebarHookType)
120 | {
121 | InternalRebar = rebarHookType;
122 | InternalElementId = rebarHookType.Id;
123 | InternalUniqueId = rebarHookType.UniqueId;
124 | }
125 |
126 | #endregion
127 |
128 | #region Public static constructors
129 |
130 | ///
131 | /// Create Rebar by Curve
132 | ///
133 | /// Set of Curves
134 | /// Host Element Id
135 | public static RebarHookType ByAngle(double angle, double multiplier)
136 | {
137 | if (angle == null) throw new ArgumentNullException("angle");
138 | if (multiplier == null) throw new ArgumentNullException("multiplier");
139 |
140 | return new RebarHookType(angle, multiplier);
141 | }
142 |
143 | public static RebarHookType ByName(string name)
144 | {
145 | if (name == null) throw new ArgumentNullException("name");
146 |
147 | FilteredElementCollector collector = new FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument).OfClass(typeof(Autodesk.Revit.DB.Structure.RebarHookType));
148 | foreach (Autodesk.Revit.DB.Structure.RebarHookType hook in collector.ToElements())
149 | {
150 | if (hook.Name == name) return new RebarHookType(hook);
151 | }
152 |
153 | return null;
154 | }
155 |
156 | #endregion
157 |
158 | #region Internal static constructors
159 |
160 | ///
161 | /// Create a Rebar from an existing reference
162 | ///
163 | ///
164 | ///
165 | ///
166 | internal static RebarHookType FromExisting(Autodesk.Revit.DB.Structure.RebarHookType rebarHookType, bool isRevitOwned)
167 | {
168 | return new RebarHookType(rebarHookType)
169 | {
170 | // Cannot access base classes internal bool IsRevitOwned
171 | //IsRevitOwned = isRevitOwned
172 | };
173 | }
174 |
175 | #endregion
176 | }
177 |
178 | }
179 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Revit/RebarStyle.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.Text;
21 | using System.Threading.Tasks;
22 |
23 | namespace Revit.Elements
24 | {
25 | public class RebarStyle
26 | {
27 | #region private constructors
28 |
29 | private RebarStyle(Autodesk.Revit.DB.Structure.RebarStyle rebarStyle)
30 | {
31 | internalElement = rebarStyle;
32 | }
33 |
34 | #endregion
35 |
36 | #region private members
37 |
38 | private readonly Autodesk.Revit.DB.Structure.RebarStyle internalElement;
39 |
40 | #endregion
41 |
42 | #region public properties
43 |
44 | ///
45 | /// The name of the Category.
46 | ///
47 | public string Name
48 | {
49 | get
50 | {
51 | return internalElement.ToString();
52 | }
53 | }
54 |
55 |
56 | #endregion
57 |
58 | internal Autodesk.Revit.DB.Structure.RebarStyle InternalElement
59 | {
60 | get { return internalElement; }
61 | }
62 |
63 | #region public static constructors
64 |
65 | ///
66 | /// Gets a Revit category by the built-in category name.
67 | ///
68 | /// The built in category name.
69 | ///
70 | public static RebarStyle ByName(string name)
71 | {
72 | if (name == null)
73 | {
74 | throw new ArgumentNullException("name");
75 | }
76 |
77 | Autodesk.Revit.DB.Structure.RebarStyle style = Autodesk.Revit.DB.Structure.RebarStyle.StirrupTie;
78 |
79 | if (!Enum.TryParse(name, out style))
80 | throw new Exception("Cannot parse " + name);
81 |
82 | return new RebarStyle(style);
83 | }
84 |
85 | #endregion
86 |
87 | public override string ToString()
88 | {
89 | return internalElement.ToString();
90 | }
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/src/DynamoRebar/Revit/Tag.cs:
--------------------------------------------------------------------------------
1 |
2 | // This has been moved to the Dynamo Core in 1.2
3 |
4 | /*
5 | //
6 | // Copyright 2015 Autodesk, Inc.
7 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
8 | //
9 | // Licensed under the Apache License, Version 2.0 (the "License");
10 | // you may not use this file except in compliance with the License.
11 | // You may obtain a copy of the License at
12 | //
13 | // http://www.apache.org/licenses/LICENSE-2.0
14 | //
15 | // Unless required by applicable law or agreed to in writing, software
16 | // distributed under the License is distributed on an "AS IS" BASIS,
17 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 | // See the License for the specific language governing permissions and
19 | // limitations under the License.
20 | //
21 | using System;
22 | using Autodesk.Revit.DB;
23 | using DynamoServices;
24 | using Autodesk.DesignScript.Runtime;
25 | using Revit.GeometryConversion;
26 | using RevitServices.Persistence;
27 | using RevitServices.Transactions;
28 | using System.Collections.Generic;
29 |
30 |
31 | namespace Revit.Elements
32 | {
33 | [DynamoServices.RegisterForTrace]
34 | public class Tag : Element
35 | {
36 | #region Internal Properties
37 |
38 | ///
39 | /// Internal reference to the Revit Element
40 | ///
41 | internal Autodesk.Revit.DB.IndependentTag InternalTag
42 | {
43 | get;
44 | private set;
45 | }
46 |
47 | ///
48 | /// Reference to the Element
49 | ///
50 | public override Autodesk.Revit.DB.Element InternalElement
51 | {
52 | get { return InternalTag; }
53 | }
54 |
55 | #endregion
56 |
57 | #region Private constructors
58 |
59 | ///
60 | /// Create from an existing Revit Element
61 | ///
62 | ///
63 | private Tag(Autodesk.Revit.DB.IndependentTag tag)
64 | {
65 | SafeInit(() => InitTag(tag));
66 | }
67 |
68 |
69 | private Tag(
70 | Autodesk.Revit.DB.View view,
71 | Autodesk.Revit.DB.Element host,
72 | Autodesk.Revit.DB.TagOrientation orientation,
73 | Autodesk.Revit.DB.TagMode mode,
74 | bool addLeader,
75 | Autodesk.Revit.DB.XYZ point)
76 | {
77 | SafeInit(() => InitTag(view, host,orientation,mode,addLeader,point));
78 | }
79 |
80 | #endregion
81 |
82 | #region Helpers for private constructors
83 |
84 | ///
85 | /// Initialize a Rebar element
86 | ///
87 | ///
88 | private void InitTag(Autodesk.Revit.DB.IndependentTag tag)
89 | {
90 | InternalSetTag(tag);
91 | }
92 |
93 |
94 | private void InitTag(
95 | Autodesk.Revit.DB.View view,
96 | Autodesk.Revit.DB.Element host,
97 | Autodesk.Revit.DB.TagOrientation orientation,
98 | Autodesk.Revit.DB.TagMode mode,
99 | bool addLeader,
100 | Autodesk.Revit.DB.XYZ point)
101 | {
102 | Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument;
103 |
104 | TransactionManager.Instance.EnsureInTransaction(document);
105 |
106 | var tagElem = ElementBinder.GetElementFromTrace(document);
107 |
108 |
109 | if (tagElem == null ||
110 | view.Id != tagElem.OwnerViewId ||
111 | (tagElem.TaggedElementId.HostElementId != host.Id && tagElem.TaggedElementId.LinkedElementId != host.Id))
112 |
113 | tagElem = document.Create.NewTag(view, host, addLeader, mode, orientation, point);
114 | else
115 | {
116 | tagElem.TagOrientation = orientation;
117 | tagElem.HasLeader = addLeader;
118 | tagElem.TagHeadPosition = point;
119 | }
120 |
121 | InternalSetTag(tagElem);
122 |
123 | TransactionManager.Instance.TransactionTaskDone();
124 |
125 |
126 | if (tagElem != null)
127 | {
128 | ElementBinder.CleanupAndSetElementForTrace(document, this.InternalElement);
129 | }
130 | else
131 | {
132 | ElementBinder.SetElementForTrace(this.InternalElement);
133 | }
134 |
135 | }
136 |
137 | #endregion
138 |
139 | #region Private mutators
140 |
141 | ///
142 | /// Set the internal Element, ElementId, and UniqueId
143 | ///
144 | ///
145 | private void InternalSetTag(Autodesk.Revit.DB.IndependentTag tag)
146 | {
147 | InternalTag = tag;
148 | InternalElementId = tag.Id;
149 | InternalUniqueId = tag.UniqueId;
150 | }
151 |
152 | #endregion
153 |
154 | #region Public static constructors
155 |
156 | ///
157 | /// Create an element based Tag
158 | ///
159 | /// View to Tag
160 | /// Element to tag
161 | /// Horizontal alignment
162 | /// Add a leader
163 | /// Offset Vector or Tag Location
164 | /// Specifies if the point is being used as an offset vector or if it specifies the tags location
165 | /// Horizontal Alignment
166 | /// Vertical Alignment
167 | ///
168 | public static Tag ByElement(Revit.Elements.Views.View view, Element element, bool horizontal, bool addLeader, Autodesk.DesignScript.Geometry.Point offset = null, bool isOffset = true, string horizontalAlignment = "Center", string verticalAlignment = "Middle")
169 | {
170 | if (offset == null) offset = Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0);
171 |
172 | Autodesk.Revit.DB.HorizontalAlignmentStyle alignHorizontal = Autodesk.Revit.DB.HorizontalAlignmentStyle.Center;
173 | Enum.TryParse(horizontalAlignment, out alignHorizontal);
174 |
175 | Autodesk.Revit.DB.VerticalAlignmentStyle alignVertical = Autodesk.Revit.DB.VerticalAlignmentStyle.Middle;
176 | Enum.TryParse(verticalAlignment, out alignVertical);
177 |
178 | //Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument;
179 | Autodesk.Revit.DB.View revitView = (Autodesk.Revit.DB.View)view.InternalElement;
180 | Autodesk.Revit.DB.XYZ point = offset.ToRevitType(true);
181 | Autodesk.Revit.DB.TagMode tagMode = TagMode.TM_ADDBY_CATEGORY;
182 | Autodesk.Revit.DB.TagOrientation orientation = (horizontal) ? TagOrientation.Horizontal : TagOrientation.Vertical;
183 |
184 | if (revitView.ViewType != ViewType.FloorPlan &&
185 | revitView.ViewType != ViewType.EngineeringPlan &&
186 | revitView.ViewType != ViewType.Detail &&
187 | revitView.ViewType != ViewType.Section &&
188 | revitView.ViewType != ViewType.Elevation &&
189 | revitView.ViewType != ViewType.CeilingPlan)
190 | throw new ArgumentException("Cannot place a Tag on active View");
191 |
192 | if (isOffset)
193 | {
194 | BoundingBoxXYZ box = element.InternalElement.get_BoundingBox(revitView);
195 | if (box == null) box = element.InternalElement.get_BoundingBox(null);
196 | if (box != null)
197 | {
198 | double Y, X = 0;
199 |
200 | switch (alignVertical)
201 | {
202 | case VerticalAlignmentStyle.Bottom: Y = box.Min.Y; break;
203 | case VerticalAlignmentStyle.Top: Y = box.Max.Y; break;
204 | default: Y = box.Min.Y + ((box.Max.Y - box.Min.Y) / 2); break;
205 | }
206 |
207 | switch (alignHorizontal)
208 | {
209 | case HorizontalAlignmentStyle.Left: X = box.Min.X; break;
210 | case HorizontalAlignmentStyle.Right: X = box.Max.X; break;
211 | default: X = box.Min.X + ((box.Max.X - box.Min.X) / 2); break;
212 | }
213 |
214 | point = new XYZ(X + point.X, Y + point.Y, 0 + point.Z);
215 | }
216 | else
217 | {
218 | if (element.InternalElement.Location != null)
219 | {
220 | if (element.InternalElement.Location.GetType() == typeof(LocationCurve))
221 | {
222 | LocationCurve lc = (LocationCurve)element.InternalElement.Location;
223 | XYZ midpoint = lc.Curve.Evaluate(0.5,true);
224 | point = new XYZ(midpoint.X + point.X, midpoint.Y + point.Y, 0 + point.Z);
225 | }
226 | else if (element.InternalElement.Location.GetType() == typeof(LocationPoint))
227 | {
228 | LocationPoint lp = (LocationPoint)element.InternalElement.Location;
229 | point = new XYZ(lp.Point.X + point.X, lp.Point.Y + point.Y, 0 + point.Z);
230 | }
231 | else
232 | throw new ArgumentNullException("Cannot determine location");
233 | }
234 | else
235 | throw new ArgumentNullException("Cannot determine location");
236 | }
237 | }
238 |
239 |
240 |
241 | return new Tag(revitView, element.InternalElement, orientation, tagMode, addLeader, point);
242 | }
243 |
244 | #endregion
245 |
246 | #region Internal static constructors
247 |
248 | ///
249 | /// Create a Rebar from an existing reference
250 | ///
251 | ///
252 | ///
253 | ///
254 | internal static Tag FromExisting(Autodesk.Revit.DB.IndependentTag tag, bool isRevitOwned)
255 | {
256 | return new Tag(tag)
257 | {
258 | // Cannot access base classes internal bool IsRevitOwned
259 | //IsRevitOwned = isRevitOwned
260 | };
261 | }
262 |
263 | #endregion
264 | }
265 |
266 | }
267 | */
--------------------------------------------------------------------------------
/src/DynamoRebar/Revit/VerticalAlignment.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.Text;
21 | using System.Threading.Tasks;
22 |
23 | namespace Revit.Elements
24 | {
25 | public class VerticalAlignment
26 | {
27 | #region private constructors
28 |
29 | private VerticalAlignment(Autodesk.Revit.DB.VerticalAlignmentStyle rebarStyle)
30 | {
31 | internalElement = rebarStyle;
32 | }
33 |
34 | #endregion
35 |
36 | #region private members
37 |
38 | private readonly Autodesk.Revit.DB.VerticalAlignmentStyle internalElement;
39 |
40 | #endregion
41 |
42 | #region public properties
43 |
44 | ///
45 | /// The name of the Category.
46 | ///
47 | public string Name
48 | {
49 | get
50 | {
51 | return internalElement.ToString();
52 | }
53 | }
54 |
55 |
56 | #endregion
57 |
58 | internal Autodesk.Revit.DB.VerticalAlignmentStyle InternalElement
59 | {
60 | get { return internalElement; }
61 | }
62 |
63 | #region public static constructors
64 |
65 | ///
66 | /// Gets a Revit category by the built-in category name.
67 | ///
68 | /// The built in category name.
69 | ///
70 | public static VerticalAlignment ByName(string name)
71 | {
72 | if (name == null)
73 | {
74 | throw new ArgumentNullException("name");
75 | }
76 |
77 | Autodesk.Revit.DB.VerticalAlignmentStyle style = Autodesk.Revit.DB.VerticalAlignmentStyle.Middle;
78 |
79 | if (!Enum.TryParse(name, out style))
80 | throw new Exception("Cannot parse " + name);
81 |
82 | return new VerticalAlignment(style);
83 | }
84 |
85 | #endregion
86 |
87 | public override string ToString()
88 | {
89 | return internalElement.ToString();
90 | }
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/src/DynamoRebar/TrimmedSurface.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.Text;
21 | using Autodesk.DesignScript.Geometry;
22 | using Autodesk.DesignScript.Runtime;
23 | using Revit.GeometryConversion;
24 |
25 | namespace DynamoRebar
26 | {
27 |
28 | ///
29 | /// Represents a trimmed Surface in Dynamo
30 | ///
31 | [IsVisibleInDynamoLibrary(false)]
32 | public class TrimmedSurface
33 | {
34 | ///
35 | /// Internal, untrimmed surface
36 | ///
37 | public Surface internalSurface;
38 |
39 | ///
40 | /// Outline Dictionary
41 | ///
42 | Dictionary curvesByDirections;
43 |
44 | ///
45 | /// Tolerance for outline sorting algorithm
46 | ///
47 | public double tolerance;
48 |
49 | ///
50 | /// Constructor creating a trimmed surface from a surface using an optional tolerance
51 | ///
52 | /// Untrimmed surface
53 | /// Tolerance for outline interpretation, usually 60 deg
54 | [IsVisibleInDynamoLibrary(false)]
55 | public TrimmedSurface(Surface surface, double angleTolerance = 60)
56 | {
57 | this.internalSurface = surface;
58 | this.curvesByDirections = new Dictionary();
59 | this.tolerance = angleTolerance;
60 |
61 | // Walk through all perimeter curves
62 | foreach (Curve curve in internalSurface.PerimeterCurves())
63 | {
64 | // get the curves direction
65 | Vector direction = Vector.ByTwoPoints(curve.StartPoint, curve.EndPoint);
66 |
67 | // If there hasnt been any curve collected add this as the first one
68 | if (curvesByDirections.Count == 0)
69 | curvesByDirections.Add(direction, new TwoCurves(curve));
70 | else
71 | {
72 | // indicator to check if any curve matches its direction
73 | bool matchingOrientation = false;
74 |
75 | // Walk through all collected curves and check if the direction vectors are
76 | // more or less parallel.
77 | foreach (Vector vector in curvesByDirections.Keys.ToList())
78 | {
79 | if (direction.Parallel(vector, tolerance))
80 | {
81 | matchingOrientation = true;
82 |
83 | // If there is a matching direction already in the dictionary,
84 | // Add this curve to the existing curve
85 | TwoCurves existingCurve = curvesByDirections[vector];
86 | existingCurve.AddToMatchingCurve(curve);
87 | }
88 | }
89 |
90 | // If there is no matching direction, this seems to be a new
91 | // Side of the surface
92 | if (!matchingOrientation)
93 | {
94 | curvesByDirections.Add(direction, new TwoCurves(curve));
95 | }
96 | }
97 | }
98 | }
99 |
100 | ///
101 | /// Create an Arc or a Line from the given properties of the surface
102 | ///
103 | /// Parallel boundaries
104 | /// Start point
105 | /// End point
106 | /// parameter for the 3rd point
107 | /// Startpoint of one orthogonal boundary
108 | ///
109 | [IsVisibleInDynamoLibrary(false)]
110 | private Curve CreateCurve(TwoCurves compareTo, Point A, Point B, double parameter, Point refpoint)
111 | {
112 | // Init an empty curve
113 | Curve returnValue = null;
114 |
115 | // If the boundaries to compare this curve to are arcs
116 | // create a middle line between the boundaries
117 | if (compareTo.Curve1.IsArc() || compareTo.Curve2.IsArc())
118 | {
119 | Line line = Line.ByStartPointEndPoint(compareTo.Curve1.PointAtParameter(0.5), compareTo.Curve2.PointAtParameter(0.5));
120 |
121 | // If the reference point is on curve 2 invert the parameter
122 | if (compareTo.Curve1.ClosestPointTo(refpoint).DistanceTo(refpoint) > 0)
123 | parameter = 1 - parameter;
124 |
125 |
126 | try
127 | {
128 | // try to create an arc by three points
129 | returnValue = Arc.ByThreePoints(A, line.PointAtParameter(parameter), B);
130 | }
131 | catch (System.ApplicationException)
132 | {
133 | // On error create a line from A to B
134 | returnValue = Line.ByStartPointEndPoint(A, B);
135 | }
136 | }
137 | else
138 | // If the boundaries are lines, create a line from A to B
139 | returnValue = Line.ByStartPointEndPoint(A, B);
140 |
141 | return returnValue;
142 | }
143 |
144 |
145 | ///
146 | /// Get A Curve across the surface at one parameter
147 | ///
148 | /// parameter
149 | /// change direction
150 | /// curve across the surface
151 | [IsVisibleInDynamoLibrary(false)]
152 | public Curve GetCurveAtParameter(double parameter, bool flip)
153 | {
154 | // get the orthogonal boundries and the parallel to compare to
155 | KeyValuePair data = this.curvesByDirections.First();
156 | TwoCurves compareTo = this.curvesByDirections.Last().Value;
157 |
158 | // if flip, swap the values
159 | if (flip)
160 | {
161 | data = this.curvesByDirections.Last();
162 | compareTo = this.curvesByDirections.First().Value;
163 | }
164 |
165 | // Get the orthogonal boundaries startpoints
166 | Point A = data.Value.Curve1.PointAtParameter(0);
167 | Point B = data.Value.Curve2.PointAtParameter(0);
168 | Line l = Line.ByStartPointEndPoint(A, B);
169 |
170 | // Get the desired startpoint
171 | Point Async = data.Value.Curve1.PointAtParameter(parameter);
172 |
173 | // Assuming the other boundary is upside down (other direction than Curve1)
174 | // Get the desired endpoint using the inverted parameter
175 | // eg. StartParameter = 0.2 therefore the endparameter must be 0.8
176 | // If the curves are pointing in different directions
177 | Point Bsync = data.Value.Curve2.PointAtParameter((1 - parameter));
178 |
179 | // Check if the assumptin was true, otherwise just use the same
180 | // parameter value: StartParam = 0.2 EndParam = 0.2
181 | if (compareTo.AreEndpoints(A, B))
182 | Bsync = data.Value.Curve2.PointAtParameter(parameter);
183 |
184 | // Create the curve for the parameters
185 | return CreateCurve(compareTo, Async, Bsync, parameter, A);
186 | }
187 | }
188 |
189 |
190 | ///
191 | /// Represents a set of two curves which are ment to be on opposite sides of a surface
192 | ///
193 | [IsVisibleInDynamoLibrary(false)]
194 | public class TwoCurves
195 | {
196 | ///
197 | /// Curve 1
198 | ///
199 | public Curve Curve1;
200 |
201 | ///
202 | /// Curve 2
203 | ///
204 | public Curve Curve2;
205 |
206 | ///
207 | /// Undefined curves found
208 | ///
209 | public List Undefined;
210 |
211 | ///
212 | /// Constructor using one curve to start with
213 | ///
214 | ///
215 | [IsVisibleInDynamoLibrary(false)]
216 | public TwoCurves(Curve curve1) { this.Curve1 = curve1; this.Curve2 = null; Undefined = new List(); }
217 |
218 | ///
219 | /// Add a curve to Curve 1 or Curve 2
220 | ///
221 | /// curve to add
222 | [IsVisibleInDynamoLibrary(false)]
223 | public void AddToMatchingCurve(Curve curve)
224 | {
225 | // Prepare a curve list to create a polycurve from
226 | List curvesTojoin = new List();
227 | curvesTojoin.Add(curve);
228 |
229 | // If the curve is connected to Curve 1
230 | if (Curve1.StartPoint.IsAlmostEqualTo(curve.EndPoint) || Curve1.EndPoint.IsAlmostEqualTo(curve.StartPoint))
231 | {
232 | // Add curve1 to the list and create a polycurve
233 | curvesTojoin.Add(Curve1);
234 | Curve newCurve = PolyCurve.ByJoinedCurves(curvesTojoin);
235 | this.Curve1 = newCurve;
236 | }
237 | // If the curve is connected to curve 2
238 | else if (Curve2 != null && (Curve2.StartPoint.IsAlmostEqualTo(curve.EndPoint) || Curve2.EndPoint.IsAlmostEqualTo(curve.StartPoint)))
239 | {
240 | // Add curve 2 to the list and create a polycurve from them
241 | curvesTojoin.Add(Curve2);
242 | Curve newCurve = PolyCurve.ByJoinedCurves(curvesTojoin);
243 | this.Curve2 = newCurve;
244 | }
245 | else
246 | {
247 | // If the curve doesnt connect and curve 2 hasnt been defined yet
248 | // take is as curve 2 otherwise add the unconnectable curve to the undefined list and throw an error
249 | if (this.Curve2 == null)
250 | this.Curve2 = curve;
251 | else
252 | {
253 | Undefined.Add(curve);
254 | throw new ArgumentNullException("Cannot parametrize surface, try increasing the tolerance.");
255 | }
256 | }
257 | }
258 |
259 | ///
260 | /// Check if A and B are Endpoints of one of the curves
261 | ///
262 | /// Point A
263 | /// Point B
264 | /// Align parallel
265 | [IsVisibleInDynamoLibrary(false)]
266 | public bool AreEndpoints(Point A, Point B)
267 | {
268 | return
269 | (
270 | (A.IsAlmostEqualTo(Curve1.StartPoint) || A.IsAlmostEqualTo(Curve1.EndPoint))
271 | &&
272 | (B.IsAlmostEqualTo(Curve1.StartPoint) || B.IsAlmostEqualTo(Curve1.EndPoint))
273 | ) || (
274 | (A.IsAlmostEqualTo(Curve2.StartPoint) || A.IsAlmostEqualTo(Curve2.EndPoint))
275 | &&
276 | (B.IsAlmostEqualTo(Curve2.StartPoint) || B.IsAlmostEqualTo(Curve2.EndPoint))
277 | );
278 |
279 | }
280 | }
281 | }
--------------------------------------------------------------------------------
/src/DynamoRebarTest/Class1.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using NUnit.Framework;
6 | using RevitTestServices;
7 | using RTF.Framework;
8 |
9 | namespace DynamoRebarTest
10 | {
11 |
12 | [TestFixture]
13 | public class DynamoForRebar_SystemTesting : RevitSystemTestBase
14 | {
15 | [SetUp]
16 | public void Setup()
17 | {
18 | // Set the working directory. This will allow you to use the OpenAndRunDynamoDefinition method,
19 | // specifying a relative path to the .dyn file you want to test.
20 |
21 | var asmDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
22 | workingDirectory = System.IO.Path.GetFullPath(System.IO.Path.Combine(asmDirectory,@"..\..\..\TestFiles"));
23 |
24 | }
25 |
26 |
27 | [Test, TestModel(@"RevitProject.rvt")]
28 | public void Tag()
29 | {
30 | //open and run the example file
31 | OpenAndRunDynamoDefinition(workingDirectory + @"DynamoDefinitions\Tag.dyn");
32 |
33 | //check for errors and assert accordingly
34 | string errString = CompileErrorsIntoString();
35 |
36 | if (string.IsNullOrEmpty(errString))
37 | Assert.Pass();
38 | else
39 | Assert.Fail(errString);
40 |
41 | }
42 |
43 | [Test, TestModel(@"RevitProject.rvt")]
44 | public void Morphed()
45 | {
46 | //open and run the example file
47 | OpenAndRunDynamoDefinition(@"DynamoDefinitions\Morphed.dyn");
48 |
49 | //check for errors and assert accordingly
50 | string errString = CompileErrorsIntoString();
51 |
52 | if (string.IsNullOrEmpty(errString))
53 | Assert.Pass();
54 | else
55 | Assert.Fail(errString);
56 |
57 | }
58 |
59 | [Test, TestModel(@"RevitProject.rvt")]
60 | public void CreateContainer()
61 | {
62 | //open and run the example file
63 | OpenAndRunDynamoDefinition(@"DynamoDefinitions\CreateContainer.dyn");
64 |
65 | //check for errors and assert accordingly
66 | string errString = CompileErrorsIntoString();
67 |
68 | if (string.IsNullOrEmpty(errString))
69 | Assert.Pass();
70 | else
71 | Assert.Fail(errString);
72 |
73 | }
74 |
75 | [Test, TestModel(@"RevitProject.rvt")]
76 | public void Cut()
77 | {
78 | //open and run the example file
79 | OpenAndRunDynamoDefinition(@"DynamoDefinitions\Cut.dyn");
80 |
81 | //check for errors and assert accordingly
82 | string errString = CompileErrorsIntoString();
83 |
84 | if (string.IsNullOrEmpty(errString))
85 | Assert.Pass();
86 | else
87 | Assert.Fail(errString);
88 |
89 | }
90 |
91 | [Test, TestModel(@"RevitProject.rvt")]
92 | public void FollowingSurface()
93 | {
94 | //open and run the example file
95 | OpenAndRunDynamoDefinition(@"DynamoDefinitions\FollowingSurface.dyn");
96 |
97 | //check for errors and assert accordingly
98 | string errString = CompileErrorsIntoString();
99 |
100 | if (string.IsNullOrEmpty(errString))
101 | Assert.Pass();
102 | else
103 | Assert.Fail(errString);
104 |
105 | }
106 |
107 | [Test, TestModel(@"RevitProject.rvt")]
108 | public void Perpendicular()
109 | {
110 | //open and run the example file
111 | OpenAndRunDynamoDefinition(@"DynamoDefinitions\Perpendicular.dyn");
112 |
113 | //check for errors and assert accordingly
114 | string errString = CompileErrorsIntoString();
115 |
116 | if (string.IsNullOrEmpty(errString))
117 | Assert.Pass();
118 | else
119 | Assert.Fail(errString);
120 |
121 | }
122 |
123 | [Test, TestModel(@"RevitProject.rvt")]
124 | public void Shorten()
125 | {
126 | //open and run the example file
127 | OpenAndRunDynamoDefinition(@"DynamoDefinitions\Shorten.dyn");
128 |
129 | //check for errors and assert accordingly
130 | string errString = CompileErrorsIntoString();
131 |
132 | if (string.IsNullOrEmpty(errString))
133 | Assert.Pass();
134 | else
135 | Assert.Fail(errString);
136 |
137 | }
138 |
139 |
140 |
141 | ///
142 | /// A utility function to loop over a sample file and list any nodes in error or warning state.
143 | ///
144 | ///
145 | private string CompileErrorsIntoString()
146 | {
147 | //a string to return
148 | string errors = null;
149 |
150 | //loop over the active collection of nodes.
151 | foreach (var i in AllNodes)
152 | {
153 | if (IsNodeInErrorOrWarningState(i.GUID.ToString()))
154 | {
155 | errors += "The node called '" + i.NickName + "' failed or threw a warning." + System.Environment.NewLine;
156 | }
157 | }
158 |
159 | //return the errors string
160 | return errors;
161 | }
162 |
163 | }
164 |
165 |
166 | }
167 |
--------------------------------------------------------------------------------
/src/DynamoRebarTest/DynamoRebarTest.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Debug
9 | AnyCPU
10 | {0A983B75-FE12-4E25-AE43-38C0FE03842D}
11 | Library
12 | Properties
13 | DynamoRebarTest
14 | DynamoRebarTest
15 | v4.5.2
16 | 512
17 |
18 |
19 |
20 | true
21 | full
22 | false
23 | bin\Debug\
24 | DEBUG;TRACE
25 | prompt
26 | 4
27 | false
28 |
29 |
30 | pdbonly
31 | true
32 | bin\Release\
33 | TRACE
34 | prompt
35 | 4
36 | false
37 |
38 |
39 |
40 | $(DYNAMO_API)\DynamoCore.dll
41 | True
42 |
43 |
44 | $(DYNAMO_API)\nunit.framework.dll
45 | True
46 |
47 |
48 | $(DYNAMO_API)\$(REVIT_VERSION)\RevitTestFrameworkTypes.dll
49 | True
50 |
51 |
52 | $(DYNAMO_API)\$(REVIT_VERSION)\RevitTestServices.dll
53 | True
54 |
55 |
56 |
57 |
58 |
59 |
60 | False
61 |
62 |
63 |
64 |
65 | $(DYNAMO_API)\SystemTestServices.dll
66 | True
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
81 |
--------------------------------------------------------------------------------
/src/DynamoRebarTest/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("DynamoRebarTest")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Autodesk, Inc.")]
12 | [assembly: AssemblyProduct("Dynamo Rebar")]
13 | [assembly: AssemblyCopyright("Copyright © Autodesk, Inc. 2015")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("394ccf49-9d42-4bca-a823-900e557d5732")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("0.1.0.1")]
36 | [assembly: AssemblyFileVersion("0.1.0.1")]
37 |
--------------------------------------------------------------------------------
/src/DynamoRebarUI/DynamoRebarUI.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Debug
9 | AnyCPU
10 | {272F3BD5-23D2-41BE-81C9-31BB3047DBBD}
11 | Library
12 | Properties
13 | DynamoRebarUI
14 | DynamoRebarUI
15 | v4.7.2
16 | 512
17 |
18 |
19 |
20 | true
21 | full
22 | false
23 | ..\..\bin\AnyCPU\Debug\
24 | DEBUG;TRACE
25 | prompt
26 | 4
27 | ..\..\bin\AnyCPU\Debug\DynamoRebarUI.xml
28 | false
29 |
30 |
31 | pdbonly
32 | true
33 | bin\Release\
34 | TRACE
35 | prompt
36 | 4
37 | false
38 |
39 |
40 |
41 | $(DYNAMO_API)\nodes\CoreNodeModels.dll
42 | False
43 |
44 |
45 | ..\..\..\..\..\..\..\Program Files\Dynamo\Dynamo Revit\2\Revit_2018\nodes\DSRevitNodesUI.dll
46 | False
47 |
48 |
49 | False
50 | $(DYNAMO_API)\DynamoCore.dll
51 | False
52 |
53 |
54 | False
55 | $(DYNAMO_API)\DynamoCoreWpf.dll
56 | False
57 |
58 |
59 | False
60 | $(DYNAMO_API)\DynamoServices.dll
61 | False
62 |
63 |
64 | False
65 | $(DYNAMO_API)\DynamoUtilities.dll
66 | False
67 |
68 |
69 | ..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll
70 |
71 |
72 | False
73 | $(DYNAMO_API)\ProtoCore.dll
74 | False
75 |
76 |
77 | False
78 | $(DYNAMO_API)\ProtoGeometry.dll
79 | False
80 |
81 |
82 | False
83 | $(REVIT_API)\RebarDBAPI.dll
84 | False
85 |
86 |
87 | False
88 | $(REVIT_API)\RevitAPI.dll
89 | False
90 |
91 |
92 | False
93 | $(REVIT_API)\RevitAPIUI.dll
94 | False
95 |
96 |
97 | False
98 | ..\..\..\..\..\..\..\Program Files\Dynamo\Dynamo Revit\2\Revit_2018\RevitNodes.dll
99 | False
100 |
101 |
102 | False
103 | ..\..\..\..\..\..\..\Program Files\Dynamo\Dynamo Revit\2\Revit_2018\RevitServices.dll
104 | False
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 | {09e303fe-0a2f-49b0-878f-870c90c8f40b}
124 | DynamoRebar
125 | False
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
--------------------------------------------------------------------------------
/src/DynamoRebarUI/DynamoRebarUIImages.resources:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/DynamoRebarUI/DynamoRebarUIImages.resources
--------------------------------------------------------------------------------
/src/DynamoRebarUI/GenericClasses.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.Text;
21 | using Autodesk.DesignScript.Geometry;
22 | using Autodesk.DesignScript.Runtime;
23 | using DSRevitNodesUI;
24 | using RVT = Autodesk.Revit.DB;
25 | using RevitServices.Persistence;
26 | using RevitServices.Transactions;
27 |
28 | using Dynamo.Utilities;
29 | using Dynamo.Models;
30 | using ProtoCore.AST.AssociativeAST;
31 | using Newtonsoft.Json;
32 |
33 | namespace DynamoRebarUI
34 | {
35 |
36 |
37 | public abstract class CustomRevitElementDropDown : RevitDropDownBase
38 | {
39 | ///
40 | /// Generic Revit Element Class Dropdown Node
41 | ///
42 | /// Name of the Node
43 | /// Type of Revit Element to display
44 | public CustomRevitElementDropDown(string name, Type elementType) : base(name)
45 | {
46 | this.ElementType = elementType;
47 | PopulateItems();
48 | }
49 |
50 | [JsonConstructor]
51 | public CustomRevitElementDropDown(string name, Type elementType, IEnumerable inPorts, IEnumerable outPorts)
52 | : base(name, inPorts, outPorts)
53 | {
54 | this.ElementType = elementType;
55 | PopulateItems();
56 | }
57 |
58 | ///
59 | /// Constant message for missing Types
60 | ///
61 | private const string noTypes = "No Types available.";
62 |
63 | ///
64 | /// Type of Element
65 | ///
66 | public Type ElementType;
67 |
68 | protected override CoreNodeModels.DSDropDownBase.SelectionState PopulateItemsCore(string currentSelection)
69 | {
70 | PopulateItems();
71 | return SelectionState.Done;
72 | }
73 |
74 | ///
75 | /// Populate the Dropdown menu
76 | ///
77 | public void PopulateItems()
78 | {
79 | if (this.ElementType != null)
80 | {
81 | // Clear the Items
82 | Items.Clear();
83 |
84 | // Set up a new element collector using the Type field
85 | var fec = new RVT.FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument).OfClass(ElementType);
86 |
87 | // If there is nothing in the collector add the missing Type message to the Dropdown menu.
88 | if (fec.ToElements().Count == 0)
89 | {
90 | Items.Add(new CoreNodeModels.DynamoDropDownItem(noTypes, null));
91 | SelectedIndex = 0;
92 | return;
93 | }
94 |
95 | if (this.ElementType.FullName == "Autodesk.Revit.DB.Structure.RebarHookType") Items.Add(new CoreNodeModels.DynamoDropDownItem("None", null));
96 |
97 | // Walk through all elements in the collector and add them to the dropdown
98 | foreach (var ft in fec.ToElements())
99 | {
100 | Items.Add(new CoreNodeModels.DynamoDropDownItem(ft.Name, ft));
101 | }
102 |
103 | Items = Items.OrderBy(x => x.Name).ToObservableCollection();
104 | }
105 | }
106 |
107 | ///
108 | /// Cast the selected element to a dynamo node
109 | ///
110 | public override IEnumerable BuildOutputAst(List inputAstNodes)
111 | {
112 | // If there are no elements in the dropdown or the selected Index is invalid return a Null node.
113 | if (Items.Count == 0 ||
114 | Items[0].Name == noTypes ||
115 | SelectedIndex == -1 || Items[SelectedIndex].Name == "None")
116 | {
117 | return new[] { AstFactory.BuildAssignment(GetAstIdentifierForOutputIndex(0), AstFactory.BuildNullNode()) };
118 | }
119 |
120 | // Assume we are going to cast a Revit Element
121 | Type genericElementType = typeof(Autodesk.Revit.DB.Element);
122 |
123 | // Cast the selected object to a Revit Element and get its Id
124 | Autodesk.Revit.DB.ElementId Id = ((Autodesk.Revit.DB.Element)Items[SelectedIndex].Item).Id;
125 |
126 | // Select the element using the elementIds Integer Value
127 | var node = AstFactory.BuildFunctionCall("Revit.Elements.ElementSelector", "ByElementId",
128 | new List { AstFactory.BuildIntNode(Id.IntegerValue) });
129 |
130 | // Return the selected element
131 | return new[] { AstFactory.BuildAssignment(GetAstIdentifierForOutputIndex(0), node) };
132 | }
133 | }
134 |
135 |
136 | public abstract class CustomGenericEnumerationDropDown : RevitDropDownBase
137 | {
138 | ///
139 | /// Generic Enumeration Dropdown
140 | ///
141 | /// Node Name
142 | /// Type of Enumeration to Display
143 | public CustomGenericEnumerationDropDown(string name, Type enumerationType) : base(name)
144 | {
145 | this.EnumerationType = enumerationType;
146 | PopulateItems();
147 | }
148 |
149 | [JsonConstructor]
150 | public CustomGenericEnumerationDropDown(string name, Type enumerationType, IEnumerable inPorts, IEnumerable outPorts)
151 | : base(name, inPorts, outPorts)
152 | {
153 | this.EnumerationType = enumerationType;
154 | PopulateItems();
155 | }
156 |
157 | ///
158 | /// Type of Enumeration
159 | ///
160 | public Type EnumerationType;
161 |
162 | protected override CoreNodeModels.DSDropDownBase.SelectionState PopulateItemsCore(string currentSelection)
163 | {
164 | PopulateItems();
165 | return SelectionState.Done;
166 | }
167 |
168 | ///
169 | /// Populate Items in Dropdown menu
170 | ///
171 | public void PopulateItems()
172 | {
173 | if (this.EnumerationType != null)
174 | {
175 | // Clear the dropdown list
176 | Items.Clear();
177 |
178 | // Get all enumeration names and add them to the dropdown menu
179 | foreach (string name in Enum.GetNames(EnumerationType))
180 | {
181 | Items.Add(new CoreNodeModels.DynamoDropDownItem(name, Enum.Parse(EnumerationType, name)));
182 | }
183 |
184 | Items = Items.OrderBy(x => x.Name).ToObservableCollection();
185 | }
186 | }
187 |
188 | ///
189 | /// Assign the selected Enumeration value to the output
190 | ///
191 | public override IEnumerable BuildOutputAst(List inputAstNodes)
192 | {
193 | // If there the dropdown is still empty try to populate it again
194 | if (Items.Count == 0 || Items.Count == -1)
195 | {
196 | PopulateItems();
197 | }
198 |
199 | // get the selected items name
200 | var stringNode = AstFactory.BuildStringNode((string)Items[SelectedIndex].Name);
201 |
202 | // assign the selected name to an actual enumeration value
203 | var assign = AstFactory.BuildAssignment(GetAstIdentifierForOutputIndex(0), stringNode);
204 |
205 | // return the enumeration value
206 | return new List { assign };
207 | }
208 | }
209 | }
210 |
--------------------------------------------------------------------------------
/src/DynamoRebarUI/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System.Reflection;
18 | using System.Runtime.CompilerServices;
19 | using System.Runtime.InteropServices;
20 | using System.Resources;
21 |
22 | // General Information about an assembly is controlled through the following
23 | // set of attributes. Change these attribute values to modify the information
24 | // associated with an assembly.
25 | [assembly: AssemblyTitle("Dynamo Rebar UI")]
26 | [assembly: AssemblyDescription("Dynamo Rebar UI Elements")]
27 | [assembly: AssemblyConfiguration("")]
28 | [assembly: AssemblyCompany("Autodesk, Inc.")]
29 | [assembly: AssemblyProduct("Dynamo Rebar")]
30 | [assembly: AssemblyCopyright("Copyright © Autodesk, Inc. 2015")]
31 | [assembly: AssemblyTrademark("")]
32 | [assembly: AssemblyCulture("")]
33 |
34 | // Setting ComVisible to false makes the types in this assembly not visible
35 | // to COM components. If you need to access a type in this assembly from
36 | // COM, set the ComVisible attribute to true on that type.
37 | [assembly: ComVisible(false)]
38 |
39 | // The following GUID is for the ID of the typelib if this project is exposed to COM
40 | [assembly: Guid("937486ff-a3fe-4c68-9cbb-efe4b2fb7951")]
41 |
42 | // Version information for an assembly consists of the following four values:
43 | //
44 | // Major Version
45 | // Minor Version
46 | // Build Number
47 | // Revision
48 | //
49 | // You can specify all the values or you can default the Build and Revision Numbers
50 | // by using the '*' as shown below:
51 | // [assembly: AssemblyVersion("1.0.*")]
52 | [assembly: AssemblyVersion("0.3.0.0")]
53 | [assembly: AssemblyFileVersion("0.3.0.0")]
54 | [assembly: NeutralResourcesLanguageAttribute("en")]
55 |
--------------------------------------------------------------------------------
/src/DynamoRebarUI/RevitTypes.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2015 Autodesk, Inc.
3 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
4 | //
5 | // Licensed under the Apache License, Version 2.0 (the "License");
6 | // you may not use this file except in compliance with the License.
7 | // You may obtain a copy of the License at
8 | //
9 | // http://www.apache.org/licenses/LICENSE-2.0
10 | //
11 | // Unless required by applicable law or agreed to in writing, software
12 | // distributed under the License is distributed on an "AS IS" BASIS,
13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | // See the License for the specific language governing permissions and
15 | // limitations under the License.
16 | //
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.Text;
21 | using Autodesk.DesignScript.Geometry;
22 | using Autodesk.DesignScript.Runtime;
23 |
24 | using RVT = Autodesk.Revit.DB;
25 | using RevitServices.Persistence;
26 | using RevitServices.Transactions;
27 |
28 | using Dynamo.Utilities;
29 | using Dynamo.Models;
30 | using Dynamo.Nodes;
31 | using ProtoCore.AST.AssociativeAST;
32 | using Newtonsoft.Json;
33 | using Dynamo.Graph.Nodes;
34 |
35 | namespace DynamoRebarUI
36 | {
37 |
38 | [NodeName("Rebar Hook Type")]
39 | [NodeCategory("Revit.Rebar")]
40 | [NodeDescription("Select Rebar Hook Type")]
41 | [IsDesignScriptCompatible]
42 | public class RevitRebarHookType : CustomRevitElementDropDown
43 | {
44 | public RevitRebarHookType() : base("Rebar Hook Type", typeof(Autodesk.Revit.DB.Structure.RebarHookType)) { }
45 |
46 | [JsonConstructor]
47 | public RevitRebarHookType(IEnumerable inPorts, IEnumerable outPorts)
48 | : base("Rebar Hook Type", typeof(Autodesk.Revit.DB.Structure.RebarHookType), inPorts, outPorts) { }
49 | }
50 |
51 | [NodeName("Rebar Bar Type")]
52 | [NodeCategory("Revit.Rebar")]
53 | [NodeDescription("Select Rebar Bar Type")]
54 | [IsDesignScriptCompatible]
55 | public class RebarBarType : CustomRevitElementDropDown
56 | {
57 | public RebarBarType() : base("Rebar Bar Type", typeof(Autodesk.Revit.DB.Structure.RebarBarType)) { }
58 |
59 | [JsonConstructor]
60 | public RebarBarType(IEnumerable inPorts, IEnumerable outPorts) : base("Rebar Bar Type", typeof(Autodesk.Revit.DB.Structure.RebarBarType), inPorts, outPorts) { }
61 | }
62 |
63 |
64 | [NodeName("Rebar Hook Orientation")]
65 | [NodeCategory("Revit.Rebar")]
66 | [NodeDescription("Select Rebar Hook Orientation")]
67 | [IsDesignScriptCompatible]
68 | public class RebarHookOrientation : CustomGenericEnumerationDropDown
69 | {
70 | public RebarHookOrientation() : base("Rebar Hook Orientation", typeof(Autodesk.Revit.DB.Structure.RebarHookOrientation)) { }
71 |
72 | [JsonConstructor]
73 | public RebarHookOrientation(IEnumerable inPorts, IEnumerable outPorts) : base("Rebar Hook Orientation", typeof(Autodesk.Revit.DB.Structure.RebarHookOrientation), inPorts, outPorts) { }
74 | }
75 |
76 |
77 | [NodeName("Rebar Style")]
78 | [NodeCategory("Revit.Rebar")]
79 | [NodeDescription("Select Rebar Style")]
80 | [IsDesignScriptCompatible]
81 | public class RebarStyle : CustomGenericEnumerationDropDown
82 | {
83 | public RebarStyle() : base("Rebar Style", typeof(Autodesk.Revit.DB.Structure.RebarStyle)) { }
84 |
85 | [JsonConstructor]
86 | public RebarStyle(IEnumerable inPorts, IEnumerable outPorts) : base("Rebar Style", typeof(Autodesk.Revit.DB.Structure.RebarStyle), inPorts, outPorts) { }
87 | }
88 |
89 |
90 | [NodeName("Horizontal Text Alignment Style")]
91 | [NodeCategory("Revit.Rebar")]
92 | [NodeDescription("Horizontal Text Alignment Style")]
93 | [IsDesignScriptCompatible]
94 | public class HorizontalAlignment : CustomGenericEnumerationDropDown
95 | {
96 | public HorizontalAlignment() : base("Horizontal Alignment", typeof(Autodesk.Revit.DB.HorizontalAlignmentStyle)) { }
97 |
98 | [JsonConstructor]
99 | public HorizontalAlignment(IEnumerable inPorts, IEnumerable outPorts) : base("Horizontal Alignment", typeof(Autodesk.Revit.DB.HorizontalAlignmentStyle), inPorts, outPorts) { }
100 | }
101 |
102 | [NodeName("Vertical Text Alignment Style")]
103 | [NodeCategory("Revit.Rebar")]
104 | [NodeDescription("Vertical Text Alignment Style")]
105 | [IsDesignScriptCompatible]
106 | public class VerticalAlignment : CustomGenericEnumerationDropDown
107 | {
108 | public VerticalAlignment() : base("Vertical Alignment", typeof(Autodesk.Revit.DB.VerticalAlignmentStyle)) { }
109 |
110 | [JsonConstructor]
111 | public VerticalAlignment(IEnumerable inPorts, IEnumerable outPorts) : base("Vertical Alignment", typeof(Autodesk.Revit.DB.VerticalAlignmentStyle), inPorts, outPorts) { }
112 | }
113 |
114 |
115 | }
--------------------------------------------------------------------------------
/src/DynamoRebarUI/SelectEdges.cs:
--------------------------------------------------------------------------------
1 |
2 | // Has been moved to Dynamo Core in 1.2
3 |
4 | /*
5 | //
6 | // Copyright 2015 Autodesk, Inc.
7 | // Author: Thornton Tomasetti Ltd, CORE Studio (Maximilian Thumfart)
8 | //
9 | // Licensed under the Apache License, Version 2.0 (the "License");
10 | // you may not use this file except in compliance with the License.
11 | // You may obtain a copy of the License at
12 | //
13 | // http://www.apache.org/licenses/LICENSE-2.0
14 | //
15 | // Unless required by applicable law or agreed to in writing, software
16 | // distributed under the License is distributed on an "AS IS" BASIS,
17 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 | // See the License for the specific language governing permissions and
19 | // limitations under the License.
20 | //
21 |
22 | using System;
23 | using System.Collections.Generic;
24 | using System.ComponentModel;
25 | using System.Linq;
26 |
27 | using Autodesk.DesignScript.Runtime;
28 | using Autodesk.Revit.DB;
29 | using Dynamo.Controls;
30 | using Dynamo.Interfaces;
31 | using Dynamo.Nodes;
32 | using Dynamo.Models;
33 | using CoreNodeModels.Properties;
34 | using Dynamo.Graph.Nodes;
35 |
36 | namespace Revit.Elements
37 | {
38 | ///
39 | /// Select edges
40 | ///
41 | [NodeName("Select Edges")]
42 | [NodeCategory("Revit.Rebar")]
43 | [NodeDescription("Select Edges")]
44 | [IsDesignScriptCompatible]
45 | public class Edges : Dynamo.Nodes.ReferenceSelection
46 | {
47 | ///
48 | /// Select Edges
49 | ///
50 | public Edges() : base(CoreNodeModels.SelectionType.Many, CoreNodeModels.SelectionObjectType.Edge, "Select edges.", "Edges") { }
51 | }
52 | }
53 | */
--------------------------------------------------------------------------------
/src/DynamoRebarUI/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/DynamoRebarUI/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Cut.Large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Cut.Large.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Cut.Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Cut.Small.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Following.Large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Following.Large.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Following.Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Following.Small.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Morphed.Large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Morphed.Large.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Morphed.Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Morphed.Small.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Perpendicular.Large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Perpendicular.Large.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Perpendicular.Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Perpendicular.Small.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Shorten.Large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Shorten.Large.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Shorten.Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Rebar.Shorten.Small.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.Rebar.Large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.Rebar.Large.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.Rebar.Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.Rebar.Small.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.RebarContainer.AppendBar.Large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.RebarContainer.AppendBar.Large.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.RebarContainer.AppendBar.Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.RebarContainer.AppendBar.Small.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.RebarContainer.ByCurves.Large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.RebarContainer.ByCurves.Large.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.RebarContainer.ByCurves.Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.RebarContainer.ByCurves.Small.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.Tag.ByElement.Large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.Tag.ByElement.Large.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.Tag.ByElement.Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebar.Revit.Elements.Tag.ByElement.Small.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebarUI.RebarStyle.Large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebarUI.RebarStyle.Large.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/DynamoRebarUI.RebarStyle.Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/DynamoRebarUI.RebarStyle.Small.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/Icons.ai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/Icons.ai
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/Revit.Elements.Select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/Revit.Elements.Select.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/examples/2015-08-26_17h31_23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/examples/2015-08-26_17h31_23.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/examples/2015-08-26_17h32_51.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/examples/2015-08-26_17h32_51.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/examples/2015-08-26_17h40_39.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/examples/2015-08-26_17h40_39.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/examples/2015-08-26_17h40_47.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/examples/2015-08-26_17h40_47.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/examples/2015-09-02_09h10_39.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/examples/2015-09-02_09h10_39.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/examples/2015-09-02_09h10_58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/examples/2015-09-02_09h10_58.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/examples/Capture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/examples/Capture.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/examples/Capture1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/examples/Capture1.png
--------------------------------------------------------------------------------
/src/Resources/DynamoRebar.Images/icons-10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tt-acm/DynamoForRebar/48d2b9d40dfa00aa79f470799de58047396bf0ef/src/Resources/DynamoRebar.Images/icons-10.png
--------------------------------------------------------------------------------
/src/config/CS.props:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 10.0
5 | $(SolutionDir)..\bin\$(Platform)\$(Configuration)
6 | $(SolutionDir)..\extern\NUnit
7 | C:\Program Files\Autodesk\Revit 2019
8 | C:\Program Files\Dynamo\Dynamo Core\2
9 | C:\Program Files\Dynamo\Dynamo Revit\2
10 | Revit_2019
11 | $(OutputPath)\int\
12 | true
13 | full
14 | false
15 | DEBUG;TRACE
16 | prompt
17 | 4
18 |
19 |
20 | 10.0
21 | $(SolutionDir)..\bin\$(Platform)\$(Configuration)
22 | $(SolutionDir)..\extern\NUnit
23 | C:\Program Files\Autodesk\Revit 2019
24 | C:\Program Files\Dynamo\Dynamo Core\2
25 | C:\Program Files\Dynamo\Dynamo Revit\2
26 | Revit_2019
27 | $(OutputPath)\int\
28 | pdbonly
29 | true
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
--------------------------------------------------------------------------------