几何尺寸与公差论坛

 找回密码
 注册
查看: 3322|回复: 1

【转帖】How to access the hits that comprise a feature?

[复制链接]
发表于 2007-11-26 10:44:54 | 显示全部楼层 |阅读模式
I've tried the following basic code (generated by the OldBasic converter).
   
   Sub main
   
     Dim i, j, k As Integer                        ' working vars
     Dim tpoint As Object
     Set tpoint = CreateObject("CDLRN.PointData")
   
     Dim AutoApp As Object
     Set AutoApp = CreateObject("CDLRN.Application")
     Dim AutoPart As Object
     Set AutoPart = AutoApp.ActivePartProgram
     Dim AutoOldBasicObj As Object
     Set AutoOldBasicObj = AutoPart.OldBasic
     i = AutoOldBasicObj.StartGetFeatPoint("CIR1",PCD_MEAS, PCD__BALLCENTER)
     For j = 1 To i
       msgbox i & " - " &  j
       AutoOldBasicObj.GetFeatPoint( tpoint, j)
       msgbox "Got past the GetFeatPoint call"
   Next j
   End Sub
   
   The circle ("C1") has four points, which the call to AutoOldBasicObj.StartGetFeatPoint returns correctly.
   
   However, the call to AutoOldBasicObj.GetFeatPoint( tpoint, j)  has two problems:
   
   1. It won't run if I attempt to assign the result of this funtion to an integer (e.g. k = AutoOldBasicObj.GetFeatPoint( tpoint, j) ) I get a type mismatch error, which indicates that the function is not returning an integer as indicated in the manual.
   
   2.  Once executed, the program blows up without an error, and ceases to run.  That is, I'll never get to the second MSGBOX call.
   
   Is there another way to get at the basic hit data for this circle? I can find non-OldBasic objects that let me get at the dimensions of it, but not the individual hits themselves. This is more than a little exasperating...
 楼主| 发表于 2007-11-26 10:51:08 | 显示全部楼层

回复: 【转帖】How to access the hits that comprise a feature?

FWIW: I struggled through the (lack of) documentation and came up with the following PC-DMIS program/VB program that takes numerous circles up and down a cylinder, accesses the individual points that comprise the hits, turns them into diameters, and then writes them into a comma-delimited file that can be read directly into XL.
  
  Obvious improvements might be to insert directly into spreadsheet, or have a spreadsheet open the program and run it using a more true automation.
  
  Note to Wilcox: Better documentation, including samples of how each feature is used, would be very welcome. Also, it seems that some things don't work as I would have expected. For instance, I couldn't dim an array of PointData, nor set the individual components of an array. Hence I had to use arrays of doubles to hold the X and Y components of a PointData object, rather than being able to iterate through the array and use the points themselves.
  
  This is a very powerful tool that would be much more useful with some solid examples of coding that could be used as building blocks.
  
  
  **** BEGIN PC-DMIS program
  
  PART NAME  : DB07RN602AID
  REV NUMBER :
  SER NUMBER :
  STATS COUNT : 1
   
  STARTUP    =ALIGNMENT/START,RECALL:,LIST=YES
              ALIGNMENT/END
              MODE/MANUAL
              FORMAT/TEXT,OPTIONS, ,HEADINGS,SYMBOLS, ;NOM,MEAS,MAXMIN,TOL,DEV,OUTTOL,
              LOADPROBE/14MMSPHERE
              TIP/T1A0B0, SHANKIJK=0, 0, 1, ANGLE=0
  *** MANUAL ALILGNMENT CODE DELETED FOR SPACE REASONS
              MODE/DCC
  C1         =COMMENT/INPUT,NO,'Enter the part id'
              ASSIGN/PARTID = C1.INPUT
              ASSIGN/THISFILENAME = TEST
  CS1        =SCRIPT/FILENAME= C:\CMM PROGRAMS\FTE\DB07RN602A\DB07RN602AID.BAS
              FUNCTION/CreateFIle,SHOW=YES,,
              STARTSCRIPT/
              ENDSCRIPT/
  PLN2       =FEAT/PLANE,CARTESIAN,TRIANGLE
              THEO/<-11.502,-81.816,-56.43>,<-0.000006,0.0000043,1>
              ACTL/<-11.51,-81.81,-56.433>,<0.0000158,0.0000003,1>
              MEAS/PLANE,4
  HIT/BASIC,NORMAL,<-111.621,-72.624,-56.431>,<-0.000006,0.0000043,1>,<-111.62,-72.655,-56.432>,USE THEO = YES
  HIT/BASIC,NORMAL,<68.916,-73.045,-56.43>,<-0.000006,0.0000043,1>,<68.909,-73.075,-56.435>,USE THEO = YES
  HIT/BASIC,NORMAL,<68.874,-90.692,-56.43>,<-0.000006,0.0000043,1>,<68.868,-90.667,-56.435>,USE THEO = YES
  HIT/BASIC,NORMAL,<-72.176,-90.902,-56.43>,<-0.000006,0.0000043,1>,<-72.197,-90.843,-56.432>,USE THEO = YES
              ENDMEAS/
  LIN2       =FEAT/LINE,CARTESIAN,UNBOUNDED
              THEO/<-99.494,-108.564,-44.495>,<1,-0.0002276,0>
              ACTL/<-99.504,-106.343,-44.502>,<1,-0.000116,0>
              MEAS/LINE,2,WORKPLANE
  HIT/BASIC,NORMAL,<-99.509,-108.564,-44.498>,<0.0002276,1,0>,<-99.504,-106.343,-44.505>,USE THEO = YES
              HIT/BASIC,NORMAL,<8.198,-108.588,-44.492>,<0.0002276,1,0>,<8.191,-106.355,-44.499>,USE THEO = YES
              ENDMEAS/
              MOVE/POINT,NORMAL,<15.455,-94.29,26.403>
              MOVE/POINT,NORMAL,<-1.486,-7.835,26.402>
  CYL2       =FEAT/CYLINDER,CARTESIAN,IN,LEAST_SQR
              THEO/<0.017,-0.024,-20.975>,<-0.0012422,-0.0022099,0.9999968>,46.953,28.303
              ACTL/<0.002,-0.023,-20.983>,<-0.0007906,-0.0007831,0.9999994>,47.002,28.299
              MEAS/CYLINDER,8
  HIT/BASIC,NORMAL,<1.563,23.465,-35.088>,<-0.0929248,-0.9956704,-0.0023157>,<1.225,23.501,-35.113>,USE THEO = YES
  HIT/BASIC,NORMAL,<23.502,-1.04,-35.086>,<-0.9979557,0.0639001,-0.0010984>,<23.534,-0.766,-35.111>,USE THEO = YES
  HIT/BASIC,NORMAL,<-1.103,-23.405,-35.086>,<-0.0091691,0.9999555,0.0021984>,<-1.714,-23.496,-35.112>,USE THEO = YES
  HIT/BASIC,NORMAL,<-23.239,2.771,-35.089>,<0.9858169,-0.1678224,0.0008537>,<-23.41,2.259,-35.11>,USE THEO = YES
  HIT/BASIC,NORMAL,<-23.166,2.772,-6.863>,<0.984989,-0.1726149,0.0008421>,<-23.354,2.231,-6.852>,USE THEO = YES
  HIT/BASIC,NORMAL,<-0.382,23.359,-6.861>,<0.0574012,-0.9983489,-0.0021349>,<0.086,23.439,-6.842>,USE THEO = YES
  HIT/BASIC,NORMAL,<23.411,0.045,-6.859>,<-0.9999835,-0.0056001,-0.0012545>,<23.446,0.017,-6.841>,USE THEO = YES
  HIT/BASIC,NORMAL,<0.381,-23.504,-6.859>,<-0.0226806,0.9997404,0.0021811>,<0.263,-23.502,-6.851>,USE THEO = YES
              MOVE/POINT,NORMAL,<0.354,-1.401,-6.86>
              MOVE/POINT,NORMAL,<0.353,-1.401,12.903>
              ENDMEAS/
  PNT2       =FEAT/POINT,CARTESIAN
              THEO/<0.382,-25.346,0.043>,<0,0,1>
              ACTL/<0.334,-25.327,-0.009>,<0,0,1>
              MEAS/POINT,1
              HIT/BASIC,NORMAL,<0.382,-25.346,0.043>,<0,0,1>,<0.334,-25.327,-0.009>,USE THEO = YES
              ENDMEAS/
  A2         =ALIGNMENT/START,RECALL:A1,LIST=YES
              ALIGNMENT/LEVEL,ZPLUS,PLN2
              ALIGNMENT/ROTATE,XPLUS,TO,LIN2,ABOUT,ZPLUS
              ALIGNMENT/TRANS,ZAXIS,PNT2
              ALIGNMENT/TRANS,XAXIS,CYL2
              ALIGNMENT/TRANS,YAXIS,CYL2
              ALIGNMENT/END
  V1         =LOOP/START, ID = YES, NUMBER = 18, START = 1, SKIP = ,
                 OFFSET: XAXIS = 0, YAXIS = 0, ZAXIS = -2, ANGLE = 0
  CIR1       =FEAT/CIRCLE,CARTESIAN,IN,LEAST_SQR
              THEO/<-0.073,0.046,-2>,<0.0000156,0.0000042,1>,47.048
              ACTL/<-18.646,21.262,-2.15>,<0.0000151,0.0000067,1>,45.167
              MEAS/CIRCLE,72,WORKPLANE
  *** 72 HITs deleted here for space purposes
  
  ,USE THEO = YES
              ENDMEAS/
  CS2        =SCRIPT/FILENAME= C:\CMM PROGRAMS\FTE\DB07RN602A\DB07RN602AID.BAS
              FUNCTION/CIRC1,SHOW=YES,,
              STARTSCRIPT/
              ENDSCRIPT/
              LOOP/END
              MOVE/POINT,NORMAL,<-0.05,-1.157,-14.756>
              MOVE/POINT,NORMAL,<-0.053,-1.162,59.884>
  
  *** END PC_DMIS PROGRAM
  
  ** BEGIN BASIC PROGRAM
  Function dist_2d(x1, x2 As Double, y1, y2 As Double)
    dist_2d = sqr((x1 - x2)^2 +(y1 - y2)^2)
  End Function
  
  Sub CreateFile
    Dim st As String
    Dim AutoApp As Object
    Set AutoApp = CreateObject("CDLRN.Application")
    Dim AutoPart As Object
    Set AutoPart = AutoApp.ActivePartProgram
  
    ' Get the ID To construct a unique file Name
    Dim var As Object
    Set var = AutoPart.GetVariableValue("ARTID")
    thisfilename = "C:\CMM Programs\FTE\DB07RN602A\DB07RN602AID" & var.StringValue
    thisfilename = thisfilename & "-" & format(now,"dd-mm-yy-hh-nn") & ".txt"
    'assign it To internal variable For Next time
    Dim filename As Object
    Set filename = AutoPart.GetVariableValue("THISFILENAME")
    filename.stringvalue = thisfilename
    Autopart.SetVariableValue "THISFILENAME" ,filename
  
  On Error Resume Next
    kill thisfilename
    On Error GoTo 0
    Open thisfilename For Output As #1
  End Sub
  
  Sub Circ1
  
    Dim i, j, k As Integer ' working vars
    Dim xarray(72) As Double  ' WILL HOLD THE POINTS For Each MEASUREMENT
    Dim yarray(72) As Double  ' WILL HOLD THE POINTS For Each MEASUREMENT
    Dim tpoint As Object
    Set tpoint = CreateObject("CDLRN.PointData")
    Dim st As String
  
    Dim AutoApp As Object
    Set AutoApp = CreateObject("CDLRN.Application")
    Dim AutoPart As Object
    Set AutoPart = AutoApp.ActivePartProgram
    Dim cmds As Commands
    Set cmds = AutoPart.Commands
    Dim cmd As Command
    Set cmd = cmds.Item("CIR1")
    'Dim var As Object
    Set var = AutoPart.GetVariableValue("THISFILENAME")
    thisfilename = var.StringValue
  
    Dim fcmd As Object
    Set fcmd =cmd.FeatureCommand ' Get the feature command property
    'msgbox fcmd.id & " - "  & fcmd.numhits
    For i = 1 To fcmd.numhits
      Set tpoint = fcmd.GetHit(i,FHITDATA_CENTROID,FDATA_MEAS,FDATA_P  ART,"",PLANE_TOP)
      xarray(i) = tpoint.x
      yarray(i) = tpoint.y
     Next i
     Open thisfilename For Append As #1
    st = "Depth:  " & format(tpoint.z,"###.0000") & ", "  ' always the same
    k = fcmd.numhits / 2        '' divide number of hits by 2 For diameters
    For i = 1 To k
      st = st & format(dist_2d(xarray(i), xarray(i+k), yarray(i), yarray(i+k)),"##.0000") & ", "
    Next
    st = left(st,len(st) - 2)  ' strip off the last comma,space
    Print #1, st  
  End Sub
  
  &*** END BASIC PROGRAM
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|几何尺寸与公差论坛

GMT+8, 2024-4-25 22:39 , Processed in 0.038293 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表