[prev in list] [next in list] [prev in thread] [next in thread] 

List:       dia-list
Subject:    Re: Behavior Trees export to json format.
From:       Ekmektsis Dimitris <haramanai () hotmail ! com>
Date:       2012-02-09 7:33:58
Message-ID: DUB104-W27654E40CA0227C8F0FCBCBF7B0 () phx ! gbl
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


I hope this is right.Sorry for my delay but even in 2012 I never check my e=
-mails.I have attached .py file I also attached an .dia file as an example.=
Thanks. 		 	   		  =

[Attachment #5 (text/html)]

<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
I hope this is right.<div>Sorry for my delay but even in 2012 I never check my \
e-mails.</div><div>I have attached .py file I also attached an .dia file as an \
example.</div><div>Thanks.</div> 		 	   		  </div></body> </html>


["export-btjson.py" (text/x-script.phyton)]

# PyDia behavior tree json
# Copyright (c) 2012, Haramanai 
#
# Simple exporter of connected rectangles in json format
#
# Known Issues:
#
#

#  This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

# Explenation
#It export some thing like this :

#{type: 'Selector',children: [{type: 'Limit',
#duration: 10,children: [{type: 'MoveTo',
#position: [0.0,0.0]}]},{type: 'Parallel',children: [{type: 'Wait',
#duration: 15,children: [{type: 'Fatality',
#gore: true}]},{type: 'Action1'},{type: 'action2'}]},{type: 'Action',
#duration: 5}]}

#This was exported from a simple diagram that looks like a behavior tree. 
#As you can see from the source the script starts from the first object of the first \
layer and solves in a way the tree. #It writes the text of the rectangle and checks \
for children and creates an array with the childrens. #childrens are other connected \
rectangles with text. Then childrens will write their text and will check for \
childrens and ...

#So you write the text-code that you want in your json in the rectangle 
#I will present the rectangles like this 
# /--------/
# /       /
# /------/                                                                            \


#Write what you wand in the rectangle like this
 #         /----------------------/
 #        /     type: 'Wait',    /
 #       /    duration: 10      /
 #      /----------------------/

#Use type to identify the Task. But in general you can write anything
#then pass all the properties that you wand in a json style.
#So a Behavior tree will look like this.
#                          /--------------------/
#                          / type: 'Selector', /
#                          /-------------------/
#                           |                |
#               /---------------/         /-----------------/ 
#              / type: 'Limit' /         /  type: 'Reload' /
#             / duration: 5   /         /-----------------/
#            /---------------/
#			         |
#	     /--------------------/
#       / type: 'Shoot',     /
#      /--------------------/
#
#And you will get this :
#{type: 'Selector',children: [{type: 'Limit',
#duration: 5,children: [{type: 'Shoot'}]},{type: 'Reload'}]}

#Limitations: I haven't tested very much but the limitations are.
#1. It will start from the first object of the first layer. So Don't ever delete the \
first object just change the text to suits your needs. #2. You can only export \
vertical trees. Like the example. Because the script checks the left bounding box \
edge of the rectangles to set the children order.

import sys, dia

# sys.path.insert(0, 'd:/graph/dia/dia')

class BTJSON :
	def __init__ (self) :
		pass
	def begin_render (self, data, filename) :
		self.f = open(filename, "w")
		self.f.write ('{')
		o = data.layers[0].objects[0]
		self.f.write(o.properties['text'].value.text.replace("\n", " "))
		self.write_children(o)
		self.f.write ('}')
	def end_render (self) :
		self.f.close()
	
	def write_children (self, o) :
		children = []
		left = []
		have_children = 0
		got_children = 0
		children_count = 0
		connections_count = 0
		for c in o.connections :
			if (len(c.connected) < 1) :
				continue
			for co in c.connected :
				if (co.handles[0].connected_to.object == o) :
					children_count += 1
					left.append (co.handles[1].connected_to.object.bounding_box.left)
					children.append(co.handles[1].connected_to.object.bounding_box.left)
		
		left.sort()
		for c in o.connections :
			if (len (c.connected) < 1) :
				continue
			for co in c.connected :
				if (co.handles[0].connected_to.object == o) :
					for i in range(len(left)) :
						if (left[i] == co.handles[1].connected_to.object.bounding_box.left) :
							children[i] = co.handles[1].connected_to.object
							
		
		if (len (children) > 0) :
			self.f.write (',children: [')
			
		
		for i in range (len(children)) :
			self.f.write ('{')
			self.f.write(children[i].properties['text'].value.text.replace("\n", " "))
			self.write_children (children[i])
			if (i < len(children)-1) :
				self.f.write ('},')
			else :
				self.f.write ('}]')
						
					
		return children
# dia-python keeps a reference to the renderer class and uses it on demand
dia.register_export ("Behaviour Tree Json", "json", BTJSON())


["Diagram1.dia" (application/octet-stream)]

_______________________________________________
dia-list mailing list
dia-list@gnome.org
http://mail.gnome.org/mailman/listinfo/dia-list
FAQ at http://live.gnome.org/Dia/Faq
Main page at http://live.gnome.org/Dia



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic