笑遥佛 发表于 2023-2-26 22:29

GEN指令转换,零件导CAD

最近发现和个开源的ANYCAD工具,超级好用,可以用他来用他来显示GEN
1.利用NUGET,下载ANYCAD到到工程,会自动引用

2.在窗体上放置一个SplitContainer控件

3.把SplitContainer1.Panel当成挂上ANYCAD显示控件,代码如下

4.写选择左边的LIST时的事件
    Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
      GroupBox2.Text = "GEN文件列表" + ListBox1.SelectedItems.Count.ToString + "/" + ListBox1.Items.Count.ToString
      If Me.ListBox1.SelectedItems.Count > 0 Then
            mRenderView.ClearAll()
            Dim material_mark As BasicMaterial
            material_mark = BasicMaterial.Create("gold")
            material_mark.SetColor(New AnyCAD.Foundation.Vector3(0, 1, 0))
            Dim material_burn As BasicMaterial
            material_burn = BasicMaterial.Create("ruby")
            material_burn.SetColor(New AnyCAD.Foundation.Vector3(1, 0, 0))
            Dim material_plate As BasicMaterial
            material_plate = BasicMaterial.Create("ruby")
            material_plate.SetColor(New AnyCAD.Foundation.Vector3(1, 1, 1))
            Dim str As String = Me.ListBox1.SelectedItems(0)
            Dim genFileName As String = (Me.ToolStripStatusLabel4.Text & str)
            Dim pocessor As New ToppingPocessor
            pocessor.GetSegList(genFileName)
            For i = 0 To pocessor.segList.Count - 1
                Dim segment As SegmentCls = pocessor.segList(i)
                If segment.radius = 0 Then
                  Dim line_SB = SketchBuilder.MakeLine(New GPnt(segment.start_u, segment.start_v, 0), New GPnt(segment.end_u, segment.end_v, 0))
                  If segment.action = "Mark" Then
                        mRenderView.ShowSceneNode(BrepSceneNode.Create(line_SB, material_mark, material_mark))
                  Else
                        mRenderView.ShowSceneNode(BrepSceneNode.Create(line_SB, material_burn, material_burn))
                  End If
                Else
                  Dim arc_SB = SketchBuilder.MakeArcOfCircle(New GPnt(segment.start_u, segment.start_v, 0), New GPnt(segment.end_u, segment.end_v, 0), New GPnt(segment.amp_u, segment.amp_v, 0))
                  If segment.action = "Mark" Then
                        mRenderView.ShowSceneNode(BrepSceneNode.Create(arc_SB, material_mark, material_mark))
                  Else
                        mRenderView.ShowSceneNode(BrepSceneNode.Create(arc_SB, material_burn, material_burn))
                  End If
                End If
            Next
            Dim line_SB1 = SketchBuilder.MakeLine(New GPnt(0, 0, 0), New GPnt(pocessor.plate_Length * 0.1, 0, 0))
            mRenderView.ShowSceneNode(BrepSceneNode.Create(line_SB1, material_plate, material_plate))
            Dim line_SB2 = SketchBuilder.MakeLine(New GPnt(pocessor.plate_Length * 0.1, 0, 0), New GPnt(pocessor.plate_Length * 0.1, pocessor.plate_Width * 0.1, 0))
            mRenderView.ShowSceneNode(BrepSceneNode.Create(line_SB2, material_plate, material_plate))
            Dim line_SB3 = SketchBuilder.MakeLine(New GPnt(pocessor.plate_Length * 0.1, pocessor.plate_Width * 0.1, 0), New GPnt(0, pocessor.plate_Width * 0.1, 0))
            mRenderView.ShowSceneNode(BrepSceneNode.Create(line_SB3, material_plate, material_plate))
            Dim line_SB4 = SketchBuilder.MakeLine(New GPnt(0, pocessor.plate_Width * 0.1, 0), New GPnt(0, 0, 0))
            mRenderView.ShowSceneNode(BrepSceneNode.Create(line_SB4, material_plate, material_plate))
            mRenderView.ZoomAll()
      End If
    End Sub

5.显示效果如下




6.花两个小时搞定,ANYCAD功能引大,多花点时间,其实可以可以把做成3D的,并可以把每个边的坡口都可以做进去,进行显示。如果有客户有需求的可以搞搞。


今天晚上没事做,研究了一下,做成立体的零件


在立体面上,增加划线功能。并把切割引点加上。
ANYCAD,还有模拟仿真,应该可以做出销切割机的仿真切割。






笑遥佛 发表于 2023-2-26 22:43

把程序放到网盘了,要用的朋友可以去网盘下载

链接:https://pan.baidu.com/s/1nUSzaBGx4fEe58x39VNSrQ
提取码:lpl3

qianzuhui 发表于 2023-2-27 08:20

能gen转成TXT吗

笑遥佛 发表于 2023-2-27 09:40

qianzuhui 发表于 2023-2-27 08:20
能gen转成TXT吗

转TXT,MPG,都可以转,网盘里的只能浏览GEN

总裁之爹 发表于 2023-2-27 14:59

qianzuhui 发表于 2023-2-27 08:20
能gen转成TXT吗

GEN转TXT早就有一个免费的小软件,很好用的

qianzuhui 发表于 2023-2-28 06:53

收费的东西就不要拿出来晒了

笑遥佛 发表于 2023-2-28 22:57

生主立体零件代码如下:
         Dim start_contour As Boolean = False
            Dim start_hole As Boolean = False
            Dim topoShapes As TopoShapeList = New TopoShapeList()
            Dim hole_list As New List(Of TopoShape)
            For i = 0 To pocessor.segList.Count - 1
                Dim segment As SegmentCls = pocessor.segList(i)
                Dim cls2 As SegmentCls = pocessor.segList(i)
                If (i <> (pocessor.segList.Count - 1)) Then
                  cls2 = pocessor.segList((i + 1))
                End If


                If segment.shape = "HOLE" Then
                  If start_hole = False Then
                        topoShapes = New TopoShapeList()
                  End If
                  If segment.radius = 0 Then          '绘制直线
                        Dim line_SB = SketchBuilder.MakeLine(New GPnt(segment.start_u, segment.start_v, 0), New GPnt(segment.end_u, segment.end_v, 0))
                        topoShapes.Add(line_SB)
                  Else                '绘制圆弧
                        Dim arc_SB = SketchBuilder.MakeArcOfCircle(New GPnt(segment.start_u, segment.start_v, 0), New GPnt(segment.end_u, segment.end_v, 0), New GPnt(segment.amp_u, segment.amp_v, 0))
                        topoShapes.Add(arc_SB)
                  End If
                  start_hole = True
                  If cls2.shape <> "HOLE" Then
                        Dim Shape = ShapeBuilder.MakeCompound(topoShapes)
                        Shape = SketchBuilder.MakeWire(topoShapes)
                        Dim part_face = SketchBuilder.MakePlanarFace(Shape)
                        hole_list.Add(part_face)
                        start_hole = False
                  End If
                End If

                If segment.shape = "OUTER_CONTOUR" Then
                  If start_contour = False Then
                        topoShapes = New TopoShapeList()
                  End If
                  If segment.radius = 0 Then          '绘制直线
                        Dim line_SB = SketchBuilder.MakeLine(New GPnt(segment.start_u, segment.start_v, 0), New GPnt(segment.end_u, segment.end_v, 0))
                        topoShapes.Add(line_SB)
                  Else                '绘制圆弧
                        Dim arc_SB = SketchBuilder.MakeArcOfCircle(New GPnt(segment.start_u, segment.start_v, 0), New GPnt(segment.end_u, segment.end_v, 0), New GPnt(segment.amp_u, segment.amp_v, 0))
                        topoShapes.Add(arc_SB)
                  End If
                  start_contour = True

                  If cls2.shape <> "OUTER_CONTOUR" Then
                        Dim Shape = ShapeBuilder.MakeCompound(topoShapes)
                        Shape = SketchBuilder.MakeWire(topoShapes)
                        Dim part_face = SketchBuilder.MakePlanarFace(Shape)
                        For Each hole_one In hole_list
                            part_face = BooleanTool.Cut(part_face, hole_one)
                        Next
                        Dim part = FeatureTool.Extrude(part_face, thickness, New GDir(0, 0, -1))
                        mRenderView.ShowShape(part, ColorTable.Beige)
                        start_contour = False
                        hole_list.Clear()
                  End If
                End If
            Next

龙的权人 发表于 2023-5-18 16:24

一堆代码
看不懂

fzx118 发表于 2023-5-20 16:45

谢谢分享,牛逼哄哄的

HasakG 发表于 2023-8-21 14:19

不明觉厉,谢谢分享

ASTROBOY 发表于 2023-8-30 00:06

不明觉厉,一堆代码,看不懂!

king20061335 发表于 2023-10-8 16:55

能把这个类ToppingPocessor的源码发一下码?

柒月 发表于 2025-6-27 11:19

总裁之爹 发表于 2023-2-27 14:59
**** 作者被禁止或删除 内容自动屏蔽 ****

哥哥哪里有这软件
页: [1]
查看完整版本: GEN指令转换,零件导CAD