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('\t');
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('\t');
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);
}
}
}

  

AnyCAD在医疗中的应用的更多相关文章

  1. Python开源框架

    info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...

  2. 3D模型文件读写.Net SDK

    AnyCAD .Net/C++ SDK支持多种3D/2D文件格式,比如BREP.STEP.IGES.STL.DXF.3DS.OBJ.FBX.SKP.IFC.DAE……等,根据使用场景提供不同的API. ...

  3. 不平衡数据下的机器学习方法简介 imbalanced time series classification

    imbalanced time series classification http://www.vipzhuanli.com/pat/books/201510229367.5/2.html?page ...

  4. ADC应用

    数模转换(ADC)的应用笔记 智能时代,数字信号已体现在我们生活的方方面面,A/D,D/A是重要的基础.智能手机触摸信号需要转换为数字信号才能分辨触摸位置.数字去抖:打电话或者麦克风需要将模拟声信号转 ...

  5. (zhuan) Some Talks about Dual Learning

    研究|对偶学习:一种新的机器学习范式  this blog copy from: http://www.msra.cn/zh-cn/news/blogs/2016/12/dual-learning-2 ...

  6. OHEM

    样本不平衡问题 如在二分类中正负样本比例存在较大差距,导致模型的预测偏向某一类别.如果正样本占据1%,而负样本占据99%,那么模型只需要对所有样本输出预测为负样本,那么模型轻松可以达到99%的正确率. ...

  7. [网摘][医学影像] DICOM 和 NIFTI 基础知识与区别

    查找DICOM基础知识时,看到这篇文章里面写了一些关于使用深度学习进行医疗影像分析:文件格式篇.下文摘自:https://www.jiqizhixin.com/articles/2017-07-31 ...

  8. WCF知识点(应用WCF支持原生Socket访问, 原始字节流传输)

    最近在做区域医疗中PIX时, 需要让PIX Manager同时支持HL7的V2和V3版本.思路是利用WCF来同时支持V2版本的c/s架构式的消息协议和V3版本WebService的Soap协议.  实 ...

  9. AI资源对接需求汇总:第3期

    更好的阅读体验,请查看首发原文链接:AI资源对接需求汇总:第3期 平台介绍 平台由人工智能领域几个知名原创公众号发起,总读者约25万. 主要面向人工智能领域的从业者,涵盖图像处理.三维计算机视觉.机器 ...

随机推荐

  1. js中Function方法

    function.apply(thisArg,argArray) apply方法调用function,传递一个会绑定到this上的对象和一个可选的数组作为参数. apply方法被用在apply调用模式 ...

  2. JavaScript代码存在形式

    <!-- 方式一 --> <script type"text/javascript" src="JS文件"></script> ...

  3. iconv字符转换

    iconv是linux下的编码转换的工具,它提供命令行的使用和函数接口支持 函数接口 iconv函数族的头文件是iconv.h,使用前需包含之.#include <iconv.h> ico ...

  4. Dialog 基本使用

    1   :  效果图 btnGeneral.setOnClickListener(new View.OnClickListener() { @Override public void onClick( ...

  5. [hdu4734]F(x)数位dp

    题意:求0~f(b)中,有几个小于等于 f(a)的. 解题关键:数位dp #include<bits/stdc++.h> using namespace std; typedef long ...

  6. mongodb切换到admin

    127.0.0.1:后面是端口,/admin是切换到管理员权限 cd C:\Program Files\MongoDB\Server\3.0\bin mongo.exe 127.0.0.1:27017 ...

  7. ssh远程转发使远程主机在所有ip上监听

    起因:突然一夜之间电信扰拨号ip全变内网地址了,这样即使用了动态域名,绑定的也不是本机ip,外部无法访问了.虽然打电话找电信反映说是可以改回来,但必须先解决眼前的问题,访问内网服务器上的svn仓库. ...

  8. spider(一)

    此爬虫内容无架构: 1.URL管理器:用集合,mysql表,缓存等 2.网页下载器:实现网页下载, urllib2:官方基础模块 requests:三方的(更强):伪装成浏览器访问,代理登录,http ...

  9. 【BZOJ2839】集合计数 组合数+容斥

    [BZOJ2839]集合计数 Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数 ...

  10. Flash builder发布Air程序时设备配置文件supportedProfiles的配置

    1. 发布的程序:需要访问本地进程,那么只能发布为exe程序才可以.   此时supportedProfiles 配置为 extendedDesktop desktop   desktop保证能发布a ...