.net 统计图 导出_利用solidwords二次开发导出三维曲面方阵点坐标方法

本文介绍了利用solidwords二次开发(API Application Program Interface,应用程序接口)实现三维曲面基于基准平面上的矩阵点投影到三维曲面上点的坐标值导出方法:利用solidwords二次开发中的遍历点技术得到投影点坐标并导出,解决了生产中遇到的问题。

三维曲面板材成型设备的成型模具是一组由mxn个基本体组成的矩阵如图1。

77a8567d1ffc9cdb28f8a1697648a73f.png

图1

在板材成型粗加工时,需要得到对应模具基本体位置上投影的高度值。在使用solidwords软件采集曲面上对应点坐标数据时,在软件现有条件下,通过草图绘制,曲线投影可以得到点,但是只能通过测量能显示测量数据却无法同时把上千个点的数据导出,如果一个点一个点的记录,会带来工作量大、数据记录不准确的问题。因此,本文就利用solidwords软件的API技术,来解决上述所存在的问题。

Solidwords软件可以通过OLE(对象嵌入与连接)或者COM为用户提供了自由开放、功能完整的二次开发接口。Solidwords软件支持设计人员根据具体需要对其进行二次开发工作,并且提供了数百个的API函数,只要使用Visual C++、Visual Basic等编程语言就可以对solidwords进行二次开发,从而创建出用户定制的、专门的solidwords应用模块。

Solidwords软件的API技术采用面向对象的编程方法,顶层为solidwords对象,在其下是solidwords活动文档对象(包括“零件环境”、“工程图环境”、“装配体环境”以及“非工作环境”四个状态),再向下层分解,最底层是用户直接操作的特征和图形元素组成的对象。从而形成了一个自顶向下、层次分明、条例清晰的体系。灵活的使用solidwords的API技术可以实现许多软件本身无法涉及的功能,如完成定制级的系列化产品零部件绘制工作、自动装配、自动工程图、批量转换格式、批量打印等可快速提高工作效率。

下面就以三维曲面点坐标数据导出为例,重点阐述使用solidwords软件的API技术实现曲面上点坐标数据的导出方法。本实例以Visual Basic语言为基础编写。

在曲面点数据导出中,用到了solidwords软件API技术中的遍历技术。可以快速高效的在不进行任何辅助绘图情况下,直接导出点的数据,数据导出存放于txt格式文档中。

具体编程如下:

单击宏工具栏上的新建宏命令,命名为曲面点数据导出.swp,添加代码如下:

Option Explicit

Sub main()

Dim swApp As SldWorks.SldWorks

Dim myModel As SldWorks.ModelDoc2

Dim mathUtils As SldWorks.MathUtility

Dim nStart As Single

nStart = Timer

Set swApp = Application.SldWorks

Set myModel = swApp.ActiveDoc

Set mathUtils = swApp.GetMathUtility()

' 以下遍历22x22个投影点

Dim i As Integer

Dim j As Integer

For i = 0 To 21

For j = 0 To 21

' 预先指定一个被投影面

Dim mySelMgr As SldWorks.SelectionMgr

Dim selObj As Object

Dim faceToUse As SldWorks.Face2

Dim surfaceToUse As SldWorks.Surface

Dim selCount As Long

Dim selType As Long

Set mySelMgr = myModel.SelectionManager

selCount = mySelMgr.GetSelectedObjectCount2(0)

If (selCount > 0) Then

selType = mySelMgr.GetSelectedObjectType3(1, 0) Set selObj = mySelMgr.GetSelectedObject6(1, 0)

If (selType = SwConst.swSelFACES)

Then

Set faceToUse = selObj

End If

End If

' 定义投影向量

Dim basePoint(0 To 2) As Double, rayDir(0 To 2) As Double

Dim vBasePoint As Variant, vVector As Variant

Dim rayPoint As SldWorks.MathPoint, rayVector As SldWorks.MathVector

Dim intersectPt As SldWorks.MathPoint

Dim vPoint As Variant, vPoint2 As Variant

Dim xPt As Double, yPt As Double, zPt As Double

' 先对曲面的情况进行投影; First try the face

If Not faceToUse Is Nothing Then

basePoint(0) = i * 0.125 '

basePoint(1) = j * 0.125 '

basePoint(2) = 1#

vBasePoint = basePoint

Set rayPoint = mathUtils.CreatePoint(vBasePoint)

rayDir(0) = 0#

rayDir(1) = 0#

rayDir(2) = -1#

vVector = rayDir

Set rayVector = mathUtils.CreateVector(vVector)

Set intersectPt = faceToUse.GetProjectedPointOn(rayPoint, rayVector)

If Not intersectPt Is Nothing Then

vPoint = intersectPt.ArrayData

xPt = vPoint(0)

yPt = vPoint(1)

zPt = vPoint(2)

清单输出窗口.LIST.Text = 清单输出窗口.LIST.Text & Format(xPt * 1000, "##0.0#####") & " , "

清单输出窗口.LIST.Text = 清单输出窗口.LIST.Text & Format(yPt * 1000, "##0.0#####") & " , "

清单输出窗口.LIST.Text = 清单输出窗口.LIST.Text & Format(zPt * 1000, "##0.0#####") & " " & vbCrLf

Else

清单输出窗口.LIST.Text = 清单输出窗口.LIST.Text & Format(zPt * 1000, "##0.0#####") & " " & vbCrLf '(j * 125, "##0.0#####") & " , 0" & " " & vbCrLf '控制是否输出未投影到曲面上的点位 " No face hit point."

End If

End If

Next j

Next i

清单输出窗口.计算耗用时间.Text = Round(Timer) - Round(nStart) & "秒"

清单输出窗口.Show

End Sub

Public Sub Delayms(lngTime As Long) '延时程序调用-测试时用

Dim StartTime As Single

Dim CostTime As Single

StartTime = Timer

Do While (Timer - StartTime) * 1000 < lngTime

DoEvents

Loop

End Sub

选择曲面然后执行编写的宏,效果如图2。

85dffaf719a11a12de6e99a6b72cd1b8.png

图2

点数据保存后就可以得到txt格式数据文件如图3。

4ca79bf535febeb8a692472173de12b7.png

图3

当然也可以验证一下输出的点对不对,就可以让solidwords重画一下点,选择生成点草图就会得到如图4所示。

0cdab4067c46b18d5dd20c12203599ed.png

总结:

借助solidwords软件强大的绘图功能、二次开发功能能很好的解决自己企业或生产上遇到的许多问题。该方法利用Visual Basic语言在solidwords软件API二次开发技术上开发出的三维曲面上点的数据导出应用程序轻松解决了生产应用中遇到的问题。该方法不用增加辅助绘图操作即可轻松、准确导出所需点数据,更好服务与生产。此外,该方法还可应用于类似工程应用。

如果需求宏程序代码,可以私信交流。现在主要精力在写rhino方面的程序。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值