hexagon logo

Enjoy: Script to insert 3D XYZ Constructed Lines and Origin Point

Very useful for making every alignment have 6 degrees of freedom locked down.
Hook to a button and insert where the cursor is.
Special thanks to PC-DMIS forum user jvwhy for the name of current alignment code.

' _____________________________ Begin _____________________________________________________________


Dim DmisApp As Object
Dim DmisPart As Object
Dim DmisCommands As Object
Dim DmisCommand As Object

'---> This function begins process of grabbing current alignment name
Function GetAlignmentUpToNow (GAUTN_ID As String, GAUTN_TYPE As Integer) As String
Dim GAUTN_OBJ As Object
Dim ReturnValue As String
ReturnValue="STARTUP" 
For Each GAUTN_OBJ In DmisCommands
If GAUTN_OBJ.ID=GAUTN_ID And GAUTN_OBJ.Type = GAUTN_TYPE Then Exit for
If GAUTN_OBJ.Type=1 Then
ReturnValue=GAUTN_OBJ.ID
End if

Next GAUTN_OBJ 
GetAlignmentUpToNow=ReturnValue
End Function


Sub Main()
Set DmisApp = CreateObject("PCDLRN.Application")
Set DmisPart = DmisApp.ActivePartProgram
Set DmisCommands = DmisPart.Commands



'---> Finish grabbing current alignment name
Dim CurAlignName As String
CurAlignName = GetAlignmentUpToNow (DmisCommands.CurrentCommand.ID , DmisCommands.CurrentCommand.Type)
'MsgBox CurAlignName

'---> Now put the stuff into the prg.
Set DmisCommand = DmisCommands.Add(SET_COMMENT, True)
retvaltype = DmisCommand.PutText("$$", COMMENT_TYPE, 0)
retvaltype = DmisCommand.SetToggleString (1, OUTPUT_TYPE, 0)
retvaltype = DmisCommand.PutText("|", COMMENT_FIELD, 1)
retvaltype = DmisCommand.PutText("||", COMMENT_FIELD, 2)
retvaltype = DmisCommand.PutText("|||-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|", COMMENT_FIELD, 3)
DmisCommand.ReDraw

  Set DmisCommand = DmisCommands.Add(CONST_ALN_LINE, TRUE)
    DmisCommand.Marked = TRUE
    retval = DmisCommand.PutText ("-0.5", THEO_SX, 0)
    retval = DmisCommand.PutText ("0", THEO_SY, 0)
    retval = DmisCommand.PutText ("0", THEO_SZ, 0)
    retval = DmisCommand.PutText ("0.5", THEO_EX, 0)
    retval = DmisCommand.PutText ("0", THEO_EY, 0)
    retval = DmisCommand.PutText ("0", THEO_EZ, 0)
    retval = DmisCommand.PutText ("1", THEO_I, 0)
    retval = DmisCommand.PutText ("0", THEO_J, 0)
    retval = DmisCommand.PutText ("0", THEO_K, 0)
    retval = DmisCommand.PutText ("0", SURFVEC_I, 0)
    retval = DmisCommand.PutText ("0", SURFVEC_J, 0)
    retval = DmisCommand.PutText ("0", SURFVEC_K, 0)
    retval = DmisCommand.PutText ("1", THEO_LENGTH, 0)
    retval = DmisCommand.PutText ("-0.5", MEAS_SX, 0)
    retval = DmisCommand.PutText ("0", MEAS_SY, 0)
    retval = DmisCommand.PutText ("0", MEAS_SZ, 0)
    retval = DmisCommand.PutText ("0.5", MEAS_EX, 0)
    retval = DmisCommand.PutText ("0", MEAS_EY, 0)
    retval = DmisCommand.PutText ("0", MEAS_EZ, 0)
    retval = DmisCommand.PutText ("1", MEAS_I, 0)
    retval = DmisCommand.PutText ("0", MEAS_J, 0)
    retval = DmisCommand.PutText ("0", MEAS_K, 0)
    retval = DmisCommand.PutText ("1", MEAS_LENGTH, 0)
    retval = DmisCommand.PutText ("3DLINE_X_AXIS_OF_" + CurAlignName, ID, 0)
    retval = DmisCommand.SetToggleString (1, COORD_TYPE, 0)
    retval = DmisCommand.SetToggleString (1, BOUND_TYPE, 0)
    retval = DmisCommand.SetToggleString (2, AXIS, 0)
    retval = DmisCommand.SetToggleString (2, USER_DEFINED_THEOS, 0)
  
  Set DmisCommand = DmisCommands.Add(CONST_ALN_LINE, TRUE)
    DmisCommand.Marked = TRUE
    retval = DmisCommand.PutText ("0", THEO_SX, 0)
    retval = DmisCommand.PutText ("-0.5", THEO_SY, 0)
    retval = DmisCommand.PutText ("0", THEO_SZ, 0)
    retval = DmisCommand.PutText ("0", THEO_EX, 0)
    retval = DmisCommand.PutText ("0.5", THEO_EY, 0)
    retval = DmisCommand.PutText ("0", THEO_EZ, 0)
    retval = DmisCommand.PutText ("0", THEO_I, 0)
    retval = DmisCommand.PutText ("1", THEO_J, 0)
    retval = DmisCommand.PutText ("0", THEO_K, 0)
    retval = DmisCommand.PutText ("0", SURFVEC_I, 0)
    retval = DmisCommand.PutText ("0", SURFVEC_J, 0)
    retval = DmisCommand.PutText ("0", SURFVEC_K, 0)
    retval = DmisCommand.PutText ("1", THEO_LENGTH, 0)
    retval = DmisCommand.PutText ("0", MEAS_SX, 0)
    retval = DmisCommand.PutText ("-0.5", MEAS_SY, 0)
    retval = DmisCommand.PutText ("0", MEAS_SZ, 0)
    retval = DmisCommand.PutText ("0", MEAS_EX, 0)
    retval = DmisCommand.PutText ("0.5", MEAS_EY, 0)
    retval = DmisCommand.PutText ("0", MEAS_EZ, 0)
    retval = DmisCommand.PutText ("0", MEAS_I, 0)
    retval = DmisCommand.PutText ("1", MEAS_J, 0)
    retval = DmisCommand.PutText ("0", MEAS_K, 0)
    retval = DmisCommand.PutText ("1", MEAS_LENGTH, 0)
    retval = DmisCommand.PutText ("3DLINE_Y_AXIS_OF_" + CurAlignName, ID, 0)
    retval = DmisCommand.SetToggleString (1, COORD_TYPE, 0)
    retval = DmisCommand.SetToggleString (1, BOUND_TYPE, 0)
    retval = DmisCommand.SetToggleString (3, AXIS, 0)
    retval = DmisCommand.SetToggleString (2, USER_DEFINED_THEOS, 0)
  
  Set DmisCommand = DmisCommands.Add(CONST_ALN_LINE, TRUE)
    DmisCommand.Marked = TRUE
    retval = DmisCommand.PutText ("0", THEO_SX, 0)
    retval = DmisCommand.PutText ("0", THEO_SY, 0)
    retval = DmisCommand.PutText ("-0.5", THEO_SZ, 0)
    retval = DmisCommand.PutText ("0", THEO_EX, 0)
    retval = DmisCommand.PutText ("0", THEO_EY, 0)
    retval = DmisCommand.PutText ("0.5", THEO_EZ, 0)
    retval = DmisCommand.PutText ("0", THEO_I, 0)
    retval = DmisCommand.PutText ("0", THEO_J, 0)
    retval = DmisCommand.PutText ("1", THEO_K, 0)
    retval = DmisCommand.PutText ("0", SURFVEC_I, 0)
    retval = DmisCommand.PutText ("0", SURFVEC_J, 0)
    retval = DmisCommand.PutText ("1", THEO_LENGTH, 0)
    retval = DmisCommand.PutText ("0", MEAS_SX, 0)
    retval = DmisCommand.PutText ("0", MEAS_SY, 0)
    retval = DmisCommand.PutText ("-0.5", MEAS_SZ, 0)
    retval = DmisCommand.PutText ("0", MEAS_EX, 0)
    retval = DmisCommand.PutText ("0", MEAS_EY, 0)
    retval = DmisCommand.PutText ("0.5", MEAS_EZ, 0)
    retval = DmisCommand.PutText ("0", MEAS_I, 0)
    retval = DmisCommand.PutText ("0", MEAS_J, 0)
    retval = DmisCommand.PutText ("1", MEAS_K, 0)
    retval = DmisCommand.PutText ("1", MEAS_LENGTH, 0)
    retval = DmisCommand.PutText ("3DLINE_Z_AXIS_OF_" + CurAlignName, ID, 0)
    retval = DmisCommand.SetToggleString (1, COORD_TYPE, 0)
    retval = DmisCommand.SetToggleString (1, BOUND_TYPE, 0)
    retval = DmisCommand.SetToggleString (1, AXIS, 0)
    retval = DmisCommand.SetToggleString (2, USER_DEFINED_THEOS, 0)

  Set DmisCommand = DmisCommands.Add(CONST_ORIG_POINT, TRUE)
    DmisCommand.Marked = TRUE
    retval = DmisCommand.PutText ("0", THEO_X, 0)
    retval = DmisCommand.PutText ("0", THEO_Y, 0)
    retval = DmisCommand.PutText ("0", THEO_Z, 0)
    retval = DmisCommand.PutText ("0", THEO_I, 0)
    retval = DmisCommand.PutText ("0", THEO_J, 0)
    retval = DmisCommand.PutText ("1", THEO_K, 0)
    retval = DmisCommand.PutText ("0", MEAS_X, 0)
    retval = DmisCommand.PutText ("0", MEAS_Y, 0)
    retval = DmisCommand.PutText ("0", MEAS_Z, 0)
    retval = DmisCommand.PutText ("0", MEAS_I, 0)
    retval = DmisCommand.PutText ("0", MEAS_J, 0)
    retval = DmisCommand.PutText ("1", MEAS_K, 0)
    retval = DmisCommand.PutText ("ORIGIN_POINT_OF_" + CurAlignName, ID, 0)
    retval = DmisCommand.SetToggleString (1, COORD_TYPE, 0)
    retval = DmisCommand.SetToggleString (2, USER_DEFINED_THEOS, 0)

Set DmisCommand = DmisCommands.Add(SET_COMMENT, True)
retvaltype = DmisCommand.PutText("$$", COMMENT_TYPE, 0)
retvaltype = DmisCommand.SetToggleString (1, OUTPUT_TYPE, 0)
retvaltype = DmisCommand.PutText("|||-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|", COMMENT_FIELD, 1)
retvaltype = DmisCommand.PutText("||", COMMENT_FIELD, 2)
retvaltype = DmisCommand.PutText("|", COMMENT_FIELD, 3)
DmisCommand.ReDraw


End Sub


Here's the result in PC-DMIS, put in after I made an alignment named ALN4:
$$ NO,
            |
            ||
            |||-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
3DLINE_X_AXIS_OF_ALN4=FEAT/LINE,CARTESIAN,UNBOUNDED,YES
            THEO/<-0.5,0,0>,<1,0,0>
            ACTL/<-0.5,0,0>,<1,0,0>
            CONSTR/LINE,ALIGN,1,XPLUS
3DLINE_Y_AXIS_OF_ALN4=FEAT/LINE,CARTESIAN,UNBOUNDED,YES
            THEO/<0,-0.5,0>,<0,1,0>
            ACTL/<0,-0.5,0>,<0,1,0>
            CONSTR/LINE,ALIGN,1,YPLUS
3DLINE_Z_AXIS_OF_ALN4=FEAT/LINE,CARTESIAN,UNBOUNDED,YES
            THEO/<0,0,-0.5>,<0,0,1>
            ACTL/<0,0,-0.5>,<0,0,1>
            CONSTR/LINE,ALIGN,1,ZPLUS
ORIGIN_POINT_OF_ALN4=FEAT/POINT,CARTESIAN,YES
            THEO/<0,0,0>,<0,0,1>
            ACTL/<0,0,0>,<0,0,1>
            CONSTR/POINT,ORIGIN
$$ NO,
            |||-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
            ||
            |
  • Does it work with recalled external alignments?
  • Does it work with recalled external alignments?


    If not you could insert an empty alignment right after the recall so you have an ID to work with.

    I've used a technique like this before but that was to do clever stuff with paste with pattern.
  • Does it work with recalled external alignments?


    Ahh... didn't think of that. My test reveals that it does not.

    Let's use NinjaBadger's workaround for now. Disappointed
  • Well the original stopped working so I had to use a different solution.
    Bonus - the new solution (thank you SABarber) also works with External alignments!

    Sub Main()
    Dim DmisApp As Object
    Dim DmisPart As Object
    Dim DmisCommands As Object
    Dim DmisCommand As Object
    Dim AlignCmd As Object
    
    Set DmisApp = CreateObject("PCDLRN.Application")
    Set DmisPart = DmisApp.ActivePartProgram
    Set DmisCommands = DmisPart.Commands
    Set AlignCmd = DmisCommands.CurrentAlignment
    
    Dim CurAlignName As String
    CurAlignName = AlignCmd.Id
    'MsgBox CurAlignName
    
      Set DmisCommand = DmisCommands.Add(CONST_ALN_LINE, TRUE)
        DmisCommand.Marked = TRUE
        retval = DmisCommand.PutText ("-5", THEO_SX, 0)
        retval = DmisCommand.PutText ("0", THEO_SY, 0)
        retval = DmisCommand.PutText ("0", THEO_SZ, 0)
        retval = DmisCommand.PutText ("5", THEO_EX, 0)
        retval = DmisCommand.PutText ("0", THEO_EY, 0)
        retval = DmisCommand.PutText ("0", THEO_EZ, 0)
        retval = DmisCommand.PutText ("1", THEO_I, 0)
        retval = DmisCommand.PutText ("0", THEO_J, 0)
        retval = DmisCommand.PutText ("0", THEO_K, 0)
        retval = DmisCommand.PutText ("0", SURFVEC_I, 0)
        retval = DmisCommand.PutText ("0", SURFVEC_J, 0)
        retval = DmisCommand.PutText ("0", SURFVEC_K, 0)
        retval = DmisCommand.PutText ("10", THEO_LENGTH, 0)
        retval = DmisCommand.PutText ("-5", MEAS_SX, 0)
        retval = DmisCommand.PutText ("0", MEAS_SY, 0)
        retval = DmisCommand.PutText ("0", MEAS_SZ, 0)
        retval = DmisCommand.PutText ("5", MEAS_EX, 0)
        retval = DmisCommand.PutText ("0", MEAS_EY, 0)
        retval = DmisCommand.PutText ("0", MEAS_EZ, 0)
        retval = DmisCommand.PutText ("1", MEAS_I, 0)
        retval = DmisCommand.PutText ("0", MEAS_J, 0)
        retval = DmisCommand.PutText ("0", MEAS_K, 0)
        retval = DmisCommand.PutText ("10", MEAS_LENGTH, 0)
        retval = DmisCommand.PutText ("3DLINE_X_AXIS_OF_" + CurAlignName, ID, 0)
        retval = DmisCommand.SetToggleString (1, COORD_TYPE, 0)
        retval = DmisCommand.SetToggleString (1, BOUND_TYPE, 0)
        retval = DmisCommand.SetToggleString (2, AXIS, 0)
        retval = DmisCommand.SetToggleString (2, USER_DEFINED_THEOS, 0)
      
      Set DmisCommand = DmisCommands.Add(CONST_ALN_LINE, TRUE)
        DmisCommand.Marked = TRUE
        retval = DmisCommand.PutText ("0", THEO_SX, 0)
        retval = DmisCommand.PutText ("-5", THEO_SY, 0)
        retval = DmisCommand.PutText ("0", THEO_SZ, 0)
        retval = DmisCommand.PutText ("0", THEO_EX, 0)
        retval = DmisCommand.PutText ("5", THEO_EY, 0)
        retval = DmisCommand.PutText ("0", THEO_EZ, 0)
        retval = DmisCommand.PutText ("0", THEO_I, 0)
        retval = DmisCommand.PutText ("1", THEO_J, 0)
        retval = DmisCommand.PutText ("0", THEO_K, 0)
        retval = DmisCommand.PutText ("0", SURFVEC_I, 0)
        retval = DmisCommand.PutText ("0", SURFVEC_J, 0)
        retval = DmisCommand.PutText ("0", SURFVEC_K, 0)
        retval = DmisCommand.PutText ("10", THEO_LENGTH, 0)
        retval = DmisCommand.PutText ("0", MEAS_SX, 0)
        retval = DmisCommand.PutText ("-5", MEAS_SY, 0)
        retval = DmisCommand.PutText ("0", MEAS_SZ, 0)
        retval = DmisCommand.PutText ("0", MEAS_EX, 0)
        retval = DmisCommand.PutText ("5", MEAS_EY, 0)
        retval = DmisCommand.PutText ("0", MEAS_EZ, 0)
        retval = DmisCommand.PutText ("0", MEAS_I, 0)
        retval = DmisCommand.PutText ("1", MEAS_J, 0)
        retval = DmisCommand.PutText ("0", MEAS_K, 0)
        retval = DmisCommand.PutText ("10", MEAS_LENGTH, 0)
        retval = DmisCommand.PutText ("3DLINE_Y_AXIS_OF_" + CurAlignName, ID, 0)
        retval = DmisCommand.SetToggleString (1, COORD_TYPE, 0)
        retval = DmisCommand.SetToggleString (1, BOUND_TYPE, 0)
        retval = DmisCommand.SetToggleString (3, AXIS, 0)
        retval = DmisCommand.SetToggleString (2, USER_DEFINED_THEOS, 0)
      
      Set DmisCommand = DmisCommands.Add(CONST_ALN_LINE, TRUE)
        DmisCommand.Marked = TRUE
        retval = DmisCommand.PutText ("0", THEO_SX, 0)
        retval = DmisCommand.PutText ("0", THEO_SY, 0)
        retval = DmisCommand.PutText ("-0.5", THEO_SZ, 0)
        retval = DmisCommand.PutText ("0", THEO_EX, 0)
        retval = DmisCommand.PutText ("0", THEO_EY, 0)
        retval = DmisCommand.PutText ("0.5", THEO_EZ, 0)
        retval = DmisCommand.PutText ("0", THEO_I, 0)
        retval = DmisCommand.PutText ("0", THEO_J, 0)
        retval = DmisCommand.PutText ("1", THEO_K, 0)
        retval = DmisCommand.PutText ("0", SURFVEC_I, 0)
        retval = DmisCommand.PutText ("0", SURFVEC_J, 0)
        retval = DmisCommand.PutText ("1", THEO_LENGTH, 0)
        retval = DmisCommand.PutText ("0", MEAS_SX, 0)
        retval = DmisCommand.PutText ("0", MEAS_SY, 0)
        retval = DmisCommand.PutText ("-0.5", MEAS_SZ, 0)
        retval = DmisCommand.PutText ("0", MEAS_EX, 0)
        retval = DmisCommand.PutText ("0", MEAS_EY, 0)
        retval = DmisCommand.PutText ("0.5", MEAS_EZ, 0)
        retval = DmisCommand.PutText ("0", MEAS_I, 0)
        retval = DmisCommand.PutText ("0", MEAS_J, 0)
        retval = DmisCommand.PutText ("1", MEAS_K, 0)
        retval = DmisCommand.PutText ("1", MEAS_LENGTH, 0)
        retval = DmisCommand.PutText ("3DLINE_Z_AXIS_OF_" + CurAlignName, ID, 0)
        retval = DmisCommand.SetToggleString (1, COORD_TYPE, 0)
        retval = DmisCommand.SetToggleString (1, BOUND_TYPE, 0)
        retval = DmisCommand.SetToggleString (1, AXIS, 0)
        retval = DmisCommand.SetToggleString (2, USER_DEFINED_THEOS, 0)
    
      Set DmisCommand = DmisCommands.Add(CONST_ORIG_POINT, TRUE)
        DmisCommand.Marked = TRUE
        retval = DmisCommand.PutText ("0", THEO_X, 0)
        retval = DmisCommand.PutText ("0", THEO_Y, 0)
        retval = DmisCommand.PutText ("0", THEO_Z, 0)
        retval = DmisCommand.PutText ("0", THEO_I, 0)
        retval = DmisCommand.PutText ("0", THEO_J, 0)
        retval = DmisCommand.PutText ("1", THEO_K, 0)
        retval = DmisCommand.PutText ("0", MEAS_X, 0)
        retval = DmisCommand.PutText ("0", MEAS_Y, 0)
        retval = DmisCommand.PutText ("0", MEAS_Z, 0)
        retval = DmisCommand.PutText ("0", MEAS_I, 0)
        retval = DmisCommand.PutText ("0", MEAS_J, 0)
        retval = DmisCommand.PutText ("1", MEAS_K, 0)
        retval = DmisCommand.PutText ("ORIGIN_POINT_OF_" + CurAlignName, ID, 0)
        retval = DmisCommand.SetToggleString (1, COORD_TYPE, 0)
        retval = DmisCommand.SetToggleString (2, USER_DEFINED_THEOS, 0)
    
    End Sub