Changes to be committed:
modified: cg/freecad/Frames/Tools.py new file: cg/freecad/Frames/markupEntities.py
This commit is contained in:
parent
c1e408774b
commit
4ffa7f7c08
2 changed files with 146 additions and 1 deletions
|
@ -189,9 +189,17 @@ def getLocalPartProps(obj):
|
||||||
# "centerofmass": vector2list(obj.Shape.CenterOfMass),
|
# "centerofmass": vector2list(obj.Shape.CenterOfMass),
|
||||||
# "principalproperties": principalProperties2dict(obj.Shape.PrincipalProperties)
|
# "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}
|
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
|
# obj.Placement = old_placement
|
||||||
return partprops
|
return partprops
|
||||||
|
|
||||||
|
|
137
cg/freecad/Frames/markupEntities.py
Normal file
137
cg/freecad/Frames/markupEntities.py
Normal file
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue