using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB.Plumbing;
namespace Utils
{
public static class Geometryutils
{
/// <summary>
/// (判断两条线有无交点)?返回交点:null
/// </summary>
/// <param name="curve1"></param>
/// <param name="curve2"></param>
/// <returns></returns>
public static XYZ GetIntersectionpoint(Curve curve1, Curve curve2)
{
var compareResulst = curve1.Intersect(curve2, out IntersectionResultArray intersectResult);
return (compareResulst != SetComparisonResult.Disjoint) ? (intersectResult.get_Item(0).XYZPoint) : null;
}
/// <summary>
/// 计算点到直线的距离。利用海伦公式。
/// </summary>
/// <param name="point"></param>
/// <param name="line"></param>
/// <returns></returns>
public static double GetPointTolinedistance(XYZ point,Line line)
{
XYZ start = line.GetEndPoint(0);
XYZ end = line.GetEndPoint(1);
double lineLenght = line.Length;
double starttopoint = start.DistanceTo(point);
double endtopoint = end.DistanceTo(point);
double c = lineLenght + starttopoint + endtopoint;
//海伦公式计算面积
double s = Math.Sqrt(c * (c - lineLenght) * (c - starttopoint) * (c - endtopoint));
if (s>0)
{
return 2*s/lineLenght;
}
return 0;
}
}
public static class Pipeconnectutils
{
/// <summary>
/// 传入两条mepcurve生成弯头
/// </summary>
/// <param name="doc"></param>
/// <param name="mepcurve1"></param>
/// <param name="mepcurve2"></param>
public static void ConnectTwopipesWithElbow(Document doc, MEPCurve mepcurve1, MEPCurve mepcurve2)
{
double minDistance = double.MaxValue;
Connector connector1, connector2;
connector1 = connector2 = null;
foreach (Connector con1 in mepcurve1.ConnectorManager.Connectors)
{
foreach (Connector con2 in mepcurve2.ConnectorManager.Connectors)
{
var dis = con1.Origin.DistanceTo(con2.Origin);
if (dis < minDistance)
{
minDistance = dis;
connector1 = con1;
connector2 = con2;
}
}
}
if (connector1 != null && connector2 != null)
{
var elbow = doc.Create.NewElbowFitting(connector1, connector2);
}
}
/// <summary>
/// 传入三条mepcurve生成三通
/// </summary>
/// <param name="doc"></param>
/// <param name="mepcurve1"></param>
/// <param name="mepcurve2"></param>
/// <param name="mepcurve3"></param>
public static void ConnectThreepipesWithElbow(Document doc, MEPCurve mepcurve1, MEPCurve mepcurve2, MEPCurve mepcurve3)
{
double minDistance = double.MaxValue;
Connector connector1, connector2, connector3;
connector1 = connector2 = connector3 = null;
foreach (Connector con1 in mepcurve1.ConnectorManager.Connectors)
{
foreach (Connector con2 in mepcurve2.ConnectorManager.Connectors)
{
var dis = con1.Origin.DistanceTo(con2.Origin);
if (dis < minDistance)
{
minDistance = dis;
connector1 = con1;
connector2 = con2;
}
}
}
minDistance = double.MaxValue;
foreach (Connector con3 in mepcurve3.ConnectorManager.Connectors)
{
var dis = con3.Origin.DistanceTo(connector1.Origin);
if (dis < minDistance)
{
minDistance = dis;
connector3 = con3;
}
}
if (connector1 != null && connector2 != null && connector3 != null)
{
var elbow = doc.Create.NewTeeFitting(connector1, connector2, connector3);
}
}
}
public static class UnitConvert
{
//英尺转毫米
public static double ToMM(this double d)
{
return UnitUtils.Convert(d, DisplayUnitType.DUT_DECIMAL_FEET, DisplayUnitType.DUT_MILLIMETERS);
}
//毫米转英尺
public static double ToFEET(this double d)
{
return UnitUtils.Convert(d, DisplayUnitType.DUT_MILLIMETERS, DisplayUnitType.DUT_DECIMAL_FEET);
}
//平方英尺转平方米
public static double ToSquareMeters(this double d)
{
return UnitUtils.Convert(d, DisplayUnitType.DUT_SQUARE_FEET, DisplayUnitType.DUT_SQUARE_METERS);
}
/// 平方米转平方英尺
public static double ToSquareFeet(this double d)
{
return UnitUtils.Convert(d, DisplayUnitType.DUT_SQUARE_METERS, DisplayUnitType.DUT_SQUARE_FEET);
}
}
}
Revit二次开发(工具集)updating......
最新推荐文章于 2022-09-15 09:48:46 发布