Добро пожаловать на Форум по станкам с ЧПУ!

Vismach (3d симуляция) добавление функционала?

Тема в разделе "Программы исполняющие G-код", создана пользователем Aleks1966, 29 сен 2017.

  1. Aleks1966

    Aleks1966 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    259
    Симпатии:
    0
    Vismach очень удобен при отладке не стандартной кинематике станка.
    С помощью него можно просимулировать полность поведение станка.



    Как можно добавить функционал в модуль vismach?
    1. Чтоб можно было стирать пройденую траекторию инструмента.[/B] (решено пост № 14)
    2. Можно было менять вид на ортогональный (вид сверху, сбоку, снизу)
    3. Можно было скрывать или делать прозрачными некоторые части станка
    4. Вращать камеру не только относительно начала сцены, а и относительно указателя мышки
    5. Встроить vismach в интерфейс axis в отдельную закладку с помощью gladeVCP
    [​IMG]
     
  2. Ville

    Ville Active Member

    Регистрация:
    26 апр 2012
    Сообщения:
    1.378
    Симпатии:
    0
  3. Aleks1966

    Aleks1966 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    259
    Симпатии:
    0
    я ее видел, там нет ничего что можно было бы использовать..., например 1. стереть пройденую траекторию инструмента.
    Я не большой специалист по програмированию на питоне, но знаю что там можно все сделать, вот например сам модуль vismach https://github.com/jepler/linuxcnc-mirr ... vismach.py строка 755 "class O(rs274.OpenGLTk.Opengl):......." там есть процес перерисовки и стриние траектории при достижении "...self.plotlen = 4000...." как мне сделать чтоб пройденая траектория стриалась при авктивации hal пина?
     
  4. Arhi

    Arhi Active Member

    Регистрация:
    7 май 2012
    Сообщения:
    10.435
    Симпатии:
    0
    vismach не планировался для работы с HAL. Прикрутить-то можно, но могут быть преблемы в неожиданных местах...
     
  5. Aleks1966

    Aleks1966 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    259
    Симпатии:
    0
    У меня с HAL проблем нет - там все нормально. Неудобство только в недостаке функционала.
    Я vismach использую, для отладки сложной кинематики и постпроцессора для CAM.
    В vismach отчетливо видно траектория движение кончика фрезы и осей станка.
     
  6. Arhi

    Arhi Active Member

    Регистрация:
    7 май 2012
    Сообщения:
    10.435
    Симпатии:
    0
    С HAL или с "import hal"? :)
    Если второе, то просто создаёшь пин и обработчик к нему... :)
     
  7. Aleks1966

    Aleks1966 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    259
    Симпатии:
    0
    управляю через "import hal"
    проблема в обработчике, как упавлять отобажением траектории (ее стереть), смотреть через ортогональные оси (сверху, сбоку, спереди..)
     
  8. Arhi

    Arhi Active Member

    Регистрация:
    7 май 2012
    Сообщения:
    10.435
    Симпатии:
    0
    Что-то я там не вижу кода для удаления траектории...
     
  9. Aleks1966

    Aleks1966 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    259
    Симпатии:
    0
    В том то и дело, если я правильно понял там есть только код автоматического стирания траектории - нет стирариня принудительно

    строка 816
    Код:
    ........
            self.plotdata = []
            self.plotlen = 4000
    ........
            if len(self.plotdata) == self.plotlen:
           del self.plotdata[:self.plotlen / 10]
       point = [ wx, wy, wz ]
       if not self.plotdata or point != self.plotdata[-1]:
           self.plotdata.append(point)
    
     
  10. Aleks1966

    Aleks1966 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    259
    Симпатии:
    0
  11. Arhi

    Arhi Active Member

    Регистрация:
    7 май 2012
    Сообщения:
    10.435
    Симпатии:
    0
    Этот код удаляет из массива векторов последние 400 штук (10%) и добавляет новые. Сама перерисовка похоже вот тут делается https://github.com/jepler/linuxcnc-mirr ... ch.py#L861 т.е. стирается всё и рисуется заново только то, что надо.
     
  12. Vlad76

    Vlad76 Active Member

    Регистрация:
    25 апр 2012
    Сообщения:
    6.371
    Симпатии:
    0
    его же и использовать:
    Код:
           if наш_пин == 1:
           del self.plotdata[:self.plotlen]
    (10.25 Кб) Скачиваний: 56

    запускать start,сделав исполняемым...
     
  13. Aleks1966

    Aleks1966 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    259
    Симпатии:
    0
    где это код использовать - в самом файле gui_vismach или в vismach.py?
    если добавить в gui_vismach - то не запускается,выдает ошибку
     
  14. Aleks1966

    Aleks1966 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    259
    Симпатии:
    0
    Теперь понятно, спасибо
     
  15. Aleks1966

    Aleks1966 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    259
    Симпатии:
    0
    Стирание траектории работает отлично.

    Как можно поменять камеру на ортогональный вид( сверху, спереди, сбоку, снизу)?
    В vismach импортируется библеотека glnav
    Код:
    import glnav
    . В ней есть фунции (set_view_x, set_view_y, setview_z). Я так понимаю это и есть то что надо, как их
    использовать в vismach.py для установления вида?
    glnav.py
    Код:
         
    ......
    def set_view_x(self):
            self.reset()
            glRotatef(-90, 0, 1, 0)
            glRotatef(-90, 1, 0, 0)
            mid, size = self.extents_info()
            glTranslatef(-mid[0], -mid[1], -mid[2])
            self.set_eyepoint_from_extents(size[1], size[2])
            self.perspective = False
            self.lat = -90
            self.lon = 270
            self._redraw()
    ......
    
     
  16. Vlad76

    Vlad76 Active Member

    Регистрация:
    25 апр 2012
    Сообщения:
    6.371
    Симпатии:
    0
    один из вариантов - просто вращать всю сборку на нужный угол(0,90,180,270)...
    покажу на все том же примере:
    Код:
    model   = Collection([link1, base, floor, work])
    model1  = Collection([link1, base, floor, work])
    model2  = Collection([link1, base, floor, work])
    
    model   = HalRotate([model], c,"joint4",1,1,0,0)
    model1  = HalRotate([model1],c,"joint5",1,0,1,0)
    model2  = HalRotate([model2],c,"joint6",1,0,0,1)
    
    main(model, tooltip, work ,size=1000, hud=0, rotation_vectors=None, lat=0, lon=0)
    то есть:
    у нас была наша конечная коллекция model (вся модель)
    мы ее "дублируем" еще два раза:
    model1 = HalRotate([model1],c,"joint5",1,0,1,0)
    model2 = HalRotate([model2],c,"joint6",1,0,0,1)
    первый раз мы вращаем ее значением пина "joint4" вокруг оси x(model = HalRotate([model], c,"joint4",1,1,0,0))
    второй раз мы вращаем ее значением пина "joint5" вокруг оси y(model1 = HalRotate([model1], c,"joint5",1,0,1,0))
    третий раз мы вращаем ее значением пина "joint6" вокруг оси z(model2 = HalRotate([model2], c,"joint6",1,0,0,1))
    изменяем направление вращения ,прописывая множитель -1(например model = HalRotate([model2], c,"joint6",-1,0,0,1)
    =================================
    Код:
    #!/usr/bin/python
    #vismach gui for robot-3
    #------------------ imports-----------------------------
    from vismach import *
    import hal
    #-------------------HAL pins----------------------------
    c = hal.component("draw")
    c.newpin("joint1", hal.HAL_FLOAT, hal.HAL_IN)
    c.newpin("joint2", hal.HAL_FLOAT, hal.HAL_IN)
    c.newpin("joint3", hal.HAL_FLOAT, hal.HAL_IN)
    c.newpin("joint4", hal.HAL_FLOAT, hal.HAL_IN)
    c.newpin("joint5", hal.HAL_FLOAT, hal.HAL_IN)
    c.newpin("joint6", hal.HAL_FLOAT, hal.HAL_IN)
    c.ready()
    #-------------------model-------------------------------
    # finger and axes
    tooltip = Capture()
    finger = CylinderX(0, 5, -50, 10)
    xaxis  = Color([1,0,0,1],[CylinderX(0,3,100,3) ])
    yaxis  = Color([0,1,0,1],[CylinderZ(0,3,100,3) ])
    zaxis  = Color([0,0,1,1],[CylinderY(0,3,-100,3) ])
    finger = Collection([tooltip, finger, xaxis, yaxis, zaxis])
    # link3
    link3  = CylinderX(-150,15,-50,15)
    joint3 = CylinderY(-25,25,25,25)
    joint3 = Translate([joint3],-150,0,0)
    link3  = Collection([link3, joint3])
    
    link3  = Color([0.0,0.9,0.9,1],[link3])
    link3  = Collection([finger,link3])
    #move link3 so axis 3 is at origin
    link3  = Translate([link3],150,0,0)
    #make joint3 rotate
    link3  = HalRotate([link3],c,"joint3",-1,0,1,0)
    #move back to position
    link3  = Translate([link3],-150,0,0)
    # link 2
    link2  = CylinderX(-550,20,-150,20)
    joint2 = CylinderY(-30,30,30,30)
    joint2 = Translate([joint2],-550,0,0)
    link2  = Collection([link2, joint2])
    link2  = Color([0.6,0.4,0.9,1],[link2])
    link2  = Collection([link2,link3])
    #move link2 so axis 2 is at origin
    link2  = Translate([link2],550,0,0)
    #make joint2 rotate
    link2  = HalRotate([link2],c,"joint2",-1,0,1,0)
    #move back to position
    link2  = Translate([link2],-550,0,0)
    # link 1
    link1  = CylinderX(-850,20,-550,20)
    joint1 = CylinderY(-30,30,30,30)
    joint1 = Translate([joint1],-850,0,0)
    link1  = Collection([link1, joint1])
    link1  = Color([0.0,1.0,0.0,1],[link1])
    link1  = Collection([link1,link2])
    #move link1 so axis 1 is at origin
    link1  = Translate([link1],850,0,0)
    #make joint1 rotate
    link1  = HalRotate([link1],c,"joint1",-1,0,1,0)
    #move back to position
    link1  = Translate([link1],-850,0,0)
    #add a base
    base   = CylinderZ(-200,60,-15,30)
    base   = Color([0.6,0.2,0.4,1],[base])
    base   = Translate([base],-850,0,0)
    #add a floor
    floor  = Box(-100,-100,-220,100,100,-200)
    floor  = Translate([floor],-850,0,0)
    work   = Capture()
    
    model   = Collection([link1, base, floor, work])
    model1  = Collection([link1, base, floor, work])
    model2  = Collection([link1, base, floor, work])
    
    model   = HalRotate([model], c,"joint4",1,1,0,0)
    model1  = HalRotate([model1],c,"joint5",1,0,1,0)
    model2  = HalRotate([model2],c,"joint6",1,0,0,1)
    
    main(model, tooltip, work ,size=1000, hud=0, rotation_vectors=None, lat=0, lon=0)
     
  17. Vlad76

    Vlad76 Active Member

    Регистрация:
    25 апр 2012
    Сообщения:
    6.371
    Симпатии:
    0
    для "правильной" работы кнопок(которые будут менять виды) ,необходимо чтоб каждая кнопка изменяла значения сразу трех пинов...
    например нажатие button1(видX) одновременно "посылает":
    в "joint4" значение 90
    в "joint5" значение -270
    в "joint6" значение 0
    все значения написал произвольно ,только для примера...
     
  18. Aleks1966

    Aleks1966 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    259
    Симпатии:
    0
    Понятно, буду пробывать
     
  19. Aleks1966

    Aleks1966 Member

    Регистрация:
    13 апр 2012
    Сообщения:
    259
    Симпатии:
    0
    Vismach очень удобен при отладке не стандартной кинематике станка.
    С помощью него можно просимулировать полность поведение станка.



    Как можно добавить функционал в модуль vismach?
    1. Чтоб можно было стирать пройденую траекторию инструмента.[/B] (решено пост № 14)
    2. Можно было менять вид на ортогональный (вид сверху, сбоку, снизу)
    3. Можно было скрывать или делать прозрачными некоторые части станка
    4. Вращать камеру не только относительно начала сцены, а и относительно указателя мышки
    5. Встроить vismach в интерфейс axis в отдельную закладку с помощью gladeVCP
    [​IMG]
     
  20. Ville

    Ville Active Member

    Регистрация:
    26 апр 2012
    Сообщения:
    1.378
    Симпатии:
    0