【Revit 二次开发】满应力文件解析

【Revit 二次开发】满应力文件解析


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.Creation;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Document = Autodesk.Revit.DB.Document;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
using System.Text.RegularExpressions;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.ApplicationServices;
using System.Windows.Media.Media3D;
using Autodesk.Revit.DB.Electrical;
using SEPD.OverheadTransmission.AppCode;

namespace SEPD.OverheadTransmission.CreateTower
{
    [Transaction(TransactionMode.Manual)]
    [Regeneration(RegenerationOption.Manual)]
    [Journaling(JournalingMode.UsingCommandData)]
    class CreateTowerWithAngelSteel : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Document doc = commandData.Application.ActiveUIDocument.Document;
            string rftPath = @"C:\ProgramData\Autodesk\RVT 2018\Family Templates\Chinese\公制常规模型.rft";
            Document rfaDocument = commandData.Application.Application.NewFamilyDocument(rftPath);
            Autodesk.Revit.ApplicationServices.Application application = doc.Application;
            MyFamilyLoadOptions saveOption = new MyFamilyLoadOptions();

            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Multiselect = false;
            //openFileDialog.InitialDirectory = lastTimeOpenLocation;
            openFileDialog.Filter = "myl文件|*.myl|所有文件|*.*";
            openFileDialog.RestoreDirectory = true;
            string fPathO = null;
            string mylFilePath = null;
            string mylFileName = null;
            if (openFileDialog.ShowDialog() == DialogResult.OK /*&& openFamilyName != null*/)
            {
                mylFilePath = openFileDialog.FileName.ToString(); //获取用户选择的文件路径
                mylFileName = mylFilePath.Substring(mylFilePath.LastIndexOf("\\") + 1); //获取用户选择的文件名称
            }
            string[] mylFileContent = File.ReadAllLines(mylFilePath, Encoding.UTF8); //文本中的所有行

            //MessageBox.Show(mylFileContent.Length.ToString());
            //MessageBox.Show(mylFileContent[0]+"\n"+mylFileContent[1]+"\n" + mylFileContent[2]+ "\n"+ mylFileContent[3]);
            // MessageBox.Show(mylFileContent[100].Split(new  char[] {' '},StringSplitOptions.RemoveEmptyEntries).ToList().Count.ToString());
            //string dfe = null;
            //foreach (var ff in mylFileContent[3].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
            //{
            //    dfe += ff + "\n";
            //}
            //MessageBox.Show(dfe);

            List<XYZ> nodeXyzs = new List<XYZ>();
            List<NodeModel> nodeModels = new List<NodeModel>();
            List<NodeModel> nodeModels2 = new List<NodeModel>();
            List<NodeModel> nodeModelsAll = new List<NodeModel>();
            int k = 0;
            foreach (var line in mylFileContent)
            {
                k++;
                string[] l = line.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
                // MessageBox.Show(l.Length.ToString()+"!!!!!");
                try
                {
                    #region  0xyz

                    if (l.Length == 5)
                    {
                        if (l[1] == "0" || l[1] == "1" || l[1] == "2" || l[1] == "3" || l[1] == "4")
                        {
                            double x = Convert.ToDouble(l[2]);
                            double y = Convert.ToDouble(l[3]);
                            double z = Convert.ToDouble(l[4]);

                            if (l[1] == "0")
                            {
                                NodeModel nodeModel = new NodeModel();
                                nodeModel.nodeID = Convert.ToInt32(l[0]);
                                nodeModel.nodeCreateMode = l[1];
                                if (x > 10000 || y > 10000 || z > 10000)
                                {
                                    double xx = x - 10000;
                                    double yy = y - 10000;
                                    double zz = z - 10000;

                                    if (xx < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == yy).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == zz).FirstOrDefault().nodeLoc;
                                        double t = (x - st.X)/(st.X - ed.X);
                                        y = st.Y + t*(st.Y - ed.Y);
                                        z = st.Z + t*(st.Z - ed.Z);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                    else if (yy < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == xx).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == zz).FirstOrDefault().nodeLoc;
                                        double t = (y - st.Y)/(st.Y - ed.Y);
                                        x = st.X + t*(st.X - ed.X);
                                        z = st.Z + t*(st.Z - ed.Z);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                    else if (zz < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == xx).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == yy).FirstOrDefault().nodeLoc;
                                        double t = (z - st.Z)/(st.Z - ed.Z);
                                        x = st.X + t*(st.X - ed.X);
                                        y = st.Y + t*(st.Y - ed.Y);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                }
                                else
                                {
                                    nodeModel.nodeLoc = new XYZ(x, y, z);
                                }
                                nodeModels.Add(nodeModel);
                            }
                            else if (l[1] == "1")
                            {
                                NodeModel nodeModel = new NodeModel();
                                nodeModel.nodeID = Convert.ToInt32(l[0]);
                                nodeModel.nodeCreateMode = l[1];
                                if (x > 10000 || y > 10000 || z > 10000)
                                {
                                    double xx = x - 10000;
                                    double yy = y - 10000;
                                    double zz = z - 10000;
                                    if (xx < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == yy).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == zz).FirstOrDefault().nodeLoc;
                                        double t = (x - st.X)/(st.X - ed.X);
                                        y = st.Y + t*(st.Y - ed.Y);
                                        z = st.Z + t*(st.Z - ed.Z);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                    else if (yy < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == xx).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == zz).FirstOrDefault().nodeLoc;
                                        double t = (y - st.Y)/(st.Y - ed.Y);
                                        x = st.X + t*(st.X - ed.X);
                                        z = st.Z + t*(st.Z - ed.Z);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                    else if (zz < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == xx).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == yy).FirstOrDefault().nodeLoc;
                                        double t = (z - st.Z)/(st.Z - ed.Z);
                                        x = st.X + t*(st.X - ed.X);
                                        y = st.Y + t*(st.Y - ed.Y);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                }
                                else
                                {
                                    nodeModel.nodeLoc = new XYZ(x, y, z);
                                }
                                nodeModels.Add(nodeModel);

                                NodeModel nodeModel1 = new NodeModel();
                                if (Convert.ToInt32(l[0])%10 == 1 || Convert.ToInt32(l[0])%10 == 3)
                                {
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - Convert.ToInt32(l[1]);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 2 || Convert.ToInt32(l[0])%10 == 0)
                                {
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + Convert.ToInt32(l[1]);
                                }
                                nodeModel1.nodeCreateMode = l[1];
                                nodeModel1.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, y, z);
                                nodeModels.Add(nodeModel1);
                            }
                            else if (l[1] == "2")
                            {
                                NodeModel nodeModel = new NodeModel();
                                nodeModel.nodeID = Convert.ToInt32(l[0]);
                                nodeModel.nodeCreateMode = l[1];
                                if (x > 10000 || y > 10000 || z > 10000)
                                {
                                    double xx = x - 10000;
                                    double yy = y - 10000;
                                    double zz = z - 10000;
                                    if (xx < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == yy).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == zz).FirstOrDefault().nodeLoc;
                                        double t = (x - st.X)/(st.X - ed.X);
                                        y = st.Y + t*(st.Y - ed.Y);
                                        z = st.Z + t*(st.Z - ed.Z);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                    else if (yy < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == xx).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == zz).FirstOrDefault().nodeLoc;
                                        double t = (y - st.Y)/(st.Y - ed.Y);
                                        x = st.X + t*(st.X - ed.X);
                                        z = st.Z + t*(st.Z - ed.Z);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                    else if (zz < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == xx).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == yy).FirstOrDefault().nodeLoc;
                                        double t = (z - st.Z)/(st.Z - ed.Z);
                                        x = st.X + t*(st.X - ed.X);
                                        y = st.Y + t*(st.Y - ed.Y);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                }
                                else
                                {
                                    nodeModel.nodeLoc = new XYZ(x, y, z);
                                }
                                nodeModels.Add(nodeModel);

                                NodeModel nodeModel1 = new NodeModel();
                                if (Convert.ToInt32(l[0])%10 == 2 || Convert.ToInt32(l[0])%10 == 3)
                                {
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - Convert.ToInt32(l[1]);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 1 || Convert.ToInt32(l[0])%10 == 0)
                                {
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + Convert.ToInt32(l[1]);
                                }
                                //nodeModel1.nodeID = Convert.ToInt32(l[0])  +Convert.ToInt32(l[1]);
                                nodeModel1.nodeCreateMode = l[1];
                                nodeModel1.nodeLoc = new XYZ(x, -nodeModel.nodeLoc.Y, z);
                                nodeModels.Add(nodeModel1);
                            }
                            else if (l[1] == "3")
                            {
                                NodeModel nodeModel = new NodeModel();
                                nodeModel.nodeID = Convert.ToInt32(l[0]);
                                nodeModel.nodeCreateMode = l[1];
                                if (x > 10000 || y > 10000 || z > 10000)
                                {
                                    double xx = x - 10000;
                                    double yy = y - 10000;
                                    double zz = z - 10000;
                                    if (xx < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == yy).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == zz).FirstOrDefault().nodeLoc;
                                        double t = (x - st.X)/(st.X - ed.X);
                                        y = st.Y + t*(st.Y - ed.Y);
                                        z = st.Z + t*(st.Z - ed.Z);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                    else if (yy < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == xx).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == zz).FirstOrDefault().nodeLoc;
                                        double t = (y - st.Y)/(st.Y - ed.Y);
                                        x = st.X + t*(st.X - ed.X);
                                        z = st.Z + t*(st.Z - ed.Z);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                    else if (zz < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == xx).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == yy).FirstOrDefault().nodeLoc;
                                        double t = (z - st.Z)/(st.Z - ed.Z);
                                        x = st.X + t*(st.X - ed.X);
                                        y = st.Y + t*(st.Y - ed.Y);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                }
                                else
                                {
                                    nodeModel.nodeLoc = new XYZ(x, y, z);
                                }
                                nodeModels.Add(nodeModel);


                                if (Convert.ToInt32(l[0])%10 == 0)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + 3;
                                    nodeModel1.nodeCreateMode = l[1];
                                    nodeModel1.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel1);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 1)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + 1;
                                    nodeModel1.nodeCreateMode = l[1];
                                    nodeModel1.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel1);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 2)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - 1;
                                    nodeModel1.nodeCreateMode = l[1];
                                    nodeModel1.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel1);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 3)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - 3;
                                    nodeModel1.nodeCreateMode = l[1];
                                    nodeModel1.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel1);
                                }
                                //  nodeModel1.nodeID = Convert.ToInt32(l[0])  +Convert.ToInt32(l[1]);

                            }
                            else if (l[1] == "4")
                            {
                                NodeModel nodeModel = new NodeModel();
                                nodeModel.nodeID = Convert.ToInt32(l[0]);
                                nodeModel.nodeCreateMode = l[1];
                                if (x > 10000 || y > 10000 || z > 10000)
                                {
                                    // MessageBox.Show(k.ToString()+"\n"+x.ToString() + "\n" + y.ToString() + "\n" + z.ToString());
                                    int xx = (int) (x - 10000);
                                    int yy = (int) (y - 10000);
                                    int zz = (int) (z - 10000);
                                    //  MessageBox.Show(xx.ToString() + "\n" + yy.ToString() + "\n" + zz.ToString());
                                    if (xx < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == yy).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == zz).FirstOrDefault().nodeLoc;
                                        double t = (x - st.X)/(st.X - ed.X);
                                        y = st.Y + t*(st.Y - ed.Y);
                                        z = st.Z + t*(st.Z - ed.Z);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                    else if (yy < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == xx).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == zz).FirstOrDefault().nodeLoc;
                                        double t = (y - st.Y)/(st.Y - ed.Y);
                                        x = st.X + t*(st.X - ed.X);
                                        z = st.Z + t*(st.Z - ed.Z);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                    }
                                    else if (zz < 0)
                                    {
                                        XYZ st = nodeModels.Where(e => e.nodeID == xx).FirstOrDefault().nodeLoc;
                                        XYZ ed = nodeModels.Where(e => e.nodeID == yy).FirstOrDefault().nodeLoc;
                                        double t = (z - st.Z)/(st.Z - ed.Z);
                                        //MessageBox.Show(k.ToString()+"\n"+ st.X.ToString() + "\n" + st.Y.ToString() + "\n" + st.Z.ToString()+"\n"+ ed.X.ToString() + "\n" + ed.Y.ToString() + "\n" + ed.Z.ToString());
                                        x = st.X + t*(st.X - ed.X);
                                        y = st.Y + t*(st.Y - ed.Y);
                                        nodeModel.nodeLoc = new XYZ(x, y, z);
                                        nodeModel.nodeID = Convert.ToInt32(l[0]);
                                        nodeModel.nodeCreateMode = l[1];
                                        // MessageBox.Show(k.ToString());
                                        // MessageBox.Show(k.ToString()+"\n"+x.ToString() + "\n" + y.ToString() + "\n" + z.ToString());
                                        //MessageBox.Show(nodeModel.nodeLoc.X.ToString() + "\n" + nodeModel.nodeLoc.Y.ToString() + "\n" + nodeModel.nodeLoc.Z.ToString());
                                    }
                                }
                                else
                                {
                                    nodeModel.nodeLoc = new XYZ(x, y, z);
                                }
                                nodeModels.Add(nodeModel);


                                if (Convert.ToInt32(l[0])%10 == 0)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + 1;
                                    nodeModel1.nodeCreateMode = l[1];
                                    nodeModel1.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, y, z);
                                    nodeModels.Add(nodeModel1);

                                    NodeModel nodeModel2 = new NodeModel();
                                    nodeModel2.nodeID = Convert.ToInt32(l[0]) + 2;
                                    nodeModel2.nodeCreateMode = l[1];
                                    nodeModel2.nodeLoc = new XYZ(x, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel2);

                                    NodeModel nodeModel3 = new NodeModel();
                                    nodeModel3.nodeID = Convert.ToInt32(l[0]) + 3;
                                    nodeModel3.nodeCreateMode = l[1];
                                    nodeModel3.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel3);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 1)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - 1;
                                    nodeModel1.nodeCreateMode = l[1];
                                    nodeModel1.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, y, z);
                                    nodeModels.Add(nodeModel1);

                                    NodeModel nodeModel2 = new NodeModel();
                                    nodeModel2.nodeID = Convert.ToInt32(l[0]) + 2;
                                    nodeModel2.nodeCreateMode = l[1];
                                    nodeModel2.nodeLoc = new XYZ(x, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel2);

                                    NodeModel nodeModel3 = new NodeModel();
                                    nodeModel3.nodeID = Convert.ToInt32(l[0]) + 1;
                                    nodeModel3.nodeCreateMode = l[1];
                                    nodeModel3.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel3);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 2)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + 1;
                                    nodeModel1.nodeCreateMode = l[1];
                                    nodeModel1.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, y, z);
                                    nodeModels.Add(nodeModel1);

                                    NodeModel nodeModel2 = new NodeModel();
                                    nodeModel2.nodeID = Convert.ToInt32(l[0]) - 2;
                                    nodeModel2.nodeCreateMode = l[1];
                                    nodeModel2.nodeLoc = new XYZ(x, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel2);

                                    NodeModel nodeModel3 = new NodeModel();
                                    nodeModel3.nodeID = Convert.ToInt32(l[0]) - 1;
                                    nodeModel3.nodeCreateMode = l[1];
                                    nodeModel3.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel3);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 3)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - 1;
                                    nodeModel1.nodeCreateMode = l[1];
                                    nodeModel1.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, y, z);
                                    nodeModels.Add(nodeModel1);

                                    NodeModel nodeModel2 = new NodeModel();
                                    nodeModel2.nodeID = Convert.ToInt32(l[0]) - 2;
                                    nodeModel2.nodeCreateMode = l[1];
                                    nodeModel2.nodeLoc = new XYZ(x, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel2);

                                    NodeModel nodeModel3 = new NodeModel();
                                    nodeModel3.nodeID = Convert.ToInt32(l[0]) - 3;
                                    nodeModel3.nodeCreateMode = l[1];
                                    nodeModel3.nodeLoc = new XYZ(-nodeModel.nodeLoc.X, -nodeModel.nodeLoc.Y, z);
                                    nodeModels.Add(nodeModel3);
                                }

                            }
                        }
                    }

                    #endregion
                }
                catch (Exception ex)
                {
                    MessageBox.Show("1:" + ex.ToString());
                    continue;
                }
            }

            nodeModels.ForEach(
                n => n.nodeLoc = new XYZ(n.nodeLoc.X*1000/304.8, n.nodeLoc.Y*1000/304.8, n.nodeLoc.Z*1000/304.8));

            MessageBox.Show(nodeModels.Count.ToString());
            foreach (var line in mylFileContent)
            {
                string[] l = line.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
                try
                {
                    #region  两点计算 中心拟合点

                    if (l.Length == 5 && k > 20)
                    {
                        if (l[4] == "0" || l[4] == "1" || l[4] == "2" || l[4] == "3" || l[4] == "4")
                        {
                            //foreach (var nm in nodeModels)
                            //{
                            //  MessageBox.Show(l[1] +"\n"+ k.ToString());
                            double x = 0;
                            double y = 0;
                            double z = 0;
                            XYZ st = nodeModels.Where(e => e.nodeID.ToString() == l[1]).First().nodeLoc;
                            XYZ ed = nodeModels.Where(e => e.nodeID.ToString() == l[2]).First().nodeLoc;
                            double x1 = nodeModels.Where(e => e.nodeID.ToString() == l[1]).First().nodeLoc.X;
                            double y1 = nodeModels.Where(e => e.nodeID.ToString() == l[1]).First().nodeLoc.Y;
                            double z1 = nodeModels.Where(e => e.nodeID.ToString() == l[1]).First().nodeLoc.Z;
                            double x2 = nodeModels.Where(e => e.nodeID.ToString() == l[2]).First().nodeLoc.X;
                            double y2 = nodeModels.Where(e => e.nodeID.ToString() == l[2]).First().nodeLoc.Y;
                            double z2 = nodeModels.Where(e => e.nodeID.ToString() == l[2]).First().nodeLoc.Z;
                            // int R = 0;
                            // double r = 0;
                            if (Convert.ToDouble(l[3]) >= 1.0)
                            {
                                double R = Convert.ToDouble(l[3]);
                                x = x1 + (x2 - x1)/R;
                                y = y1 + (y2 - y1)/R;
                                z = z1 + (z2 - z1)/R;
                            }
                            else if (Convert.ToDouble(l[3]) <= 1.0)
                            {
                                double r = Convert.ToDouble(l[3]);
                                x = x1 + (x2 - x1)*r;
                                y = y1 + (y2 - y1)*r;
                                z = z1 + (z2 - z1)*r;
                            }
                            //if (int.TryParse(l[3], out R))
                            //{
                            //    x = x1 + (x2 - x1) / R;
                            //    y = y1 + (y2 - y1) / R;
                            //    z = z1 + (z2 - z1) / R;
                            //}
                            //else if (double.TryParse(l[3], out r))
                            //{
                            //    x = x1 + (x2 - x1) * r;
                            //    y = y1 + (y2 - y1) * r;
                            //    z = z1 + (z2 - z1) * r;
                            //}

                            if (l[4] == "0" && st != null && ed != null)
                            {
                                NodeModel nodeModel = new NodeModel();
                                nodeModel.nodeID = Convert.ToInt32(l[0]);
                                nodeModel.nodeCreateMode = l[4];
                                nodeModel.nodeLoc = new XYZ(x, y, z);
                                nodeModels.Add(nodeModel);
                            }
                            else if (l[4] == "1" && st != null && ed != null)
                            {
                                NodeModel nodeModel = new NodeModel();
                                nodeModel.nodeID = Convert.ToInt32(l[0]);
                                nodeModel.nodeCreateMode = l[4];
                                nodeModel.nodeLoc = new XYZ(x, y, z);
                                nodeModels.Add(nodeModel);

                                NodeModel nodeModel1 = new NodeModel();
                                if (Convert.ToInt32(l[0])%10 == 1 || Convert.ToInt32(l[0])%10 == 3)
                                {
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - Convert.ToInt32(l[4]);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 0 || Convert.ToInt32(l[0])%10 == 2)
                                {
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + Convert.ToInt32(l[4]);
                                }
                                nodeModel1.nodeCreateMode = l[4];
                                nodeModel1.nodeLoc = new XYZ(-x, y, z);
                                nodeModels.Add(nodeModel1);
                            }
                            else if (l[4] == "2" && st != null && ed != null)
                            {
                                NodeModel nodeModel = new NodeModel();
                                nodeModel.nodeID = Convert.ToInt32(l[0]);
                                nodeModel.nodeCreateMode = l[4];
                                nodeModel.nodeLoc = new XYZ(x, y, z);
                                nodeModels.Add(nodeModel);

                                NodeModel nodeModel1 = new NodeModel();
                                if (Convert.ToInt32(l[0])%10 == 1 || Convert.ToInt32(l[0])%10 == 0)
                                {
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + Convert.ToInt32(l[4]);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 3 || Convert.ToInt32(l[0])%10 == 2)
                                {
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - Convert.ToInt32(l[4]);
                                }
                                nodeModel1.nodeCreateMode = l[4];
                                nodeModel1.nodeLoc = new XYZ(x, -y, z);
                                nodeModels.Add(nodeModel1);
                                // if (nodeModel1.nodeID == 2612)
                                // {
                                //     MessageBox.Show("2610-2612");
                                //     MessageBox.Show(nodeModel1.nodeID.ToString() + "\n" + nodeModel.nodeLoc.X.ToString() + "\n" + nodeModel.nodeLoc.Y.ToString() + "\n" + nodeModel.nodeLoc.Z.ToString() + "\n" + nodeModel1.nodeLoc.X.ToString() + "\n" + nodeModel1.nodeLoc.Y.ToString() + "\n" + nodeModel1.nodeLoc.Z.ToString());
                                     MessageBox.Show(k.ToString() + "\n" + nodeModel1.nodeLoc.X.ToString() + "\n" + nodeModel1.nodeLoc.Y.ToString() + "\n" + nodeModel1.nodeLoc.Z.ToString());
                                // }
                            }
                            else if (l[4] == "3" && st != null && ed != null)
                            {
                                NodeModel nodeModel = new NodeModel();
                                nodeModel.nodeID = Convert.ToInt32(l[0]);
                                nodeModel.nodeCreateMode = l[4];
                                nodeModel.nodeLoc = new XYZ(x, y, z);
                                nodeModels.Add(nodeModel);

                                if (Convert.ToInt32(l[0])%10 == 0)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + 3;
                                    nodeModel1.nodeCreateMode = l[4];
                                    nodeModel1.nodeLoc = new XYZ(-x, -y, z);
                                    nodeModels.Add(nodeModel1);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 1)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + 1;
                                    nodeModel1.nodeCreateMode = l[4];
                                    nodeModel1.nodeLoc = new XYZ(-x, -y, z);
                                    nodeModels.Add(nodeModel1);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 2)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - 1;
                                    nodeModel1.nodeCreateMode = l[4];
                                    nodeModel1.nodeLoc = new XYZ(-x, -y, z);
                                    nodeModels.Add(nodeModel1);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 3)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - 3;
                                    nodeModel1.nodeCreateMode = l[4];
                                    nodeModel1.nodeLoc = new XYZ(-x, -y, z);
                                    nodeModels.Add(nodeModel1);
                                }

                            }
                            else if (l[4] == "4" && st != null && ed != null)
                            {
                                NodeModel nodeModel = new NodeModel();
                                nodeModel.nodeID = Convert.ToInt32(l[0]);
                                nodeModel.nodeCreateMode = l[4];
                                nodeModel.nodeLoc = new XYZ(x, y, z);
                                nodeModels.Add(nodeModel);

                                if (Convert.ToInt32(l[0])%10 == 0)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + 1;
                                    nodeModel1.nodeCreateMode = l[4];
                                    nodeModel1.nodeLoc = new XYZ(-x, y, z);
                                    nodeModels.Add(nodeModel1);

                                    NodeModel nodeModel2 = new NodeModel();
                                    nodeModel2.nodeID = Convert.ToInt32(l[0]) + 2;
                                    nodeModel2.nodeCreateMode = l[4];
                                    nodeModel2.nodeLoc = new XYZ(x, -y, z);
                                    nodeModels.Add(nodeModel2);

                                    NodeModel nodeModel3 = new NodeModel();
                                    nodeModel3.nodeID = Convert.ToInt32(l[0]) + 3;
                                    nodeModel3.nodeCreateMode = l[4];
                                    nodeModel3.nodeLoc = new XYZ(-x, -y, z);
                                    nodeModels.Add(nodeModel3);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 1)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - 1;
                                    nodeModel1.nodeCreateMode = l[4];
                                    nodeModel1.nodeLoc = new XYZ(-x, y, z);
                                    nodeModels.Add(nodeModel1);

                                    NodeModel nodeModel2 = new NodeModel();
                                    nodeModel2.nodeID = Convert.ToInt32(l[0]) + 2;
                                    nodeModel2.nodeCreateMode = l[4];
                                    nodeModel2.nodeLoc = new XYZ(x, -y, z);
                                    nodeModels.Add(nodeModel2);

                                    NodeModel nodeModel3 = new NodeModel();
                                    nodeModel3.nodeID = Convert.ToInt32(l[0]) + 1;
                                    nodeModel3.nodeCreateMode = l[4];
                                    nodeModel3.nodeLoc = new XYZ(-x, -y, z);
                                    nodeModels.Add(nodeModel3);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 2)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) + 1;
                                    nodeModel1.nodeCreateMode = l[4];
                                    nodeModel1.nodeLoc = new XYZ(-x, y, z);
                                    nodeModels.Add(nodeModel1);

                                    NodeModel nodeModel2 = new NodeModel();
                                    nodeModel2.nodeID = Convert.ToInt32(l[0]) - 2;
                                    nodeModel2.nodeCreateMode = l[4];
                                    nodeModel2.nodeLoc = new XYZ(x, -y, z);
                                    nodeModels.Add(nodeModel2);

                                    NodeModel nodeModel3 = new NodeModel();
                                    nodeModel3.nodeID = Convert.ToInt32(l[0]) - 1;
                                    nodeModel3.nodeCreateMode = l[4];
                                    nodeModel3.nodeLoc = new XYZ(-x, -y, z);
                                    nodeModels.Add(nodeModel3);
                                }
                                else if (Convert.ToInt32(l[0])%10 == 3)
                                {
                                    NodeModel nodeModel1 = new NodeModel();
                                    nodeModel1.nodeID = Convert.ToInt32(l[0]) - 1;
                                    nodeModel1.nodeCreateMode = l[4];
                                    nodeModel1.nodeLoc = new XYZ(-x, y, z);
                                    nodeModels.Add(nodeModel1);

                                    NodeModel nodeModel2 = new NodeModel();
                                    nodeModel2.nodeID = Convert.ToInt32(l[0]) - 2;
                                    nodeModel2.nodeCreateMode = l[4];
                                    nodeModel2.nodeLoc = new XYZ(x, -y, z);
                                    nodeModels.Add(nodeModel2);

                                    NodeModel nodeModel3 = new NodeModel();
                                    nodeModel3.nodeID = Convert.ToInt32(l[0]) - 3;
                                    nodeModel3.nodeCreateMode = l[4];
                                    nodeModel3.nodeLoc = new XYZ(-x, -y, z);
                                    nodeModels.Add(nodeModel3);
                                }


                            }
                            //}
                        }
                    }

                    #endregion
                }
                catch (Exception ex)
                {
                    MessageBox.Show("2:" + ex.ToString());
                    continue;
                }
            }
            //---------------------------------------------------------------------//

            // nodeModels = nodeModels.Where(g => g.nodeID != 1 || g.nodeID != 2 || g.nodeID != 3).ToList();
            nodeModels = nodeModels.Where(g => Math.Abs(g.nodeLoc.X) < 100000/304.8
                                               && Math.Abs(g.nodeLoc.Y) < 100000/304.8
                                               && Math.Abs(g.nodeLoc.Z) < 100000/304.8).Select(g => g).ToList();

            //---------------------------------------------------------------------//
            Family testcube = Assist.LoadFamily1(rfaDocument,
                @"C:\ProgramData\Autodesk\Revit\Addins\2018\SepdBuliding\OverheadPlatform\expRFA\TowerNodeCube.rfa");
            foreach (var nodeModel in nodeModels)
            {
                //if (Math.Abs(nodeModel.nodeLoc.X)>100 || Math.Abs(nodeModel.nodeLoc.Y)> 100|| Math.Abs(nodeModel.nodeLoc.Z)> 100 )
                //{
                //    MessageBox.Show("0-0"+"\n"+nodeModel.nodeID.ToString());
                //} 
                Transaction tttttt = new Transaction(rfaDocument, "drop");
                tttttt.Start();
                FamilySymbol fs = rfaDocument.GetElement(testcube.GetFamilySymbolIds().First()) as FamilySymbol;
                // fs.Activate();
                fs.Activate();
                // MessageBox.Show(fs.Name);
                FamilyInstance fi = rfaDocument.FamilyCreate.NewFamilyInstance(nodeModel.nodeLoc, fs,
                    Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
                fi.LookupParameter("nodeID").Set(nodeModel.nodeID.ToString());
                tttttt.Commit();
                //Document nodeDocument = doc.EditFamily(fi.Symbol.Family);
                //FamilyManager familyMgr = nodeDocument.FamilyManager;
                //清空族内所有电气工程参数条目
                //foreach (FamilyParameter fp in familyMgr.Parameters)
                //{
                //    if (fp.Definition.Name == "nodeID")
                //    {
                //        Transaction xxs = new Transaction(nodeDocument, "drop");
                //        xxs.Start();

                //        familyMgr.Set(fp, nodeModel.nodeID.ToString());
                //        xxs.Commit();
                //        break;
                //    }
                //}
            }

            //挂点信息
            Family suscube = Assist.LoadFamily1(rfaDocument,
                @"C:\ProgramData\Autodesk\Revit\Addins\2018\SepdBuliding\OverheadPlatform\expRFA\TowerSusNodeCube.rfa");
            List<int> susPoints = new List<int>();
            List<string> susPointsNames = new List<string>();
            foreach (var line in mylFileContent)
            {
                string[] l = line.Split(new char[] { ' ', '-' }, StringSplitOptions.RemoveEmptyEntries);
                if (l.Length >= 5)
                {
                    if (l[4].Contains("前导") || l[4].Contains("后导")
                     || l[4].Contains("前地") || l[4].Contains("后地"))
                    {
                        susPoints.Add(Convert.ToInt32(l[0]));
                        susPointsNames.Add(l[4]);
                    }
                }
              
            }
            for (int i = 0; i < susPoints.Count; i++)
            {
                var susLoc = nodeModels.Where(g => g.nodeID == susPoints[i]).Select(g=>g.nodeLoc).ToList().FirstOrDefault();
                Transaction dropSusPoint = new Transaction(rfaDocument, "dropSusPoint");
                dropSusPoint.Start();
                FamilySymbol fs = rfaDocument.GetElement(suscube.GetFamilySymbolIds().First()) as FamilySymbol;
                // fs.Activate();
                fs.Activate();
                // MessageBox.Show(fs.Name);
                FamilyInstance fi = rfaDocument.FamilyCreate.NewFamilyInstance(susLoc, fs,
                    Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
                fi.LookupParameter("nodeID").Set(susPoints[i].ToString());
                dropSusPoint.Commit();

                Transaction dropConnector = new Transaction(rfaDocument, "dropConnector");
                dropConnector.Start();
                try
                {
                    Reference refFace = GeometryHelper.FindPlanarFace(rfaDocument, fi, application).Reference;
                    ConnectorElement.CreateElectricalConnector(doc, ElectricalSystemType.PowerCircuit, refFace);
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.ToString());
                    dropConnector.Commit();
                  //  return Result.Succeeded;
                    continue;
                }

                dropConnector.Commit();
            }

            //foreach (var nodeModel in nodeModels)
            //{
            //    int susID =  -1;
            //    susID = susPoints.Where(g => g == nodeModel.nodeID).ToList().FirstOrDefault();
            //    if (susID != -1)
            //    {
            //        Transaction ttttttx = new Transaction(rfaDocument, "drop2");
            //        ttttttx.Start();
            //        FamilySymbol fs = rfaDocument.GetElement(suscube.GetFamilySymbolIds().First()) as FamilySymbol;
            //        // fs.Activate();
            //        fs.Activate();
            //        // MessageBox.Show(fs.Name);
            //        FamilyInstance fi = rfaDocument.FamilyCreate.NewFamilyInstance(nodeModel.nodeLoc, fs,
            //            Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
            //        fi.LookupParameter("nodeID").Set(nodeModel.nodeID.ToString());
            //        ttttttx.Commit();
            //    }
               
            //}

            //---------------------------------------------------------------------//
        //CreateTowerForm CreateTowerForm = new CreateTowerForm();
        //CreateTowerForm.Show();
        //FilteredElementCollector collectorx = new FilteredElementCollector(rfaDocument);
        //double maxAbsX = collectorx.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
        //     .Max(g => ((g as FamilyInstance).Location as LocationPoint).Point.X);
        //maxAbsX = Math.Abs(maxAbsX);
        //double maxAbsY = collectorx.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
        //     .Max(g => ((g as FamilyInstance).Location as LocationPoint).Point.Y);
        //maxAbsY = Math.Abs(maxAbsY);
        //double maxAbsZ = collectorx.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
        //     .Max(g => ((g as FamilyInstance).Location as LocationPoint).Point.Z);
        //maxAbsZ = Math.Abs(maxAbsZ);

        //nodeModels = nodeModels.Where(g => Math.Abs(g.nodeLoc.X) > 10000/304.8 
        //|| Math.Abs(g.nodeLoc.Y) > 10000 / 304.8
        //|| Math.Abs(g.nodeLoc.Z) > 10000 / 304.8).Select(g=>g).ToList();

        //   MessageBox.Show(nodeModels.Count.ToString());

        k = 0;
            nodeModelsAll = nodeModels;
            MessageBox.Show("生成角钢路径");
            Transaction createModelLine = new Transaction(rfaDocument, "createModelLine");
            createModelLine.Start();
            foreach (var line in mylFileContent)
            {
                //if (k > 153)
                //{
                //    break;
                //}
                k++;
                try
                {
                    #region create angelsteel  生成角钢路径   以及角钢
                    string[] l = line.Split(new char[] {' ','-'}, StringSplitOptions.RemoveEmptyEntries);
                    if (l.Length >= 14 )
                    {
                        //Transaction createModelLine = new Transaction(rfaDocument, "createModelLine");
                        //createModelLine.Start();
                        if (l[3] == "0" || l[3] == "1" || l[3] == "2" || l[3] == "3" || l[3] == "4")
                        {
                            NodeModel stNode = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault();
                            NodeModel edNode = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault();
                            if (stNode.nodeID.ToString().Contains("2230") || edNode.nodeID.ToString().Contains("2250")|| stNode.nodeID.ToString().Contains("2250") || edNode.nodeID.ToString().Contains("2230"))
                            {
                               // MessageBox.Show("2230-2250 \n"+ stNode.nodeID.ToString()+ edNode.nodeID.ToString());
                                //MessageBox.Show(stNode.nodeID.ToString() +"\n"+ edNode.nodeID.ToString()+"\n" +k.ToString());
                                // MessageBox.Show(stNode.nodeLoc.X.ToString() + "\n" + stNode.nodeLoc.Y.ToString() + "\n" + stNode.nodeLoc.Z.ToString()
                                //     +"\n"+ edNode.nodeLoc.X.ToString() + "\n" + edNode.nodeLoc.Y.ToString() + "\n" + edNode.nodeLoc.Z.ToString());
                            }
                            else if( stNode==null || edNode==null )
                            {
                               MessageBox.Show(k.ToString());
                            }
                            if (stNode != null && edNode != null)
                            {
                                string dddd = null;
                            }

                            if (l[3] == "0" && stNode != null && edNode != null)
                            {
                                XYZ stLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
                                XYZ edLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
                                XYZ origin = XYZ.Zero;
                                Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                Line geomLine = Line.CreateBound(stLoc, edLoc);
                               // XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, origin);
                                SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
                                ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;

                                //---------------------------
                                //Sweep swpAngelSteel = null;
                                //List<Curve> newCurves = new List<Curve>();newCurves.Clear(); newCurves.Add(mLine.GeometryCurve);
                                //if (!l[10].Contains('Φ')
                                //     && (l[10].Contains('L')
                                //     || l[10].Contains('x')
                                //     || l[10].Contains('H')
                                //     || l[10].Contains('B')
                                //     || l[10].Contains('S')
                                //     ))
                                //{
                                //    string L = l[10].Split(new char[] { 'L','x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L','x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves,LL,TT);
                                //}
                                //---------------------------
                            }
                            else if (l[3] == "1" && stNode != null && edNode != null)
                            {
                                XYZ stLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
                                XYZ edLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
                                XYZ origin = XYZ.Zero;
                                Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                Line geomLine = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, origin);
                                SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
                                ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
                                //---------------------------
                                //Sweep swpAngelSteel = null;
                                //List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(mLine.GeometryCurve);
                                //if (!l[10].Contains('Φ')
                                //    && (l[10].Contains('L')
                                //    || l[10].Contains('x')
                                //    || l[10].Contains('H')
                                //    || l[10].Contains('B')
                                //    || l[10].Contains('S')
                                //    ))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S' , 'Φ'}, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H','B','S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    // MessageBox.Show(L + "\n" + T);
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
                                //}
                                //---------------------------
                                if (null != mLine &&
                                    ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id)) 
                                { 
                                    ElementTransformUtils.MirrorElement(rfaDocument,mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
                                }

                                //if (null != mLine && swpAngelSteel != null &&
                                //   ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
                                //{
                                //    ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
                                //}

                                //stLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
                                //edLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
                                //Line geomLine1 = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, origin);
                                //SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
                                //ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;

                            }
                            else if (l[3] == "2" && stNode != null && edNode != null)
                            {
                                XYZ stLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
                                XYZ edLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
                                XYZ origin = XYZ.Zero;
                                Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                Line geomLine = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, stLoc);
                                SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
                                ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
                                //---------------------------
                                //Sweep swpAngelSteel = null;
                                //List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(mLine.GeometryCurve);
                                //if (!l[10].Contains('Φ')
                                //     && (l[10].Contains('L')
                                //     || l[10].Contains('x')
                                //     || l[10].Contains('H')
                                //     || l[10].Contains('B')
                                //     || l[10].Contains('S')
                                //     ))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    // MessageBox.Show(L + "\n" + T);
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
                                //}
                                //---------------------------

                                if (null != mLine &&
                                 ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id)) 
                                {
                                    ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 1, 0), origin));
                                }
                                //if (null != mLine && swpAngelSteel != null &&
                                //  ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
                                //{
                                //    ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
                                //}
                                //stLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
                                //edLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
                                //Line geomLine1 = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, stLoc);
                                //SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
                                //ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;

                            }
                            else if (l[3] == "3" && stNode != null && edNode != null)
                            {
                                XYZ stLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
                                XYZ edLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
                                XYZ origin = XYZ.Zero;
                                Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                Line geomLine = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, stLoc);
                                SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
                                ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
                                //---------------------------
                                //Sweep swpAngelSteel = null;
                                //List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(mLine.GeometryCurve);
                                //if (!l[10].Contains('Φ')
                                //     && (l[10].Contains('L')
                                //     || l[10].Contains('x')
                                //     || l[10].Contains('H')
                                //     || l[10].Contains('B')
                                //     || l[10].Contains('S')
                                //     ))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
                                //}
                                //---------------------------
                                // if (null != mLine &&
                                //ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id)) 
                                // {
                                //     ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 1, 0), origin));
                                // }

                                stLoc = new XYZ(-stLoc.X, -stLoc.Y, stLoc.Z);
                                edLoc = new XYZ(-stLoc.X, -stLoc.Y, stLoc.Z);
                                Line geomLine1 = Line.CreateBound(stLoc, edLoc);
                                Plane goemPlane1 = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                //XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, stLoc);
                                SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
                                ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;

                                //---------------------------
                                //Sweep swpAngelSteel2 = null;
                                //List<Curve> newCurves2 = new List<Curve>(); newCurves.Clear(); newCurves2.Add(mLine1.GeometryCurve);
                                //if (!l[10].Contains('Φ')
                                //    && (l[10].Contains('L')
                                //    || l[10].Contains('x')
                                //    || l[10].Contains('H')
                                //    || l[10].Contains('B')
                                //    || l[10].Contains('S')
                                //    ))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    //   MessageBox.Show(L + "\n" + T);
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpAngelSteel2 = CreateAngelSteel(rfaDocument, newCurves2, LL, TT);
                                //}
                                //---------------------------

                            }
                            else if (l[3] == "4" && stNode != null && edNode != null)
                            {
                                XYZ stLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
                                XYZ edLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
                                XYZ origin = XYZ.Zero;
                                Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                Line geomLine = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, stLoc);
                                SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
                                ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
                                //---------------------------
                                //Sweep swpAngelSteel = null;
                                //List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(mLine.GeometryCurve);
                                //if (!l[10].Contains('Φ')
                                //    && (l[10].Contains('L')
                                //    || l[10].Contains('x')
                                //    || l[10].Contains('H')
                                //    || l[10].Contains('B')
                                //    || l[10].Contains('S')
                                //    ))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //    {
                                //        swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
                                //    }

                                //}
                                //---------------------------

                                if (null != mLine &&
                                ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
                                {
                                    ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
                                }

                                if (null != mLine &&
                                ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
                                {
                                    ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 1, 0), origin));
                                }

                                //if (null != mLine && swpAngelSteel!= null &&
                                //ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
                                //{
                                //    ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
                                //}
                                //if (null != mLine && swpAngelSteel != null &&
                                // ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
                                //{
                                //    ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 1, 0), origin));
                                //}

                                //              if (null != mLine &&
                                //ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
                                //              {
                                //                  ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 1, 0), origin));
                                //              }

                                //stLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
                                //edLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
                                //Line geomLine1 = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, stLoc);
                                //SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
                                //ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;

                                //stLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
                                //edLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
                                //Line geomLine2 = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal2 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane2 = Plane.CreateByNormalAndOrigin(normal2, stLoc);
                                //SketchPlane sketch2 = SketchPlane.Create(rfaDocument, goemPlane2);
                                //ModelLine mLine2 = rfaDocument.FamilyCreate.NewModelCurve(geomLine2, sketch2) as ModelLine;

                                stLoc = new XYZ(-stLoc.X, -stLoc.Y, stLoc.Z);
                                edLoc = new XYZ(-edLoc.X, -edLoc.Y, edLoc.Z);
                                Line geomLine3 = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal3 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                Plane goemPlane3 = Plane.CreateByThreePoints(stLoc, edLoc,new XYZ(0,0,0));
                                SketchPlane sketch13 = SketchPlane.Create(rfaDocument, goemPlane3);
                                ModelLine mLine3 = rfaDocument.FamilyCreate.NewModelCurve(geomLine3, sketch13) as ModelLine;
                                //---------------------------
                                //Sweep swpAngelSteel2 = null;
                                //List<Curve> newCurves2 = new List<Curve>(); newCurves.Clear(); newCurves2.Add(mLine3.GeometryCurve);
                                //if (!l[10].Contains('Φ')
                                //     && (l[10].Contains('L')
                                //     || l[10].Contains('x')
                                //     || l[10].Contains('H')
                                //     || l[10].Contains('B')
                                //     || l[10].Contains('S')
                                //     ))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S' , 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //    {
                                //        swpAngelSteel2 = CreateAngelSteel(rfaDocument, newCurves2, LL, TT);
                                //    }
                                    
                                //}
                                //---------------------------

                            }
                        }
                        // createModelLine.Commit();
                        //  MessageBox.Show("!!!!! " + k.ToString());

                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    // MessageBox.Show("3 create:\n" + ex.ToString());
                    continue;
                }
            }
            createModelLine.Commit();
          
            
            //----------------------------------------------------------------------------------------------------------------
            #region 开始翻转坐标
            MessageBox.Show("开始翻转坐标");

            FilteredElementCollector collectorCubes = new FilteredElementCollector(rfaDocument);
            double maxZ =
             collectorCubes.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
                 .Max(g => ((g as FamilyInstance).Location as LocationPoint).Point.Z);
            XYZ mirrorPoint = new XYZ(0, 0, maxZ / 2);

            //------------------------------------------------------------------------------
            List<NodeModel> afterMirrorNodeModels = new List<NodeModel>();
            foreach (NodeModel nodeModel in nodeModelsAll)
            {
                NodeModel newNodeModel = new NodeModel();
                newNodeModel.nodeID = nodeModel.nodeID;
                newNodeModel.nodeCreateMode = nodeModel.nodeCreateMode;
                newNodeModel.nodeLoc = new XYZ(nodeModel.nodeLoc.X, nodeModel.nodeLoc.Y, maxZ - nodeModel.nodeLoc.Z);
                afterMirrorNodeModels.Add(newNodeModel);
            }
            //------------------------------------------------------------------------------
            Transaction mirrorZ = new Transaction(rfaDocument, "mirrorZ");
            mirrorZ.Start();
            //---------------------------
            FilteredElementCollector collector = new FilteredElementCollector(rfaDocument);
            

            List<FamilyInstance> allFamilyInstances = new List<FamilyInstance>();
            allFamilyInstances =
                collector.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
                    .Cast<FamilyInstance>()
                    .Select(g => g)
                    .ToList();
            foreach (FamilyInstance allFamilyInstance in allFamilyInstances)
            {
                ElementTransformUtils.MirrorElement(rfaDocument, allFamilyInstance.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 0, 1), mirrorPoint));
                rfaDocument.Delete(allFamilyInstance.Id);
            }
            //---------------------------
            FilteredElementCollector collector2 = new FilteredElementCollector(rfaDocument);
            List<CurveElement> allModelLines = new List<CurveElement>();
            allModelLines =
                collector2.WherePasses(new ElementClassFilter(typeof(CurveElement)))
                    .Cast<CurveElement>()
                    .Select(g => g as CurveElement)
                    .ToList();
            foreach (CurveElement allModelLine in allModelLines)
            {
                ElementTransformUtils.MirrorElement(rfaDocument, allModelLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 0, 1), mirrorPoint));
                rfaDocument.Delete(allModelLine.Id);
            }
            //---------------------------
            //FilteredElementCollector collector3 = new FilteredElementCollector(rfaDocument);
            //List<Sweep> allModelLines3 = new List<Sweep>();
            //allModelLines3 =
            //    collector3.WherePasses(new ElementClassFilter(typeof(Sweep)))
            //        .Cast<Sweep>()
            //        .Select(g => g as Sweep)
            //        .ToList();
            //foreach (Sweep allModelLine in allModelLines3)
            //{
            //    ElementTransformUtils.MirrorElement(rfaDocument, allModelLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 0, 1), new XYZ(0, 0, 0)));
            //    rfaDocument.Delete(allModelLine.Id);
            //}
            //---------------------------
            mirrorZ.Commit();
            //----------------------------------------
            //----------------------------------------
            //Transaction moveZ = new Transaction(rfaDocument, "moveZ");
            //moveZ.Start();
            //FilteredElementCollector collectorMove = new FilteredElementCollector(rfaDocument);
            //List<FamilyInstance> allCubes = new List<FamilyInstance>();
            //double minZ =
            //    collectorMove.WherePasses(new ElementClassFilter(typeof (FamilyInstance)))
            //        .Min(g => ((g as FamilyInstance).Location as LocationPoint).Point.Z);
            //allCubes =
            //    collectorMove.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
            //        .Cast<FamilyInstance>()
            //        .Select(g => g)
            //        .ToList();
           
            //foreach (FamilyInstance allCube in allCubes)
            //{
            //    ElementTransformUtils.MoveElement(rfaDocument, allCube.Id, new XYZ(0,0,minZ));
            //    rfaDocument.Delete(allCube.Id);
            //}
             
            //moveZ.Commit();
            #endregion
            //----------------------------------------------------------------------------------------------------------------

            MessageBox.Show("开始生成角钢");
            Transaction newSweep = new Transaction(rfaDocument, "newSweep");
            newSweep.Start();

            foreach (var line in mylFileContent)
            {
                //if (k > 153)
                //{
                //    break;
                //}
                k++;
                try
                {
                    #region create angelsteel  生成角钢路径   以及角钢
                    string[] l = line.Split(new char[] { ' ', '-' }, StringSplitOptions.RemoveEmptyEntries);
                    if (l.Length >= 14)
                    {
                        //Transaction createModelLine = new Transaction(rfaDocument, "createModelLine");
                        //createModelLine.Start();
                        if (l[3] == "0" || l[3] == "1" || l[3] == "2" || l[3] == "3" || l[3] == "4")
                        {
                            NodeModel stNode = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault();
                            NodeModel edNode = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault();
                            if (stNode.nodeID.ToString().Contains("2230") || edNode.nodeID.ToString().Contains("2250") || stNode.nodeID.ToString().Contains("2250") || edNode.nodeID.ToString().Contains("2230"))
                            {
                                // MessageBox.Show("2230-2250 \n"+ stNode.nodeID.ToString()+ edNode.nodeID.ToString());
                                //MessageBox.Show(stNode.nodeID.ToString() +"\n"+ edNode.nodeID.ToString()+"\n" +k.ToString());
                                // MessageBox.Show(stNode.nodeLoc.X.ToString() + "\n" + stNode.nodeLoc.Y.ToString() + "\n" + stNode.nodeLoc.Z.ToString()
                                //     +"\n"+ edNode.nodeLoc.X.ToString() + "\n" + edNode.nodeLoc.Y.ToString() + "\n" + edNode.nodeLoc.Z.ToString());
                            }
                            else if (stNode == null || edNode == null)
                            {
                                MessageBox.Show(k.ToString());
                            }
                            if (stNode != null && edNode != null)
                            {
                                string dddd = null;
                            }

                            if (l[3] == "0" && stNode != null && edNode != null)
                            {
                                XYZ stLoc = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
                                XYZ edLoc = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
                                //XYZ origin = XYZ.Zero;
                                //Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                //Line geomLine = Line.CreateBound(stLoc, edLoc);
                                 XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, origin);
                                //SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
                                //ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;

                                //---------------------------
                                Curve sweepPath = Line.CreateBound(stLoc, edLoc) as Curve;
                                Sweep swpAngelSteel = null;
                                Sweep swpCircleSteel = null;
                                List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(sweepPath);
                                //---------------------------
                                if (!l[10].Contains('Φ')
                                     && (l[10].Contains('L')
                                     || l[10].Contains('x')
                                     || l[10].Contains('H')
                                     || l[10].Contains('B')
                                     || l[10].Contains('S')
                                     ))
                                {
                                    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                    L = Regex.Replace(L, @"[^0-9]+", "");
                                    T = Regex.Replace(T, @"[^0-9]+", "");
                                    double LL = 0;
                                    double.TryParse(L, out LL);
                                    double TT = 0;
                                    double.TryParse(T, out TT);
                                    if (LL != 0 && TT != 0)
                                        swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
                                }
                                //else if (l[10].Contains('Φ'))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpCircleSteel = CreateCircleSteel(rfaDocument, newCurves, LL, TT);
                                //}
                                //---------------------------
                            }
                            else if (l[3] == "1" && stNode != null && edNode != null)
                            {
                                XYZ stLoc = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
                                XYZ edLoc = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
                                XYZ origin = XYZ.Zero;
                                //Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                //Line geomLine = Line.CreateBound(stLoc, edLoc);
                                XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, origin);
                                //SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
                                //ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
                                //---------------------------
                                Curve sweepPath = Line.CreateBound(stLoc, edLoc) as Curve;
                                Sweep swpAngelSteel = null;
                                List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(sweepPath);
                                Sweep swpCircelSteel = null;
                                if (!l[10].Contains('Φ')
                                    && (l[10].Contains('L')
                                    || l[10].Contains('x')
                                    || l[10].Contains('H')
                                    || l[10].Contains('B')
                                    || l[10].Contains('S')
                                    ))
                                {
                                    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                    // MessageBox.Show(L + "\n" + T);
                                    L = Regex.Replace(L, @"[^0-9]+", "");
                                    T = Regex.Replace(T, @"[^0-9]+", "");
                                    double LL = 0;
                                    double.TryParse(L, out LL);
                                    double TT = 0;
                                    double.TryParse(T, out TT);
                                    if (LL != 0 && TT != 0)
                                        swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
                                }
                                //else if (l[10].Contains('Φ'))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpCircelSteel = CreateCircleSteel(rfaDocument, newCurves, LL, TT);
                                //}
                                //---------------------------
                                //if (null != mLine &&
                                //    ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
                                //{
                                //    ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
                                //}

                                if (  swpAngelSteel != null &&
                                   ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
                                {
                                    ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
                                }

                                //stLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
                                //edLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
                                //Line geomLine1 = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, origin);
                                //SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
                                //ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;

                            }
                            else if (l[3] == "2" && stNode != null && edNode != null)
                            {
                                XYZ stLoc = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
                                XYZ edLoc = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
                                XYZ origin = XYZ.Zero;
                                //Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                //Line geomLine = Line.CreateBound(stLoc, edLoc);
                                XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, stLoc);
                                //SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
                                //ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
                                //---------------------------
                                Curve sweepPath = Line.CreateBound(stLoc, edLoc) as Curve;
                                Sweep swpAngelSteel = null;
                                Sweep swpCircleSteel = null;
                                List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(sweepPath);
                                if (!l[10].Contains('Φ')
                                     && (l[10].Contains('L')
                                     || l[10].Contains('x')
                                     || l[10].Contains('H')
                                     || l[10].Contains('B')
                                     || l[10].Contains('S')
                                     ))
                                {
                                    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                    // MessageBox.Show(L + "\n" + T);
                                    L = Regex.Replace(L, @"[^0-9]+", "");
                                    T = Regex.Replace(T, @"[^0-9]+", "");
                                    double LL = 0;
                                    double.TryParse(L, out LL);
                                    double TT = 0;
                                    double.TryParse(T, out TT);
                                    if (LL != 0 && TT != 0)
                                        swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
                                }
                                //else if (l[10].Contains('Φ'))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpCircleSteel = CreateCircleSteel(rfaDocument, newCurves, LL, TT);
                                //}
                                //---------------------------

                                //if (null != mLine &&
                                // ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
                                //{
                                //    ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 1, 0), origin));
                                //}
                                if (    swpAngelSteel != null &&
                                  ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
                                {
                                    ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 1, 0), origin));
                                }
                                //stLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
                                //edLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
                                //Line geomLine1 = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, stLoc);
                                //SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
                                //ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;

                            }
                            else if (l[3] == "3" && stNode != null && edNode != null)
                            {
                                XYZ stLoc = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
                                XYZ edLoc = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
                                XYZ origin = XYZ.Zero;
                                //Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                //Line geomLine = Line.CreateBound(stLoc, edLoc);
                                XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, stLoc);
                                //SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
                                //ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
                                //---------------------------
                                Curve sweepPath = Line.CreateBound(stLoc, edLoc) as Curve;
                                Sweep swpAngelSteel = null;
                                Sweep swpCircleSteel = null;
                                List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(sweepPath);
                                if (!l[10].Contains('Φ')
                                     && (l[10].Contains('L')
                                     || l[10].Contains('x')
                                     || l[10].Contains('H')
                                     || l[10].Contains('B')
                                     || l[10].Contains('S')
                                     ))
                                {
                                    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                    L = Regex.Replace(L, @"[^0-9]+", "");
                                    T = Regex.Replace(T, @"[^0-9]+", "");
                                    double LL = 0;
                                    double.TryParse(L, out LL);
                                    double TT = 0;
                                    double.TryParse(T, out TT);
                                    if (LL != 0 && TT != 0)
                                        swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
                                }
                                //else if (l[10].Contains('Φ'))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpCircleSteel = CreateCircleSteel(rfaDocument, newCurves, LL, TT);
                                //}
                                //---------------------------
                                // if (null != mLine &&
                                //ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id)) 
                                // {
                                //     ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 1, 0), origin));
                                // }

                                stLoc = new XYZ(-stLoc.X, -stLoc.Y, stLoc.Z);
                                edLoc = new XYZ(-stLoc.X, -stLoc.Y, stLoc.Z);
                                //Line geomLine1 = Line.CreateBound(stLoc, edLoc);
                                //Plane goemPlane1 = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, stLoc);
                                //SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
                                //ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;
                                //---------------------------
                                Curve sweepPath2 = Line.CreateBound(stLoc, edLoc) as Curve;
                                List<Curve> newCurves2 = new List<Curve>(); newCurves2.Clear(); newCurves2.Add(sweepPath2);
                                Sweep swpAngelSteel2 = null;
                                Sweep swpCircleSteel2 = null;
                                if (!l[10].Contains('Φ')
                                    && (l[10].Contains('L')
                                    || l[10].Contains('x')
                                    || l[10].Contains('H')
                                    || l[10].Contains('B')
                                    || l[10].Contains('S')
                                    ))
                                {
                                    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                    //   MessageBox.Show(L + "\n" + T);
                                    L = Regex.Replace(L, @"[^0-9]+", "");
                                    T = Regex.Replace(T, @"[^0-9]+", "");
                                    double LL = 0;
                                    double.TryParse(L, out LL);
                                    double TT = 0;
                                    double.TryParse(T, out TT);
                                    if (LL != 0 && TT != 0)
                                        swpAngelSteel2 = CreateAngelSteel(rfaDocument, newCurves2, LL, TT);
                                }
                                //else if (l[10].Contains('Φ'))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpCircleSteel2 = CreateCircleSteel(rfaDocument, newCurves, LL, TT);
                                //}
                                //---------------------------

                            }
                            else if (l[3] == "4" && stNode != null && edNode != null)
                            {
                                XYZ stLoc = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
                                XYZ edLoc = afterMirrorNodeModels.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
                                XYZ origin = XYZ.Zero;
                                //Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
                                //Line geomLine = Line.CreateBound(stLoc, edLoc);
                                XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, stLoc);
                                //SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
                                //ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
                                //---------------------------
                                Curve sweepPath = Line.CreateBound(stLoc, edLoc) as Curve;
                                List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(sweepPath);
                                Sweep swpAngelSteel = null;
                                Sweep swpCircleSteel = null;
                                if (!l[10].Contains('Φ')
                                    && (l[10].Contains('L')
                                    || l[10].Contains('x')
                                    || l[10].Contains('H')
                                    || l[10].Contains('B')
                                    || l[10].Contains('S')
                                    ))
                                {
                                    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                    L = Regex.Replace(L, @"[^0-9]+", "");
                                    T = Regex.Replace(T, @"[^0-9]+", "");
                                    double LL = 0;
                                    double.TryParse(L, out LL);
                                    double TT = 0;
                                    double.TryParse(T, out TT);
                                    if (LL != 0 && TT != 0)
                                    {
                                        swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
                                    }

                                }
                                //else if (l[10].Contains('Φ'))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpCircleSteel = CreateCircleSteel(rfaDocument, newCurves, LL, TT);
                                //}
                                //---------------------------

                                //if (null != mLine &&
                                //ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
                                //{
                                //    ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
                                //}

                                //if (null != mLine &&
                                //ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
                                //{
                                //    ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 1, 0), origin));
                                //}

                                if (  swpAngelSteel != null &&
                                ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
                                {
                                    ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
                                }
                                if (   swpAngelSteel != null &&
                                 ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
                                {
                                    ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 1, 0), origin));
                                }

                                //              if (null != mLine &&
                                //ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
                                //              {
                                //                  ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 1, 0), origin));
                                //              }

                                //stLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
                                //edLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
                                //Line geomLine1 = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, stLoc);
                                //SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
                                //ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;

                                //stLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
                                //edLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
                                //Line geomLine2 = Line.CreateBound(stLoc, edLoc);
                                //XYZ normal2 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane2 = Plane.CreateByNormalAndOrigin(normal2, stLoc);
                                //SketchPlane sketch2 = SketchPlane.Create(rfaDocument, goemPlane2);
                                //ModelLine mLine2 = rfaDocument.FamilyCreate.NewModelCurve(geomLine2, sketch2) as ModelLine;

                                stLoc = new XYZ(-stLoc.X, -stLoc.Y, stLoc.Z);
                                edLoc = new XYZ(-edLoc.X, -edLoc.Y, edLoc.Z);
                                //Line geomLine3 = Line.CreateBound(stLoc, edLoc);
                                XYZ normal3 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
                                //Plane goemPlane3 = Plane.CreateByThreePoints(stLoc, edLoc, new XYZ(0, 0, 0));
                                //SketchPlane sketch13 = SketchPlane.Create(rfaDocument, goemPlane3);
                                //ModelLine mLine3 = rfaDocument.FamilyCreate.NewModelCurve(geomLine3, sketch13) as ModelLine;
                                //---------------------------
                                Curve sweepPath2 = Line.CreateBound(stLoc, edLoc) as Curve;
                                List<Curve> newCurves2 = new List<Curve>(); newCurves2.Clear(); newCurves2.Add(sweepPath2);
                                Sweep swpAngelSteel2 = null;
                                Sweep swpCircleSteel2 = null;
                                if (!l[10].Contains('Φ')
                                     && (l[10].Contains('L')
                                     || l[10].Contains('x')
                                     || l[10].Contains('H')
                                     || l[10].Contains('B')
                                     || l[10].Contains('S')
                                     ))
                                {
                                    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                    L = Regex.Replace(L, @"[^0-9]+", "");
                                    T = Regex.Replace(T, @"[^0-9]+", "");
                                    double LL = 0;
                                    double.TryParse(L, out LL);
                                    double TT = 0;
                                    double.TryParse(T, out TT);
                                    if (LL != 0 && TT != 0)
                                    {
                                        swpAngelSteel2 = CreateAngelSteel(rfaDocument, newCurves2, LL, TT);
                                    }

                                }
                                //else if (l[10].Contains('Φ'))
                                //{
                                //    string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
                                //    string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
                                //    L = Regex.Replace(L, @"[^0-9]+", "");
                                //    T = Regex.Replace(T, @"[^0-9]+", "");
                                //    double LL = 0;
                                //    double.TryParse(L, out LL);
                                //    double TT = 0;
                                //    double.TryParse(T, out TT);
                                //    if (LL != 0 && TT != 0)
                                //        swpCircleSteel2 = CreateCircleSteel(rfaDocument, newCurves, LL, TT);
                                //}
                                //---------------------------

                            }
                        }
                        // createModelLine.Commit();
                        //  MessageBox.Show("!!!!! " + k.ToString());

                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    // MessageBox.Show("3 create:\n" + ex.ToString());
                    continue;
                }
            }


           #region old code
            //int kc = 0;
            //string strr = null;
            //foreach (var line in mylFileContent)
            //{
            //    //if (k > 153)
            //    //{
            //    //    break;
            //    //}
            //    k++;
              
            //    try
            //    {
            //        #region create angelsteel  生成角钢路径   以及角钢
            //        string[] l = line.Split(new char[] { ' ', '-' }, StringSplitOptions.RemoveEmptyEntries);
            //        if (l.Length >= 14)
            //        {
                     
            //            //Transaction createModelLine = new Transaction(rfaDocument, "createModelLine");
            //            //createModelLine.Start();
            //            if (l[3] == "0" || l[3] == "1" || l[3] == "2" || l[3] == "3" || l[3] == "4")
            //            {
            //                NodeModel stNode = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault();
            //                NodeModel edNode = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault();

            //                if (l[3] == "0" && stNode != null && edNode != null)
            //                {
            //                    //XYZ stLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
            //                    //XYZ edLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
            //                    //XYZ origin = XYZ.Zero;
            //                    //Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
            //                    //Line geomLine = Line.CreateBound(stLoc, edLoc);
            //                     XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
            //                    Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, origin);
            //                    //SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
            //                    //ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
            //                    FilteredElementCollector nodeCubeCollector = new FilteredElementCollector(rfaDocument);
            //                    FamilyInstance stNodeFamilyInstance =
            //                        nodeCubeCollector.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
            //                            .Cast<FamilyInstance>()
            //                            .Where(g => g.LookupParameter("nodeID").AsString() == l[0])
            //                            .ToList().FirstOrDefault();
            //                    FamilyInstance edNodeFamilyInstance =
            //                       nodeCubeCollector.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
            //                           .Cast<FamilyInstance>()
            //                           .Where(g => g.LookupParameter("nodeID").AsString() == l[1])
            //                           .ToList().FirstOrDefault();
            //                    if (stNodeFamilyInstance ==null || edNodeFamilyInstance==null)
            //                    {
            //                        kc++; /*strr+= stNodeFamilyInstance.LookupParameter("nodeID").AsString()*/
            //                    }
            //                    XYZ stNodeLoc = (stNodeFamilyInstance.Location as LocationPoint).Point;
            //                    XYZ edNodeLoc = (edNodeFamilyInstance.Location as LocationPoint).Point;
            //                    Curve sweepPath = Line.CreateBound(stNodeLoc, edNodeLoc) as Curve;
            //                    //---------------------------
            //                    Sweep swpAngelSteel = null;
            //                    List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(sweepPath);
            //                    if (!l[10].Contains('Φ')
            //                         && (l[10].Contains('L')
            //                         || l[10].Contains('x')
            //                         || l[10].Contains('H')
            //                         || l[10].Contains('B')
            //                         || l[10].Contains('S')
            //                         ))
            //                    {
            //                        string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
            //                        string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
            //                        L = Regex.Replace(L, @"[^0-9]+", "");
            //                        T = Regex.Replace(T, @"[^0-9]+", "");
            //                        double LL = 0;
            //                        double.TryParse(L, out LL);
            //                        double TT = 0;
            //                        double.TryParse(T, out TT);
            //                        if (LL != 0 && TT != 0)
            //                            swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
            //                    }
            //                    //---------------------------
            //                }
            //                else if (l[3] == "1" && stNode != null && edNode != null)
            //                {
            //                    //XYZ stLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
            //                    //XYZ edLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
            //                    //XYZ origin = XYZ.Zero;
            //                    //Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
            //                    //Line geomLine = Line.CreateBound(stLoc, edLoc);
            //                    XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
            //                    Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, origin);
            //                    //SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
            //                    //ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
            //                    XYZ origin = XYZ.Zero;
            //                    FilteredElementCollector nodeCubeCollector = new FilteredElementCollector(rfaDocument);
            //                    FamilyInstance stNodeFamilyInstance =
            //                        nodeCubeCollector.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
            //                            .Cast<FamilyInstance>()
            //                            .Where(g => g.LookupParameter("nodeID").AsValueString() == l[0])
            //                            .ToList().FirstOrDefault();
            //                    FamilyInstance edNodeFamilyInstance =
            //                       nodeCubeCollector.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
            //                           .Cast<FamilyInstance>()
            //                           .Where(g => g.LookupParameter("nodeID").AsValueString() == l[1])
            //                           .ToList().FirstOrDefault();
            //                    if (stNodeFamilyInstance == null || edNodeFamilyInstance == null)
            //                    {
            //                        kc++;
            //                    }
            //                    XYZ stNodeLoc = (stNodeFamilyInstance.Location as LocationPoint).Point;
            //                    XYZ edNodeLoc = (edNodeFamilyInstance.Location as LocationPoint).Point;
            //                    Curve sweepPath = Line.CreateBound(stNodeLoc, edNodeLoc) as Curve;
            //                    //---------------------------
            //                    Sweep swpAngelSteel = null;
            //                    List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(sweepPath);
            //                    if (!l[10].Contains('Φ')
            //                        && (l[10].Contains('L')
            //                        || l[10].Contains('x')
            //                        || l[10].Contains('H')
            //                        || l[10].Contains('B')
            //                        || l[10].Contains('S')
            //                        ))
            //                    {
            //                        string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
            //                        string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
            //                        // MessageBox.Show(L + "\n" + T);
            //                        L = Regex.Replace(L, @"[^0-9]+", "");
            //                        T = Regex.Replace(T, @"[^0-9]+", "");
            //                        double LL = 0;
            //                        double.TryParse(L, out LL);
            //                        double TT = 0;
            //                        double.TryParse(T, out TT);
            //                        if (LL != 0 && TT != 0)
            //                            swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
            //                    }
            //                    //---------------------------
            //                    if ( swpAngelSteel != null &&
            //                       ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
            //                    {
            //                        ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
            //                    }

            //                    //stLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
            //                    //edLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
            //                    //Line geomLine1 = Line.CreateBound(stLoc, edLoc);
            //                    //XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
            //                    //Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, origin);
            //                    //SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
            //                    //ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;

            //                }
            //                else if (l[3] == "2" && stNode != null && edNode != null)
            //                {
            //                    //XYZ stLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
            //                    //XYZ edLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
            //                    //XYZ origin = XYZ.Zero;
            //                    //Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
            //                    //Line geomLine = Line.CreateBound(stLoc, edLoc);
            //                    XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
            //                    Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, stLoc);
            //                    //SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
            //                    //ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
            //                    XYZ origin = XYZ.Zero;
            //                    FilteredElementCollector nodeCubeCollector = new FilteredElementCollector(rfaDocument);
            //                    FamilyInstance stNodeFamilyInstance =
            //                        nodeCubeCollector.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
            //                            .Cast<FamilyInstance>()
            //                            .Where(g => g.LookupParameter("nodeID").AsValueString() == l[0])
            //                            .ToList().FirstOrDefault();
            //                    FamilyInstance edNodeFamilyInstance =
            //                       nodeCubeCollector.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
            //                           .Cast<FamilyInstance>()
            //                           .Where(g => g.LookupParameter("nodeID").AsValueString() == l[1])
            //                           .ToList().FirstOrDefault();
            //                    if (stNodeFamilyInstance == null || edNodeFamilyInstance == null)
            //                    {
            //                        kc++;
            //                    }
            //                    XYZ stNodeLoc = (stNodeFamilyInstance.Location as LocationPoint).Point;
            //                    XYZ edNodeLoc = (edNodeFamilyInstance.Location as LocationPoint).Point;
            //                    Curve sweepPath = Line.CreateBound(stNodeLoc, edNodeLoc) as Curve;
            //                    //---------------------------
            //                    Sweep swpAngelSteel = null;
            //                    List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(sweepPath);
            //                    if (!l[10].Contains('Φ')
            //                         && (l[10].Contains('L')
            //                         || l[10].Contains('x')
            //                         || l[10].Contains('H')
            //                         || l[10].Contains('B')
            //                         || l[10].Contains('S')
            //                         ))
            //                    {
            //                        string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
            //                        string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
            //                        // MessageBox.Show(L + "\n" + T);
            //                        L = Regex.Replace(L, @"[^0-9]+", "");
            //                        T = Regex.Replace(T, @"[^0-9]+", "");
            //                        double LL = 0;
            //                        double.TryParse(L, out LL);
            //                        double TT = 0;
            //                        double.TryParse(T, out TT);
            //                        if (LL != 0 && TT != 0)
            //                            swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
            //                    }
            //                    //---------------------------

            //                    //if (null != mLine &&
            //                    // ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
            //                    //{
            //                    //    ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 1, 0), origin));
            //                    //}
            //                    if (  swpAngelSteel != null &&
            //                      ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
            //                    {
            //                        ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
            //                    }
            //                    //stLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
            //                    //edLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
            //                    //Line geomLine1 = Line.CreateBound(stLoc, edLoc);
            //                    //XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
            //                    //Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, stLoc);
            //                    //SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
            //                    //ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;

            //                }
            //                else if (l[3] == "3" && stNode != null && edNode != null)
            //                {
            //                    //XYZ stLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
            //                    //XYZ edLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
            //                    //XYZ origin = XYZ.Zero;
            //                    //Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
            //                    //Line geomLine = Line.CreateBound(stLoc, edLoc);
            //                    XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
            //                    Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, stLoc);
            //                    //SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
            //                    //ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
            //                    XYZ origin = XYZ.Zero;
            //                    FilteredElementCollector nodeCubeCollector = new FilteredElementCollector(rfaDocument);
            //                    FamilyInstance stNodeFamilyInstance =
            //                        nodeCubeCollector.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
            //                            .Cast<FamilyInstance>()
            //                            .Where(g => g.LookupParameter("nodeID").AsValueString() == l[0])
            //                            .ToList().FirstOrDefault();
            //                    FamilyInstance edNodeFamilyInstance =
            //                       nodeCubeCollector.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
            //                           .Cast<FamilyInstance>()
            //                           .Where(g => g.LookupParameter("nodeID").AsValueString() == l[1])
            //                           .ToList().FirstOrDefault();
            //                    if (stNodeFamilyInstance == null || edNodeFamilyInstance == null)
            //                    {
            //                        kc++;
            //                    }
            //                    XYZ stNodeLoc = (stNodeFamilyInstance.Location as LocationPoint).Point;
            //                    XYZ edNodeLoc = (edNodeFamilyInstance.Location as LocationPoint).Point;
            //                    Curve sweepPath = Line.CreateBound(stNodeLoc, edNodeLoc) as Curve;
            //                    //---------------------------
            //                    Sweep swpAngelSteel = null;
            //                    List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(sweepPath);
            //                    if (!l[10].Contains('Φ')
            //                         && (l[10].Contains('L')
            //                         || l[10].Contains('x')
            //                         || l[10].Contains('H')
            //                         || l[10].Contains('B')
            //                         || l[10].Contains('S')
            //                         ))
            //                    {
            //                        string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
            //                        string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
            //                        L = Regex.Replace(L, @"[^0-9]+", "");
            //                        T = Regex.Replace(T, @"[^0-9]+", "");
            //                        double LL = 0;
            //                        double.TryParse(L, out LL);
            //                        double TT = 0;
            //                        double.TryParse(T, out TT);
            //                        if (LL != 0 && TT != 0)
            //                            swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
            //                    }
            //                    //---------------------------
            //                    // if (null != mLine &&
            //                    //ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id)) 
            //                    // {
            //                    //     ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 1, 0), origin));
            //                    // }

            //                    stNodeLoc = new XYZ(-stNodeLoc.X, -stNodeLoc.Y, stNodeLoc.Z);
            //                    edNodeLoc = new XYZ(-edNodeLoc.X, -edNodeLoc.Y, edNodeLoc.Z);
            //                    //Line geomLine1 = Line.CreateBound(stNodeLoc, edNodeLoc);
            //                    //Plane goemPlane1 = Plane.CreateByThreePoints(stNodeLoc, edNodeLoc, origin);
            //                    //XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
            //                    //Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, stLoc);
            //                    //SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
            //                    //ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;
            //                    Curve sweepPath2 = Line.CreateBound(stNodeLoc, edNodeLoc) as Curve;

            //                    //---------------------------
            //                    Sweep swpAngelSteel2 = null;
            //                    List<Curve> newCurves2 = new List<Curve>(); newCurves.Clear(); newCurves2.Add(sweepPath2);
            //                    if (!l[10].Contains('Φ')
            //                        && (l[10].Contains('L')
            //                        || l[10].Contains('x')
            //                        || l[10].Contains('H')
            //                        || l[10].Contains('B')
            //                        || l[10].Contains('S')
            //                        ))
            //                    {
            //                        string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
            //                        string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
            //                        //   MessageBox.Show(L + "\n" + T);
            //                        L = Regex.Replace(L, @"[^0-9]+", "");
            //                        T = Regex.Replace(T, @"[^0-9]+", "");
            //                        double LL = 0;
            //                        double.TryParse(L, out LL);
            //                        double TT = 0;
            //                        double.TryParse(T, out TT);
            //                        if (LL != 0 && TT != 0)
            //                            swpAngelSteel2 = CreateAngelSteel(rfaDocument, newCurves2, LL, TT);
            //                    }
            //                    //---------------------------

            //                }
            //                else if (l[3] == "4" && stNode != null && edNode != null)
            //                {
            //                    //XYZ stLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[0])).FirstOrDefault().nodeLoc;
            //                    //XYZ edLoc = nodeModelsAll.Where(e => e.nodeID == Convert.ToInt32(l[1])).FirstOrDefault().nodeLoc;
            //                    //XYZ origin = XYZ.Zero;
            //                    //Plane goemPlane = Plane.CreateByThreePoints(stLoc, edLoc, origin);
            //                    //Line geomLine = Line.CreateBound(stLoc, edLoc);
            //                    XYZ normal = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
            //                    Plane goemPlane = Plane.CreateByNormalAndOrigin(normal, stLoc);
            //                    //SketchPlane sketch = SketchPlane.Create(rfaDocument, goemPlane);
            //                    //ModelLine mLine = rfaDocument.FamilyCreate.NewModelCurve(geomLine, sketch) as ModelLine;
            //                    XYZ origin = XYZ.Zero;
            //                    FilteredElementCollector nodeCubeCollector = new FilteredElementCollector(rfaDocument);
            //                    FamilyInstance stNodeFamilyInstance =
            //                        nodeCubeCollector.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
            //                            .Cast<FamilyInstance>()
            //                            .Where(g => g.LookupParameter("nodeID").AsValueString() == l[0])
            //                            .ToList().FirstOrDefault();
            //                    FamilyInstance edNodeFamilyInstance =
            //                       nodeCubeCollector.WherePasses(new ElementClassFilter(typeof(FamilyInstance)))
            //                           .Cast<FamilyInstance>()
            //                           .Where(g => g.LookupParameter("nodeID").AsValueString() == l[1])
            //                           .ToList().FirstOrDefault();
            //                    if (stNodeFamilyInstance == null || edNodeFamilyInstance == null)
            //                    {
            //                        kc++;
            //                    }
            //                    XYZ stNodeLoc = (stNodeFamilyInstance.Location as LocationPoint).Point;
            //                    XYZ edNodeLoc = (edNodeFamilyInstance.Location as LocationPoint).Point;
            //                    Curve sweepPath = Line.CreateBound(stNodeLoc, edNodeLoc) as Curve;
            //                    //---------------------------
            //                    Sweep swpAngelSteel = null;
            //                    List<Curve> newCurves = new List<Curve>(); newCurves.Clear(); newCurves.Add(sweepPath);
            //                    if (!l[10].Contains('Φ')
            //                        && (l[10].Contains('L')
            //                        || l[10].Contains('x')
            //                        || l[10].Contains('H')
            //                        || l[10].Contains('B')
            //                        || l[10].Contains('S')
            //                        ))
            //                    {
            //                        string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
            //                        string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
            //                        L = Regex.Replace(L, @"[^0-9]+", "");
            //                        T = Regex.Replace(T, @"[^0-9]+", "");
            //                        double LL = 0;
            //                        double.TryParse(L, out LL);
            //                        double TT = 0;
            //                        double.TryParse(T, out TT);
            //                        if (LL != 0 && TT != 0)
            //                        {
            //                            swpAngelSteel = CreateAngelSteel(rfaDocument, newCurves, LL, TT);
            //                        }

            //                    }
            //                    //---------------------------

            //                    //if (null != mLine &&
            //                    //ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
            //                    //{
            //                    //    ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
            //                    //}

            //                    //if (null != mLine &&
            //                    //ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
            //                    //{
            //                    //    ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 1, 0), origin));
            //                    //}

            //                    if (   swpAngelSteel != null &&
            //                    ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
            //                    {
            //                        ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 0, 0), origin));
            //                    }
            //                    if (   swpAngelSteel != null &&
            //                     ElementTransformUtils.CanMirrorElement(rfaDocument, swpAngelSteel.Id))
            //                    {
            //                        ElementTransformUtils.MirrorElement(rfaDocument, swpAngelSteel.Id, Plane.CreateByNormalAndOrigin(new XYZ(0, 1, 0), origin));
            //                    }

            //                    //              if (null != mLine &&
            //                    //ElementTransformUtils.CanMirrorElement(rfaDocument, mLine.Id))
            //                    //              {
            //                    //                  ElementTransformUtils.MirrorElement(rfaDocument, mLine.Id, Plane.CreateByNormalAndOrigin(new XYZ(1, 1, 0), origin));
            //                    //              }

            //                    //stLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
            //                    //edLoc = new XYZ(-stLoc.X, stLoc.Y, stLoc.Z);
            //                    //Line geomLine1 = Line.CreateBound(stLoc, edLoc);
            //                    //XYZ normal1 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
            //                    //Plane goemPlane1 = Plane.CreateByNormalAndOrigin(normal1, stLoc);
            //                    //SketchPlane sketch1 = SketchPlane.Create(rfaDocument, goemPlane1);
            //                    //ModelLine mLine1 = rfaDocument.FamilyCreate.NewModelCurve(geomLine1, sketch1) as ModelLine;

            //                    //stLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
            //                    //edLoc = new XYZ(stLoc.X, -stLoc.Y, stLoc.Z);
            //                    //Line geomLine2 = Line.CreateBound(stLoc, edLoc);
            //                    //XYZ normal2 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
            //                    //Plane goemPlane2 = Plane.CreateByNormalAndOrigin(normal2, stLoc);
            //                    //SketchPlane sketch2 = SketchPlane.Create(rfaDocument, goemPlane2);
            //                    //ModelLine mLine2 = rfaDocument.FamilyCreate.NewModelCurve(geomLine2, sketch2) as ModelLine;

            //                    stNodeLoc = new XYZ(-stNodeLoc.X, -stNodeLoc.Y, stNodeLoc.Z);
            //                    edNodeLoc = new XYZ(-edNodeLoc.X, -edNodeLoc.Y, edNodeLoc.Z);
            //                    //Line geomLine3 = Line.CreateBound(stNodeLoc, edNodeLoc);
            //                    //XYZ normal3 = FaXiangLiang(stLoc.X, stLoc.Y, stLoc.Z, edLoc.X, edLoc.Y, edLoc.Z, 0, 0, 0);
            //                    //Plane goemPlane3 = Plane.CreateByThreePoints(stNodeLoc, edNodeLoc, new XYZ(0, 0, 0));
            //                    //SketchPlane sketch13 = SketchPlane.Create(rfaDocument, goemPlane3);
            //                    //ModelLine mLine3 = rfaDocument.FamilyCreate.NewModelCurve(geomLine3, sketch13) as ModelLine;
            //                    Curve sweepPath3 = Line.CreateBound(stNodeLoc, edNodeLoc) as Curve;
            //                    //---------------------------
            //                    //---------------------------
            //                    Sweep swpAngelSteel2 = null;
            //                    List<Curve> newCurves2 = new List<Curve>(); newCurves.Clear(); newCurves2.Add(sweepPath3);
            //                    if (!l[10].Contains('Φ')
            //                         && (l[10].Contains('L')
            //                         || l[10].Contains('x')
            //                         || l[10].Contains('H')
            //                         || l[10].Contains('B')
            //                         || l[10].Contains('S')
            //                         ))
            //                    {
            //                        string L = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[0];
            //                        string T = l[10].Split(new char[] { 'L', 'x', 'H', 'B', 'S', 'Φ' }, StringSplitOptions.RemoveEmptyEntries)[1];
            //                        L = Regex.Replace(L, @"[^0-9]+", "");
            //                        T = Regex.Replace(T, @"[^0-9]+", "");
            //                        double LL = 0;
            //                        double.TryParse(L, out LL);
            //                        double TT = 0;
            //                        double.TryParse(T, out TT);
            //                        if (LL != 0 && TT != 0)
            //                        {
            //                            swpAngelSteel2 = CreateAngelSteel(rfaDocument, newCurves2, LL, TT);
            //                        }

            //                    }
            //                    //---------------------------

            //                }
            //            }
            //            // createModelLine.Commit();
            //            //  MessageBox.Show("!!!!! " + k.ToString());

            //        }
            //        #endregion
            //    }
            //    catch (Exception ex)
            //    {
            //        // MessageBox.Show("3 create:\n" + ex.ToString());
            //        continue;
            //    }
            //}
            CreateAngelSteel(rfaDocument,);
           #endregion


            newSweep.Commit();

            //MessageBox.Show("缺失角钢数量 : "+kc.ToString());
            //----------------------------------------------------------------------------------------------------------------

            // MessageBox.Show(DateTime.UtcNow.ToString());
            MessageBox.Show("保存中。。。");
            
            Transaction saveTower = new Transaction(doc, "saveTower"); 
            saveTower.Start();
            rfaDocument.SaveAs(Path.GetDirectoryName(mylFilePath) + "\\" + mylFileName +DateTime.UtcNow.ToString().Replace(":","_")+ ".rfa");
            rfaDocument.Close();
            saveTower.Commit();

            //StreamReader sr = new StreamReader(mylFilePath, Encoding.Default);
            //  string line = sr.ReadLine();
            //  sr.Close();

     
            -----------------------------------------------//
            //Transaction ddd = new Transaction(rfaDocument, "createModelLine1");
            //ddd.Start();
            //Line geomLine30 = Line.CreateBound(new XYZ(24, 234, 41), new XYZ(21, 98, 443));
            //XYZ normal30 = FaXiangLiang(24, 234, 41, 21, 98, 443, 0, 0, 0);
            Plane goemPlane30 = rfaDocument.Application.Create.NewPlane(normal30, XYZ.Zero);
            //Plane goemPlane30 = Plane.CreateByNormalAndOrigin(normal30, XYZ.Zero);
            //SketchPlane sketch130 = SketchPlane.Create(rfaDocument, goemPlane30);
            //ModelLine mLine30 = rfaDocument.FamilyCreate.NewModelCurve(geomLine30, sketch130) as ModelLine;
            //ddd.Commit();
            -----------------------------------------------//

            return Result.Succeeded;
            throw new NotImplementedException();
        }


        public XYZ FaXiangLiang(double Px1, double Py1, double Pz1,
            double Px2, double Py2, double Pz2, double Px3, double Py3, double Pz3)
        {
            //double[] newJiaoPoint = new double[3];
            平面方程Ax+BY+CZ+d=0 行列式计算
            //double A = Py1 * Pz2 + Py2 * Pz3 + Py3 * Pz1 - Py1 * Pz3 - Py2 * Pz1 - Py3 * Pz2;
            //double B = -(Px1 * Pz2 + Px2 * Pz3 + Px3 * Pz1 - Px3 * Pz2 - Px2 * Pz1 - Px1 * Pz3);
            //double C = Px1 * Py2 + Px2 * Py3 + Px3 * Py1 - Px1 * Py3 - Px2 * Py1 - Px3 * Py2;
            //double D = -(Px1 * Py2 * Pz3 + Px2 * Py3 * Pz1 + Px3 * Py1 * Pz2 - Px1 * Py3 * Pz2 - Px2 * Py1 * Pz3 - Px3 * Py2 * Pz1);
            //double E = Math.Sqrt(A * A + B * B + C * C);

            //newJiaoPoint[0] = A / E;
            //newJiaoPoint[1] = B / E;
            //newJiaoPoint[2] = C / E;

            //XYZ xyz = new XYZ(newJiaoPoint[0], newJiaoPoint[2], newJiaoPoint[3]);

              return (newJiaoPoint);
            //return xyz;

            Vector3D vector1 = new Vector3D(Px1, Py1, Pz1);//向量1= 
            Vector3D vector2 = new Vector3D(Px2, Py2, Pz2);//向量2=
            Vector3D crossProduct = new Vector3D();//叉积结果

            crossProduct = Vector3D.CrossProduct(vector1, vector2);//计算向量1×向量2

            XYZ xyz = new XYZ(crossProduct.X, crossProduct.Y, crossProduct.Z);
            return xyz;

        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="rfaDocument">族文件</param>
        /// <param name="allSweepPaths">放样路径</param>
        /// <param name="L"></param>
        /// <param name="T"></param>
        /// <returns></returns>
        private Sweep CreateAngelSteel(Document rfaDocument, List<Curve> allSweepPaths, double L ,double T)
        {
            // Document rfaDocument = commandData.Application.ActiveUIDocument.Document;
            //获放样曲线
           // MessageBox.Show("_-_" + allSweepPaths.Count.ToString());
            FilteredElementCollector collector3 = new FilteredElementCollector(rfaDocument);
            // List<Curve> allSweepPaths = new List<Curve>();
            Sweep newSweep = null;
            CurveArray curves = new CurveArray();
            Curve p = allSweepPaths[0];
            curves.Append(p);
            SketchPlane sketchPlane = SketchPlane.Create(rfaDocument, Plane.CreateByThreePoints(p.GetEndPoint(1), p.GetEndPoint(0), XYZ.Zero));
            // ElementTransformUtils.RotateElement(rfaDocument, sketchPlane.Id, p as Line, Math.PI *3/4);
            newSweep = CreateSweep(rfaDocument, sketchPlane, curves, L / 304.8, T / 304.8);

            //allSweepPaths =
            //    collector3.WherePasses(new ElementClassFilter(typeof(CurveElement)))
            //        .Cast<CurveElement>()
            //        .Select(g => g.GeometryCurve)
            //        .ToList();
            //MessageBox.Show("____"+allSweepPaths.Count.ToString());

            //
            //for (int i = 0; i < allSweepPaths.Count; i++)
            //{
            //    CurveArray curves = new CurveArray();
            //    Curve p = allSweepPaths[i];
            //    curves.Append(p);
            //    SketchPlane sketchPlane = SketchPlane.Create(rfaDocument, Plane.CreateByThreePoints(p.GetEndPoint(1), p.GetEndPoint(0), XYZ.Zero));
            //    // ElementTransformUtils.RotateElement(rfaDocument, sketchPlane.Id, p as Line, Math.PI *3/4);
            //    newSweep =  CreateSweep(rfaDocument, sketchPlane, curves,L / 304.8, T / 304.8);
            //}
            return newSweep;
        }

        private Sweep CreateSweep(Document document, SketchPlane sketchPlane, CurveArray curves, double L, double T)
        {
            Sweep sweep = null;

            // make sure we have a family document
            if (true == document.IsFamilyDocument)
            {
                // Define a profile for the sweep
                CurveArrArray arrarr = new CurveArrArray();
                CurveArray arr = new CurveArray();

                // Create an ovoid profile


                XYZ pnt1 = new XYZ(0, 0, 0);
                XYZ pnt2 = new XYZ(L, 0, 0);
                XYZ pnt3 = new XYZ(L, T, 0);
                XYZ pnt4 = new XYZ(T, T, 0);
                XYZ pnt5 = new XYZ(T, L, 0);
                XYZ pnt6 = new XYZ(0, L, 0);

                // arr.Append(Arc.Create(pnt2, 0.05d, 0.0d, 360.0d, XYZ.BasisX, XYZ.BasisY));
                //arr.Append(Arc.Create(pnt1, pnt3, pnt2));
                arr.Append(Line.CreateBound(pnt1, pnt2));
                arr.Append(Line.CreateBound(pnt2, pnt3));
                arr.Append(Line.CreateBound(pnt3, pnt4));
                arr.Append(Line.CreateBound(pnt4, pnt5));
                arr.Append(Line.CreateBound(pnt5, pnt6));
                arr.Append(Line.CreateBound(pnt6, pnt1));
                arrarr.Append(arr);

                SweepProfile profile = document.Application.Create.NewCurveLoopsProfile(arrarr);

                // create a solid ovoid sweep
                sweep = document.FamilyCreate.NewSweep(true, curves, sketchPlane, profile, 0, ProfilePlaneLocation.Start);

                if (null != sweep)
                {
                    // move to proper place
                    XYZ transPoint1 = new XYZ(0, 0, 0);
                    ElementTransformUtils.MoveElement(document, sweep.Id, transPoint1);
                }
                else
                {
                    throw new Exception("Failed to create a new Sweep.");
                }
            }
            else
            {
                throw new Exception("Please open a Family document before invoking this command.");
            }

            return sweep;
        }

        private Sweep CreateCircleSteel(Document rfaDocument, List<Curve> allSweepPaths, double L, double T)
        {
            // Document rfaDocument = commandData.Application.ActiveUIDocument.Document;
            //获放样曲线
            // MessageBox.Show("_-_" + allSweepPaths.Count.ToString());
            FilteredElementCollector collector3 = new FilteredElementCollector(rfaDocument);
            // List<Curve> allSweepPaths = new List<Curve>();
            Sweep newSweep = null;
            CurveArray curves = new CurveArray();
            Curve p = allSweepPaths[0];
            curves.Append(p);
            SketchPlane sketchPlane = SketchPlane.Create(rfaDocument, Plane.CreateByThreePoints(p.GetEndPoint(1), p.GetEndPoint(0), XYZ.Zero));
            // ElementTransformUtils.RotateElement(rfaDocument, sketchPlane.Id, p as Line, Math.PI *3/4);
            newSweep = CreateSweep(rfaDocument, sketchPlane, curves, L / 304.8, T / 304.8);
            
            return newSweep;
        }

        private Sweep CreateCircleSweep(Document document, SketchPlane sketchPlane, CurveArray curves, double L, double T)
        {
            Sweep sweep = null;

            // make sure we have a family document
            if (true == document.IsFamilyDocument)
            {
                // Define a profile for the sweep
                CurveArrArray arrarr = new CurveArrArray();
                CurveArray arr = new CurveArray();

                // Create an ovoid profile


                //XYZ pnt1 = new XYZ(0, 0, 0);
                //XYZ pnt2 = new XYZ(L, 0, 0);
                //XYZ pnt3 = new XYZ(L, T, 0);
                //XYZ pnt4 = new XYZ(T, T, 0);
                //XYZ pnt5 = new XYZ(T, L, 0);
                //XYZ pnt6 = new XYZ(0, L, 0);

                // arr.Append(Arc.Create(pnt2, 0.05d, 0.0d, 360.0d, XYZ.BasisX, XYZ.BasisY));
                //arr.Append(Arc.Create(pnt1, pnt3, pnt2));
                //arr.Append(Line.CreateBound(pnt1, pnt2));
                //arr.Append(Line.CreateBound(pnt2, pnt3));
                //arr.Append(Line.CreateBound(pnt3, pnt4));
                //arr.Append(Line.CreateBound(pnt4, pnt5));
                //arr.Append(Line.CreateBound(pnt5, pnt6));
                //arr.Append(Line.CreateBound(pnt6, pnt1));

                arr.Append(Arc.Create(  XYZ.Zero,L/2 ,0.0d,360.0d,XYZ.BasisX, XYZ.BasisY));
                arrarr.Append(arr);

                SweepProfile profile = document.Application.Create.NewCurveLoopsProfile(arrarr);

                // create a solid ovoid sweep
                sweep = document.FamilyCreate.NewSweep(true, curves, sketchPlane, profile, 0, ProfilePlaneLocation.Start);

                if (null != sweep)
                {
                    // move to proper place
                    XYZ transPoint1 = new XYZ(0, 0, 0);
                    ElementTransformUtils.MoveElement(document, sweep.Id, transPoint1);
                }
                else
                {
                    throw new Exception("Failed to create a new Sweep.");
                }
            }
            else
            {
                throw new Exception("Please open a Family document before invoking this command.");
            }

            return sweep;
        }


     


    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值