标签: rhino3d

C#.net多线程

我正在尝试在名为Grasshopper(Rhino3D的一部分)的包中使用C#.net优化一些数学运算.操作非常简单,但必须执行的列表很大,可能会变得更大.

我在我的C#脚本中使用Parallel.ForEach和列表,我得到的最终结果数低于预期.这很可能是因为list.add不是线程安全的(或者我正在构建它的软件中没有线程安全).

  private void RunScript(double z, int x, List<double> y, ref object A)
  {
    List<double> temp = new List<double>();
    double r;
    System.Threading.Tasks.Parallel.ForEach(y, numb =>
      {
      r = Math.Pow((numb * x), z);
      temp.Add(r);
      });
    A = temp;
Run Code Online (Sandbox Code Playgroud)

请帮我找出一种使用CPU多线程在数百个值上运行这个简单数学运算的简单有效的方法(或者如果你有关于GPU CUDA的建议).

我希望这个模糊不清的软件不会打扰你,因为据我所知,它的表现与普通的C#.Net/Python/VB.Net完全相同.

c# multithreading grasshopper rhino3d

15
推荐指数
2
解决办法
1092
查看次数

MissingMemberException:'Guid'对象没有属性'length'

我试图获得曲线的长度,但我收到的消息:MissingMemberException: 'Guid' object has no attribute 'length'C#中的相同脚本完美无缺.python翻译有什么问题?这是文档.

蟒蛇:

import rhinoscriptsyntax as rs

ln = rs.AddLine(pt1, pt2)

a = ln 
b = ln.Length
Run Code Online (Sandbox Code Playgroud)

C#:

Line ln;

ln = new Line(pt1, pt2);

A = ln;
B = ln.Length;
Run Code Online (Sandbox Code Playgroud)

c# python ironpython grasshopper rhino3d

3
推荐指数
1
解决办法
506
查看次数

期望什么作为这种方法的论据?

我试图使用DivideByLength基于RhinoCommon SDK的下面的方法,但我无法理解第三个参数是什么.我试图基于此方法编写下面的代码但我收到以下错误消息:Error: 'Rhino.Geometry.Point3d' is a 'type' but is used like a 'variable'

我认为第三个参数是指定我想要点作为输出而不是双倍.我究竟做错了什么?

方法:

Public Function DivideByLength ( _
    segmentLength As Double, _
    includeStart As Boolean, _
    <OutAttribute> ByRef points As Point3d() _
) As Double()
Run Code Online (Sandbox Code Playgroud)

码:

List<Point3d> pts = new List<Point3d>();

for(int i = 0; i < crv.Count;i = i + 2)
{
  pts.Add(crv[i].DivideByLength(nb, true, out Point3d()));
}
Run Code Online (Sandbox Code Playgroud)

c# methods arguments rhino3d

1
推荐指数
1
解决办法
151
查看次数

从Rhino3d将图层导出为obj

任务

从Rhino将图层导出为obj文件。

问题

使用Python脚本时,我运行导出命令。在界面中会显示一个对话框,而不是导出模型。如果我单击导出界面,则可以正常工作。但是,它会弹出每个图层的对话框。我有很多层,但我想使整个导出过程自动化。

最终目标是通过three.js在webGL中显示obj文件。

我是Python和Rhino的新手,但是了解PHP和JavaScript,因此我对这些概念已经足够了解,并且观看了一些Python教程,因此可以开始使用此脚本。

我尝试过的

我正在使用Rhino,Atom / Python。

import scriptcontext
import rhinoscriptsyntax as rs
from Rhino.Geometry import Point3d

def layerNames(sort=False):
    rc = []
    for layer in scriptcontext.doc.Layers:
        if not layer.IsDeleted: rc.append(layer.FullPath)
    if sort: rc.sort()
    return rc


rs.EnableRedraw(False)

strPath = rs.DocumentPath()
strName = rs.DocumentName()

arrLayers = layerNames(False)
for layerName in arrLayers:
    objs = scriptcontext.doc.Objects.FindByLayer(layerName)
    rs.Command("_-Export "+layerName+".obj", False) 
Run Code Online (Sandbox Code Playgroud)

笔记

我当时正在考虑使用python本机文件保存(open(“ layername.json”,“ a”)。这种想法是要以某种方式从每一层的对象中获取网格,将其转换为three.js json并改用它。但是我不知道如何从图层中获取网格,我已经导入了Rhino.Geometry以查看它是否有帮助。我不知道如何找到要转换的网格,或者我是否可以使用本机导出命令以一种自动化的方式,只使用obj文件。

python 3d rhino3d atom-editor

1
推荐指数
1
解决办法
1921
查看次数

堆栈中哪个值为空?

以下说明来自Rhino Developer Docs

在VBScript中声明变量时,第一次赋值之前的变量值是未定义的,或者Empty.

Dim varValue ' Empty value
Run Code Online (Sandbox Code Playgroud)

所以基本上,Empty"我是一个未初始化的变体."如果您需要检测变量实际上是否为空变量而不是字符串或数字,您可以使用IsEmpty.或者,您可以使用 TypeNameVarType,但IsEmpty最好.

因此Empty用于声明变量.如果声明一个变量,则在堆栈中保留存储空间,但堆栈上的Empty值是多少?

vbscript stack storage rhino3d

1
推荐指数
1
解决办法
93
查看次数