• Login
sketchucation logo sketchucation
  • Login
🤑 SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

Commit working like undo command

Scheduled Pinned Locked Moved Developers' Forum
4 Posts 3 Posters 245 Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    bizello
    last edited by 18 Feb 2011, 00:08

    Hi,
    I trying to use commit to do some like "undo" command. I´ve found something in the net and one script worked, but others...
    The code below works, you can activate only a "commit line" and the face is erased like you want, full control.

    
    def desenha1
    modelo = Sketchup.active_model
    entities = modelo.active_entities
    pt = []
    pt[0] = [0,0,0]
    pt[1] = [5,0,0]
    pt[2] = [5,5,0]
    pt[3] = [0,5,0]
    abertura = entities.add_face pt
    end
    
    def desenha2
    modelo = Sketchup.active_model
    entities = modelo.active_entities
    pt = []
    pt[0] = [0,6,0]
    pt[1] = [5,6,0]
    pt[2] = [5,10,0]
    pt[3] = [0,10,0]
    abertura = entities.add_face pt
    end
    
    def desenha3
    modelo = Sketchup.active_model
    entities = modelo.active_entities
    pt = []
    pt[0] = [6,0,0]
    pt[1] = [10,0,0]
    pt[2] = [10,4,0]
    pt[3] = [6,4,0]
    abertura = entities.add_face pt
    end
    
    #Sketchup.active_model.start_operation("Undo")
    desenha1
    #Sketchup.active_model.start_operation("Undo")
    desenha2
    Sketchup.active_model.start_operation("Undo")
    desenha3
    
    resposta = UI.messagebox "Erase face?", MB_YESNO
    
    if resposta == 6 then
    Sketchup.active_model.commit_operation(a)
    else
    UI.messagebox "So stay."
    end
    
    

    But I have a part of the another code that doesn't work, I think you don't need all the code, so I'm sending the part with "commit" don't working, the code below:

    
    model = Sketchup.active_model
    Sketchup.active_model.start_operation("undo")
    entities = model.active_entities
    abertura = entities.add_face ptabs
    rayt=modelo.raytest(ptabs[0], abertura .normal.reverse)
    ptabs_rev=rayt[0]
    espess=ptabs[0].distance(ptabs_rev)
    abertura.pushpull(-espess)
    
    abeyesno = UI.messagebox "A posição da abertura na parede está correta?
    Proceder com o cadastro no Banco de Dados?", MB_YESNO
    
    if abeyesno == 6 then #yes
       cadaberturas(ptabs, espess, cod_arq_atual[0], cod_arq_atual[1], localiza)
      else
       Sketchup.active_model.commit_operation(abertura)
    end
    
    

    I dont' know why the second code doesn't work. I can't see what is wrong.
    If you help me, very thanks.

    Sérgio.

    PS. I need to answer like I solved the my another topis called "edges, angle and rectangle triangle". I'll to write all the problem and describe my solution.

    Sérgio A.Bizello

    1 Reply Last reply Reply Quote 0
    • D Offline
      Dan Rathbun
      last edited by 18 Feb 2011, 00:53

      Do not name each operation with the same string "Undo"...

      give each a unique name "Draw Face 1", "Draw Face 2", etc.

      It's best to wrap each operation in a begin ... rescue ... end block and have an abort_operation call in the rescue clause. (methods are also begin .. rescue .. end blocks, where the def *methodname* takes the place of the begin keyword.)

      modelo = Sketchup.active_model
      begin
        modelo.start_operation("Draw Wall 1")
      
        # ... draw entities code ...
      
        modelo.commit_operation
      
        msg = "A posição da abertura na parede está correta?\n"
        msg<< "Proceder com o cadastro no Banco de Dados?"
        abeyesno = UI.messagebox( msg, MB_YESNO )
      
        if abeyesno == 6 then #yes
          cadaberturas(ptabs, espess, cod_arq_atual[0], cod_arq_atual[1], localiza)
        else
          Sketchup.send_action("editUndo;")
        end
      
      rescue
        modelo.abort_operation
        UI.messagebox("Error Adding Enities!")
      end
      

      Edit: corrected newline character in messagebox string.

      commit_operation and abort_operation do not have arguments:

      modelo.method(:commit_operation).arity

      0

      modelo.method(:abort_operation).arity

      0

      I'm not here much anymore.

      1 Reply Last reply Reply Quote 0
      • B Offline
        bizello
        last edited by 18 Feb 2011, 13:35

        Hi Dan,

        Thank you. Its works now.

        I think understand how using commit.
        Thanks to show how you do your messages in a script. I liked.
        I had some asks about send_action and abort but I saw how they works.
        So, I edit this post.
        Thank you Dan.

        SérgioBizello

        Sérgio A.Bizello

        1 Reply Last reply Reply Quote 0
        • T Offline
          thomthom
          last edited by 18 Feb 2011, 14:12

          Note that start_operation cannot be nested. Doing a new start_operation after another will commit the first.

          Thomas Thomassen — SketchUp Monkey & Coding addict
          List of my plugins and link to the CookieWare fund

          1 Reply Last reply Reply Quote 0
          • 1 / 1
          1 / 1
          • First post
            3/4
            Last post
          Buy SketchPlus
          Buy SUbD
          Buy WrapR
          Buy eBook
          Buy Modelur
          Buy Vertex Tools
          Buy SketchCuisine
          Buy FormFonts

          Advertisement