├── .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 | --------------------------------------------------------------------------------