+ bone=Bone(\r
+ name=self.__read_text(),\r
+ english_name=self.__read_text(),\r
+ position=self.__read_vector3(),\r
+ parent_index=self.__read_uint(self.bone_index_size),\r
+ layer=self.__read_uint(4),\r
+ flag=self.__read_uint(2) \r
+ )\r
+ if bone.getConnectionFlag()==0:\r
+ bone.tail_positoin=self.__read_vector3()\r
+ elif bone.getConnectionFlag()==1:\r
+ bone.tail_index=self.__read_uint(self.bone_index_size)\r
+ else:\r
+ raise ParseException("unknown bone conenction flag: {0}".format(\r
+ bone.getConnectionFlag()))\r
+\r
+ if bone.getRotationFlag()==1 or bone.getTranslationFlag()==1:\r
+ bone.effect_index=self.__read_uint(self.bone_index_size)\r
+ bone.effect_factor=self.__read_float()\r
+\r
+ if bone.getFixedAxisFlag()==1:\r
+ bone.fixed_axis=self.__read_vector3()\r
+\r
+ if bone.getLocalCoordinateFlag()==1:\r
+ bone.local_x_vector=self.__read_vector3()\r
+ bone.local_z_vector=self.__read_vector3()\r
+\r
+ if bone.getExternalParentDeformFlag()==1:\r
+ bone.external_key=self.__read_uint(4)\r
+\r
+ if bone.getIkFlag()==1:\r
+ bone.ik=self.__read_ik()\r
+\r
+ return bone\r
+\r
+ def __read_ik(self):\r
+ ik=Ik(\r
+ target_index=self.__read_uint(self.bone_index_size),\r
+ loop=self.__read_uint(4),\r
+ limit_radian=self.__read_float())\r
+ link_size=self.__read_uint(4)\r
+ ik.link=[self.__read_ik_link() for i in range(link_size)]\r
+\r
+ def __read_ik_link(self):\r
+ link=IkLink(\r
+ self.__read_uint(self.bone_index_size),\r
+ self.__read_uint(1))\r
+ if link.limit_angle==0:\r
+ pass\r
+ elif link.limit_angle==1:\r
+ link.limit_min=self.__read_vector3()\r
+ link.limit_max=self.__read_vector3()\r
+ else:\r
+ raise ParseException("invalid ik link limit_angle: {0}".format(\r
+ link.limit_angle))\r
+ return link\r