hexagon logo

Creation of a script for a toolbar button to insert a command line

Hello all!!

How to create a script to insert this command lines in a program?
In the end i want to create a button for a toolbar that runs this script.


C1 =COMMENT/INPUT,NO,FULL SCREEN=NO,
Dimensional Numero: ?
C2 =COMMENT/INPUT,NO,FULL SCREEN=NO,
Molde Numero: ?
C3 =COMMENT/INPUT,NO,FULL SCREEN=NO,
Nome do Molde (Cliente): ?
C4 =COMMENT/INPUT,NO,FULL SCREEN=NO,
Referencia das peças: ?
C5 =COMMENT/INPUT,NO,FULL SCREEN=NO,
Quantidade de Peças: ?
C6 =COMMENT/INPUT,NO,FULL SCREEN=NO,
Teste Numero: ?
C7 =COMMENT/INPUT,NO,FULL SCREEN=NO,
Revisão do Relatório: ?
C8 =COMMENT/INPUT,NO,FULL SCREEN=NO,
Elaborado por: ?



Thank you in advanced for the help.

Lionheart1º
  • Create a program with those comments.

    FILE
    /EXPORT
    /BASIC

    Then open the .bas file using the basic editor.
    Delete everything except the lines that contain the comment code.
    Save the file.

    Now create a new program and run the basic script to confirm the correct comments have been inserted.
  • Thank you very much dph51 !!

    It worked in perfection. I'v also created the toolbar button so it places the comments when i want!

    Regards
  • I once saw dph turn a full grown man into a bunny rabbit with a bas script...
  • You might get with Josh Carpenter from Hexagon. He has a custom comments script that works great. You access it from an icon on the toolbar.
  • Really?! I used to have a script that did that...
  • As noted above, it is fun and easy to make a script to automate the one-click addition of comments to a PC-DMIS program.

    The only downsides are these:
    - the repeated pop-ups of Input Comments make for an annoying user interface.
    - Input Comments retain their last-entered data, so the lazy operator will simply click OK and use the previous values. I visited a company where they had been doing this for a year since the programmer had quit.

    Here's a simple Basic Script that provides a single pop-up dialog box that you can customize to your liking.
    This is a case where the program has a Basic Script call to run this BAS every part run.
    Here is the text for the BAS script:
    Sub Main
    '''''Create Dialog with these input items:
    Begin Dialog DIALOG_1 50,10, 275, 300,      oOPERATORINPUT
      GroupBox 5,5,260,25
    Text 20,15,85,12, "Enter Operator:"
      TextBox 85,13,135,12, .EditBox_1
      GroupBox 5,35,260,25
    Text 25,45,85,12, "Enter Job Number:"
      TextBox 95,43,135,12, .EditBox_2
      GroupBox 5,65,260,25
    Text 32,75,85,12, "Enter Serial Number:"
      TextBox 105,73,135,12, .EditBox_3
      GroupBox 5,210,172,25
    Text 10,220,85,12, "Need Manual Alignment?"
      OptionGroup .GROUP_2
        OptionButton 105,220,25,12, "YES"
        OptionButton 145,220,25,12, "NO"
      OKButton 195,210,65,45
      CancelButton 120,275,48,16
    End Dialog
    
    ''''' Set the Dialog for access:
    Dim Dialg As DIALOG_1
    button1 = Dialog(Dialg)
    
    ''''' Declar VB variables:
    Dim Progtype As String
    Dim SerNum As String
    Dim MANUALQ As String
    MANUALQ= "YES"
    
    '''''Quit if dialog got canceled, or go on to take the operator inputs and put them into VB variables:
    If button1 = 0 Then
      Progtype= "END"
    Else
    
      Select Case Dialg.GROUP_2
        Case 0
          MANUALQ= "YES"
        Case 1
          MANUALQ= "NO"
      End Select
    
    
     Oper = Dialg.EditBox_1
     Job = Dialg.EditBox_2
     SerNum = Dialg.EditBox_3
    End If
    
    '''''Link up to PC-DMIS:
    Dim App As Object
    Set App = CreateObject("PCDLRN.Application")
    Dim Part As Object
    Set Part = App.ActivePartProgram
    Dim Cmds As Object
    Dim Cmd As Object
    Set Cmds = Part.Commands
    
    '''''Find the PC-DMIS variables and fill their values in with the current values of VB variables:
    For Each Cmd In Cmds
      If Cmd.Type = ASSIGNMENT Then
        If Cmd.GetText(DEST_EXPR, 0) = "OPERATOR" Then
          bln = Cmd.PutText("""" + Oper + """", SRC_EXPR, 0)
          Cmd.ReDraw
        End If
        If Cmd.GetText(DEST_EXPR, 0) = "JOB" Then
          bln = Cmd.PutText("""" + Job + """", SRC_EXPR, 0)
          Cmd.ReDraw
        End If
        If Cmd.GetText(DEST_EXPR,0) = "SERNO" Then
          bln = Cmd.PutText("""" + SerNum + """", SRC_EXPR, 0)
          Cmd.ReDraw
        End If
        If Cmd.GetText(DEST_EXPR,0) = "MANUAL" Then
          bln = Cmd.PutText("""" + MANUALQ + """", SRC_EXPR, 0)
          Cmd.ReDraw
        End If
      End If
    Next Cmd
    
    '''''Finish.
    End Sub
    


    Here's a snippet of code from PC-DMIS that works with the above BAS script:
                ASSIGN/TRY=0
    RETRY_INPUT=LABEL/
                ASSIGN/TRY=TRY+1
                IF_GOTO/TRY>3,GOTO = ENDOFTIME
    CS1        =SCRIPT/FILENAME= C:\\OPERATOR_INPUTS_BASIC_VERYBASIC.BAS
                FUNCTION/Main,SHOW=YES,,
                STARTSCRIPT/
                ENDSCRIPT/
                ASSIGN/OPERATOR="NAME"
                ASSIGN/SERNO="SERIALNUMBER"
                ASSIGN/JOB="JOBNUMBER"
                ASSIGN/MANUAL="YES"
                IF/OPERATOR=="" OR SERNO=="" OR JOB==""
                  COMMENT/OPER,NO,FULL SCREEN=NO,AUTO-CONTINUE=NO,
                  MISSING REQUIRED INFORMATION
                GOTO/RETRY_INPUT
                END_IF/
                COMMENT/REPT,
    
                "     Operator: "+OPERATOR
                "Serial Number: "+SERNO
                "   Job Number: "+JOB
                ------------------------------------------------
    


    So, to modify this system to meet your needs:
    1) Make sure new PC-DMIS variable is in PC-DMIS program:
    ASSIGN/SHIFT=0

    2) In script, add new input item:
    Text 20,15,85,12, "Enter Shift:"
    TextBox 85,13,135,12, .EditBox_4
    Note the 4 #s: these are X, Y, Width, and Length all in pixels. X+ is left-to-right, Y+ is top-to-bottom.
    Therefore that new edit box will appear at X 85, Y13, and it's 135 pixels long by 12 wide.
    These coordinates will take some adjustment to get looking good on the dialog!

    3) In script, add new VB variable declaration:
    Dim ShiftVB As String

    4) In script, add new code to take whatever the operator typed into your new EditBox_4 item and stuff it into the new VB variable:
    ShiftVB = Dialg.EditBox_4

    5) In script, add new code to take the current value of the VB variable and stuff it into the correct PC-DMIS variable:
    If Cmd.GetText(DEST_EXPR,0) = "SHIFT" Then
    bln = Cmd.PutText("""" + ShiftVB + """", SRC_EXPR, 0)
    Cmd.ReDraw
    End If

    6) Next level: make a BAS script that creates all the required and nice-to-have PC-DMIS commands in the program, and link it to a new icon.
  • So lost need some major help with this scripting. So I took this old script of Josh's and I want to revise a little. Don't want to start deleting stuff and then become completely lost. Here is my Plan. I'm creating 1 program with 4 different Operations. At the beginning all I want is for the Operator to choose the right Op. and when they choose that it goes to a Label in the Program. So how about or and a little help? This is what I have so far I know its a mess, but don't want it to get messier. or even your pretty good at this sh_it.





    
    Sub Main
    '''''Create Dialog With these Input items:
    Begin Dialog DIALOG_1 50,10, 1000, 500,      oOPERATORINPUT
      TextBox 85,13,135,12, .EditBox_1
      TextBox 95,43,135,12, .EditBox_2
      TextBox 105,73,135,12, .EditBox_3
      OptionGroup .GROUP_2
        Button 55,15,800,100, "WORK ORDER #20"
        Button 55,125,800,100, "WORK ORDER #30"
        Button 55,235,800,100, "WORK ORDER #40"
        Button 55,345,800,100, "WORK ORDER #50"
          OKButton 195,210,65,45
      CancelButton 120,275,48,16
    End Dialog
    
    ''''' Set the Dialog For Access:
    Dim Dialg As DIALOG_1
    button1 = Dialog(Dialg)
    
    ''''' Declar VB variables:
    Dim Progtype As String
    Dim SerNum As String
    Dim MANUALQ As String
    MANUALQ= "YES"
    
    '''''Quit If Dialog got canceled, Or go On To take the operator inputs And Put them into VB variables:
    If button1 = 0 Then
      Progtype= "END"
    Else
    
      Select Case Dialg.GROUP_2
        Case 0
          MANUALQ= "YES"
        Case 1
          MANUALQ= "NO"
      End Select
    
    
    
     End If
    
    '''''Link up To PC-DMIS:
    Dim App As Object
    Set App = CreateObject("PCDLRN.Application")
    Dim Part As Object
    Set Part = App.ActivePartProgram
    Dim Cmds As Object
    Dim Cmd As Object
    Set Cmds = Part.Commands
    
    '''''Find the PC-DMIS variables And fill their values In With the current values of VB variables:
    For Each Cmd In Cmds
      If Cmd.Type = ASSIGNMENT Then
        If Cmd.GetText(DEST_EXPR, 0) = "OPERATOR" Then
          bln = Cmd.PutText("""" + Oper + """", SRC_EXPR, 0)
          Cmd.ReDraw
        End If
        If Cmd.GetText(DEST_EXPR, 0) = "JOB" Then
          bln = Cmd.PutText("""" + Job + """", SRC_EXPR, 0)
          Cmd.ReDraw
        End If
        If Cmd.GetText(DEST_EXPR,0) = "SERNO" Then
          bln = Cmd.PutText("""" + SerNum + """", SRC_EXPR, 0)
          Cmd.ReDraw
        End If
        If Cmd.GetText(DEST_EXPR,0) = "MANUAL" Then
          bln = Cmd.PutText("""" + MANUALQ + """", SRC_EXPR, 0)
          Cmd.ReDraw
        End If
      End If
    Next Cmd
    
    '''''Finish.
    End Sub
    
    
    

  • KIRBSTER269,
    Not sure if this was what you wanted. But, it was fun to quickly code this.

    Script Sample:
    
    Sub Main
    
    Return:
    Dim DmisApp As Object 
    Dim DmisPart As Object
    Dim DmisCommands As Object
    Dim DmisCommand As Object
    
    
      Set DmisApp = CreateObject("PCDLRN.Application")   
      Set DmisPart = DmisApp.ActivePartProgram  
      Set DmisCommands = DmisPart.Commands 
      CommandCount = DmisCommands.Count 
      Set DmisCommand = DmisCommands.Item(CommandCount) 
      Set DmisCommand = DmisCommands.CurrentCommand 
      'DmisCommands.InsertionPointAfter DmisCommand 
    
    Begin Dialog DIALOG_1 183,33, 238, 159, "OPERATOR INPUT"
      GroupBox 12,8,212,124, "Work Order"
      CancelButton 176,140,37,12
      'Text 52,113,53,12, "Last Selection: "
      'TextBox 108,112,97,12, .LastSelection
      PushButton 24,32,85,12, "Work Order 20", .PushButton_1
      PushButton 128,32,85,12, "Work Order 30 ", .PushButton_2
      PushButton 24,60,85,12, "Work Order 40", .PushButton_3
      PushButton 128,60,85,12, "Work Order 50", .PushButton_4
      'OKButton 24,140,37,12
      PushButton 92,88,53,12, "End Program", .PushButton_5
    End Dialog
    
    
    Dim Dialog1 As DIALOG_1  
    
    '[ Dialog Input ]
    For Each DmisCommand In DmisCommands
    If DmisCommand.Type = ASSIGNMENT Then
    If DmisCommand.GetText(DEST_EXPR, 0) = "WORK_ORDER_V1" Then   
    WorkOrderV1_GT= DmisCommand.GetText( SRC_EXPR, 0) 
    If  WorkOrderV1_GT= 0 Then
       WorkOrderV1_GT= "Work Order 20"
    End If
    If  WorkOrderV1_GT= 1 Then
       WorkOrderV1_GT= "Work Order 30"
    End If
    If  WorkOrderV1_GT= 2 Then
       WorkOrderV1_GT= "Work Order 40"
    End If
    If  WorkOrderV1_GT= 3 Then
       WorkOrderV1_GT= "Work Order 50"
    End If
    If  WorkOrderV1_GT= 4 Then
       WorkOrderV1_GT= "End Program"
    End If
    
    End If
    
    End If
    Next DmisCommand 
    
    '[Default Dialog Settings]
    'Dialog1.LastSelection = WorkOrderV1_GT
    
    '[Dialog returns -1 For OK, 0 For Cancel, button # For PushButtons] 
    Button = Dialog( Dialog1 )
    
    '[Cancel Button Settings]
    'If Button = 0 Then End 'Cancel Button  
    'If Button = 0 Then Exit Sub 'Cancel Button
    'If Button = -1 Then GoTo ExecuteWorkOrder   
    
    '[Button Settings]
    If Button = 1 Then 'Button
    
    WorkOrderPB = 0
    
    End If
    If Button = 2 Then 'Button
    
    WorkOrderPB = 1
    
    End If
    If Button = 3 Then 'Button
    
    WorkOrderPB = 2
    
    End If
    If Button = 4 Then 'Button
    
    WorkOrderPB = 3
    
    End If
    If Button = 5 Then 'Button
    
    WorkOrderPB = 4
    
    End If
    If Button = 0 Then 'Button
    
    WorkOrderPB = 4
    
    End If
    
    
    ExecuteWorkOrder:
    
    For Each DmisCommand In DmisCommands
    If DmisCommand.Type = ASSIGNMENT Then
    
    If DmisCommand.GetText(DEST_EXPR, 0) = "WORK_ORDER_V1" Then   
    InspectPrintSettingsPT= DmisCommand.PutText( """"+WorkOrderPB+"""",SRC_EXPR, 0)   
    DmisCommand.ReDraw 
    End If  
    
    End If  
    Next DmisCommand  
    
    'MsgBox "Read"
    'GoTo ReadMsg
    
    ReadMsg:
    'GoTo Return 
    
    '[Cleanup ]
    Set DmisPart = Nothing  
    Set DmisApp = Nothing 
    Set DmisCommand = Nothing  
    Set DmisCommands = Nothing 
    
    End Sub  
    


    PC-DMIS Program Sample:
    PART NAME  : Work Order
    REV NUMBER :
    SER NUMBER :
    STATS COUNT : 1
    
    STARTUP    =ALIGNMENT/START,RECALL:USE_PART_SETUP,LIST=YES
                ALIGNMENT/END
                MODE/MANUAL
                FORMAT/TEXT,OPTIONS, ,HEADINGS,SYMBOLS, ;NOM,TOL,MEAS,DEV,OUTTOL, ,
                LOADPROBE/3BY20_30E_TP20SF_50E
                TIP/T1A0B0, SHANKIJK=0, 0, 1, ANGLE=0
    CS1        =SCRIPT/FILENAME= C:\USERS\PUBLIC\DOCUMENTS\PCDMISQUICKTOOLS\QUICKTOOLS\BASIC SCRIPT TRAINING\WORK ORDER SCRIPT1.BAS
                FUNCTION/Main,SHOW=YES,,
                STARTSCRIPT/
                ENDSCRIPT/
                ASSIGN/WORK_ORDER_V1=1
                IF_GOTO/WORK_ORDER_V1==0,GOTO = WORK_ORDER_L20
                IF_GOTO/WORK_ORDER_V1==1,GOTO = WORK_ORDER_L30
                IF_GOTO/WORK_ORDER_V1==2,GOTO = WORK_ORDER_L40
                IF_GOTO/WORK_ORDER_V1==3,GOTO = WORK_ORDER_L50
                IF_GOTO/WORK_ORDER_V1==4,GOTO = PROGRAM_ENDING_L1
    WORK_ORDER_L20=LABEL/
                COMMENT/OPER,NO,FULL SCREEN=NO,AUTO-CONTINUE=NO,
                Work Order 20 Program.
                GOTO/PROGRAM_ENDING_L1
    WORK_ORDER_L30=LABEL/
                COMMENT/OPER,NO,FULL SCREEN=NO,AUTO-CONTINUE=NO,
                Work Order 30 Program.
                GOTO/PROGRAM_ENDING_L1
    WORK_ORDER_L40=LABEL/
                COMMENT/OPER,NO,FULL SCREEN=NO,AUTO-CONTINUE=NO,
                Work Order 40 Program.
                GOTO/PROGRAM_ENDING_L1
    WORK_ORDER_L50=LABEL/
                COMMENT/OPER,NO,FULL SCREEN=NO,AUTO-CONTINUE=NO,
                Work Order 50 Program.
                GOTO/PROGRAM_ENDING_L1
    PROGRAM_ENDING_L1=LABEL/