Revit SDK:PointCurveCreation 创建点来拟合曲线

这篇具有很好参考价值的文章主要介绍了Revit SDK:PointCurveCreation 创建点来拟合曲线。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

这个例子通过留个例子来展示如何通过点来拟合曲线或者曲面。
Revit SDK:PointCurveCreation 创建点来拟合曲线,Revit SDK 介绍,C#

内容

PointsParabola

生成抛物线的核心逻辑:

double yctr = 0;
XYZ xyz = null;
ReferencePoint rp = null;
double power = 1.2;
while (power < 1.5){
   double xctr = 0;
   double zctr = 0;
   while (zctr < 100){
      zctr = Math.Pow(xctr, power);
      xyz = new XYZ(xctr, yctr, zctr);
      rp = doc.FamilyCreate.NewReferencePoint(xyz);
      if (xctr > 0){
         xyz = new XYZ(-xctr, yctr, zctr);
         rp = doc.FamilyCreate.NewReferencePoint(xyz);
      }
      xctr++;
   }
   power = power + 0.1;
   yctr = yctr + 50;
   zctr = 0;
}

效果:
Revit SDK:PointCurveCreation 创建点来拟合曲线,Revit SDK 介绍,C#

PointsOnCurve

生成一条直线,然后在直线上创建点,核心逻辑:

XYZ start = new XYZ(0, 0, 0);
XYZ end = new XYZ(50, 50, 0);
Autodesk.Revit.DB.Line line = Autodesk.Revit.DB.Line.CreateBound(start, end);
Plane geometryPlane = Plane.CreateByNormalAndOrigin(XYZ.BasisZ, start);
SketchPlane skplane = SketchPlane.Create(doc, geometryPlane);
ModelCurve modelcurve = doc.FamilyCreate.NewModelCurve(line, skplane);
for (double i = 0.1; i <= 1; i = i + 0.1){
   PointLocationOnCurve locationOnCurve = new PointLocationOnCurve(PointOnCurveMeasurementType.NormalizedCurveParameter, i, PointOnCurveMeasureFrom.Beginning);
   PointOnEdge poe = app.Create.NewPointOnEdge(modelcurve.GeometryCurve.Reference, locationOnCurve);
   ReferencePoint rp2 = doc.FamilyCreate.NewReferencePoint(poe);
}

效果:
Revit SDK:PointCurveCreation 创建点来拟合曲线,Revit SDK 介绍,C#

PointsFromExcel

从 Excel 读取点,核心逻辑:

string excelFile = "helix.xlsx";
string filepath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Workbook workbook = excelApp.Workbooks.Open(filepath + "\\" + excelFile,
   Type.Missing, Type.Missing, Type.Missing, Type.Missing,
   Type.Missing, Type.Missing, Type.Missing, Type.Missing,
   Type.Missing, Type.Missing, Type.Missing, Type.Missing,
   Type.Missing, Type.Missing);

Worksheet sheet = (Worksheet)workbook.Sheets[1];
Range excelRange = sheet.UsedRange; object[,] valueArray = (object[,])excelRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);
for (int i = 1; i <= excelRange.Rows.Count; i++)
{
   XYZ xyz = new XYZ(Convert.ToDouble(valueArray[i, 1]), Convert.ToDouble(valueArray[i, 2]), Convert.ToDouble(valueArray[i, 3]));
   ReferencePoint rp = doc.FamilyCreate.NewReferencePoint(xyz);
}
workbook.Close(false, excelFile, null);

效果:
Revit SDK:PointCurveCreation 创建点来拟合曲线,Revit SDK 介绍,C#

PointsFromTextFile

从csv文件中读取文本,核心逻辑:

string filename = "sphere.csv";
string filepath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
if (File.Exists(filepath + "\\" + filename)){
   StreamReader readFile = new StreamReader(filepath + "\\" + filename);
   string line;
   while ((line = readFile.ReadLine()) != null){
      string[] data = line.Split(',');
      XYZ xyz = new XYZ(Convert.ToDouble(data[0]), Convert.ToDouble(data[1]), Convert.ToDouble(data[2]));
      ReferencePoint rp = doc.FamilyCreate.NewReferencePoint(xyz);
   }
}

效果:
Revit SDK:PointCurveCreation 创建点来拟合曲线,Revit SDK 介绍,C#

SineCurve

用点去模拟正弦曲线,核心逻辑:

int pnt_ctr = 0;
double xctr = 0;
XYZ xyz = new XYZ();
ReferencePointArray rparray = new ReferencePointArray();
while (pnt_ctr < 500){
   xyz = new XYZ(xctr, 0, (Math.Cos(xctr)) * 10);
   ReferencePoint rp = doc.FamilyCreate.NewReferencePoint(xyz);
   rparray.Append(rp);
   xctr = xctr + 0.1;
   pnt_ctr++;
}
CurveByPoints curve = doc.FamilyCreate.NewCurveByPoints(rparray);

效果:
Revit SDK:PointCurveCreation 创建点来拟合曲线,Revit SDK 介绍,C#

CatenaryCurve

用点模拟悬垂线,核心逻辑:

for (double scalingFactor = 1; scalingFactor <= 2; scalingFactor = scalingFactor + 0.5){
   ReferencePointArray rpArray = new ReferencePointArray();
   for (double x = -5; x <= 5; x = x + 0.5)   {
      double y = scalingFactor * Math.Cosh(x / scalingFactor);
      if (y < 50)      {
         ReferencePoint rp = doc.FamilyCreate.NewReferencePoint(new XYZ(x, y, 0));
         rpArray.Append(rp);
      }
   }
   CurveByPoints cbp = doc.FamilyCreate.NewCurveByPoints(rpArray);
}

效果:
Revit SDK:PointCurveCreation 创建点来拟合曲线,Revit SDK 介绍,C#

CyclicSurface

用点模拟,并生成曲面,核心逻辑:

XYZ xyz = new XYZ();
ReferenceArrayArray refArAr = new ReferenceArrayArray();
int x = 0;
double z = 0;
while (x < 800){
   ReferencePointArray rpAr = new ReferencePointArray();
   int y = 0;
   while (y < 800){
      z = 50 * (Math.Cos((Math.PI / 180) * x) + Math.Cos((Math.PI / 180) * y));
      xyz = new XYZ(x, y, z);
      ReferencePoint rp = doc.FamilyCreate.NewReferencePoint(xyz);
      rpAr.Append(rp);
      y = y + 40;
   }
   CurveByPoints curve = doc.FamilyCreate.NewCurveByPoints(rpAr);
   ReferenceArray refAr = new ReferenceArray();
   refAr.Append(curve.GeometryCurve.Reference);
   refArAr.Append(refAr);
   x = x + 40;
}
Form form = doc.FamilyCreate.NewLoftForm(true, refArAr);

效果:
Revit SDK:PointCurveCreation 创建点来拟合曲线,Revit SDK 介绍,C#文章来源地址https://www.toymoban.com/news/detail-697059.html

到了这里,关于Revit SDK:PointCurveCreation 创建点来拟合曲线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Revit SDK 介绍:MeasurePanelArea 统计分割表面中族的面积

    这个例子介绍如果从分割表面中,获取内部Tile(或者Panel)的族里面的几何实体的面的面积。 本例子的逻辑相对来说比较简单,主要是对 DividedSurface 和 Element 的API接口要熟悉。 设置单个面板Panel的面积上限和下限 获取所有分割表面 如果用户已经选择了分割表面,就使用当前

    2024年02月09日
    浏览(32)
  • Revit SDK 介绍:AutoStamp 自动水印 & AutoUpdate 自动更新 & CancelSave

    这三个例子都是通过注册事件来完成相应的工作,内容比较简单。 事件参考博客:Revit API:Events 事件总览 使用到的事件: 注册事件: 事件处理: 这个例子仅仅是更新了地址信息: 注册文件打开完成事件 application.ControlledApplication.DocumentOpened 事件处理函数 在文件上加入地址

    2024年02月10日
    浏览(37)
  • MATLAB曲线拟合工具箱(cftool)介绍(完结)

    本文通过实例对MATLAB曲线拟合工具箱进行详细讲解,帮助大家更容易理解曲线拟合工具箱(cftool)。 已知 x = [0 0.2 0.50.8 0.9 1.3 1.4 1.9 2.1 2.2 2.5 2.6 2.9 3.0]; y = [1.27792.1596 2.7311 2.5974 2.4068 1.6215 1.4178 0.9955 0.9666 0.8837 0.9639 1.00311.1233 1.1583]; 并且根据某种物理或数学关系确定y=f(x)的表达

    2024年02月02日
    浏览(44)
  • Revit SDK:AutoParameter 添加参数

    这个例子介绍如果往族文件里添加参数。 Revit 的参数,参考官方文档: 这个例子的关键接口: 如果是共享参数,他的定义存储在外部文件,需要通过 Autodesk.Revit.ApplicationServices.Application 的 DefinitionFile OpenSharedParameterFile() 读取共享参数。从 DefinitionFile 获取 DefinitionGroups ,从

    2024年02月10日
    浏览(35)
  • 欠拟合、过拟合、正则化、学习曲线

    欠拟合:模型相对于要解决的问题来说太简单了,模型并没有拟合训练数据的状态 过拟合:模型相对于要解决的问题来说太复杂了,模型只能拟合训练数据的状态 下图来自:数据分析中的插值与拟合(2) —— 拟合 如何避免过拟合呢? 增加全部训练数据的数量 使用简单模型

    2024年02月11日
    浏览(44)
  • 曲线拟合和函数拟合在线工具

    曲线拟合在线工具(跟距据几个坐标点求方程) 链接:https://qianqianquege.com/math 名称:千千工具箱    

    2024年03月21日
    浏览(49)
  • Revit 3D高效处理:cad exchanger sdk 3.21 Crack

    3D 格式概述:Revit Revit 已成为寻求高效、准确的建筑信息建模的专业人士的首选解决方案。在这篇引人入胜的功能概述中了解 Revit 的特性和影响。 什么是Revit? Autodesk Revit 是一款流行的 CAD 软件,重点关注 BIM,被建筑师、工程师、设计师和承包商广泛使用。它最初由 Charle

    2024年02月11日
    浏览(48)
  • Revit SDK:SpatialFieldGradient 在面上显示渐变颜色(AVF)分析显示样式

    这个例子使用Revit显示样式功能将面显示成不同的颜色。分析显示样式参考官方文档。 效果: 核心逻辑: 得到一个 SpatialFieldManager 拾取一系列的面: uiDoc.Selection.PickObjects(ObjectType.Face) 计算面上的 UV 值,以及对应的颜色值 应用到对应的面: sfm.UpdateSpatialFieldPrimitive 核心代码

    2024年02月10日
    浏览(44)
  • Python做曲线拟合(一元多项式拟合及任意函数拟合)

    目录 1. 一元多项式拟合 使用方法 np.polyfit(x, y, deg) 2. 任意函数拟合 使用 curve_fit() 方法 实例: (1)初始化 x 和 y 数据集 (2)建立自定义函数 (3)使用自定义的函数生成拟合函数绘图  polyfig 使用的是最小二乘法,用于拟合一元多项式函数。 参数说明: x 就是x坐标,

    2024年02月02日
    浏览(54)
  • MATLAB实现任意函数曲线拟合(高斯曲线为例)

    matlab实现多项式拟合的函数相对比较简单,且容易记忆,但是复杂曲线的拟合就比较繁杂,比如高斯曲线,也叫正态分布函数,线上做个笔记,大家共勉。 拟合前后曲线对比结果如下。

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包