Esempio n. 1
0
    def run(self, command, param=None):
        try:
            # se c'é un comando attivo
            if self.actualCommand is not None:
                return

            # eccezione per comando virtuale "QadVirtualSelCommandClass" che in realtà non è un comando
            # ma è usato per selezionare oggetti quando nessun comando è attivo
            if command == "QadVirtualSelCommandClass":
                self.actualCommand = QadVirtualSelCommandClass(self.plugIn)
                # param è la posizione corrente del mouse
                if self.actualCommand.run(False,
                                          param) == True:  # comando terminato
                    self.clearCommand()
                return

            # eccezione per comando virtuale "QadVirtualGripCommandsClass" che in realtà non è un comando
            # ma è usato per modificare gli oggetti selezionati da grip points
            if command == "QadVirtualGripCommandsClass":
                self.actualCommand = QadVirtualGripCommandsClass(self.plugIn)
                # param è una lista in cui:
                # il primo elemento è il codice del comando da eseguire
                # il secondo elemento è entitySetGripPoints
                # il terzo elemento è il punto del grip corrente
                self.actualCommand.entitySetGripPoints = param[1]
                self.actualCommand.basePt = param[2]
                self.actualCommand.initStartCommand(param[0])
                if self.actualCommand.run(False) == True:  # comando terminato
                    self.clearCommand()
                return

            self.actualCommand = self.getCommandObj(command)
            if self.actualCommand is None:
                # verifico se è una variabile di sistema
                if QadVariables.get(command) is not None:
                    self.showMsg("\n")
                    # lancio comando SETVAR per settare la variabile
                    args = [
                        QadMsg.translate("Command_list", "SETVAR"), command
                    ]
                    return self.runMacro(args)

                msg = QadMsg.translate("QAD", "\nInvalid command \"{0}\".")
                self.showErr(msg.format(command))
                return

            self.usedCmdNames.setUsed(command)
            self.plugIn.clearEntityGripPoints(
            )  # pulisco i grip points correnti
            if self.actualCommand.run() == True:  # comando terminato
                self.clearCommand()

        except Exception as e:
            self.abortCommand()
            displayError(e)
Esempio n. 2
0
   def run(self, command, param = None):
      try:
         # se c'é un comando attivo
         if self.actualCommand is not None:
            return
   
         # eccezione per comando virtuale "QadVirtualSelCommandClass" che in realtà non è un comando
         # ma è usato per selezionare oggetti quando nessun comando è attivo
         if command == "QadVirtualSelCommandClass":
            self.actualCommand = QadVirtualSelCommandClass(self.plugIn)
            # param è la posizione corrente del mouse
            if self.actualCommand.run(False, param) == True: # comando terminato
               self.clearCommand()
            return
   
         # eccezione per comando virtuale "QadVirtualGripCommandsClass" che in realtà non è un comando
         # ma è usato per modificare gli oggetti selezionati da grip points
         if command == "QadVirtualGripCommandsClass":
            self.actualCommand = QadVirtualGripCommandsClass(self.plugIn)
            # param è una lista in cui:
            # il primo elemento è il codice del comando da eseguire
            # il secondo elemento è entitySetGripPoints
            # il terzo elemento è il punto del grip corrente
            self.actualCommand.entitySetGripPoints = param[1]
            self.actualCommand.basePt = param[2]
            self.actualCommand.initStartCommand(param[0])
            if self.actualCommand.run(False) == True: # comando terminato
               self.clearCommand()
            return
         
         self.actualCommand = self.getCommandObj(command)
         if self.actualCommand is None:
            # verifico se è una variabile di sistema
            if QadVariables.get(command) is not None:
               self.showMsg("\n")
               # lancio comando SETVAR per settare la variabile
               args = [QadMsg.translate("Command_list", "SETVAR"), command]
               return self.runMacro(args)
               
            msg = QadMsg.translate("QAD", "\nInvalid command \"{0}\".")
            self.showErr(msg.format(command))
            return
   
         self.usedCmdNames.setUsed(command)
         self.plugIn.clearEntityGripPoints() # pulisco i grip points correnti
         if self.actualCommand.run() == True: # comando terminato
            self.clearCommand()

      except Exception as e:
         self.abortCommand()
         displayError(e)
Esempio n. 3
0
class QadCommandsClass():
   # quando si aggiunge un nuovo comando bisogna
   # 1) aggiungerlo nella lista __cmdObjs nella funzione __init__ 
   # 2) se il comando può essere richiamato da menu o da toolbar vedere la funzione Qad::initGui (qad.py)
   #    e ricordarsi di inserire l'icona in resources.qrc e di ricompilare le risorse
   # 3) aggiungere funzione per l'avvio del comando "run<nome_comando>Command"
   
   def __init__(self, plugIn):   
      self.plugIn = plugIn
      
      self.__cmdObjs = [] # lista interna degli oggetti comandi
      self.__cmdObjs.append(QadIDCommandClass(self.plugIn)) # ID
      self.__cmdObjs.append(QadSETVARCommandClass(self.plugIn)) # SETVAR
      self.__cmdObjs.append(QadPLINECommandClass(self.plugIn)) # PLINE
      self.__cmdObjs.append(QadSETCURRLAYERBYGRAPHCommandClass(self.plugIn))# SETCURRLAYERBYGRAPH
      self.__cmdObjs.append(QadSETCURRUPDATEABLELAYERBYGRAPHCommandClass(self.plugIn)) # SETCURRUPDATEABLELAYERBYGRAPH
      self.__cmdObjs.append(QadARCCommandClass(self.plugIn)) # ARC
      self.__cmdObjs.append(QadCIRCLECommandClass(self.plugIn)) # CIRCLE
      self.__cmdObjs.append(QadDSETTINGSCommandClass(self.plugIn)) # DSETTINGS
      self.__cmdObjs.append(QadLINECommandClass(self.plugIn)) # LINE
      self.__cmdObjs.append(QadERASECommandClass(self.plugIn)) # ERASE
      self.__cmdObjs.append(QadMPOLYGONCommandClass(self.plugIn)) # MPOLYGON
      self.__cmdObjs.append(QadMBUFFERCommandClass(self.plugIn)) # MBUFFER
      self.__cmdObjs.append(QadROTATECommandClass(self.plugIn)) # ROTATE
      self.__cmdObjs.append(QadMOVECommandClass(self.plugIn)) # MOVE
      self.__cmdObjs.append(QadSCALECommandClass(self.plugIn)) # SCALE
      self.__cmdObjs.append(QadCOPYCommandClass(self.plugIn)) # COPY
      self.__cmdObjs.append(QadOFFSETCommandClass(self.plugIn)) # OFFSET
      self.__cmdObjs.append(QadEXTENDCommandClass(self.plugIn)) # EXTEND
      self.__cmdObjs.append(QadTRIMCommandClass(self.plugIn)) # TRIM
      self.__cmdObjs.append(QadRECTANGLECommandClass(self.plugIn)) # RECTANGLE
      self.__cmdObjs.append(QadMIRRORCommandClass(self.plugIn)) # MIRROR
      self.__cmdObjs.append(QadUNDOCommandClass(self.plugIn)) # UNDO
      self.__cmdObjs.append(QadREDOCommandClass(self.plugIn)) # REDO
      self.__cmdObjs.append(QadINSERTCommandClass(self.plugIn)) # INSERT
      self.__cmdObjs.append(QadTEXTCommandClass(self.plugIn)) # TEXT
      self.__cmdObjs.append(QadSTRETCHCommandClass(self.plugIn)) # STRETCH
      self.__cmdObjs.append(QadBREAKCommandClass(self.plugIn)) # BREAK
      self.__cmdObjs.append(QadPEDITCommandClass(self.plugIn)) # PEDIT
      self.__cmdObjs.append(QadFILLETCommandClass(self.plugIn)) # FILLET
      self.__cmdObjs.append(QadPOLYGONCommandClass(self.plugIn)) # POLYGON
      self.__cmdObjs.append(QadDIMLINEARCommandClass(self.plugIn)) # DIMLINEAR
      self.__cmdObjs.append(QadDIMALIGNEDCommandClass(self.plugIn)) # DIMALIGNED
      self.__cmdObjs.append(QadDIMSTYLECommandClass(self.plugIn)) # DIMSTYLE
      self.__cmdObjs.append(QadHELPCommandClass(self.plugIn)) # HELP
      self.__cmdObjs.append(QadLENGTHENCommandClass(self.plugIn)) # LENGTHEN
      self.__cmdObjs.append(QadOPTIONSCommandClass(self.plugIn)) # OPTIONS
      self.__cmdObjs.append(QadMAPMPEDITCommandClass(self.plugIn)) # MAPMEDIT
      self.__cmdObjs.append(QadJOINCommandClass(self.plugIn)) # JOIN
      self.__cmdObjs.append(QadDISJOINCommandClass(self.plugIn)) # DISJOIN      
      
      self.actualCommand = None  # Comando in corso di esecuzione
   
      # scarto gli alias che hanno lo stesso nome dei comandi
      exceptionList = []
      for cmdObj in self.__cmdObjs:
         exceptionList.append(cmdObj.getName())
         exceptionList.append("_" + cmdObj.getEnglishName())
         
      # carico alias dei comandi
      self.commandAliases = QadCommandAliasesClass()
      self.commandAliases.load("", exceptionList)
      
      self.usedCmdNames = QadUsedCmdNamesClass()
      
      
   def isValidCommand(self, command):
      cmd = self.getCommandObj(command)
      if cmd:
         del cmd
         return True
      else:
         return False


   def isValidEnvVariable(self, variable):
      # verifico se è una variabile di sistema
      if QadVariables.get(variable) is not None:
         return True
      else:
         return False
   
   
   def showCommandPrompt(self):
      if self.plugIn is not None:
         self.plugIn.showInputMsg() # visualizza prompt standard per richiesta comando 
   
   def showMsg(self, msg, displayPromptAfterMsg = False):
      if self.plugIn is not None:
         self.plugIn.showMsg(msg, displayPromptAfterMsg)

   def showErr(self, err):
      if self.plugIn is not None:
         self.plugIn.showErr(err)


   #============================================================================
   # getCommandObj
   #============================================================================
   def getCommandObj(self, cmdName, useAlias = True):
      if cmdName is None:
         return None
      if cmdName == "":
         return None
      upperCommand = cmdName.upper()
      if upperCommand[0] == "_":
         englishName = True
         upperCommand = upperCommand[1:] # salto il primo carattere di "_"
      else:
         englishName = False 
      
      for cmd in self.__cmdObjs:
         if englishName:
            if upperCommand == cmd.getEnglishName(): # in inglese
               return cmd.instantiateNewCmd()
         else:
            if upperCommand == cmd.getName(): # in lingua locale
               return cmd.instantiateNewCmd()
      
      if cmdName == "MACRO_RUNNER":
         return QadMacroRunnerCommandClass(self.plugIn)
      else:
         if useAlias:
            command = self.commandAliases.getCommandName(cmdName)
            return self.getCommandObj(command, False)
         else:
            return None
      
      
   #============================================================================
   # getCommandNames
   #============================================================================
   def getCommandNames(self):
      """ Return a list of pairs : [(<local cmd name>, <english cmd name>)...]"""     
      cmdNames = []
      # ricavo la lista dei nomi dei comandi
      for cmd in self.__cmdObjs:
         cmdNames.append([cmd.getName(), cmd.getEnglishName]) # in lingua locale, in inglese
      # aggiungo gli alias
      for alias in self.commandAliases.getCommandAliasDict().keys():
         cmdNames.append([alias, alias])
         
      return cmdNames
         
   
   #============================================================================
   # run
   #============================================================================
   def run(self, command, param = None):
      # se c'é un comando attivo
      if self.actualCommand is not None:
         return

      # eccezione per comando virtuale "QadVirtualSelCommandClass" che in realtà non è un comando
      # ma è usato per selezionare oggetti quando nessun comando è attivo
      if command == "QadVirtualSelCommandClass":
         self.actualCommand = QadVirtualSelCommandClass(self.plugIn)
         # param è la posizione corrente del mouse
         if self.actualCommand.run(False, param) == True: # comando terminato
            self.clearCommand()
         return

      # eccezione per comando virtuale "QadVirtualGripCommandsClass" che in realtà non è un comando
      # ma è usato per modificare gli oggetti selezionati da grip points
      if command == "QadVirtualGripCommandsClass":
         self.actualCommand = QadVirtualGripCommandsClass(self.plugIn)
         # param è una lista in cui:
         # il primo elemento è il codice del comando da eseguire
         # il secondo elemento è entitySetGripPoints
         # il terzo elemento è il punto del grip corrente
         self.actualCommand.entitySetGripPoints = param[1]
         self.actualCommand.basePt = param[2]
         self.actualCommand.initStartCommand(param[0])
         if self.actualCommand.run(False) == True: # comando terminato
            self.clearCommand()
         return
      
      self.actualCommand = self.getCommandObj(command)
      if self.actualCommand is None:
         # verifico se è una variabile di sistema
         if QadVariables.get(command) is not None:
            self.showMsg("\n")
            # lancio comando SETVAR per settare la variabile
            args = [QadMsg.translate("Command_list", "SETVAR"), command]
            return self.runMacro(args)
            
         msg = QadMsg.translate("QAD", "\nInvalid command \"{0}\".")
         self.showErr(msg.format(command))
         return

      self.usedCmdNames.setUsed(command)
      self.plugIn.clearEntityGripPoints() # pulisco i grip points correnti
      if self.actualCommand.run() == True: # comando terminato
         self.clearCommand()
         
         
   #============================================================================
   # runMacro
   #============================================================================
   def runMacro(self, args):
      # se non c'é alcun comando attivo
      if self.actualCommand is not None:
         return
      
      self.actualCommand = self.getCommandObj("MACRO_RUNNER")
      if self.actualCommand is None:
         msg = QadMsg.translate("QAD", "\nInvalid command \"{0}\".")
         self.showErr(msg.format(command))
         return

      self.plugIn.clearEntityGripPoints() # pulisco i grip points correnti
      self.actualCommand.setCmdAndOptionsToRun(args)
      
      self.showMsg(args[0]) # visualizzo il nome del comando in macro
      if self.actualCommand.run() == True: # comando terminato
         self.clearCommand()


   #============================================================================
   # continueCommandFromMapTool
   #============================================================================
   def continueCommandFromMapTool(self):
      # se non c'é alcun comando attivo
      if self.actualCommand is None:
         return
      msg = None
      # se é stato premuto il tasto destro del mouse valuto cosa é stato inserito nella finestra di testo
      if self.actualCommand.getPointMapTool().rightButton == True:
         msg = self.actualCommand.getCurrMsgFromTxtWindow()
         if (msg is not None) and len(msg) > 0:
            self.actualCommand.showEvaluateMsg()
         else:
            if self.actualCommand.run(True) == True: # comando terminato
               self.clearCommand()
      else:
         if self.actualCommand.run(True) == True: # comando terminato
            self.clearCommand()


   #============================================================================
   # continueCommandFromTextWindow
   #============================================================================
   def continueCommandFromTextWindow(self, msg):
      # se non c'é alcun comando attivo
      if self.actualCommand is None:
         return
      if self.actualCommand.run(False, msg) == True: # comando terminato
         self.clearCommand()

            
   #============================================================================
   # abortCommand
   #============================================================================
   def abortCommand(self):
      # se non c'é alcun comando attivo
      if self.actualCommand is None:
         self.showCommandPrompt() # visualizza prompt standard per richiesta comando 
         self.plugIn.setStandardMapTool()               
      else:
         self.showMsg(QadMsg.translate("QAD", "*Canceled*"))
         self.clearCommand()
         # pulisco le entità selezionate e i grip points correnti
         self.plugIn.clearCurrentObjsSelection()


   #============================================================================
   # clearCommand
   #============================================================================
   def clearCommand(self):
      if self.actualCommand is None:
         return
      
      # eccezione per comando virtuale "QadVirtualGripCommandsClass" che in realtà non è un comando
      # ma è usato per modificare gli oggetti selezionati da grip points
      if self.actualCommand.getName() == "QadVirtualGripCommandsClass":
         # ridisegno i grip point nelle nuove posizioni resettando quelli selezionati
         self.plugIn.tool.clearEntityGripPoints()
         self.plugIn.tool.refreshEntityGripPoints()
      else:
         # eccezione per comando virtuale "QadVirtualSelCommandClass" che in realtà non è un comando
         # ma è usato per selezionare oggetti quando nessun comando è attivo
         if self.actualCommand.getName() != "QadVirtualSelCommandClass":
            qad_utils.deselectAll(self.plugIn.canvas.layers())
         
      del self.actualCommand
      self.actualCommand = None
      self.plugIn.setStandardMapTool()
      self.showCommandPrompt() # visualizza prompt standard per richiesta comando 


   #============================================================================
   # forceCommandMapToolSnapTypeOnce
   #============================================================================
   def forceCommandMapToolSnapTypeOnce(self, snapType, snapParams = None):
      # se non c'é alcun comando attivo
      if self.actualCommand is None:
         return
      # se non c'é un maptool del comando attuale
      if self.actualCommand.getPointMapTool() is None:
         return
      # se il maptool del comando attuale se non é attivo
      if self.plugIn.canvas.mapTool() != self.actualCommand.getPointMapTool():
         self.actualCommand.setMapTool(self.actualCommand.getPointMapTool())
      self.actualCommand.getPointMapTool().forceSnapTypeOnce(snapType, snapParams)


   #============================================================================
   # getCurrenPointFromCommandMapTool
   #============================================================================
   def getCurrenPointFromCommandMapTool(self):
      # se non c'é alcun comando attivo
      if self.actualCommand is None:
         return None
      # se non c'é un maptool del comando attuale
      if self.actualCommand.getPointMapTool() is None:
         return None
      # se il maptool del comando attuale se non é attivo
      if self.plugIn.canvas.mapTool() != self.actualCommand.getPointMapTool():
         self.actualCommand.setMapTool(self.actualCommand.getPointMapTool())
      return self.actualCommand.getPointMapTool().tmpPoint
      

   #============================================================================
   # refreshCommandMapToolSnapType
   #============================================================================
   def refreshCommandMapToolSnapType(self):
      # se non c'é alcun comando attivo
      if self.actualCommand is None:
         return
      # se non c'é un maptool attivo del comando attuale
      if self.actualCommand.getPointMapTool() is None:
         return
      self.actualCommand.getPointMapTool().refreshSnapType()
      
      
   #============================================================================
   # refreshCommandMapToolOrthoMode
   #============================================================================
   def refreshCommandMapToolOrthoMode(self):
      # se non c'é alcun comando attivo
      if self.actualCommand is None:
         return
      # se non c'é un maptool attivo del comando attuale
      if self.actualCommand.getPointMapTool() is None:
         return
      self.actualCommand.getPointMapTool().refreshOrthoMode()
      
      
   #============================================================================
   # refreshCommandMapToolAutoSnap
   #============================================================================
   def refreshCommandMapToolAutoSnap(self):
      # se non c'é alcun comando attivo
      if self.actualCommand is None:
         return
      # se non c'é un maptool attivo del comando attuale
      if self.actualCommand.getPointMapTool() is None:
         return
      self.actualCommand.getPointMapTool().refreshAutoSnap()



   #============================================================================
   # getMoreUsedCmd
   #============================================================================
   def getMoreUsedCmd(self, filter):
      upperFilter = filter.upper()
      cmdName, qty = self.usedCmdNames.getMoreUsed(upperFilter)
      if cmdName == "": # nessun comando
         if upperFilter[0] == "_":
            englishName = True
            upperFilter = upperFilter[1:] # salto il primo carattere di "_"
         else:
            englishName = False 
         
         for cmd in self.__cmdObjs:
            if englishName:
               if cmd.getEnglishName().startswith(upperFilter): # in inglese
                  return cmd.getEnglishName(), 0
            else:
               if cmd.getName().startswith(upperFilter): # in lingua locale
                  return cmd.getName(), 0
      return cmdName, 0
Esempio n. 4
0
class QadCommandsClass():
    # quando si aggiunge un nuovo comando bisogna
    # 1) aggiungerlo nella lista __cmdObjs nella funzione __init__
    # 2) se il comando può essere richiamato da menu o da toolbar vedere la funzione Qad::initGui (qad.py)
    #    e ricordarsi di inserire l'icona in resources.qrc e di ricompilare le risorse
    # 3) aggiungere funzione per l'avvio del comando "run<nome_comando>Command"

    def __init__(self, plugIn):
        self.plugIn = plugIn

        self.__cmdObjs = []  # lista interna degli oggetti comandi
        self.__cmdObjs.append(QadIDCommandClass(self.plugIn))  # ID
        self.__cmdObjs.append(QadSETVARCommandClass(self.plugIn))  # SETVAR
        self.__cmdObjs.append(QadPLINECommandClass(self.plugIn))  # PLINE
        self.__cmdObjs.append(QadSETCURRLAYERBYGRAPHCommandClass(
            self.plugIn))  # SETCURRLAYERBYGRAPH
        self.__cmdObjs.append(
            QadSETCURRUPDATEABLELAYERBYGRAPHCommandClass(
                self.plugIn))  # SETCURRUPDATEABLELAYERBYGRAPH
        self.__cmdObjs.append(QadARCCommandClass(self.plugIn))  # ARC
        self.__cmdObjs.append(QadCIRCLECommandClass(self.plugIn))  # CIRCLE
        self.__cmdObjs.append(QadDSETTINGSCommandClass(
            self.plugIn))  # DSETTINGS
        self.__cmdObjs.append(QadLINECommandClass(self.plugIn))  # LINE
        self.__cmdObjs.append(QadERASECommandClass(self.plugIn))  # ERASE
        self.__cmdObjs.append(QadMPOLYGONCommandClass(self.plugIn))  # MPOLYGON
        self.__cmdObjs.append(QadMBUFFERCommandClass(self.plugIn))  # MBUFFER
        self.__cmdObjs.append(QadROTATECommandClass(self.plugIn))  # ROTATE
        self.__cmdObjs.append(QadMOVECommandClass(self.plugIn))  # MOVE
        self.__cmdObjs.append(QadSCALECommandClass(self.plugIn))  # SCALE
        self.__cmdObjs.append(QadCOPYCommandClass(self.plugIn))  # COPY
        self.__cmdObjs.append(QadOFFSETCommandClass(self.plugIn))  # OFFSET
        self.__cmdObjs.append(QadEXTENDCommandClass(self.plugIn))  # EXTEND
        self.__cmdObjs.append(QadTRIMCommandClass(self.plugIn))  # TRIM
        self.__cmdObjs.append(QadRECTANGLECommandClass(
            self.plugIn))  # RECTANGLE
        self.__cmdObjs.append(QadMIRRORCommandClass(self.plugIn))  # MIRROR
        self.__cmdObjs.append(QadUNDOCommandClass(self.plugIn))  # UNDO
        self.__cmdObjs.append(QadREDOCommandClass(self.plugIn))  # REDO
        self.__cmdObjs.append(QadINSERTCommandClass(self.plugIn))  # INSERT
        self.__cmdObjs.append(QadTEXTCommandClass(self.plugIn))  # TEXT
        self.__cmdObjs.append(QadSTRETCHCommandClass(self.plugIn))  # STRETCH
        self.__cmdObjs.append(QadBREAKCommandClass(self.plugIn))  # BREAK
        self.__cmdObjs.append(QadPEDITCommandClass(self.plugIn))  # PEDIT
        self.__cmdObjs.append(QadFILLETCommandClass(self.plugIn))  # FILLET
        self.__cmdObjs.append(QadPOLYGONCommandClass(self.plugIn))  # POLYGON
        self.__cmdObjs.append(QadDIMLINEARCommandClass(
            self.plugIn))  # DIMLINEAR
        self.__cmdObjs.append(QadDIMALIGNEDCommandClass(
            self.plugIn))  # DIMALIGNED
        self.__cmdObjs.append(QadDIMARCCommandClass(self.plugIn))  # DIMALIGNED
        self.__cmdObjs.append(QadDIMSTYLECommandClass(self.plugIn))  # DIMSTYLE
        self.__cmdObjs.append(QadHELPCommandClass(self.plugIn))  # HELP
        self.__cmdObjs.append(QadLENGTHENCommandClass(self.plugIn))  # LENGTHEN
        self.__cmdObjs.append(QadOPTIONSCommandClass(self.plugIn))  # OPTIONS
        self.__cmdObjs.append(QadMAPMPEDITCommandClass(
            self.plugIn))  # MAPMEDIT
        self.__cmdObjs.append(QadJOINCommandClass(self.plugIn))  # JOIN
        self.__cmdObjs.append(QadDISJOINCommandClass(self.plugIn))  # DISJOIN
        self.__cmdObjs.append(QadARRAYCommandClass(self.plugIn))  # ARRAY
        self.__cmdObjs.append(QadARRAYRECTCommandClass(
            self.plugIn))  # ARRAYRECT
        self.__cmdObjs.append(QadARRAYPATHCommandClass(
            self.plugIn))  # ARRAYPATH
        self.__cmdObjs.append(QadARRAYPOLARCommandClass(
            self.plugIn))  # ARRAYPOLAR
        self.__cmdObjs.append(QadDIVIDECommandClass(self.plugIn))  # DIVIDE
        self.__cmdObjs.append(QadMEASURECommandClass(self.plugIn))  # MEASURE

        self.actualCommand = None  # Comando in corso di esecuzione

        # scarto gli alias che hanno lo stesso nome dei comandi
        exceptionList = []
        for cmdObj in self.__cmdObjs:
            exceptionList.append(cmdObj.getName())
            exceptionList.append("_" + cmdObj.getEnglishName())

        # carico alias dei comandi
        self.commandAliases = QadCommandAliasesClass()
        self.commandAliases.load("", exceptionList)

        self.usedCmdNames = QadUsedCmdNamesClass()

    def isValidCommand(self, command):
        cmd = self.getCommandObj(command)
        if cmd:
            del cmd
            return True
        else:
            return False

    def isValidEnvVariable(self, variable):
        # verifico se è una variabile di sistema
        if QadVariables.get(variable) is not None:
            return True
        else:
            return False

    def showCommandPrompt(self):
        if self.plugIn is not None:
            self.plugIn.showInputMsg(
            )  # visualizza prompt standard per richiesta comando

    def showMsg(self, msg, displayPromptAfterMsg=False):
        if self.plugIn is not None:
            self.plugIn.showMsg(msg, displayPromptAfterMsg)

    def showErr(self, err):
        if self.plugIn is not None:
            self.plugIn.showErr(err)

    #============================================================================
    # getCommandObj
    #============================================================================
    def getCommandObj(self, cmdName, useAlias=True):
        if cmdName is None:
            return None
        if cmdName == "":
            return None
        upperCommand = cmdName.upper()
        if upperCommand[0] == "_":
            englishName = True
            upperCommand = upperCommand[1:]  # salto il primo carattere di "_"
        else:
            englishName = False

        for cmd in self.__cmdObjs:
            if englishName:
                if upperCommand == cmd.getEnglishName():  # in inglese
                    return cmd.instantiateNewCmd()
            else:
                if upperCommand == cmd.getName():  # in lingua locale
                    return cmd.instantiateNewCmd()

        if cmdName == "MACRO_RUNNER":
            return QadMacroRunnerCommandClass(self.plugIn)
        else:
            if useAlias:
                command = self.commandAliases.getCommandName(cmdName)
                return self.getCommandObj(command, False)
            else:
                return None

    #============================================================================
    # getCommandNames
    #============================================================================
    def getCommandNames(self):
        """ Return a list of pairs : [(<local cmd name>, <english cmd name>)...]"""
        cmdNames = []
        # ricavo la lista dei nomi dei comandi
        for cmd in self.__cmdObjs:
            cmdNames.append([cmd.getName(), cmd.getEnglishName
                             ])  # in lingua locale, in inglese
        # aggiungo gli alias
        for alias in self.commandAliases.getCommandAliasDict().keys():
            cmdNames.append([alias, alias])

        return cmdNames

    #============================================================================
    # run
    #============================================================================
    def run(self, command, param=None):
        try:
            # se c'é un comando attivo
            if self.actualCommand is not None:
                return

            # eccezione per comando virtuale "QadVirtualSelCommandClass" che in realtà non è un comando
            # ma è usato per selezionare oggetti quando nessun comando è attivo
            if command == "QadVirtualSelCommandClass":
                self.actualCommand = QadVirtualSelCommandClass(self.plugIn)
                # param è la posizione corrente del mouse
                if self.actualCommand.run(False,
                                          param) == True:  # comando terminato
                    self.clearCommand()
                return

            # eccezione per comando virtuale "QadVirtualGripCommandsClass" che in realtà non è un comando
            # ma è usato per modificare gli oggetti selezionati da grip points
            if command == "QadVirtualGripCommandsClass":
                self.actualCommand = QadVirtualGripCommandsClass(self.plugIn)
                # param è una lista in cui:
                # il primo elemento è il codice del comando da eseguire
                # il secondo elemento è entitySetGripPoints
                # il terzo elemento è il punto del grip corrente
                self.actualCommand.entitySetGripPoints = param[1]
                self.actualCommand.basePt = param[2]
                self.actualCommand.initStartCommand(param[0])
                if self.actualCommand.run(False) == True:  # comando terminato
                    self.clearCommand()
                return

            self.actualCommand = self.getCommandObj(command)
            if self.actualCommand is None:
                # verifico se è una variabile di sistema
                if QadVariables.get(command) is not None:
                    self.showMsg("\n")
                    # lancio comando SETVAR per settare la variabile
                    args = [
                        QadMsg.translate("Command_list", "SETVAR"), command
                    ]
                    return self.runMacro(args)

                msg = QadMsg.translate("QAD", "\nInvalid command \"{0}\".")
                self.showErr(msg.format(command))
                return

            self.usedCmdNames.setUsed(command)
            self.plugIn.clearEntityGripPoints(
            )  # pulisco i grip points correnti
            if self.actualCommand.run() == True:  # comando terminato
                self.clearCommand()

        except Exception as e:
            self.abortCommand()
            displayError(e)

    #============================================================================
    # runMacro
    #============================================================================
    def runMacro(self, args):
        try:
            # se non c'é alcun comando attivo
            if self.actualCommand is not None:
                return

            self.actualCommand = self.getCommandObj("MACRO_RUNNER")
            if self.actualCommand is None:
                msg = QadMsg.translate("QAD", "\nInvalid command \"{0}\".")
                self.showErr(msg.format(command))
                return

            self.plugIn.clearEntityGripPoints(
            )  # pulisco i grip points correnti
            self.actualCommand.setCmdAndOptionsToRun(args)

            self.showMsg(args[0])  # visualizzo il nome del comando in macro
            if self.actualCommand.run() == True:  # comando terminato
                self.clearCommand()

        except Exception as e:
            self.abortCommand()
            displayError(e)

    #============================================================================
    # continueCommandFromMapTool
    #============================================================================
    def continueCommandFromMapTool(self):
        try:
            # se non c'é alcun comando attivo
            if self.actualCommand is None:
                return
            msg = None
            # se é stato premuto il tasto destro del mouse valuto cosa é stato inserito nella finestra di testo
            if self.actualCommand.getPointMapTool().rightButton == True:
                msg = self.actualCommand.getCurrMsgFromTxtWindow()
                if (msg is not None) and len(msg) > 0:
                    self.actualCommand.showEvaluateMsg()
                else:
                    if self.actualCommand.run(
                            True) == True:  # comando terminato
                        self.clearCommand()
            else:
                if self.actualCommand.run(True) == True:  # comando terminato
                    self.clearCommand()

        except Exception as e:
            self.abortCommand()
            displayError(e)

    #============================================================================
    # continueCommandFromTextWindow
    #============================================================================
    def continueCommandFromTextWindow(self, msg):
        try:
            # se non c'é alcun comando attivo
            if self.actualCommand is None:
                return
            if self.actualCommand.run(False, msg) == True:  # comando terminato
                self.clearCommand()

        except Exception as e:
            self.abortCommand()
            displayError(e)

    #============================================================================
    # abortCommand
    #============================================================================
    def abortCommand(self):
        # se non c'é alcun comando attivo
        if self.actualCommand is None:
            self.showCommandPrompt(
            )  # visualizza prompt standard per richiesta comando
            self.plugIn.setStandardMapTool()
        else:
            self.showMsg(QadMsg.translate("QAD", "*Canceled*"))
            self.clearCommand()
            # pulisco le entità selezionate e i grip points correnti
            self.plugIn.clearCurrentObjsSelection()

    #============================================================================
    # clearCommand
    #============================================================================
    def clearCommand(self):
        if self.actualCommand is None:
            return

        # eccezione per comando virtuale "QadVirtualGripCommandsClass" che in realtà non è un comando
        # ma è usato per modificare gli oggetti selezionati da grip points
        if self.actualCommand.getName() == "QadVirtualGripCommandsClass":
            # ridisegno i grip point nelle nuove posizioni resettando quelli selezionati
            self.plugIn.tool.clearEntityGripPoints()
            self.plugIn.tool.refreshEntityGripPoints()
        else:
            # eccezione per comando virtuale "QadVirtualSelCommandClass" che in realtà non è un comando
            # ma è usato per selezionare oggetti quando nessun comando è attivo
            if self.actualCommand.getName() != "QadVirtualSelCommandClass":
                qad_utils.deselectAll(self.plugIn.canvas.layers())

        del self.actualCommand
        self.actualCommand = None
        self.plugIn.setStandardMapTool()
        self.showCommandPrompt(
        )  # visualizza prompt standard per richiesta comando

    #============================================================================
    # forceCommandMapToolSnapTypeOnce
    #============================================================================
    def getActualCommandPointMapTool(self):
        # se non c'é alcun comando attivo
        if self.actualCommand is None:
            return None
        # se non c'é un maptool del comando attuale
        if self.actualCommand.getPointMapTool() is None:
            return None
        # se il maptool del comando attuale se non é attivo
        if self.plugIn.canvas.mapTool() != self.actualCommand.getPointMapTool(
        ):
            self.actualCommand.setMapTool(self.actualCommand.getPointMapTool())
        return self.actualCommand.getPointMapTool()

    #============================================================================
    # forceCommandMapToolSnapTypeOnce
    #============================================================================
    def forceCommandMapToolSnapTypeOnce(self, snapType, snapParams=None):
        pointMapTool = self.getActualCommandPointMapTool()
        if pointMapTool is None:
            return
        pointMapTool.forceSnapTypeOnce(snapType, snapParams)

    #============================================================================
    # getCurrenPointFromCommandMapTool
    #============================================================================
    def getCurrenPointFromCommandMapTool(self):
        pointMapTool = self.getActualCommandPointMapTool()
        if pointMapTool is None:
            return None
        return pointMapTool.tmpPoint

    #============================================================================
    # refreshCommandMapToolSnapType
    #============================================================================
    def refreshCommandMapToolSnapType(self):
        pointMapTool = self.getActualCommandPointMapTool()
        if pointMapTool is None:
            return
        pointMapTool.refreshSnapType()

    #============================================================================
    # refreshCommandMapToolOrthoMode
    #============================================================================
    def refreshCommandMapToolOrthoMode(self):
        pointMapTool = self.getActualCommandPointMapTool()
        if pointMapTool is None:
            return
        pointMapTool.refreshOrthoMode()

    #============================================================================
    # refreshCommandMapToolAutoSnap
    #============================================================================
    def refreshCommandMapToolAutoSnap(self):
        pointMapTool = self.getActualCommandPointMapTool()
        if pointMapTool is None:
            return
        pointMapTool.refreshAutoSnap()

    #============================================================================
    # getMoreUsedCmd
    #============================================================================
    def getMoreUsedCmd(self, filter):
        upperFilter = filter.upper()
        cmdName, qty = self.usedCmdNames.getMoreUsed(upperFilter)
        if cmdName == "":  # nessun comando
            if upperFilter[0] == "_":
                englishName = True
                upperFilter = upperFilter[
                    1:]  # salto il primo carattere di "_"
            else:
                englishName = False

            for cmd in self.__cmdObjs:
                if englishName:
                    if cmd.getEnglishName().startswith(
                            upperFilter):  # in inglese
                        return cmd.getEnglishName(), 0
                else:
                    if cmd.getName().startswith(
                            upperFilter):  # in lingua locale
                        return cmd.getName(), 0
        return cmdName, 0