标签: grasshopper

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
查看次数

如何在three.js中覆盖GLTF材料

我正在尝试创建一种动态方式来在 Three.js 中的 gltf 导入模型上显示太阳能数据。目的是将不同的纯色与模型的不同部分相关联,并能够关闭和打开这些部分。我目前的障碍是更改 gltf 中材料的颜色。

我曾尝试使用 ObjLoader 来代替我输入自己的材料,但这不起作用:/

这是我目前拥有的js:

        const gltfLoader = new THREE.GLTFLoader();
        gltfLoader.load('Building.glb', (gltf) => {
            const root = gltf.scene;
            scene.add(root);

            const box = new THREE.Box3().setFromObject(root);
            const boxSize = box.getSize(new THREE.Vector3()).length();
            const boxCenter = box.getCenter(new THREE.Vector3());

            frameArea(boxSize * 0.5, boxSize, boxCenter, camera);

            controls.maxDistance = boxSize * 10;
            controls.target.copy(boxCenter);
            controls.update();
          });


    function frameArea(sizeToFitOnScreen, boxSize, boxCenter, camera) {
        const halfSizeToFitOnScreen = sizeToFitOnScreen * 0.5;
        const halfFovY = THREE.Math.degToRad(camera.fov * .5);
        const distance = halfSizeToFitOnScreen / Math.tan(halfFovY);
        const direction …
Run Code Online (Sandbox Code Playgroud)

rhino three.js grasshopper gltf

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

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
查看次数

C# 图形位图中文本坐标的放置位置

我编写了一个 C# 渲染方法,将热图渲染到 Grasshopper 画布上。Grasshopper 是一个 Rhino 插件,支持简单的 GUI 编程界面。

protected override void Render(Grasshopper.GUI.Canvas.GH_Canvas canvas, Graphics graphics, Grasshopper.GUI.Canvas.GH_CanvasChannel channel) {

            base.Render(canvas, graphics, channel);

            if (channel == Grasshopper.GUI.Canvas.GH_CanvasChannel.Wires) {
                var comp = Owner as KT_HeatmapComponent;
                if (comp == null)
                    return;

                List<HeatMap> maps = comp.CachedHeatmaps;
                if (maps == null)
                    return;

                if (maps.Count == 0)
                    return;

                int x = Convert.ToInt32(Bounds.X + Bounds.Width / 2);
                int y = Convert.ToInt32(Bounds.Bottom + 10);

                for (int i = 0; i < maps.Count; i++) {
                    Bitmap image = …
Run Code Online (Sandbox Code Playgroud)

c# canvas bitmap rhino-commons grasshopper

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

属性,索引器或动态成员访问可能不会作为out或ref参数传递?

在下面的代码中,我收到错误

属性,索引器或动态成员访问可能不会作为out或ref参数传递?

m_settings.Length编译它时的参数.我该怎么解决这个问题?

  public override bool Read(GH_IO.Serialization.GH_IReader reader)
                {
                    if (m_settings != null && m_settings.Length > 0)
                    {
                        reader.TryGetInt32("StringCount", ref m_settings.Length);
                        for (int i = 0; i < m_settings.Length; i++)
                        {
                            reader.TryGetString("String", i, ref m_settings[i]);
                        }
                    }
                    return base.Read(reader);
                }
Run Code Online (Sandbox Code Playgroud)

c# indexer properties member grasshopper

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

为什么这个多线程代码运行速度比单线程慢?

在此输入图像描述

你好,

我第一次尝试在 Grasshopper 中使用 C# 进行多线程处理。该函数是一个简单的两点距离函数,有两个 10,000 个点的输入。该代码可以工作,但比单线程组件花费的时间要长得多。我很好奇是否有人可以解释这是为什么。

using System;
using System.Collections;
using System.Collections.Generic;

using Rhino;
using Rhino.Geometry;

using Grasshopper;
using Grasshopper.Kernel;
using Grasshopper.Kernel.Data;
using Grasshopper.Kernel.Types;

using System.Threading;
using System.Threading.Tasks;
using System.Collections.Concurrent;


  private void RunScript(List<Point3d> x, List<Point3d> y, ref object A)
  {

    var results = new ConcurrentDictionary<Point3d, double>(Environment.ProcessorCount, x.Count);

    List<double> output = new List<double>();
    foreach(Point3d pt in x) results[pt] = 0;


    Parallel.ForEach(x, pt =>
      {
      results[pt] = pt.DistanceTo(y[x.IndexOf(pt)]);
      });

    foreach(Point3d pt in x)
    {
      output.Add(results[pt]);
    }

    A = output;
Run Code Online (Sandbox Code Playgroud)

我知道使用并发字典、两个循环和列表肯定会产生沉重的开销,但我假设点的数量越高,您就越会看到相对于单个线程的好处,但事实并非如此。如果我使用的是一种非常低效的方法,我想知道,或者对于这样一个简单的任务,开销几乎不可能证明多线程是合理的?

c# multithreading grasshopper

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

使用LINQ比较C#中的List

我正在Rhino Grasshopper中编写一个C#组件.我想确定List是否constraints包含List 中的Point3d对象nodes.如果是这样,则返回列表中b与条目对应的条目nodes应该是true,否则false.要确定对象是否相同,请使用比较容差tol.

作为一个例子,让nodes = {A, B, C, D, E, F}constraints = {a, f}是三维点对象的列表.因为之间的距离Aa与,Ff等于或小于tol:

A.DistanceTo(a) <= tol  // True
Run Code Online (Sandbox Code Playgroud)

我们将得到b = {true, false, false, false, true}回报.

我想我可以找到b以某种方式使用LINQ.

c# linq grasshopper

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