2015-02-10 299 views
2

我试图以编程方式创建具有斜角或圆角的文本的三维模型。一个例子见下图。 另一个要求是速度。应该可以在10秒内创建一个10个字母的单词模型。创建具有圆角/圆角或倒角的文本的三维模型

enter image description here

OpenScad是减缓。

我也尝试了Freecad,但Freecad filleting algorithmus(来自Opencascade)要求字形的最短行比圆角半径长。这将排除几乎所有的字体。 随着freecad我也尝试通过轮廓沿着字形路径扫描来创建圆角。虽然结果看起来不错,速度还行,但我无法从中创建出有效的实体。

有没有其他的库可以完成这项工作?是否有一个库可以平滑网格中的拐角? Python作为语言将是首选,但我也会使用其他任何东西。 作为输出格式,任何可以转换为STL的东西都可以。

+0

1.你为什么不自己编码? 2.速度不是问题,你可以为每个角色创建网格,存储它,然后在运行时使用ti ... 3.我会为每个字符做一个Voxel映射,然后平滑角点(通过过滤),然后使用边缘点为Bezier等曲面的网格控制点,或只是平滑的四边形/三角形... – Spektre 2015-02-12 07:29:57

回答

3

您可以尝试另一种FreeCAD方法。当问题出现在字形的短边时,则可以用单边样条逼近这样的多边线。得到的固体可以随意填写(OK,仍然依赖于字体和大小等。)假设你exampole中,“O”,

被称为FreeCAD shapestring“ShapeString”:

w1 = App.ActiveDocument.ShapeString.Shape.Wires[0] 
w2 = App.ActiveDocument.ShapeString.Shape.Wires[1] 

f1 = Draft.makeBSpline(w1.discretize(30), True) 
f2 = Draft.makeBSpline(w2.discretize(30), True) 

f = f1.Shape.cut(f2.Shape) 
pad = f.extrude(App.Vector(0,0,3)) 
Part.show(pad) 

这当然需要一些调整来处理所有的字形。此外,您可能需要增加离散点的数量才能得到确切的结果,这取决于您的需求。

为近似的其他方法:

  • 的FreeCAD线对象也有近似的功能,但我不知道的参数含义

The example "0" approximated with BSplines

+0

感谢您使用此方法的想法和源代码片段。 freecad makeFillet算法似乎也对小半径有问题。但是如果离散点的数量不够高,则半径可以。将不得不尝试一点不同的值。并找到一个算法来创建正确的形状从像样的'8'或'ö'字形... – tobltobs 2015-02-16 09:00:17

+0

你好@tobltobs,你最终结束了一个更好的解决方案,如8和ö更多的角落案件? – myselfhimself 2017-01-15 03:59:13

+0

在Blender下,我所做的(手动)是创建文本,键入文本,选择字体,尝试使用文本斜角的滑块..如果它不能很好地工作(即,某个顶点从R的网格弹出很远然后将对象转换为网格(Alt + C),进入编辑模式并删除所有网格的双精度数据,然后使法线一致,退出编辑模式,添加一个Remesh修改器和“删除断开连接的部分“unoggled,添加Subsurf修改器,添加一个Smooth修饰符。 – myselfhimself 2017-01-15 04:04:17