diff --git a/cg/freecad/Frames/Tools.py b/cg/freecad/Frames/Tools.py index d6ce47b..0a420e2 100644 --- a/cg/freecad/Frames/Tools.py +++ b/cg/freecad/Frames/Tools.py @@ -189,9 +189,17 @@ def getLocalPartProps(obj): # "centerofmass": vector2list(obj.Shape.CenterOfMass), # "principalproperties": principalProperties2dict(obj.Shape.PrincipalProperties) } - if obj.GripOpen != None: + + if obj.Type == 'grip': partprops["grip properties"] = { "grip open": obj.GripOpen, "grip depth": obj.GripDepth, "grip width": obj.GripWidth} + elif obj.Type == 'area': + partprops["area dim"] = { } #свойства, описывающие размер + + elif obj.Type == 'vol': + partprops["vol dim"] = { } #свойства, описывающие размер области + + # obj.Placement = old_placement return partprops diff --git a/cg/freecad/Frames/markupEntities.py b/cg/freecad/Frames/markupEntities.py new file mode 100644 index 0000000..3370d15 --- /dev/null +++ b/cg/freecad/Frames/markupEntities.py @@ -0,0 +1,137 @@ +import FreeCAD as App +import FreeCADGui as Gui + +# App.newDocument() +doc = App.ActiveDocument + + +### +#прога для общей генерации всяких разметок +#сюда будем добавлять функции для генерации точек хороших и разных, а так же - других обьектов +#список хреней: +#генерация захватов +#позиции размещения и базирования +#позиции соединения + +print('lcs - локальная система координат') +print('grip - позиция захвата') +print('area - плоскость') +print('vol - зона') +print('joint - соединение') +entityType = input('Введите тип получаемого обьекта') + +def create(entityType): + + if entityType == 'grip': + print('задайте начальную точку захватной зоны. ') + print('Учтите, что ось X должна быть направлена вдоль направления раскрытия пальцев') + print('Ось Z должна быть направлена в противоположную сторону от направления кончика пальца захвата') + objname = input('Введите название начальной точки' + "\n") + obj = doc.getObject(objname) + + + poseGenerator(obj) + + + + elif entityType == 'area': + print('задайте плоскость') + objname = input('Введите название плоскости'+ "\n") + obj = doc.getObject(objname) + + areaProps(obj) + + elif entityType == 'vol': + print('задайте обьем') + objname = input('Введите название обьема'+ "\n") + obj = doc.getObject(objname) + + volProps(obj) + + elif entityType == 'joint': + print('Задайте позицию соединения') + objname = input('Введите название соединения'+ "\n") + part1 = input('укажите название первой детали'+ "\n") + part2 = input('укажите название второй детали'+ "\n") + + jointGenerator(objname, part1, part2) + + obj.addProperty("App::PropertyString", "Type").Type = entityType #запишем тип хрени в свойства хрени + + + +## заглушки функций на случай, если что-то придумаю полезное для них + + +def areaProps(area): + #здесь нужно отметить свойства зоны + #в принципе, Placement и размеры тут есть, больше ничего особо не нужно + #добавить характеристику entityType + + print(area.Label) + +def volProps(vol): + #желательно указать координаты, габариты, позицию привязки + #но думаю, что это все уже есть + print(vol.Label) + + +def jointGenerator(jointName, part1, part2): + + #получаем относительные координаты для первой детали и для второй детали + #создаем две сущности - точка входа и точка выхода (??????) + print(jointName.Label) + print(part1.Label) + print(part2.Label) + + + + + + + +# Эта функция работает нормально + + +def poseGenerator(lcs): + + box = doc.addObject("Part::Box", "gripSpace") + box.Length = 62 #раскрытие + box.Width = 10 #ширина пальца + box.Height = 40 #глубина + + box.Placement = lcs.Placement + + + #есть смысл создавать привязку прямо здесь же. благодаря параметризации, при подстройке куба все точки сместятся как надо + gripPose = App.ActiveDocument.addObject('PartDesign::CoordinateSystem', 'GripPose') + gripPose.Support = box + gripPose.positionBySupport() + gripPose.MapMode = 'ObjectXY' + gripPose.AttachmentOffset.Base = [str(box.Label) + '.Length' + '/2', str(box.Label) + '.Length'+ '/2', 0] #здесь должна быть активная привязка, не просто значения координат + + gripPose.addProperty("App::PropertyFloat", "GripOpen") + gripPose.addProperty("App::PropertyFloat", "GripDepth") + gripPose.addProperty("App::PropertyFloat", "GripWidth") + gripPose.setExpression('GripDepth', str(box.Label) + '.Height') + gripPose.setExpression('GripOpen', str(box.Label) + '.Length') + gripPose.setExpression('GripWidth', str(box.Label) + '.Width') + + + + + + #нужно создавать эту хрень внутри Part, а не внутри главного документа. сбиваются привязки !!! + + + print('Установите захватную зону вручную, растянув обьект GripSpace') + doc.recompute() + + +#теперь нужно производить экспорт +#он делается через Tools.py + + +create(entityType) + +