FreeCAD: Workbench Refactor
This commit is contained in:
parent
037827669a
commit
a58dcdafb1
386 changed files with 997 additions and 64533 deletions
181
freecad_workbench/pddl/freecad2pddl.py
Normal file
181
freecad_workbench/pddl/freecad2pddl.py
Normal file
|
@ -0,0 +1,181 @@
|
|||
import FreeCAD as App
|
||||
import FreeCADGui as Gui
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#функции для создания обьектов PDDL
|
||||
|
||||
def add_types():
|
||||
doc = App.ActiveDocument
|
||||
types = doc.addObject('App::FeaturePython', 'Types')
|
||||
types.addProperty("App::PropertyString", 'PDDL', 'PDDL').PDDL = 'PDDL'
|
||||
types.addProperty("App::PropertyString", 'Type', 'PDDL').Type = 'Types'
|
||||
types.addProperty("App::PropertyStringList", 'Types', 'PDDL')
|
||||
|
||||
print('Types of objects added successfully')
|
||||
return(types)
|
||||
#слишком много types
|
||||
|
||||
def add_parameters():
|
||||
doc = App.ActiveDocument
|
||||
params = doc.addObject('App::FeaturePython', 'Parameters')
|
||||
params.addProperty("App::PropertyString", 'PDDL', 'PDDL').PDDL = 'PDDL'
|
||||
params.addProperty("App::PropertyString", 'Type', 'PDDL').Type = 'Parameters'
|
||||
params.addProperty('App::PropertyPythonObject', 'Parameters','PDDl')
|
||||
|
||||
print('Domain parameters added successfully')
|
||||
return(params)
|
||||
|
||||
def add_action():
|
||||
doc = App.ActiveDocument
|
||||
|
||||
name = input('Название действия:')
|
||||
action = doc.addObject('App::FeaturePython', str(name))
|
||||
action.addProperty("App::PropertyString", 'PDDL', 'PDDL').PDDL = 'PDDL'
|
||||
action.addProperty("App::PropertyString", 'Type', 'PDDL').Type = 'Action'
|
||||
action.addProperty("App::PropertyStringList", 'Parameters', 'PDDL')
|
||||
action.addProperty("App::PropertyStringList", 'Conditions', 'PDDL')
|
||||
action.addProperty("App::PropertyStringList", 'Effects', 'PDDL')
|
||||
sortEntity(action)
|
||||
print('Action ' + name + 'added successfully')
|
||||
return(action)
|
||||
|
||||
|
||||
def add_predicate():
|
||||
doc = App.ActiveDocument
|
||||
|
||||
name = input('Название предиката:')
|
||||
parms = input('Переменные')
|
||||
predicate = doc.addObject('App::FeaturePython', str(name))
|
||||
predicate.addProperty("App::PropertyString", 'PDDL', 'PDDL').PDDL = 'PDDL'
|
||||
predicate.addProperty("App::PropertyString", 'Type', 'PDDL').Type = 'Predicate'
|
||||
# predicate.addProperty("App::PropertyStringList", 'Name', 'PDDL')
|
||||
predicate.addProperty("App::PropertyStringList", 'Parameters', 'PDDL').Parameters = parms
|
||||
sortEntity(predicate)
|
||||
print('Predicate ' + name + 'added successfully')
|
||||
return(predicate)
|
||||
|
||||
|
||||
def add_durative_action():
|
||||
doc = App.ActiveDocument
|
||||
name = input('Название действия:')
|
||||
action = doc.addObject('App::FeaturePython', str(name))
|
||||
action.addProperty("App::PropertyString", 'PDDL', 'PDDL').PDDL = 'PDDL'
|
||||
action.addProperty("App::PropertyString", 'Type', 'PDDL').Type = 'DurativeAction'
|
||||
action.addProperty("App::PropertyStringList", 'Parameters', 'PDDL')
|
||||
action.addProperty("App::PropertyStringList", 'Conditions', 'PDDL')
|
||||
action.addProperty("App::PropertyStringList", 'Effects', 'PDDL')
|
||||
action.addProperty('App::PropertyString', 'Duration', 'PDDL')
|
||||
sortEntity(action)
|
||||
print('Durative Action ' + name + ' added successfully')
|
||||
return(action)
|
||||
|
||||
|
||||
|
||||
|
||||
def export_to_file():
|
||||
filename = App.ActiveDocument.Name
|
||||
file_path = App.ActiveDocument.FileName.rsplit("/", 1)[0] + filename + '_domain.pddl'
|
||||
|
||||
doc = App.ActiveDocument
|
||||
objs = doc.Objects
|
||||
with open(file_path, 'w') as f:
|
||||
f.write('(define (domain '+ filename +')\n \n')
|
||||
f.write('(:requirements :strips :typing :fluents :durative-actions)\n')
|
||||
|
||||
# Типы обьектов
|
||||
types = doc.getObjectsByLabel('Types')[0]
|
||||
f.write('(:types \n')
|
||||
|
||||
for obj_type in types.Types:
|
||||
f.write(' ' + obj_type + ' \n')
|
||||
f.write(')\n')
|
||||
|
||||
# предикаты
|
||||
f.write(' (:predicates\n')
|
||||
for obj in objs:
|
||||
if hasattr(obj, 'PDDL') and hasattr(obj, 'Type') and obj.Type == 'Predicate':
|
||||
f.write(' ('+ obj.Label)
|
||||
for params in obj.Parameters:
|
||||
f.write(' ' + params)
|
||||
f.write(')\n')
|
||||
f.write(' )\n')
|
||||
|
||||
# функции
|
||||
f.write(' (:functions\n')
|
||||
f.write(' )\n')
|
||||
|
||||
#действия:
|
||||
for obj in objs:
|
||||
if hasattr(obj, 'PDDL') and hasattr(obj, 'Type') and obj.Type == 'Action':
|
||||
f.write('(:action ' + obj.Label + '\n')
|
||||
f.write(' :parameters (')
|
||||
for params in obj.Parameters:
|
||||
f.write('' + params + ' ')
|
||||
f.write(')\n')
|
||||
f.write(' :condition (and \n')
|
||||
|
||||
for condition in obj.Conditions:
|
||||
f.write(' (' + condition + ') \n')
|
||||
|
||||
f.write(' )\n')
|
||||
|
||||
f.write(' :effect (and \n')
|
||||
|
||||
for effect in obj.Effects:
|
||||
f.write(' (' + effect + ') \n')
|
||||
# f.write(' ')
|
||||
f.write(')\n')
|
||||
|
||||
f.write(' )\n')
|
||||
|
||||
# длительные действия:
|
||||
for obj in objs:
|
||||
if hasattr(obj, 'PDDL') and hasattr(obj, 'Type') and obj.Type == 'DurativeAction':
|
||||
f.write('(:durative-action ' + obj.Label + '\n')
|
||||
f.write(' :parameters (')
|
||||
for params in obj.Parameters:
|
||||
f.write(' ' + params )
|
||||
f.write(' )\n')
|
||||
f.write(' :duration ( = ?duration '+ str(obj.Duration) +')\n')
|
||||
f.write(' :condition (and \n')
|
||||
|
||||
for condition in obj.Conditions:
|
||||
f.write(' (' + condition + ') \n')
|
||||
# f.write(') ')
|
||||
# f.write(')\n')
|
||||
f.write(' )\n')
|
||||
|
||||
f.write(' :effect (and \n')
|
||||
|
||||
for effect in obj.Effects:
|
||||
f.write(' (' + effect + ') \n')
|
||||
# f.write(' ')
|
||||
f.write(')\n')
|
||||
|
||||
f.write(' )\n')
|
||||
|
||||
|
||||
|
||||
f.write(' )\n')
|
||||
|
||||
|
||||
|
||||
def sortEntity(object):
|
||||
doc = App.ActiveDocument
|
||||
|
||||
|
||||
if len(doc.getObjectsByLabel(object.Type)) == 0:
|
||||
pddl_group = doc.addObject("App::DocumentObjectGroup", object.Type)
|
||||
else:
|
||||
pddl_group = doc.getObjectsByLabel(object.Type)[0]
|
||||
pddl_group.addObject(object)
|
||||
|
||||
|
||||
|
||||
Gui.updateGui()
|
||||
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue