diff --git a/OpenMEP/Element/Fitting.cs b/OpenMEP/Element/Fitting.cs index 2e13f91e..6df82b1a 100644 --- a/OpenMEP/Element/Fitting.cs +++ b/OpenMEP/Element/Fitting.cs @@ -116,8 +116,8 @@ private Fitting() /// If creation was successful then an family instance to the new object is returned, and the transition fitting will be added at the connectors' end if necessary, otherwise an exception with failure information will be thrown [NodeCategory("Create")] public static global::Revit.Elements.Element? NewTeeFitting(Autodesk.Revit.DB.Connector connector1, - Autodesk.Revit.DB.Connector connector2, - Autodesk.Revit.DB.Connector connector3) + Connector? connector2, + Connector? connector3) { Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; TransactionManager.Instance.EnsureInTransaction(doc); diff --git a/OpenMEP/Element/MEPCurve.cs b/OpenMEP/Element/MEPCurve.cs index 03135b07..c501e519 100644 --- a/OpenMEP/Element/MEPCurve.cs +++ b/OpenMEP/Element/MEPCurve.cs @@ -8,6 +8,7 @@ using GShark.Geometry; using OpenMEP.Helpers; using Revit.GeometryConversion; +using RevitServices.Persistence; using RevitServices.Transactions; using Curve = Autodesk.DesignScript.Geometry.Curve; using Line = Autodesk.Revit.DB.Line; @@ -229,8 +230,71 @@ private static void AdjustMepCurve(Autodesk.Revit.DB.Element mepCurve, XYZ p1, X return newTeeFitting.ToDynamoType(); } - - + /// + /// Create a new tee fitting 90 degrees by two mep curve + /// + /// the first element mep curve + /// the second element mep curve + /// the element family instance + /// + /// ![](../OpenMEPPage/element/dyn/pic/MEPCurve.NewTeeFitting2.png) + /// + public static Revit.Elements.Element? NewTeeFitting(Revit.Elements.Element MepCurve1, + Revit.Elements.Element MepCurve2) + { + if(MepCurve1==null) throw new ArgumentNullException(nameof(MepCurve1)); + if(MepCurve2==null) throw new ArgumentNullException(nameof(MepCurve2)); + //review is perpendicular + Autodesk.Revit.DB.Element e1 = MepCurve1.InternalElement; + LocationCurve? lc1 = e1.Location as LocationCurve; + Autodesk.Revit.DB.Curve curve1 = lc1!.Curve; + Autodesk.Revit.DB.Element e2 = MepCurve2.InternalElement; + LocationCurve? lc2 = e2.Location as LocationCurve; + Autodesk.Revit.DB.Curve curve2 = lc2!.Curve; + Autodesk.Revit.DB.XYZ vector = curve1.GetEndPoint(1) - curve1.GetEndPoint(0); + Autodesk.Revit.DB.XYZ vector2 = curve2.GetEndPoint(1) - curve2.GetEndPoint(0); + bool flag = vector.Normalize().DotProduct(vector2.Normalize()).Equals(0); + if (flag) throw new Exception("The two curves are not perpendicular"); + // review main pipe branch + XYZ firstPoint = curve1.GetEndPoint(0); + XYZ secondPoint = curve2.GetEndPoint(0); + Autodesk.DesignScript.Geometry.Line? protoType = curve2.ToProtoType(false) as Autodesk.DesignScript.Geometry.Line; + Autodesk.DesignScript.Geometry.Point pointProjected = Point.ProjectOnToLine(firstPoint.ToPoint(false),protoType + ); + Revit.Elements.Element? mainMEPCurve = null; + Revit.Elements.Element? branchMEPCurve = null; + bool isOnLine = Point.IsOnLine(pointProjected,protoType); + if (isOnLine) + { + mainMEPCurve = MepCurve2; + branchMEPCurve = MepCurve1; + } + else + { + mainMEPCurve = MepCurve1; + branchMEPCurve = MepCurve2; + protoType = curve1.ToProtoType(false) as Autodesk.DesignScript.Geometry.Line; + pointProjected = Point.ProjectOnToLine(secondPoint.ToPoint(false),protoType); + isOnLine = Point.IsOnLine(pointProjected,protoType); + if(!isOnLine) throw new Exception("The two curves are can't create a tee fitting"); + } + // create tee + TransactionManager.Instance.ForceCloseTransaction(); + Autodesk.Revit.DB.Document doc = DocumentManager.Instance.CurrentDBDocument; + TransactionManager.Instance.EnsureInTransaction(doc); + protoType = mainMEPCurve.GetLocation() as Autodesk.DesignScript.Geometry.Line; + Autodesk.DesignScript.Geometry.Line? line = branchMEPCurve.GetLocation() as Autodesk.DesignScript.Geometry.Line; + pointProjected = Point.ProjectOnToLine(line.StartPoint,protoType); + Revit.Elements.Element? newMepCurve = MEPCurve.BreakCurve(mainMEPCurve,pointProjected); + TransactionManager.Instance.TransactionTaskDone(); + Connector? c1 = ConnectorManager.Connector.GetConnectorClosest(newMepCurve,mainMEPCurve); + Connector? c2 = ConnectorManager.Connector.GetConnectorClosest(mainMEPCurve,branchMEPCurve); + List connectors = ConnectorManager.Connector.GetConnectors(branchMEPCurve); + Connector? c3 = ConnectorManager.Connector.GetConnectorClosest(c1.Origin.ToPoint(), connectors); + Revit.Elements.Element? teeFitting = Fitting.NewTeeFitting(c1, c2, c3); + return teeFitting; + } + /// /// Add a new family instance of an transition fitting into the Autodesk Revit document, /// using two connectors. diff --git a/OpenMEP/Helpers/Convert.cs b/OpenMEP/Helpers/Convert.cs index 25a4cca6..607c472f 100644 --- a/OpenMEP/Helpers/Convert.cs +++ b/OpenMEP/Helpers/Convert.cs @@ -314,7 +314,6 @@ internal static Autodesk.DesignScript.Geometry.Vector ToDynamoVector(this XYZ it return item.ToProtoType(); ; } - /// /// Convert Dynamo Curve to Revit Line /// diff --git a/OpenMEPSandbox/Geometry/Point.cs b/OpenMEPSandbox/Geometry/Point.cs index a9ea207c..46d91511 100644 --- a/OpenMEPSandbox/Geometry/Point.cs +++ b/OpenMEPSandbox/Geometry/Point.cs @@ -41,8 +41,8 @@ public static Autodesk.DesignScript.Geometry.Point ProjectOntoPlane( /// /// ![](../OpenMEPPage/geometry/dyn/pic/Point.ProjectOnToLine.gif) /// - public static Autodesk.DesignScript.Geometry.Point ProjectOnToLine(Autodesk.DesignScript.Geometry.Point point, - Autodesk.DesignScript.Geometry.Line line) + public static Autodesk.DesignScript.Geometry.Point ProjectOnToLine(Autodesk.DesignScript.Geometry.Point? point, + Autodesk.DesignScript.Geometry.Line? line) { Autodesk.DesignScript.Geometry.Vector lineDirection = line.Direction.Normalized(); Autodesk.DesignScript.Geometry.Point start = line.StartPoint; @@ -52,7 +52,6 @@ public static Autodesk.DesignScript.Geometry.Point ProjectOnToLine(Autodesk.Desi return ProjectedPoint; } - /// /// Get the centroid of a list of points /// diff --git a/docs/OpenMEPPage/element/dyn/MEPCurve.NewTeeFitting.dyn b/docs/OpenMEPPage/element/dyn/MEPCurve.NewTeeFitting.dyn new file mode 100644 index 00000000..0a8f4493 --- /dev/null +++ b/docs/OpenMEPPage/element/dyn/MEPCurve.NewTeeFitting.dyn @@ -0,0 +1,202 @@ +{ + "Uuid": "68c7fafb-c9ef-4d5d-b8ad-ed2ed0a644c8", + "IsCustomNode": false, + "Description": "", + "Name": "MEPCurve.NewTeeFitting", + "ElementResolver": { + "ResolutionMap": {} + }, + "Inputs": [], + "Outputs": [], + "Nodes": [ + { + "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", + "NodeType": "FunctionNode", + "FunctionSignature": "OpenMEP.Element.MEPCurve.NewTeeFitting@Revit.Elements.Element,Revit.Elements.Element", + "Id": "77b701e5fa494a4cbe7ebf79d2f13b35", + "Inputs": [ + { + "Id": "f421f00e6b204e4d9d215f112957d730", + "Name": "MepCurve1", + "Description": "the first element mep curve\n\nElement", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + }, + { + "Id": "18d295ead9684ad7bc376a2ef0e490ee", + "Name": "MepCurve2", + "Description": "the second element mep curve\n\nElement", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Outputs": [ + { + "Id": "e70f0192d8264bdcaf9db1dd91969210", + "Name": "familyinstance", + "Description": "the element family instance", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Auto", + "Description": "Create a new tee fitting 90 degrees by two mep curve\n\nMEPCurve.NewTeeFitting (MepCurve1: Element, MepCurve2: Element): Element" + }, + { + "ConcreteType": "Dynamo.Nodes.DSModelElementSelection, DSRevitNodesUI", + "NodeType": "ExtensionNode", + "InstanceId": [ + "ae2bc04f-25d9-41dd-99b5-0c4788ce76a2-000d9ecc" + ], + "Id": "67ec0c060b5d4d87895c6cd457942c9a", + "Inputs": [], + "Outputs": [ + { + "Id": "ccfe90dc6d7c4c018fcf3bff4b7f7f8f", + "Name": "Element", + "Description": "The selected elements.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled" + }, + { + "ConcreteType": "Dynamo.Nodes.DSModelElementSelection, DSRevitNodesUI", + "NodeType": "ExtensionNode", + "InstanceId": [ + "ae2bc04f-25d9-41dd-99b5-0c4788ce76a2-000d9edd" + ], + "Id": "6daa057f19ce4cc9ae27847a12243fe2", + "Inputs": [], + "Outputs": [ + { + "Id": "a2f7a6341e7041edbd2dd6899ce5e0aa", + "Name": "Element", + "Description": "The selected elements.", + "UsingDefaultValue": false, + "Level": 2, + "UseLevels": false, + "KeepListStructure": false + } + ], + "Replication": "Disabled" + } + ], + "Connectors": [ + { + "Start": "ccfe90dc6d7c4c018fcf3bff4b7f7f8f", + "End": "18d295ead9684ad7bc376a2ef0e490ee", + "Id": "0c7f93e67dcc4081919e6f600bb4395a", + "IsHidden": "False" + }, + { + "Start": "a2f7a6341e7041edbd2dd6899ce5e0aa", + "End": "f421f00e6b204e4d9d215f112957d730", + "Id": "6f0dba91c6064ac8a520718291d73ef7", + "IsHidden": "False" + } + ], + "Dependencies": [], + "NodeLibraryDependencies": [ + { + "Name": "OpenMEP", + "Version": "1.0.0", + "ReferenceType": "Package", + "Nodes": [ + "77b701e5fa494a4cbe7ebf79d2f13b35" + ] + } + ], + "Thumbnail": "", + "GraphDocumentationURL": null, + "ExtensionWorkspaceData": [ + { + "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670", + "Name": "Properties", + "Version": "2.16", + "Data": {} + }, + { + "ExtensionGuid": "DFBD9CC0-DB40-457A-939E-8C8555555A9D", + "Name": "Generative Design", + "Version": "3.0", + "Data": {} + } + ], + "Author": "", + "Linting": { + "activeLinter": "None", + "activeLinterId": "7b75fb44-43fd-4631-a878-29f4d5d8399a", + "warningCount": 0, + "errorCount": 0 + }, + "Bindings": [], + "View": { + "Dynamo": { + "ScaleFactor": 1.0, + "HasRunWithoutCrash": true, + "IsVisibleInDynamoLibrary": true, + "Version": "2.16.1.2727", + "RunType": "Manual", + "RunPeriod": "1000" + }, + "Camera": { + "Name": "Background Preview", + "EyeX": -17.0, + "EyeY": 24.0, + "EyeZ": 50.0, + "LookX": 12.0, + "LookY": -13.0, + "LookZ": -58.0, + "UpX": 0.0, + "UpY": 1.0, + "UpZ": 0.0 + }, + "ConnectorPins": [], + "NodeViews": [ + { + "Name": "MEPCurve.NewTeeFitting", + "ShowGeometry": true, + "Id": "77b701e5fa494a4cbe7ebf79d2f13b35", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 525.3542627499728, + "Y": 276.979867546608 + }, + { + "Name": "Select Model Element", + "ShowGeometry": true, + "Id": "67ec0c060b5d4d87895c6cd457942c9a", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 207.15956789979305, + "Y": 210.65682751455071 + }, + { + "Name": "Select Model Element", + "ShowGeometry": true, + "Id": "6daa057f19ce4cc9ae27847a12243fe2", + "IsSetAsInput": false, + "IsSetAsOutput": false, + "Excluded": false, + "X": 206.56176389544032, + "Y": 383.4221847724985 + } + ], + "Annotations": [], + "X": -132.12192800565981, + "Y": -72.06579096584079, + "Zoom": 1.13758205229474 + } +} \ No newline at end of file diff --git a/docs/OpenMEPPage/element/dyn/pic/MEPCurve.NewTeeFitting2.png b/docs/OpenMEPPage/element/dyn/pic/MEPCurve.NewTeeFitting2.png new file mode 100644 index 00000000..2eba2fa5 Binary files /dev/null and b/docs/OpenMEPPage/element/dyn/pic/MEPCurve.NewTeeFitting2.png differ diff --git a/docs/OpenMEPPage/geometry/dyn/Point.ProjectOnToLine.dyn b/docs/OpenMEPPage/geometry/dyn/Point.ProjectOnToLine.dyn index 6bb037d9..a22077c9 100644 --- a/docs/OpenMEPPage/geometry/dyn/Point.ProjectOnToLine.dyn +++ b/docs/OpenMEPPage/geometry/dyn/Point.ProjectOnToLine.dyn @@ -1,5 +1,5 @@ { - "Uuid": "8f745431-3ef7-4418-a1f5-b6cbe51a1c92", + "Uuid": "f80e1619-d3a0-4b74-b262-c039df3f317a", "IsCustomNode": false, "Description": "", "Name": "Point.ProjectOnToLine", @@ -11,11 +11,11 @@ "Nodes": [ { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "Id": "eb5725ab2eb2488195ce198e20261476", + "Id": "fb58d96f314d41b0957902d4529dc6d2", "NodeType": "FunctionNode", "Inputs": [ { - "Id": "1ea48a8268ea421888ce65a803356cd7", + "Id": "92af7bf8857b4073a417ba41d3a94887", "Name": "startPoint", "Description": "Line start point\n\nPoint", "UsingDefaultValue": false, @@ -24,7 +24,7 @@ "KeepListStructure": false }, { - "Id": "f21128dcf6e646baa4556774bb28b801", + "Id": "ad7c3da83034411483eb3e12e201bbc1", "Name": "endPoint", "Description": "Line end point\n\nPoint", "UsingDefaultValue": false, @@ -35,7 +35,7 @@ ], "Outputs": [ { - "Id": "ffc54d429e5c4aa2aab969f0c96655e1", + "Id": "2caa27061ce14ff09cf1120c5f47631a", "Name": "Line", "Description": "Line from start and end point", "UsingDefaultValue": false, @@ -50,11 +50,11 @@ }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "Id": "0a3c49ee27794c68880218e75fce302d", + "Id": "2bbaec3d644b42ea90ddc9e311194686", "NodeType": "FunctionNode", "Inputs": [ { - "Id": "0f84c24a032b42128794437f7f198385", + "Id": "c4679671e3d94878a0ac51610bec4208", "Name": "x", "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -63,7 +63,7 @@ "KeepListStructure": false }, { - "Id": "645fbba37ba8482d9c92b9a90ae216ac", + "Id": "aeb760a558e442ce801d37a320ea5830", "Name": "y", "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -72,7 +72,7 @@ "KeepListStructure": false }, { - "Id": "490f255b4f854056882e0794478ded2c", + "Id": "a2fff58f8ead4059b284fe074aea621d", "Name": "z", "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -83,7 +83,7 @@ ], "Outputs": [ { - "Id": "3afe8e3d3b2948a683faf75cda858da9", + "Id": "3e2b756b51f44470b66e85980d162241", "Name": "Point", "Description": "Point created by coordinates", "UsingDefaultValue": false, @@ -98,11 +98,11 @@ }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "Id": "67c098d4111040068be87cb9fa66edf1", + "Id": "ce065abb4142467b953d15171b1cc82e", "NodeType": "FunctionNode", "Inputs": [ { - "Id": "82a52f630569487bafd16dd8157b781e", + "Id": "e410e2e297564f688e2fe1032366cca1", "Name": "x", "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -111,7 +111,7 @@ "KeepListStructure": false }, { - "Id": "42e38bb41c7c4befa4182f2a5d008b7b", + "Id": "9559322a16db4aec87f336c78fa2528c", "Name": "y", "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -120,7 +120,7 @@ "KeepListStructure": false }, { - "Id": "7fd472d3f3964baf8032adebe2b43e22", + "Id": "403a4f108f224b48aab9fdfec2d00b34", "Name": "z", "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -131,7 +131,7 @@ ], "Outputs": [ { - "Id": "d5edbf7bc0884990a928f4a4a6311428", + "Id": "b11278c47792484c9670230950fad0cd", "Name": "Point", "Description": "Point created by coordinates", "UsingDefaultValue": false, @@ -146,12 +146,12 @@ }, { "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore", - "Id": "9e01a72200cb42fd8cfdc35ee60ff983", + "Id": "28e4d4ed57a945f2b5cba3a6eb2b9dfc", "NodeType": "CodeBlockNode", "Inputs": [], "Outputs": [ { - "Id": "f48db55006be400d9ffd0416ee054b10", + "Id": "ce91fe9170964c4ba4867548745221a2", "Name": "", "Description": "Value of expression at line 1", "UsingDefaultValue": false, @@ -166,11 +166,11 @@ }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "Id": "66c108e2a9d549059016937d4290fb39", + "Id": "9260dc9d99e8428d81bf4e7b6522f009", "NodeType": "FunctionNode", "Inputs": [ { - "Id": "4a05fb30f5d24f14bf79d40124fba2fb", + "Id": "42be165bdbef4bafaa93b3abbcf78b40", "Name": "x", "Description": "X coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -179,7 +179,7 @@ "KeepListStructure": false }, { - "Id": "cfd2b7d3435840668d40681765e48097", + "Id": "53ea535aa5d445b89fa7a586e65fb7dc", "Name": "y", "Description": "Y coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -188,7 +188,7 @@ "KeepListStructure": false }, { - "Id": "f3d0626b5acf4cfe9143fa18b3351b89", + "Id": "02ab209c9f934d8d8ed1a6b5e607d3d2", "Name": "z", "Description": "Z coordinate\n\ndouble\nDefault value : 0", "UsingDefaultValue": true, @@ -199,7 +199,7 @@ ], "Outputs": [ { - "Id": "92151f60fedc4c02a20a82f241a4fd7d", + "Id": "2679a135a03c480d94ddc2cd1a527a65", "Name": "Point", "Description": "Point created by coordinates", "UsingDefaultValue": false, @@ -214,11 +214,11 @@ }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "Id": "3723cd5b16dc490195ad480c15793e66", + "Id": "65969fa090bb4ed9aa9e21e1ba7c4686", "NodeType": "FunctionNode", "Inputs": [ { - "Id": "d09528e3870c42eea05d5de7f2f76208", + "Id": "516af1cc8da94f04a849424c89f21650", "Name": "point", "Description": "Point need to project\n\nPoint", "UsingDefaultValue": false, @@ -227,7 +227,7 @@ "KeepListStructure": false }, { - "Id": "f60344b14b0e46bf935a7804b5e964df", + "Id": "8c006946457440b38935e54cc6bdb17e", "Name": "line", "Description": "Line to project the point\n\nLine", "UsingDefaultValue": false, @@ -238,7 +238,7 @@ ], "Outputs": [ { - "Id": "563579f75d3f496297c47f5152dc7f99", + "Id": "78307685610444fbb014cbac9684fd06", "Name": "point", "Description": "projected point", "UsingDefaultValue": false, @@ -257,12 +257,12 @@ "MaximumValue": 30, "MinimumValue": 1, "StepValue": 1, - "Id": "25b30907f6384ece8a919239f82cadbc", + "Id": "dfa8e3548c3c4715959a2c040f730115", "NodeType": "NumberInputNode", "Inputs": [], "Outputs": [ { - "Id": "03aaf5eef036422f840f824e16a03ba3", + "Id": "6b06be05867a430e8009e7c5e303c51e", "Name": "", "Description": "Int64", "UsingDefaultValue": false, @@ -273,15 +273,15 @@ ], "Replication": "Disabled", "Description": "Produces integer values", - "InputValue": 24 + "InputValue": 28 }, { "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore", - "Id": "da6e4d16ea8d4944beb81aebc212449a", + "Id": "8a4ee5fd1b0b4d26ac03dc952e48da2e", "NodeType": "FunctionNode", "Inputs": [ { - "Id": "1c8a72b7b160453fa2218b1641d9661b", + "Id": "3b540566a5ba4e38a411a43449f9d96c", "Name": "startPoint", "Description": "Line start point\n\nPoint", "UsingDefaultValue": false, @@ -290,7 +290,7 @@ "KeepListStructure": false }, { - "Id": "7c629a68cf83479dbf0799c066fe46f9", + "Id": "d322540bb52b49599e9811d3c40b5995", "Name": "endPoint", "Description": "Line end point\n\nPoint", "UsingDefaultValue": false, @@ -301,7 +301,7 @@ ], "Outputs": [ { - "Id": "944a268822724ebc993dbfdc38e8d368", + "Id": "27f51b1ed5f14ee996cdc176357fd724", "Name": "Line", "Description": "Line from start and end point", "UsingDefaultValue": false, @@ -317,63 +317,63 @@ ], "Connectors": [ { - "Start": "ffc54d429e5c4aa2aab969f0c96655e1", - "End": "f60344b14b0e46bf935a7804b5e964df", - "Id": "f8f7934d0da946a6bdd6d6aa5c287ebb", + "Start": "2caa27061ce14ff09cf1120c5f47631a", + "End": "8c006946457440b38935e54cc6bdb17e", + "Id": "93dcb76213864d97b8a718a0c3b9adbf", "IsHidden": "False" }, { - "Start": "3afe8e3d3b2948a683faf75cda858da9", - "End": "1ea48a8268ea421888ce65a803356cd7", - "Id": "4e79539c97ff461f9f06ae42104445e2", + "Start": "3e2b756b51f44470b66e85980d162241", + "End": "92af7bf8857b4073a417ba41d3a94887", + "Id": "d48c0dc94aeb4876ab6d05edda28331e", "IsHidden": "False" }, { - "Start": "d5edbf7bc0884990a928f4a4a6311428", - "End": "f21128dcf6e646baa4556774bb28b801", - "Id": "d88cce784e144333bba83f5ba3ef2803", + "Start": "b11278c47792484c9670230950fad0cd", + "End": "ad7c3da83034411483eb3e12e201bbc1", + "Id": "1038a11747404dd69c64d90b04780214", "IsHidden": "False" }, { - "Start": "f48db55006be400d9ffd0416ee054b10", - "End": "82a52f630569487bafd16dd8157b781e", - "Id": "517e524c1d174c039b407431275cd9c7", + "Start": "ce91fe9170964c4ba4867548745221a2", + "End": "e410e2e297564f688e2fe1032366cca1", + "Id": "2f4bd4c2a809434cbb13f6ae1facb4ea", "IsHidden": "False" }, { - "Start": "f48db55006be400d9ffd0416ee054b10", - "End": "7fd472d3f3964baf8032adebe2b43e22", - "Id": "7868abfa636a443d859e1d883205c5e7", + "Start": "ce91fe9170964c4ba4867548745221a2", + "End": "403a4f108f224b48aab9fdfec2d00b34", + "Id": "6aa80aaef8d047fd856961ea2c8fd2f1", "IsHidden": "False" }, { - "Start": "92151f60fedc4c02a20a82f241a4fd7d", - "End": "d09528e3870c42eea05d5de7f2f76208", - "Id": "1835c25ab3624b449a288b2566417d4f", + "Start": "2679a135a03c480d94ddc2cd1a527a65", + "End": "516af1cc8da94f04a849424c89f21650", + "Id": "79b289a665d2492ea979900ff50ea66e", "IsHidden": "False" }, { - "Start": "92151f60fedc4c02a20a82f241a4fd7d", - "End": "1c8a72b7b160453fa2218b1641d9661b", - "Id": "0ea0c341db2b4e26a2931993f7feaf4f", + "Start": "2679a135a03c480d94ddc2cd1a527a65", + "End": "3b540566a5ba4e38a411a43449f9d96c", + "Id": "8e27dad6f7884bec8374af4fc2cd17e9", "IsHidden": "False" }, { - "Start": "563579f75d3f496297c47f5152dc7f99", - "End": "7c629a68cf83479dbf0799c066fe46f9", - "Id": "679904bacda24551b064db47963e86a8", + "Start": "78307685610444fbb014cbac9684fd06", + "End": "d322540bb52b49599e9811d3c40b5995", + "Id": "d7ad559549104d648b9b911641411f22", "IsHidden": "False" }, { - "Start": "03aaf5eef036422f840f824e16a03ba3", - "End": "cfd2b7d3435840668d40681765e48097", - "Id": "efaa0b0102e641969f181263d66d01be", + "Start": "6b06be05867a430e8009e7c5e303c51e", + "End": "53ea535aa5d445b89fa7a586e65fb7dc", + "Id": "fbc9cb31f33440529a4d385a24c468f0", "IsHidden": "False" }, { - "Start": "03aaf5eef036422f840f824e16a03ba3", - "End": "4a05fb30f5d24f14bf79d40124fba2fb", - "Id": "993ae9826f31441299d5ec52ddcee68c", + "Start": "6b06be05867a430e8009e7c5e303c51e", + "End": "42be165bdbef4bafaa93b3abbcf78b40", + "Id": "b8fa9a64a436492a9d78142a15d823b6", "IsHidden": "False" } ], @@ -384,7 +384,7 @@ "Version": "1.0.0", "ReferenceType": "Package", "Nodes": [ - "3723cd5b16dc490195ad480c15793e66" + "65969fa090bb4ed9aa9e21e1ba7c4686" ] } ], @@ -417,9 +417,9 @@ }, "Camera": { "Name": "_Background Preview", - "EyeX": -48.165916442871094, - "EyeY": 62.000225067138672, - "EyeZ": -83.030197143554688, + "EyeX": -30.240104675292969, + "EyeY": 82.235847473144531, + "EyeZ": -76.699203491210938, "LookX": 41.4981689453125, "LookY": -63.968593597412109, "LookZ": 86.961479187011719, @@ -430,7 +430,7 @@ "ConnectorPins": [], "NodeViews": [ { - "Id": "eb5725ab2eb2488195ce198e20261476", + "Id": "fb58d96f314d41b0957902d4529dc6d2", "Name": "Line.ByStartPointEndPoint", "IsSetAsInput": false, "IsSetAsOutput": false, @@ -440,7 +440,7 @@ "Y": 350.13004188126632 }, { - "Id": "0a3c49ee27794c68880218e75fce302d", + "Id": "2bbaec3d644b42ea90ddc9e311194686", "Name": "Point.ByCoordinates", "IsSetAsInput": false, "IsSetAsOutput": false, @@ -450,7 +450,7 @@ "Y": 284.0 }, { - "Id": "67c098d4111040068be87cb9fa66edf1", + "Id": "ce065abb4142467b953d15171b1cc82e", "Name": "Point.ByCoordinates", "IsSetAsInput": false, "IsSetAsOutput": false, @@ -460,7 +460,7 @@ "Y": 532.8 }, { - "Id": "9e01a72200cb42fd8cfdc35ee60ff983", + "Id": "28e4d4ed57a945f2b5cba3a6eb2b9dfc", "Name": "Code Block", "IsSetAsInput": false, "IsSetAsOutput": false, @@ -470,7 +470,7 @@ "Y": 539.04849237206315 }, { - "Id": "66c108e2a9d549059016937d4290fb39", + "Id": "9260dc9d99e8428d81bf4e7b6522f009", "Name": "Point.ByCoordinates", "IsSetAsInput": false, "IsSetAsOutput": false, @@ -480,7 +480,7 @@ "Y": 808.0 }, { - "Id": "3723cd5b16dc490195ad480c15793e66", + "Id": "65969fa090bb4ed9aa9e21e1ba7c4686", "Name": "Point.ProjectOnToLine", "IsSetAsInput": false, "IsSetAsOutput": false, @@ -490,7 +490,7 @@ "Y": 694.38850621192751 }, { - "Id": "25b30907f6384ece8a919239f82cadbc", + "Id": "dfa8e3548c3c4715959a2c040f730115", "Name": "Integer Slider", "IsSetAsInput": false, "IsSetAsOutput": false, @@ -500,7 +500,7 @@ "Y": 859.59693603225412 }, { - "Id": "da6e4d16ea8d4944beb81aebc212449a", + "Id": "8a4ee5fd1b0b4d26ac03dc952e48da2e", "Name": "Line.ByStartPointEndPoint", "IsSetAsInput": false, "IsSetAsOutput": false, @@ -511,8 +511,8 @@ } ], "Annotations": [], - "X": 348.74039050993656, - "Y": 6.921173453660515, + "X": 287.14039050993642, + "Y": -125.8788265463395, "Zoom": 0.61610714732743088 } } \ No newline at end of file