我需要以编程方式创建CAD模型。含义:用户为模型设置参数,应用程序输出(在此处插入扩展名)文件以在SolidWorks / 3DStudio / Sketchup中使用。
应用程序生成具有变化半径的壳(例如管),我希望可视化外部生成的壳,通常在SolidWorks中。我想这就像this robot的输出。
我不完全确定我需要的输出,我需要测试一些选项。所以我正在寻找技术解决方案。一个好的输出文件将是一个具有恒定外部半径的管,但内部半径随Z(或相反)变化。
在SolidWorks中,我创建一个样条曲线并使用'Revolved Boss'将其拉伸到一个形状。然后创建另一个样条曲线并使用'旋转切割'来移除中心,如下图所示(红色 - 管道轮廓 - 外半径。绿色 - 内半径轮廓):
(这个例子在一个管子上,但形状(交叉点)并没有真正限制,但它们总是由几何形状组成)
所以,我的问题是:
主要用途是使用solidworks。我正在使用C#,但任何事情都有。
我很抱歉这个模糊的问题 - 我在代码中使用CAD来崭新。
答案 0 :(得分:3)
我最终使用了Eyeshot SDK。我试过的替代方案:
Eyeshot有一个非常简单的SDK,可直接从C#使用。文档很糟糕,我花了太多时间试图找出它抛出的异常 - 但它有很好的代码示例。一旦你了解它就可以了。虽然有点贵。
我还在从事SolidWorks导出工作。 Eyeshot支持STL,IGEN,OBJ和STEP - Solidworks处理它们都没问题,但表面不平滑(圆圈不是圆形,只有很多多边形)。正如我所说 - 仍然在工作。
无论如何,对于将来的参考 - 以下是一些代码示例,它们创建类似的东西(外半径是常数,内半径变化)到我在问题中描述的内容(查看其中一个样本,如乐高,如何使用WorkUnit的):
public class CBuildOutput : WorkUnit
{
EntityList entities = new EntityList();
private void CreatePipe()
{
double outerRadius = 60;
// First decide on accuracy
double chordalError = 0.05;
int slices = Utility.NumberOfSegments(outerRadius, chordalError);
// Make a cylinder, the cut a hole from it
// 1. Cylinder
Solid cyl = Solid.CreateCylinder(outerRadius, 50, slices);
// 2. Define the hole curve
Curve innerCurve = new Curve(2, new List<Point3D>() {
new Point3D(outerRadius - 20, 0, 0),
new Point3D(outerRadius - 25, 0, 10),
new Point3D(outerRadius - 15, 0, 20),
new Point3D(outerRadius - 25, 0, 30),
new Point3D(outerRadius - 15, 0, 40),
new Point3D(outerRadius - 20, 0, 50)});
// 3. Create an extrude-able sketch
CompositeCurve holeSketch = new CompositeCurve(
new Line(Point3D.Origin, new Point3D(40, 0, 0)),
innerCurve,
new Line(40, 0, 50, 0, 0, 50));
// 4. Create a hole solid
Solid hole = Solid.Revolve(holeSketch, chordalError, 0, 2 * Math.PI, Vector3D.AxisZ, Point3D.Origin, slices, true);
// 5. Cut the hole from the cylinder
Solid[] final = Solid.Difference<Solid>(cyl, hole);
// entities.Add(cyl, 0, Color.Red);
// entities.Add(hole, 0, Color.Red);
entities.Add(final[0], 0, Color.Red);
}
protected override void DoWork(System.ComponentModel.BackgroundWorker worker, System.ComponentModel.DoWorkEventArgs doWorkEventArgs)
{
CreatePipe();
}
protected override void WorkCompleted(ViewportLayout viewportLayout)
{
viewportLayout.Entities = entities;
viewportLayout.ZoomFit();
// viewportLayout.WriteIGES("model.iges", false);
}
}