Beauty of not organic Multipipe v5.gh (28.4 KB)
All geometries can be transformed into printable mesh or closed BREP easily.
Beauty of not organic Multipipe v5.gh (28.4 KB)
All geometries can be transformed into printable mesh or closed BREP easily.
This is amazing Quan!
I wonder if [1] more control of the beveling (the Blender sense of beveling) and [2] breaking the Ngons could improve the results further.
I tried not to use ngon mesh, but the result was bad.
It cannot do Blender sense of beveling. It can chamfer, but not fillet. And it cannot chamfer specific edges.
@dale @DavidRutten @DanielPiker
Please implement Weighted Subd Crease in Grasshopper, or at leas, tell what is the schedule.
Expose SubDCrease functionality to RhinoCommon : RH-79547 (myjetbrains.com)
Rhino 8 - SubD weighted creases in Grasshopper - Rhino Developer - McNeel Forum
Please add:clap:![]()
Immediately
And the bevel/fillet mesh tool (in Rhino) too! These are such important tools–I hope they drop before R9 ![]()
Hi, @piac.
Thank you for developing Weaverbird!
Is it possible to bevel the specific edges of a mesh with Weaverbird?
If no, is there any possibility users can do that with Grasshopper?
Rhino can do that, but when I search for related functions in RhinoCommon, there is none.
This and Bevel | Rhino 3-D modeling
![]()
Non-organic?
RH-79547 is fixed in Rhino 8 Service Release 36
Beauty of not organic Multipipe v5 Fillet with subd crease.gh (25.8 KB)
With the new SubDCrease API we can do things like this easily
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;
public class Script_Instance : GH_ScriptInstance
{
private void RunScript(
DataTree<SubD> S,
DataTree<int> E,
DataTree<double> W,
ref object A)
{
DataTree<SubD> outTree = new DataTree<SubD>();
for (int i = 0; i < S.BranchCount; i++)
{
GH_Path path = S.Path(i);
List<SubD> subdList = S.Branch(path);
List<int> edgeIndices = E.PathExists(path) ? E.Branch(path) : (E.BranchCount > 0 ? E.Branch(0) : new List<int>());
List<double> edgeWeights = W.PathExists(path) ? W.Branch(path) : (W.BranchCount > 0 ? W.Branch(0) : new List<double>());
for (int j = 0; j < subdList.Count; j++)
{
SubD originalSubD = subdList[j];
if (originalSubD == null)
{
outTree.Add(null, path);
continue;
}
SubD dupSubD = (SubD)originalSubD.Duplicate();
for(int k = 0; k < edgeIndices.Count; k++)
{
int eIdx = edgeIndices[k];
double w = k < edgeWeights.Count ? edgeWeights[k] : (edgeWeights.Count > 0 ? edgeWeights[edgeWeights.Count - 1] : 0.0);
SubDEdge edge = dupSubD.Edges.Find(eIdx);
if (edge != null)
{
if (w <= 0.0)
{
edge.Sharpness = SubDEdgeSharpness.Smooth;
}
else
{
// 【解除注释,真正执行赋值】
// 由于我们无法完全确定 SR36 暴露的这个结构体的实例化方法名,
// 这里提供最标准的 C# 实例化写法。
// 如果你在新版编辑器里点击 Run 后这里报红字,
// 请删掉等号后面的代码,输入 SubDEdgeSharpness.
// 然后在弹出的代码提示列表中,选择那个带有 Weight/Percentage 之类字眼的方法。
edge.Sharpness = new SubDEdgeSharpness(w);
}
}
}
outTree.Add(dupSubD, path);
}
}
A = outTree;
}
}