public static void GenerateAGXFileAsPrefab() { foreach (var obj in Selection.objects) { var info = new IO.AGXFileInfo(AssetDatabase.GetAssetPath(obj)); if (info.Type != IO.AGXFileInfo.FileType.AGXBinary && info.Type != IO.AGXFileInfo.FileType.AGXAscii) { continue; } AssetPostprocessorHandler.ReadAGXFile(info); } }
public UuidObjectDb(AGXFileInfo fileInfo) { if (fileInfo.PrefabInstance == null) { return; } var uuidGameObjects = fileInfo.PrefabInstance.GetComponentsInChildren <AgXUnity.IO.Uuid>(); foreach (var uuidComponent in uuidGameObjects) { if (!m_gameObjects.ContainsKey(uuidComponent.Native)) { m_gameObjects.Add(uuidComponent.Native, uuidComponent.gameObject); } } }
public static void OnPrefabAddedToScene(GameObject instance) { var fileInfo = new IO.AGXFileInfo(instance); if (!fileInfo.IsValid || fileInfo.Type != IO.AGXFileInfo.FileType.AGXPrefab) { return; } if (fileInfo.ExistingPrefab == null) { Debug.LogWarning("Unable to load parent prefab from file: " + fileInfo.NameWithExtension); return; } Undo.SetCurrentGroupName("Adding: " + instance.name + " to scene."); var grouId = Undo.GetCurrentGroup(); foreach (var cm in fileInfo.GetAssets <ContactMaterial>()) { TopMenu.GetOrCreateUniqueGameObject <ContactMaterialManager>().Add(cm); } var fileData = fileInfo.ExistingPrefab.GetComponent <AgXUnity.IO.RestoredAGXFile>(); foreach (var disabledGroup in fileData.DisabledGroups) { TopMenu.GetOrCreateUniqueGameObject <CollisionGroupsManager>().SetEnablePair(disabledGroup.First, disabledGroup.Second, false); } var renderDatas = instance.GetComponentsInChildren <AgXUnity.Rendering.ShapeVisual>(); foreach (var renderData in renderDatas) { renderData.hideFlags |= HideFlags.NotEditable; renderData.transform.hideFlags |= HideFlags.NotEditable; } Undo.CollapseUndoOperations(grouId); }
public static UnityEngine.Object ReadAGXFile(IO.AGXFileInfo info) { if (info == null || !info.IsValid) { return(null); } try { UnityEngine.Object prefab = null; using (var inputFile = new IO.InputAGXFile(info)) { inputFile.TryLoad(); inputFile.TryParse(); inputFile.TryGenerate(); prefab = inputFile.TryCreatePrefab(); } return(prefab); } catch (System.Exception e) { Debug.LogException(e); } return(null); }
/// <summary> /// Construct given AGX file info. /// </summary> /// <param name="info">AGX file info.</param> public InputAGXFile(AGXFileInfo info) { if (info == null) { throw new ArgumentNullException("info", "File info object is null."); } else { FileInfo = info; } if (!FileInfo.Exists) { throw new FileNotFoundException("File not found: " + FileInfo.FullName); } if (FileInfo.Type == AGXFileInfo.FileType.Unknown || FileInfo.Type == AGXFileInfo.FileType.AGXPrefab) { throw new AgXUnity.Exception("Unsupported file format: " + FileInfo.FullName); } Successful = false; Simulation = new agxSDK.Simulation(); }
public void Parse(agxSDK.Simulation simulation, AGXFileInfo fileInfo) { if (simulation == null) { throw new ArgumentNullException("simulation", "agxSDK.Simulation instance is null."); } if (m_roots.Count > 0) { throw new AgXUnity.Exception("Calling InputAGXFileTree::Parse multiple times is not supported."); } // Generating assets first. m_roots.Add(m_materialRoot); m_roots.Add(m_contactMaterialRoot); // RigidBody nodes. foreach (var nativeRb in simulation.getRigidBodies()) { if (!IsValid(nativeRb.get())) { continue; } // TODO: Recursive assembly creation. var assemblyNode = TryGetOrCreateAssembly(nativeRb.getFrame()); var rbNode = GetOrCreateRigidBody(nativeRb.get(), assemblyNode == null); if (assemblyNode != null) { assemblyNode.AddChild(rbNode); } foreach (var nativeGeometry in nativeRb.getGeometries()) { Parse(nativeGeometry.get(), rbNode); } } // Free Geometry nodes. foreach (var nativeGeometry in simulation.getGeometries()) { if (!IsValid(nativeGeometry.get())) { continue; } // We already have a node for this from reading bodies. if (nativeGeometry.getRigidBody() != null) { if (!m_nodeCache.ContainsKey(nativeGeometry.getUuid())) { Debug.LogWarning("Geometry with rigid body ignored but isn't in present in the tree. Name: " + nativeGeometry.getName()); } continue; } // TODO: Recursive assembly creation. Parse(nativeGeometry.get(), TryGetOrCreateAssembly(nativeGeometry.getFrame())); } // Constraint nodes. foreach (var nativeConstraint in simulation.getConstraints()) { if (!IsValid(nativeConstraint.get())) { continue; } var nativeRb1 = nativeConstraint.getBodyAt(0); var nativeRb2 = nativeConstraint.getBodyAt(1); if (!IsValid(nativeRb1)) { continue; } if (nativeRb2 != null && !IsValid(nativeRb2)) { continue; } var rb1Node = nativeRb1 != null?GetNode(nativeRb1.getUuid()) : null; var rb2Node = nativeRb2 != null?GetNode(nativeRb2.getUuid()) : null; // Could be ignored bodies due to Wire and Cable. if (rb1Node == null && rb2Node == null) { continue; } var constraintNode = GetOrCreateConstraint(nativeConstraint.get()); if (rb1Node != null) { constraintNode.AddReference(rb1Node); } if (rb2Node != null) { constraintNode.AddReference(rb2Node); } } var wires = agxWire.Wire.findAll(simulation); foreach (var wire in wires) { // TODO: Handle wires in assemblies? var wireNode = GetOrCreateWire(wire); if (wire.getMaterial() != null) { var materialNode = GetOrCreateMaterial(wire.getMaterial()); wireNode.AddReference(materialNode); } } var cables = agxCable.Cable.getAll(simulation); foreach (var cable in cables) { var cableNode = GetOrCreateCable(cable); if (cable.getMaterial() != null) { var materialNode = GetOrCreateMaterial(cable.getMaterial()); cableNode.AddReference(materialNode); } var groupsCollection = cable.findGroupIdCollection(); foreach (var name in groupsCollection.getNames()) { cableNode.AddReference(new Node() { Type = NodeType.GroupId, Object = name }); } foreach (var id in groupsCollection.getIds()) { cableNode.AddReference(new Node() { Type = NodeType.GroupId, Object = id.ToString() }); } agxCable.CableIterator it = cable.getSegments().begin(); while (!it.EqualWith(cable.getSegments().end())) { var constraint = it.getConstraint(); if (constraint != null && GetConstraint(constraint.getUuid()) != null) { Debug.LogWarning("Cable constraint has a constraint node in the simulation tree."); } foreach (var attachment in it.getAttachments()) { if (attachment.getConstraint() != null && GetConstraint(attachment.getConstraint().getUuid()) != null) { Debug.LogWarning("Cable attachment has a constraint node in the simulation tree."); } } it.inc(); } } var mm = simulation.getMaterialManager(); foreach (var m1 in m_materials.Values) { foreach (var m2 in m_materials.Values) { var cm = mm.getContactMaterial(m1, m2); if (cm == null) { continue; } var cmNode = GetOrCreateContactMaterial(cm); cmNode.AddReference(GetNode(m1.getUuid())); cmNode.AddReference(GetNode(m2.getUuid())); } } // Generating wires, cables and constraints last when all bodies has been generated. m_roots.Add(m_wireRoot); m_roots.Add(m_cableRoot); m_roots.Add(m_constraintRoot); }