framework/cg/freecad/Frames/poseGenerator.py

132 lines
5.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import FreeCAD as App
import FreeCADGui as Gui
# App.newDocument()
doc = App.ActiveDocument
print('задайте начальную точку захватной зоны. ')
print('Учтите, что ось X должна быть направлена вдоль направления раскрытия пальцев')
print('Ось Z должна быть направлена в противоположную сторону от направления кончика пальца захвата')
lcsname = input('Введите название начальной точки' + "\n")
lcs = doc.getObject(lcsname)
def poseGenerator(lcs):
box = doc.addObject("Part::Box", "gripSpace")
box.Length = 62 #раскрытие
box.Width = 10 #ширина пальца
box.Height = 40 #глубина
box.Placement = lcs.Placement
#box.Transparency = 80 #не работает, хз почему
#есть смысл создавать привязку прямо здесь же. благодаря параметризации, при подстройке куба все точки сместятся как надо
gripPose = App.ActiveDocument.addObject('PartDesign::CoordinateSystem', 'GripPose')
gripPose.Support = box
gripPose.MapMode = 'ObjectXY'
gripPose.AttachmentOffset.Base = [box.Length/2, box.Width/2, 0] #здесь должна быть активная привязка, не просто значения координат
gripPose.addProperty("App::PropertyFloat", "GripOpen")
gripPose.addProperty("App::PropertyFloat", "GripDepth")
gripPose.addProperty("App::PropertyFloat", "GripWidth")
gripPose.GripOpen = box.Length.Value
gripPose.GripWidth = box.Width.Value
gripPose.GripDepth = box.Height.Value
#нужно создавать эту хрень внутри Part, а не внутри главного документа. сбиваются привязки !!!
print('Установите захватную зону вручную, растянув обьект GripSpace')
doc.recompute()
#вроде как работает
poseGenerator(lcs)
# def collectAndExportProps():
# This class logs any mouse button events. As the registered callback function fires twice for 'down' and
# 'up' events we need a boolean flag to handle this.
# todo:
# добавить включатель-выключатель
# должно срабатывать на задание одной позиции
# научить считать нормаль поверхности в указанной точке
# добавить коррекцию позиции
# 1 выбираем первую грань
# 2 сохраняем позицию курсора
# 3 в данной позиции считаем нормаль поверхности, выравниваем вокруг нее ось x
# 3 выбираем вторую грань
# расстояние до нее должно стать длиной параллелепипеда
# ширина задается вручную
# создаем ск, которая смещена на половину длины прямоугольника и на половину ширины
# полученная штука - центр расстояния между кончиками пальцев
# в эту штуку можно вставить параметризованный захват и проверить на коллизии
#####
#все хуйня
#давай по новой
#создаем опорную точку в asm4 (взять оттуда генератор точек?)
#по ней строим от угла прямоугольник
#используя asm4, создаем ориентированный обьект и присваиваем ему свойства, равные размерам объекта
# class ViewObserver:
# def __init__(self, view):
# self.view = view
# def logPosition(self, info):
# # def turnOn():
# # switch = 'Run'
# # while True:
# # switch = input('Tell me when to stop')
# # if switch != 'Run':
# # print('MacroStop')
# # break
# # return (switch)
# down = (info["State"] == "DOWN")
# pos = info["Position"]
# if (down):
# App.Console.PrintMessage(
# "Clicked on position: ("+str(pos[0])+", "+str(pos[1])+")\n")
# pnt = self.view.getPoint(pos)
# App.Console.PrintMessage("World coordinates: " + str(pnt[0].x) + "\n")
# info = self.view.getObjectInfo(pos)
# print(info['x'])
# print(info['y'])
# print(info['z'])
# from random import randrange
# id = str('yo' + str(randrange(0, 10000)))
# # App.ActiveDocument.addObject("Part::Box",id)
# print(id)
# # App.ActiveDocument.getObject(id).Placement = App.Placement(App.Vector(info['x'],info['y'],info['z']),App.Rotation(App.Vector(0.00,0.00,1.00),0.00))
# # App.ActiveDocument.getObject(id).Width = '1.00 mm'
# # App.ActiveDocument.getObject(id).Length = '1.00 mm'
# # App.ActiveDocument.getObject(id).Height = '1.00 mm'
# # App.Console.PrintMessage("Object info: " + str(info) + "\n")
# o = ViewObserver(v)
# c = v.addEventCallback("SoMouseButtonEvent", o.logPosition)