diff --git a/OpenMEP/Element/MEPCurve.cs b/OpenMEP/Element/MEPCurve.cs
index 3242d027..03135b07 100644
--- a/OpenMEP/Element/MEPCurve.cs
+++ b/OpenMEP/Element/MEPCurve.cs
@@ -1,14 +1,17 @@
using System.Collections;
+using System.Runtime.CompilerServices;
using Autodesk.DesignScript.Runtime;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.DB.Plumbing;
using Dynamo.Graph.Nodes;
+using GShark.Geometry;
using OpenMEP.Helpers;
using Revit.GeometryConversion;
using RevitServices.Transactions;
using Curve = Autodesk.DesignScript.Geometry.Curve;
using Line = Autodesk.Revit.DB.Line;
+using Point = OpenMEPSandbox.Geometry.Point;
namespace OpenMEP.Element;
@@ -42,6 +45,7 @@ private MEPCurve()
return mCurve.Document.GetElement(id).ToDynamoType();
}
}
+
TransactionManager.Instance.TransactionTaskDone();
return null;
}
@@ -54,12 +58,13 @@ private MEPCurve()
///
private static ElementId BreakCurve(Autodesk.Revit.DB.MEPCurve? mepCurve, XYZ? ptBreak)
{
- if(mepCurve==null) throw new ArgumentNullException(nameof(mepCurve));
- if(ptBreak==null) throw new ArgumentNullException(nameof(ptBreak));
+ if (mepCurve == null) throw new ArgumentNullException(nameof(mepCurve));
+ if (ptBreak == null) throw new ArgumentNullException(nameof(ptBreak));
if (mepCurve is Autodesk.Revit.DB.Plumbing.Pipe || mepCurve is Autodesk.Revit.DB.Plumbing.FlexPipe)
{
return PlumbingUtils.BreakCurve(mepCurve.Document, mepCurve.Id, ptBreak);
}
+
if (mepCurve is Autodesk.Revit.DB.Mechanical.Duct || mepCurve is Autodesk.Revit.DB.Mechanical.FlexDuct)
{
return MechanicalUtils.BreakCurve(mepCurve.Document, mepCurve.Id, ptBreak);
@@ -70,6 +75,7 @@ private static ElementId BreakCurve(Autodesk.Revit.DB.MEPCurve? mepCurve, XYZ? p
ElementId elementId = BreakConduitCableTray(mepCurve.Document, mepCurve.Id, ptBreak);
return elementId;
}
+
return ElementId.InvalidElementId;
}
@@ -223,6 +229,8 @@ private static void AdjustMepCurve(Autodesk.Revit.DB.Element mepCurve, XYZ p1, X
return newTeeFitting.ToDynamoType();
}
+
+
///
/// Add a new family instance of an transition fitting into the Autodesk Revit document,
/// using two connectors.
@@ -431,11 +439,11 @@ private static void AdjustMepCurve(Autodesk.Revit.DB.Element mepCurve, XYZ p1, X
///
[MultiReturn("Percent", "Degrees", "Ratio")]
[NodeCategory("Query")]
- public static Dictionary Slope(Revit.Elements.Element mepCurve,double digit =0)
+ public static Dictionary Slope(Revit.Elements.Element mepCurve, double digit = 0)
{
- if(mepCurve==null) throw new ArgumentNullException(nameof(mepCurve));
+ if (mepCurve == null) throw new ArgumentNullException(nameof(mepCurve));
Autodesk.Revit.DB.MEPCurve? internalElement = mepCurve.InternalElement as Autodesk.Revit.DB.MEPCurve;
LocationCurve? locationCurve = internalElement!.Location as LocationCurve;
- return OpenMEPSandbox.Geometry.Line.Slope(locationCurve?.Curve.ToDynamoType(), digit);
+ return OpenMEPSandbox.Geometry.Line.Slope(locationCurve?.Curve.ToDynamoType(), digit);
}
}
\ No newline at end of file
diff --git a/OpenMEPSandbox/Geometry/Point.cs b/OpenMEPSandbox/Geometry/Point.cs
index fdcb53cd..a9ea207c 100644
--- a/OpenMEPSandbox/Geometry/Point.cs
+++ b/OpenMEPSandbox/Geometry/Point.cs
@@ -32,6 +32,27 @@ public static Autodesk.DesignScript.Geometry.Point ProjectOntoPlane(
return Autodesk.DesignScript.Geometry.Point.ByCoordinates(projectedPoint.X, projectedPoint.Y, projectedPoint.Z);
}
+ ///
+ /// Project a point onto a line
+ ///
+ /// Point need to project
+ /// Line to project the point
+ /// projected point
+ ///
+ /// ![](../OpenMEPPage/geometry/dyn/pic/Point.ProjectOnToLine.gif)
+ ///
+ 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;
+ Autodesk.DesignScript.Geometry.Vector vector = point.AsVector().Subtract(start.AsVector());
+ double projectionLength = lineDirection.Dot(vector);
+ var ProjectedPoint = start.Add(lineDirection.Scale(projectionLength));
+ return ProjectedPoint;
+ }
+
+
///
/// Get the centroid of a list of points
///
@@ -99,9 +120,10 @@ public static bool IsOnPlane(Autodesk.DesignScript.Geometry.Point point, Autodes
/// ![](../OpenMEPPage/geometry/dyn/pic/Point.Deconstruct.png)
///
[MultiReturn("X", "Y", "Z")]
- public static Dictionary Deconstruct ([DefaultArgument("Autodesk.DesignScript.Geometry.Point.ByCoordinates(0,0,0)")] Autodesk.DesignScript.Geometry.Point point)
+ public static Dictionary Deconstruct(
+ [DefaultArgument("Autodesk.DesignScript.Geometry.Point.ByCoordinates(0,0,0)")]
+ Autodesk.DesignScript.Geometry.Point point)
{
-
if (point == null) throw new ArgumentNullException(nameof(point));
return new Dictionary
{
@@ -240,8 +262,7 @@ public static double Euclidean(Autodesk.DesignScript.Geometry.Point p1, Autodesk
{
return Euclidean(p1.X, p2.X, p1.Y, p2.Y, p1.Z, p2.Z);
}
-
-
+
///
/// return distance between two points by Euclidean distance
@@ -311,7 +332,7 @@ internal static double Euclidean(double x1, double x2, double y1, double y2, dou
/// Permutation of list index matching optimize
/// minimum cost can optimize
/// index optimize can assignment
- [MultiReturn("assignment","mincost")]
+ [MultiReturn("assignment", "mincost")]
public static Dictionary AssignmentMatching(List lcMachines,
List lcDevices)
{
@@ -324,6 +345,7 @@ internal static double Euclidean(double x1, double x2, double y1, double y2, dou
cost[i, j] = manhattan;
}
}
+
// TODO : Array Matching Index
int[,]? originCost = cost.Clone() as int[,];
List assignment = cost.FindAssignments().ToList();
@@ -333,6 +355,7 @@ internal static double Euclidean(double x1, double x2, double y1, double y2, dou
{
mincost += originCost[i, assignment[i]];
}
+
return new Dictionary()
{
{"assignment", assignment},
@@ -347,8 +370,8 @@ internal static double Euclidean(double x1, double x2, double y1, double y2, dou
/// list location of devices
/// minimum cost can optimize
/// index optimize can assignment
- [MultiReturn("assignment","mincost")]
- public static Dictionary BruteForceMatching(List lcMachines,
+ [MultiReturn("assignment", "mincost")]
+ public static Dictionary BruteForceMatching(List lcMachines,
List lcDevices)
{
int[,] cost = new int[lcMachines.Count, lcDevices.Count];
@@ -360,6 +383,7 @@ internal static double Euclidean(double x1, double x2, double y1, double y2, dou
cost[i, j] = manhattan;
}
}
+
BruteForceMethod bruteForceMethod = new BruteForceMethod();
(int minCost, IEnumerable minAssignment) result = bruteForceMethod.BruteForce(cost);
IEnumerable assignment = result.minAssignment;
diff --git a/docs/OpenMEPPage/geometry/dyn/Point.ProjectOnToLine.dyn b/docs/OpenMEPPage/geometry/dyn/Point.ProjectOnToLine.dyn
new file mode 100644
index 00000000..6bb037d9
--- /dev/null
+++ b/docs/OpenMEPPage/geometry/dyn/Point.ProjectOnToLine.dyn
@@ -0,0 +1,518 @@
+{
+ "Uuid": "8f745431-3ef7-4418-a1f5-b6cbe51a1c92",
+ "IsCustomNode": false,
+ "Description": "",
+ "Name": "Point.ProjectOnToLine",
+ "ElementResolver": {
+ "ResolutionMap": {}
+ },
+ "Inputs": [],
+ "Outputs": [],
+ "Nodes": [
+ {
+ "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
+ "Id": "eb5725ab2eb2488195ce198e20261476",
+ "NodeType": "FunctionNode",
+ "Inputs": [
+ {
+ "Id": "1ea48a8268ea421888ce65a803356cd7",
+ "Name": "startPoint",
+ "Description": "Line start point\n\nPoint",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "f21128dcf6e646baa4556774bb28b801",
+ "Name": "endPoint",
+ "Description": "Line end point\n\nPoint",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Outputs": [
+ {
+ "Id": "ffc54d429e5c4aa2aab969f0c96655e1",
+ "Name": "Line",
+ "Description": "Line from start and end point",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point",
+ "Replication": "Auto",
+ "Description": "Creates a straight Line between two input Points.\n\nLine.ByStartPointEndPoint (startPoint: Point, endPoint: Point): Line"
+ },
+ {
+ "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
+ "Id": "0a3c49ee27794c68880218e75fce302d",
+ "NodeType": "FunctionNode",
+ "Inputs": [
+ {
+ "Id": "0f84c24a032b42128794437f7f198385",
+ "Name": "x",
+ "Description": "X coordinate\n\ndouble\nDefault value : 0",
+ "UsingDefaultValue": true,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "645fbba37ba8482d9c92b9a90ae216ac",
+ "Name": "y",
+ "Description": "Y coordinate\n\ndouble\nDefault value : 0",
+ "UsingDefaultValue": true,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "490f255b4f854056882e0794478ded2c",
+ "Name": "z",
+ "Description": "Z coordinate\n\ndouble\nDefault value : 0",
+ "UsingDefaultValue": true,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Outputs": [
+ {
+ "Id": "3afe8e3d3b2948a683faf75cda858da9",
+ "Name": "Point",
+ "Description": "Point created by coordinates",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double",
+ "Replication": "Auto",
+ "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point"
+ },
+ {
+ "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
+ "Id": "67c098d4111040068be87cb9fa66edf1",
+ "NodeType": "FunctionNode",
+ "Inputs": [
+ {
+ "Id": "82a52f630569487bafd16dd8157b781e",
+ "Name": "x",
+ "Description": "X coordinate\n\ndouble\nDefault value : 0",
+ "UsingDefaultValue": true,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "42e38bb41c7c4befa4182f2a5d008b7b",
+ "Name": "y",
+ "Description": "Y coordinate\n\ndouble\nDefault value : 0",
+ "UsingDefaultValue": true,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "7fd472d3f3964baf8032adebe2b43e22",
+ "Name": "z",
+ "Description": "Z coordinate\n\ndouble\nDefault value : 0",
+ "UsingDefaultValue": true,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Outputs": [
+ {
+ "Id": "d5edbf7bc0884990a928f4a4a6311428",
+ "Name": "Point",
+ "Description": "Point created by coordinates",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double",
+ "Replication": "Auto",
+ "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point"
+ },
+ {
+ "ConcreteType": "Dynamo.Graph.Nodes.CodeBlockNodeModel, DynamoCore",
+ "Id": "9e01a72200cb42fd8cfdc35ee60ff983",
+ "NodeType": "CodeBlockNode",
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Id": "f48db55006be400d9ffd0416ee054b10",
+ "Name": "",
+ "Description": "Value of expression at line 1",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Replication": "Disabled",
+ "Description": "Allows for DesignScript code to be authored directly",
+ "Code": "10;"
+ },
+ {
+ "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
+ "Id": "66c108e2a9d549059016937d4290fb39",
+ "NodeType": "FunctionNode",
+ "Inputs": [
+ {
+ "Id": "4a05fb30f5d24f14bf79d40124fba2fb",
+ "Name": "x",
+ "Description": "X coordinate\n\ndouble\nDefault value : 0",
+ "UsingDefaultValue": true,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "cfd2b7d3435840668d40681765e48097",
+ "Name": "y",
+ "Description": "Y coordinate\n\ndouble\nDefault value : 0",
+ "UsingDefaultValue": true,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "f3d0626b5acf4cfe9143fa18b3351b89",
+ "Name": "z",
+ "Description": "Z coordinate\n\ndouble\nDefault value : 0",
+ "UsingDefaultValue": true,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Outputs": [
+ {
+ "Id": "92151f60fedc4c02a20a82f241a4fd7d",
+ "Name": "Point",
+ "Description": "Point created by coordinates",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "FunctionSignature": "Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double,double",
+ "Replication": "Auto",
+ "Description": "Form a Point given 3 cartesian coordinates\n\nPoint.ByCoordinates (x: double = 0, y: double = 0, z: double = 0): Point"
+ },
+ {
+ "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
+ "Id": "3723cd5b16dc490195ad480c15793e66",
+ "NodeType": "FunctionNode",
+ "Inputs": [
+ {
+ "Id": "d09528e3870c42eea05d5de7f2f76208",
+ "Name": "point",
+ "Description": "Point need to project\n\nPoint",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "f60344b14b0e46bf935a7804b5e964df",
+ "Name": "line",
+ "Description": "Line to project the point\n\nLine",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Outputs": [
+ {
+ "Id": "563579f75d3f496297c47f5152dc7f99",
+ "Name": "point",
+ "Description": "projected point",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "FunctionSignature": "OpenMEPSandbox.Geometry.Point.ProjectOnToLine@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Line",
+ "Replication": "Auto",
+ "Description": "Project a point onto a line\n\nPoint.ProjectOnToLine (point: Point, line: Line): Point"
+ },
+ {
+ "ConcreteType": "CoreNodeModels.Input.IntegerSlider, CoreNodeModels",
+ "NumberType": "Integer",
+ "MaximumValue": 30,
+ "MinimumValue": 1,
+ "StepValue": 1,
+ "Id": "25b30907f6384ece8a919239f82cadbc",
+ "NodeType": "NumberInputNode",
+ "Inputs": [],
+ "Outputs": [
+ {
+ "Id": "03aaf5eef036422f840f824e16a03ba3",
+ "Name": "",
+ "Description": "Int64",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Replication": "Disabled",
+ "Description": "Produces integer values",
+ "InputValue": 24
+ },
+ {
+ "ConcreteType": "Dynamo.Graph.Nodes.ZeroTouch.DSFunction, DynamoCore",
+ "Id": "da6e4d16ea8d4944beb81aebc212449a",
+ "NodeType": "FunctionNode",
+ "Inputs": [
+ {
+ "Id": "1c8a72b7b160453fa2218b1641d9661b",
+ "Name": "startPoint",
+ "Description": "Line start point\n\nPoint",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ },
+ {
+ "Id": "7c629a68cf83479dbf0799c066fe46f9",
+ "Name": "endPoint",
+ "Description": "Line end point\n\nPoint",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "Outputs": [
+ {
+ "Id": "944a268822724ebc993dbfdc38e8d368",
+ "Name": "Line",
+ "Description": "Line from start and end point",
+ "UsingDefaultValue": false,
+ "Level": 2,
+ "UseLevels": false,
+ "KeepListStructure": false
+ }
+ ],
+ "FunctionSignature": "Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint@Autodesk.DesignScript.Geometry.Point,Autodesk.DesignScript.Geometry.Point",
+ "Replication": "Auto",
+ "Description": "Creates a straight Line between two input Points.\n\nLine.ByStartPointEndPoint (startPoint: Point, endPoint: Point): Line"
+ }
+ ],
+ "Connectors": [
+ {
+ "Start": "ffc54d429e5c4aa2aab969f0c96655e1",
+ "End": "f60344b14b0e46bf935a7804b5e964df",
+ "Id": "f8f7934d0da946a6bdd6d6aa5c287ebb",
+ "IsHidden": "False"
+ },
+ {
+ "Start": "3afe8e3d3b2948a683faf75cda858da9",
+ "End": "1ea48a8268ea421888ce65a803356cd7",
+ "Id": "4e79539c97ff461f9f06ae42104445e2",
+ "IsHidden": "False"
+ },
+ {
+ "Start": "d5edbf7bc0884990a928f4a4a6311428",
+ "End": "f21128dcf6e646baa4556774bb28b801",
+ "Id": "d88cce784e144333bba83f5ba3ef2803",
+ "IsHidden": "False"
+ },
+ {
+ "Start": "f48db55006be400d9ffd0416ee054b10",
+ "End": "82a52f630569487bafd16dd8157b781e",
+ "Id": "517e524c1d174c039b407431275cd9c7",
+ "IsHidden": "False"
+ },
+ {
+ "Start": "f48db55006be400d9ffd0416ee054b10",
+ "End": "7fd472d3f3964baf8032adebe2b43e22",
+ "Id": "7868abfa636a443d859e1d883205c5e7",
+ "IsHidden": "False"
+ },
+ {
+ "Start": "92151f60fedc4c02a20a82f241a4fd7d",
+ "End": "d09528e3870c42eea05d5de7f2f76208",
+ "Id": "1835c25ab3624b449a288b2566417d4f",
+ "IsHidden": "False"
+ },
+ {
+ "Start": "92151f60fedc4c02a20a82f241a4fd7d",
+ "End": "1c8a72b7b160453fa2218b1641d9661b",
+ "Id": "0ea0c341db2b4e26a2931993f7feaf4f",
+ "IsHidden": "False"
+ },
+ {
+ "Start": "563579f75d3f496297c47f5152dc7f99",
+ "End": "7c629a68cf83479dbf0799c066fe46f9",
+ "Id": "679904bacda24551b064db47963e86a8",
+ "IsHidden": "False"
+ },
+ {
+ "Start": "03aaf5eef036422f840f824e16a03ba3",
+ "End": "cfd2b7d3435840668d40681765e48097",
+ "Id": "efaa0b0102e641969f181263d66d01be",
+ "IsHidden": "False"
+ },
+ {
+ "Start": "03aaf5eef036422f840f824e16a03ba3",
+ "End": "4a05fb30f5d24f14bf79d40124fba2fb",
+ "Id": "993ae9826f31441299d5ec52ddcee68c",
+ "IsHidden": "False"
+ }
+ ],
+ "Dependencies": [],
+ "NodeLibraryDependencies": [
+ {
+ "Name": "OpenMEP",
+ "Version": "1.0.0",
+ "ReferenceType": "Package",
+ "Nodes": [
+ "3723cd5b16dc490195ad480c15793e66"
+ ]
+ }
+ ],
+ "Thumbnail": "",
+ "GraphDocumentationURL": null,
+ "ExtensionWorkspaceData": [
+ {
+ "ExtensionGuid": "28992e1d-abb9-417f-8b1b-05e053bee670",
+ "Name": "Properties",
+ "Version": "2.18",
+ "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.18.0.2986",
+ "RunType": "Automatic",
+ "RunPeriod": "1000"
+ },
+ "Camera": {
+ "Name": "_Background Preview",
+ "EyeX": -48.165916442871094,
+ "EyeY": 62.000225067138672,
+ "EyeZ": -83.030197143554688,
+ "LookX": 41.4981689453125,
+ "LookY": -63.968593597412109,
+ "LookZ": 86.961479187011719,
+ "UpX": 0.15574347972869873,
+ "UpY": 0.93232488632202148,
+ "UpZ": 0.32636556029319763
+ },
+ "ConnectorPins": [],
+ "NodeViews": [
+ {
+ "Id": "eb5725ab2eb2488195ce198e20261476",
+ "Name": "Line.ByStartPointEndPoint",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "ShowGeometry": true,
+ "X": 702.85854271548783,
+ "Y": 350.13004188126632
+ },
+ {
+ "Id": "0a3c49ee27794c68880218e75fce302d",
+ "Name": "Point.ByCoordinates",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "ShowGeometry": true,
+ "X": 350.79999999999995,
+ "Y": 284.0
+ },
+ {
+ "Id": "67c098d4111040068be87cb9fa66edf1",
+ "Name": "Point.ByCoordinates",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "ShowGeometry": true,
+ "X": 338.79999999999995,
+ "Y": 532.8
+ },
+ {
+ "Id": "9e01a72200cb42fd8cfdc35ee60ff983",
+ "Name": "Code Block",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "ShowGeometry": true,
+ "X": 72.3849244848625,
+ "Y": 539.04849237206315
+ },
+ {
+ "Id": "66c108e2a9d549059016937d4290fb39",
+ "Name": "Point.ByCoordinates",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "ShowGeometry": true,
+ "X": 338.0,
+ "Y": 808.0
+ },
+ {
+ "Id": "3723cd5b16dc490195ad480c15793e66",
+ "Name": "Point.ProjectOnToLine",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "ShowGeometry": true,
+ "X": 757.00116122348538,
+ "Y": 694.38850621192751
+ },
+ {
+ "Id": "25b30907f6384ece8a919239f82cadbc",
+ "Name": "Integer Slider",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "ShowGeometry": true,
+ "X": -319.25670333398091,
+ "Y": 859.59693603225412
+ },
+ {
+ "Id": "da6e4d16ea8d4944beb81aebc212449a",
+ "Name": "Line.ByStartPointEndPoint",
+ "IsSetAsInput": false,
+ "IsSetAsOutput": false,
+ "Excluded": false,
+ "ShowGeometry": true,
+ "X": 1175.2591439946623,
+ "Y": 563.56670693401566
+ }
+ ],
+ "Annotations": [],
+ "X": 348.74039050993656,
+ "Y": 6.921173453660515,
+ "Zoom": 0.61610714732743088
+ }
+}
\ No newline at end of file
diff --git a/docs/OpenMEPPage/geometry/dyn/pic/Point.ProjectOnToLine.gif b/docs/OpenMEPPage/geometry/dyn/pic/Point.ProjectOnToLine.gif
new file mode 100644
index 00000000..dc894a59
Binary files /dev/null and b/docs/OpenMEPPage/geometry/dyn/pic/Point.ProjectOnToLine.gif differ