using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Documents; using ACadSharp.Entities; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using CSMath; using XYZ = Autodesk.Revit.DB.XYZ; using Nice3point.Revit.Toolkit.External; using Nice3point.Revit.Toolkit.Options; using Nice3point.Revit.Toolkit.Utils; using Line = Autodesk.Revit.DB.Line; using Autodesk.Revit.DB.Plumbing; using System.IO; using System.Collections.ObjectModel; using Sai.Toolkit.Revit.Assist; using Microsoft.Win32; using Sai.Toolkit.Core.Helpers; namespace RvAddinTest { [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class GASInstancesCreator : ExternalCommand { private XYZ XYToRevitXYZ(CSMath.XY point) { return new XYZ(point.X, point.Y, 0) / 304.8; } private XYZ XYZToRevitXYZ(CSMath.XYZ point) { return new XYZ(point.X, point.Y, 0) / 304.8; } public override void Execute() { //var id = UiDocument.Selection.GetElementIds().First(); //var elem = Document.GetElement(id) as FamilyInstance; //var point = elem.GetLocXYZ(); //var pipes = new FilteredElementCollector(Document).OfClass(typeof(Pipe)).Cast(); //Pipe p; //foreach (var pipe in pipes) //{ // var line = pipe.GetLocCurve() as Line; // var lineOrigin = line.Origin.Flatten(); // var temp = double.MaxValue; // if (line.Direction == XYZ.BasisZ) // { // var dis = point.DistanceTo(lineOrigin); // if (dis < temp) // { // p = pipe; // } // } //} //var conns = elem.MEPModel.ConnectorManager.UnusedConnectors.OfType().FirstOrDefault(); var dialog = new OpenFileDialog { Filter = "dwg文件(*.dwg)|*.dwg" }; if (dialog.ShowDialog()==true) { var file = dialog.FileName; var cad = new ACadSharp.IO.DwgReader(file).Read(); var polylines = cad.Entities.OfType().Where(l => l.Layer.Name == "RQ" && l.Color.Equals(ACadSharp.Color.ByLayer)); var sizes = cad.Entities.OfType().Where(t => t.Layer.Name == "RQ" && t.Value.Contains("D")); var entities = cad.Entities.OfType().Where(i => i.Layer.Name == "0" || i.Layer.Name == "RQ" || i.Layer.Name == "GAS" || i.Layer.Name == "燃具"); Create(polylines, sizes, entities); } } private void Create(IEnumerable polylines, IEnumerable sizes, IEnumerable entities) { var pipeType = new FilteredElementCollector(Document).OfClass(typeof(PipeType)) .FirstOrDefault(pt => pt.Name == "低压燃气管道"); var systemType = new FilteredElementCollector(Document).OfClass(typeof(PipingSystemType)) .FirstOrDefault(pt => pt.Name == "低压燃气系统"); var mb = new FilteredElementCollector(Document).OfClass(typeof(FamilySymbol)) .FirstOrDefault(pt => pt.Name.Contains("盲板")) as FamilySymbol; var xs = new FilteredElementCollector(Document).OfClass(typeof(FamilySymbol)) .FirstOrDefault(pt => pt.Name.Contains("旋塞")) as FamilySymbol; var flqf = new FilteredElementCollector(Document).OfClass(typeof(FamilySymbol)) .FirstOrDefault(pt => pt.Name.Contains("法兰球阀")) as FamilySymbol; var tqf = new FilteredElementCollector(Document).OfClass(typeof(FamilySymbol)) .FirstOrDefault(pt => pt.Name.Contains("铜制球阀")) as FamilySymbol; var rqb = new FilteredElementCollector(Document).OfClass(typeof(FamilySymbol)) .FirstOrDefault(pt => pt.Name.Contains("燃气表")) as FamilySymbol; var zbf = new FilteredElementCollector(Document).OfClass(typeof(FamilySymbol)) .FirstOrDefault(pt => pt.Name.Contains("自闭阀")) as FamilySymbol; var rsq = new FilteredElementCollector(Document).OfClass(typeof(FamilySymbol)) .FirstOrDefault(pt => pt.Name.Contains("热水器")) as FamilySymbol; var rqz = new FilteredElementCollector(Document).OfClass(typeof(FamilySymbol)) .FirstOrDefault(pt => pt.Name.Contains("燃气灶")) as FamilySymbol; var qf = new FilteredElementCollector(Document).OfClass(typeof(FamilySymbol)) .FirstOrDefault(pt => pt.Name == "球阀") as FamilySymbol; var sd = new FilteredElementCollector(Document).OfClass(typeof(FamilySymbol)) .FirstOrDefault(pt => pt.Name == "丝堵") as FamilySymbol; var sb = new StringBuilder(); using (var ts = new Transaction(Document, "翻模")) { ts.Start(); foreach (var line in polylines) { var tempDistance = double.MaxValue; TextEntity textNoteNearest = null; var vector = XYZ.BasisX; var locXY = line.Vertices.FirstOrDefault().Location; var firstPoint = XYToRevitXYZ(locXY); var lastPoint = XYToRevitXYZ(line.Vertices.LastOrDefault().Location); if (firstPoint.DistanceTo(lastPoint) 0) { File.WriteAllText(@"D:\Users\Zhanggg\Desktop\Errors.txt", sb.ToString(), Encoding.UTF8); } } } } }