zoukankan      html  css  js  c++  java
  • AnyCAD在医疗中的应用

           void addPoint(List<float> buffer, Vector3 pt)
            {
                buffer.Add((float)pt.X);
                buffer.Add((float)pt.Y);
                buffer.Add((float)pt.Z);
            }
    
            void ComputeMinMax(Vector3 a, Vector3 b, Vector3 c, Vector3 minPt, Vector3 maxPt)
            {
                minPt.X = Math.Min(Math.Min(a.X, b.X), c.X);
                minPt.Y = Math.Min(Math.Min(a.Y, b.Y), c.Y);
                minPt.Z = Math.Min(Math.Min(a.Z, b.Z), c.Z);
    
                maxPt.X = Math.Max(Math.Max(a.X, b.X), c.X);
                maxPt.Y = Math.Max(Math.Max(a.Y, b.Y), c.Y);
                maxPt.Z = Math.Max(Math.Max(a.Z, b.Z), c.Z);
            }
    
            private void faceToolStripMenuItem1_Click(object sender, EventArgs e)
            {
                OpenFileDialog dlg = new OpenFileDialog();
                dlg.Filter = "TEXT (*.txt)|*.txt|All Files(*.*)|*.*";
                if (DialogResult.OK != dlg.ShowDialog())
                    return;
                String vertexFileName = dlg.FileName;
                if (DialogResult.OK != dlg.ShowDialog())
                    return;
                String faceFileName = dlg.FileName;
    
                List<Vector3> points = new List<Vector3>();
                StreamReader sr = new StreamReader(vertexFileName, Encoding.Default);
                String line;
                while ((line = sr.ReadLine()) != null)
                {
                    String[] items = line.Split('	');
                    if (items.Length == 3)
                    {
                        Vector3 pt = new Vector3();
                        pt.X = float.Parse(items[0]);
                        pt.Y = float.Parse(items[1]);
                        pt.Z = float.Parse(items[2]);
    
                        points.Add(pt);
                    }
                }
    
    
                List<uint> faces = new List<uint>();
                faces.Add(0);
                faces.Add(1);
                faces.Add(2);
    
                Random num = new Random();
                List<FaceStyle> faceStyles = new List<FaceStyle>();
                FaceStyle fs1 = new FaceStyle();
                fs1.SetColor(num.Next(0, 255), num.Next(0, 255), num.Next(0, 255));
                faceStyles.Add(fs1);
                FaceStyle fs2 = new FaceStyle();
                fs2.SetColor(num.Next(0, 255), num.Next(0, 255), num.Next(0, 255));
                faceStyles.Add(fs2);
                FaceStyle fs3 = new FaceStyle();
                fs3.SetColor(num.Next(0, 255), num.Next(0, 255), num.Next(0, 255));
                faceStyles.Add(fs3);
                FaceStyle fs4 = new FaceStyle();
                fs4.SetColor(num.Next(0, 255), num.Next(0, 255), num.Next(0, 255));
                faceStyles.Add(fs4);
                FaceStyle fs5 = new FaceStyle();
                fs5.SetColor(num.Next(0, 255), num.Next(0, 255), num.Next(0, 255));
                faceStyles.Add(fs5);
                FaceStyle fs6 = new FaceStyle();
                fs6.SetColor(num.Next(0, 255), num.Next(0, 255), num.Next(0, 255));
                faceStyles.Add(fs6);
    
                ElementId id = new ElementId();
                sr = new StreamReader(faceFileName, Encoding.Default);            
                while ((line = sr.ReadLine()) != null)
                {
                    String[] items = line.Split('	');
                    if (items.Length == 3)
                    {
                        int a = int.Parse(items[0]) - 1;
                        int b = int.Parse(items[1]) - 1;
                        int c = int.Parse(items[2]) - 1;
    
                        List<float> positions = new List<float>();
                        addPoint(positions, points[a]);
                        addPoint(positions, points[b]);
                        addPoint(positions, points[c]);
    
                        Vector3 normal = (points[b] - points[a]).CrossProduct(points[c] - points[a]);
                        normal.Normalize();
    
                        List<float> normals = new List<float>();
                        addPoint(normals, normal);
                        addPoint(normals, normal);
                        addPoint(normals, normal);
    
                        AABox bbox = new AABox();
                        ComputeMinMax(points[a], points[b], points[c], bbox.MinPt, bbox.MaxPt);
                        var entity = GlobalInstance.TopoShapeConvert.CreateFaceEntity(positions.ToArray(), faces.ToArray(), normals.ToArray(), null, bbox);
    
                        EntitySceneNode node = new EntitySceneNode();
                        node.SetEntity(entity);
                        node.SetId(++id);
                        node.SetFaceStyle(faceStyles[num.Next(0, 5)]);
                        
    
                        renderView.ShowSceneNode(node);
                    }
                }
            }
    

      

     

  • 相关阅读:
    Aruduino un0 spi oled官方代码
    排序--之快速排序
    用arduino UNO R3板为pro mini板烧录bootloaders
    数码管显示
    gdb高级功能与配置
    ROS中调试c++程序
    自引用结构--之创建双向遍历的链表
    数据文件——将从键盘设备文件读取文本将其写入显示器设备文件
    数据文件——将文本写入显示器设备文件
    ifcfg-eth0
  • 原文地址:https://www.cnblogs.com/anycad/p/8822552.html
Copyright © 2011-2022 走看看