2023-06-02 13:06:25 +03:00
import FreeCAD as App
import FreeCADGui as Gui
doc = App . ActiveDocument
2023-06-10 23:06:29 +03:00
2023-06-02 13:06:25 +03:00
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 )
2023-06-10 23:06:29 +03:00
obj . addProperty ( " App::PropertyString " , " Type " ) . Type = entityType
2023-06-02 13:06:25 +03:00
## заглушки функций на случай, если что-то придумаю полезное для них
def areaProps ( area ) :
#здесь нужно отметить свойства зоны
#в принципе, Placement и размеры тут есть, больше ничего о с о б о не нужно
#добавить характеристику entityType
print ( area . Label )
def volProps ( vol ) :
#желательно указать координаты, габариты, позицию привязки
#но думаю, что это все уже есть
print ( vol . Label )
def jointGenerator ( jointName , part1 , part2 ) :
#получаем относительные координаты для первой детали и для второй детали
#создаем две сущности - точка входа и точка выхода (??????)
2023-06-10 23:06:29 +03:00
#в работе сейчас
2023-06-02 13:06:25 +03:00
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 ' )
2023-06-10 23:06:29 +03:00
#нужно создавать внутри Part, а не внутри главного документа. сбиваются привязки !!!
2023-06-02 13:06:25 +03:00
print ( ' Установите захватную зону вручную, растянув обьект GripSpace ' )
doc . recompute ( )
#теперь нужно производить экспорт
2023-06-10 23:06:29 +03:00
#он делается через Tools.py или через импорт-экспорт
2023-06-02 13:06:25 +03:00
create ( entityType )