许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  CATIA宏输出焊点坐标老报错?试试这个解决办法

CATIA宏输出焊点坐标老报错?试试这个解决办法

阅读数 11
点赞 0
article_banner

车间里焊点表要得急,我头回写 CATIA VBA 导焊点坐标那天下午差点把鼠标砸了。点明明在树上,跑宏要么弹"Object doesn't support this property or method",要么不报错但 Excel 里 X/Y/Z 全是 0,要么更绝——只导出十几个,剩下几百个没影。

下面是我自己踩完坑、现在还在用的路子,不绕弯。

先说为啥会报错

焊点在 CATIA 里不是只有一种"点"。你以为都是 HybridShapePointCoord(显式点),实际数模里常混着:

焊点球是 Sphere 或 Cylinder,不是点;

点是在曲线上的 PointOnCurve、在面上的 PointOnSurface;

装配体里点进了子零件,你在总装上下文跑宏,ActiveDocument 指到 Product 不指到 Part;

点刚由公式驱动生成,没 Update,GetCoordinates 读出来是空;

最坑的:早期绑定写了 Dim m As Measurable,一调 GetPoint 就炸"Function or interface marked as restricted"。

网上抄的 point.GetCoordinates coords 只对"显式坐标点"管用,碰上上面那几种直接挂。

CATIA宏输出

能救场的办法:别硬读属性,走 SPAWorkbench 测量

把点(或球)转成 Reference,丢给 SPAWorkbench 的 Measurable,让 CATIA 自己算坐标。这套不挑点类型,球也行、曲线点也行。

关键点:Measurable 和坐标数组别早期绑定,全用 Variant/Object,避开那个 restricted 报错。

Sub CATMain()
  On Error Resume Next
  Dim CATIA As Object
  Set CATIA = GetObject(, "CATIA.Application")

  Dim doc As Object
  Set doc = CATIA.ActiveDocument

  ' 焊点常在 Part 里,装配体先钻到 Part
  Dim part As Object
  Set part = doc.Part
  part.Update   ' 不 Update 读出来可能是 0

  Dim sel As Object
  Set sel = doc.Selection
  sel.Clear
  ' 焊点球/圆柱名一般带 Spot/Weld/Sphere,按你数模改名前缀
  sel.Search "Name='*Spot*',all"

  Dim mSvc As Object
  Set mSvc = doc.GetWorkbench("SPAWorkbench")

  Dim xl As Object
  Set xl = CreateObject("Excel.Application")
  xl.Visible = True
  Dim wb As Object, sh As Object
  Set wb = xl.Workbooks.Add
  Set sh = wb.Sheets(1)
  sh.Cells(1, 1) = "名称"
  sh.Cells(1, 2) = "X"
  sh.Cells(1, 3) = "Y"
  sh.Cells(1, 4) = "Z"

  Dim i As Integer, coords(2) As Variant
  Dim ref As Object, meas As Object
  For i = 1 To sel.Count
    Set ref = part.CreateReferenceFromObject(sel.Item(i).Value)
    Set meas = mSvc.GetMeasurable(ref)
    meas.GetPoint coords(0), coords(1), coords(2)
    sh.Cells(i + 1, 1) = sel.Item(i).Value.Name
    sh.Cells(i + 1, 2) = Round(coords(0), 3)
    sh.Cells(i + 1, 3) = Round(coords(1), 3)
    sh.Cells(i + 1, 4) = Round(coords(2), 3)
  Next i

  sel.Clear
  MsgBox "导完,共 " & sel.Count & " 个"
End Sub

几个我栽过跟头的细节

doc.Part 前先确认当前文档是 CATPart,不是在总装 Product 下。总装里得循环 Products 下钻到子 Part 再跑,不然 ActiveDocument.Part 直接空。

焊点是球(Sphere)时,Search 用 *Spot* 或 *Weld* 都行,关键是别只搜 CATGmoSearch.Point,那样球一个都捞不着。

coords 数组声明成 Variant 或 Dim coords(2) 都行,但调 GetPoint 时别加括号包成 GetPoint(coords),要 GetPoint coords(0), coords(1), coords(2) 这种拆开传,VB 里加括号必错。

数模单位是 mm,机器人那边要 m 就自己除 1000,别信什么自动单位转换。

装配体坐标和零件坐标不是一回事。上面代码出的是零件绝对坐标系下的数。要给机器人发总装坐标,得把子 Part 的局部坐标乘上它在 Product 里的变换矩阵——这块要是碰到了我再单写一段,本次先解决"能跑出不报错的数"这个最痛的点。

我这版在 R28、R30 都跑过,焊点球、显式点、曲线点混着放也能全捞出来。你要是数模里焊点藏在被抑制的几何集里,记得先把几何集 Activation 打开再跑,不然 Search 扫不到。

真碰到某种点类型还是读不出,把报错那行和点的 Type 名发我,我再帮你瞅。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空