【问题标题】:Programmatically Creating CAD Files [closed]以编程方式创建 CAD 文件 [关闭]
【发布时间】:2015-01-10 22:18:42
【问题描述】:

我需要以编程方式创建 CAD 模型。含义:用户为模型设置参数,应用程序输出一个(在此处插入扩展名)文件以在 SolidWorks/3DStudio/Sketchup 中使用。

该应用程序生成具有变化半径的壳(例如管),我想可视化外部生成的壳,通常在 SolidWorks 中。我想这类似于this robot 的输出。

我不完全确定我需要的输出,我需要测试一些选项。所以我正在寻找技术解决方案。一个好的输出文件将是一个具有恒定外半径的管,但内半径随 Z 变化(或相反)。

在 SolidWorks 中,我会创建一条样条曲线并使用“旋转凸台”将其挤压成一个形状。然后创建另一个样条线并使用“旋转切割”移除中心,如下图所示(红色 - 管道的轮廓 - 外半径。绿色 - 内半径的轮廓):

(这个例子是在一个管子上,但形状(交叉点)并没有真正受到限制,但它们总是由几何形状组成)

所以,我的问题是:

  1. 是否有(如果可能的话免费)基础设施可以做到这一点?喜欢的老板 和旋转切割?
  2. 此基础架构是否可以选择导出为 CAD 文件?
  3. 我想我正在使用实体建模 - 是吗?
  4. 我应该只创建一个点云(模拟许多交叉点并将它们连接在一起)吗?那我应该使用哪种文件格式?

主要用于使用solidworks。我正在使用 C#,但一切正常。

对于这个含糊的问题,我深表歉意 - 我是代码 CAD 的新手。

【问题讨论】:

  • 有表面模型,如 STL、OBJ、SLP 文件,还有实体模型,如 STP、X_T、SAT。还有一种非常常见的标准 IGS,它位于实体和曲面之间。首先确定您想要定位的格式(基于solidworks 最喜欢的格式),然后查看是否有任何免费或商业库(.dll)可以以编程方式处理这些文件。我最近根据home.global.co.za/~jhorn中的pascal代码编写了一个OBJ文件阅读器。
  • 看看这个devdept.com
  • 我已将问题编辑得更具体。感谢您朝着正确的方向推动

标签: c# 3d cad


【解决方案1】:

我最终使用了 Eyeshot SDK。我尝试过的替代方案:

  • OpenSCAD - 很好,但我一直在寻找与代码集成的东西,而不是作为外部应用程序
  • OpenCASCADE - 它似乎可以做任何事情,但我花了太多时间来安装和配置。在我看来太乱了

Eyeshot 有一个非常简单的 SDK,可以直接从 C# 中使用。文档很糟糕,我花了太多时间试图找出它抛出的异常 - 但它有很好的代码示例。一旦你了解它就可以了。不过有点贵。

我仍在处理 SolidWorks 导出。 Eyeshot 支持 STL、IGEN、OBJ 和 STEP - Solidworks 可以处理它们,但表面不光滑(圆不是圆,只是许多多边形)。正如我所说 - 仍在工作。

无论如何,供将来参考 - 这是一些代码示例,它们创建的内容与我在问题中描述的内容相似(外半径不变,内半径变化)(查看其中一个示例,如乐高,了解如何使用工作单元):

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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2015-03-09
    • 2011-02-26
    • 2011-01-18
    • 2010-12-15
    相关资源
    最近更新 更多