public static PmxConstraint Parse(BinaryReader br, PmxDocument doc) { var rt = new PmxSpringSixDegreesOfFreedomConstraint { Name = doc.ReadString(br), EnglishName = doc.ReadString(br), }; var kind = (PmxConstraintKind)br.ReadByte(); rt.Read(br, doc); switch (kind) { case PmxConstraintKind.SpringSixDegreesOfFreedom: return(rt); case PmxConstraintKind.SixDegreesOfFreedom: return((PmxSixDegreesOfFreedomConstraint)rt); case PmxConstraintKind.PointToPoint: return((PmxPointToPointConstraint)rt); case PmxConstraintKind.ConeTwist: return((PmxConeTwistConstraint)rt); case PmxConstraintKind.Slider: return((PmxSliderConstraint)rt); case PmxConstraintKind.Hinge: return((PmxHingeConstraint)rt); default: throw new NotSupportedException(); } }
public void Parse(BinaryReader br, PmxDocument doc) { this.Name = doc.ReadString(br); this.EnglishName = doc.ReadString(br); this.Category = (PmxMorphCategory)br.ReadByte(); this.Kind = (PmxMorphKind)br.ReadByte(); this.Offsets = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxMorphOffset.Parse(br, doc, this.Kind)).ToList(); }
public static PmxModelInformation Parse(BinaryReader br, PmxDocument doc) { return new PmxModelInformation { ModelName = doc.ReadString(br), EnglishModelName = doc.ReadString(br), Description = doc.ReadString(br), EnglishDescription = doc.ReadString(br), }; }
public static PmxDisplayList Parse(BinaryReader br, PmxDocument doc) { return new PmxDisplayList { Name = doc.ReadString(br), EnglishName = doc.ReadString(br), IsSpecial = br.ReadBoolean(), Items = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxDisplayItem.Parse(br, doc)).ToList(), }; }
public static PmxDisplayList Parse(BinaryReader br, PmxDocument doc) { return(new PmxDisplayList { Name = doc.ReadString(br), EnglishName = doc.ReadString(br), IsSpecial = br.ReadBoolean(), Items = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxDisplayItem.Parse(br, doc)).ToList(), }); }
public static PmxModelInformation Parse(BinaryReader br, PmxDocument doc) { return(new PmxModelInformation { ModelName = doc.ReadString(br), EnglishModelName = doc.ReadString(br), Description = doc.ReadString(br), EnglishDescription = doc.ReadString(br), }); }
public static PmxBone Parse(BinaryReader br, PmxDocument doc) { var rt = new PmxBone { Name = doc.ReadString(br), EnglishName = doc.ReadString(br), Position = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, ParentBone = doc.ReadIndex(br, PmxIndexKind.Bone), Priority = br.ReadInt32(), Capabilities = (PmxBoneCapabilities)br.ReadUInt16(), }; if (rt.Capabilities.HasFlag(PmxBoneCapabilities.ConnectToBone)) { rt.ConnectToBone = doc.ReadIndex(br, PmxIndexKind.Bone); } else { rt.ConnectToOffset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() } }; if (rt.Capabilities.HasFlag(PmxBoneCapabilities.RotationAffected) || rt.Capabilities.HasFlag(PmxBoneCapabilities.MovementAffected)) { rt.AffectedBone = doc.ReadIndex(br, PmxIndexKind.Bone); rt.AffectionRate = br.ReadSingle(); } if (rt.Capabilities.HasFlag(PmxBoneCapabilities.FixedAxis)) { rt.FixedAxis = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() } } ; if (rt.Capabilities.HasFlag(PmxBoneCapabilities.LocalAxis)) { rt.LocalVectorX = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }; rt.LocalVectorZ = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }; } if (rt.Capabilities.HasFlag(PmxBoneCapabilities.TransformByExternalParent)) { rt.ExternalParentKey = br.ReadInt32(); } if (rt.Capabilities.HasFlag(PmxBoneCapabilities.IK)) { rt.IK = PmxIK.Parse(br, doc); } return(rt); }
public static PmxMorph Parse(BinaryReader br, PmxDocument doc) { var rt = new PmxMorph { Name = doc.ReadString(br), EnglishName = doc.ReadString(br), Category = (PmxMorphCategory)br.ReadByte(), Kind = (PmxMorphKind)br.ReadByte(), }; rt.Offsets = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxMorphOffset.Parse(br, doc, rt.Kind)).ToList(); return rt; }
public static PmxMorph Parse(BinaryReader br, PmxDocument doc) { var rt = new PmxMorph { Name = doc.ReadString(br), EnglishName = doc.ReadString(br), Category = (PmxMorphCategory)br.ReadByte(), Kind = (PmxMorphKind)br.ReadByte(), }; rt.Offsets = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxMorphOffset.Parse(br, doc, rt.Kind)).ToList(); return(rt); }
public static PmxTexture Parse(BinaryReader br, PmxDocument doc) { return new PmxTexture { FileName = doc.ReadString(br), }; }
public static PmxRigidBody Parse(BinaryReader br, PmxDocument doc) { return(new PmxRigidBody { Name = doc.ReadString(br), EnglishName = doc.ReadString(br), RelatedBone = doc.ReadIndex(br, PmxIndexKind.Bone), Group = br.ReadByte(), CollidableGroups = (PmdRigidGroups)br.ReadUInt16(), Shape = (PmdRigidShape)br.ReadByte(), Size = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, Position = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, Rotation = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, Mass = br.ReadSingle(), LinearDamping = br.ReadSingle(), AngularDamping = br.ReadSingle(), Restitution = br.ReadSingle(), Friction = br.ReadSingle(), Kind = (PmxRigidKind)br.ReadByte(), }); }
public static PmxDocument Parse(Stream stream) { // leave open var br = new BinaryReader(stream); var header = Encoding.ASCII.GetString(br.ReadBytes(4)); var rt = new PmxDocument(); if (header != "PMX ") { throw new InvalidOperationException("invalid format"); } rt.Version = br.ReadSingle(); if (rt.Version != 2 && rt.Version != 2.1f) { throw new NotSupportedException("specified format version not supported"); } rt.Header = PmxHeader.Parse(br); rt.ModelInformation = PmxModelInformation.Parse(br, rt); rt.Vertices = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxVertex.Parse(br, rt)).ToList(); rt.Indices = Enumerable.Range(0, br.ReadInt32()).Select(_ => rt.ReadIndex(br, PmxIndexKind.Vertex)).ToList(); rt.Textures = Enumerable.Range(0, br.ReadInt32()).Select(_ => rt.ReadString(br)).ToList(); rt.Materials = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxMaterial.Parse(br, rt)).ToList(); rt.Bones = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxBone.Parse(br, rt)).ToList(); rt.Morphs = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxMorph.Parse(br, rt)).ToList(); rt.DisplayList = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxDisplayList.Parse(br, rt)).ToList(); rt.Rigids = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxRigidBody.Parse(br, rt)).ToList(); rt.Constraints = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxConstraint.Parse(br, rt)).ToList(); if (rt.Version > 2) { rt.SoftBodies = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxSoftBody.Parse(br, rt)).ToList(); } return(rt); }
public static PmxDocument Parse(Stream stream) { // leave open var br = new BinaryReader(stream); var header = Encoding.ASCII.GetString(br.ReadBytes(4)); var rt = new PmxDocument(); if (header != "PMX ") throw new InvalidOperationException("invalid format"); rt.Version = br.ReadSingle(); if (rt.Version != 2 && rt.Version != 2.1f) throw new NotSupportedException("specified format version not supported"); rt.Header = PmxHeader.Parse(br); rt.ModelInformation = PmxModelInformation.Parse(br, rt); rt.Vertices = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxVertex.Parse(br, rt)).ToList(); rt.Indices = Enumerable.Range(0, br.ReadInt32()).Select(_ => rt.ReadIndex(br, PmxIndexKind.Vertex)).ToList(); rt.Textures = Enumerable.Range(0, br.ReadInt32()).Select(_ => rt.ReadString(br)).ToList(); rt.Materials = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxMaterial.Parse(br, rt)).ToList(); rt.Bones = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxBone.Parse(br, rt)).ToList(); rt.Morphs = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxMorph.Parse(br, rt)).ToList(); rt.DisplayList = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxDisplayList.Parse(br, rt)).ToList(); rt.Rigids = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxRigidBody.Parse(br, rt)).ToList(); rt.Constraints = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxConstraint.Parse(br, rt)).ToList(); if (rt.Version > 2) rt.SoftBodies = Enumerable.Range(0, br.ReadInt32()).Select(_ => PmxSoftBody.Parse(br, rt)).ToList(); return rt; }
public void Parse(BinaryReader br, PmxDocument doc) { this.Name = doc.ReadString(br); this.EnglishName = doc.ReadString(br); this.Position = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }; this.ParentBone = doc.ReadBone(br); this.Priority = br.ReadInt32(); this.Capabilities = (PmxBoneCapabilities)br.ReadUInt16(); if (this.Capabilities.HasFlag(PmxBoneCapabilities.ConnectToBone)) this.ConnectToBone = doc.ReadBone(br); else this.ConnectToOffset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }; if (this.Capabilities.HasFlag(PmxBoneCapabilities.RotationAffected) || this.Capabilities.HasFlag(PmxBoneCapabilities.MovementAffected)) { this.AffectedBone = doc.ReadBone(br); this.AffectionRate = br.ReadSingle(); } if (this.Capabilities.HasFlag(PmxBoneCapabilities.FixedAxis)) this.FixedAxis = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }; if (this.Capabilities.HasFlag(PmxBoneCapabilities.LocalAxis)) { this.LocalVectorX = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }; this.LocalVectorZ = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }; } if (this.Capabilities.HasFlag(PmxBoneCapabilities.TransformByExternalParent)) this.ExternalParentKey = br.ReadInt32(); if (this.Capabilities.HasFlag(PmxBoneCapabilities.IK)) this.IK = PmxIK.Parse(br, doc); }
public static PmxConstraint Parse(BinaryReader br, PmxDocument doc) { var rt = new PmxSpringSixDegreesOfFreedomConstraint { Name = doc.ReadString(br), EnglishName = doc.ReadString(br), }; var kind = (PmxConstraintKind)br.ReadByte(); rt.Read(br, doc); switch (kind) { case PmxConstraintKind.SpringSixDegreesOfFreedom: return rt; case PmxConstraintKind.SixDegreesOfFreedom: return (PmxSixDegreesOfFreedomConstraint)rt; case PmxConstraintKind.PointToPoint: return (PmxPointToPointConstraint)rt; case PmxConstraintKind.ConeTwist: return (PmxConeTwistConstraint)rt; case PmxConstraintKind.Slider: return (PmxSliderConstraint)rt; case PmxConstraintKind.Hinge: return (PmxHingeConstraint)rt; default: throw new NotSupportedException(); } }
public static PmxBone Parse(BinaryReader br, PmxDocument doc) { var rt = new PmxBone { Name = doc.ReadString(br), EnglishName = doc.ReadString(br), Position = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, ParentBone = doc.ReadIndex(br, PmxIndexKind.Bone), Priority = br.ReadInt32(), Capabilities = (PmxBoneCapabilities)br.ReadUInt16(), }; if (rt.Capabilities.HasFlag(PmxBoneCapabilities.ConnectToBone)) rt.ConnectToBone = doc.ReadIndex(br, PmxIndexKind.Bone); else rt.ConnectToOffset = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }; if (rt.Capabilities.HasFlag(PmxBoneCapabilities.RotationAffected) || rt.Capabilities.HasFlag(PmxBoneCapabilities.MovementAffected)) { rt.AffectedBone = doc.ReadIndex(br, PmxIndexKind.Bone); rt.AffectionRate = br.ReadSingle(); } if (rt.Capabilities.HasFlag(PmxBoneCapabilities.FixedAxis)) rt.FixedAxis = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }; if (rt.Capabilities.HasFlag(PmxBoneCapabilities.LocalAxis)) { rt.LocalVectorX = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }; rt.LocalVectorZ = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }; } if (rt.Capabilities.HasFlag(PmxBoneCapabilities.TransformByExternalParent)) rt.ExternalParentKey = br.ReadInt32(); if (rt.Capabilities.HasFlag(PmxBoneCapabilities.IK)) rt.IK = PmxIK.Parse(br, doc); return rt; }
public static PmxRigidBody Parse(BinaryReader br, PmxDocument doc) { return new PmxRigidBody { Name = doc.ReadString(br), EnglishName = doc.ReadString(br), RelatedBone = doc.ReadIndex(br, PmxIndexKind.Bone), Group = br.ReadByte(), CollidableGroups = (PmdRigidGroups)br.ReadUInt16(), Shape = (PmdRigidShape)br.ReadByte(), Size = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, Position = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, Rotation = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, Mass = br.ReadSingle(), LinearDamping = br.ReadSingle(), AngularDamping = br.ReadSingle(), Restitution = br.ReadSingle(), Friction = br.ReadSingle(), Kind = (PmxRigidKind)br.ReadByte(), }; }