framework/cg/freecad/Frames/markupEntities.py
Mark Voltov 4ffa7f7c08 Changes to be committed:
modified:   cg/freecad/Frames/Tools.py
new file:   cg/freecad/Frames/markupEntities.py
2023-06-02 13:06:25 +03:00

137 lines
5.3 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('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)