/// <summary> /// Get the transform data value for the given processor. /// </summary> /// <param name="name">The full class name of the processor.</param> /// <returns>An object containing the data for the processor, or null if none was found.</returns> public object GetTransformData(string name) { if (Transforms.ContainsKey(name)) { return(Transforms[name]); } return(null); }
/// <summary> /// Called by UIElement3D.InvalidateModel() to update the 3D model. /// </summary> protected override void OnUpdateModel() { foreach (UIElement3D element in Children) { if (Transforms.ContainsKey(element) && element.Transform != null) { (element.Transform as Transform3DGroup).Children.Remove(Transforms[element]); Transforms[element] = ComputeTransform(element); (element.Transform as Transform3DGroup).Children.Add(Transforms[element]); } else { Transforms.Add(element, ComputeTransform(element)); var tg = new Transform3DGroup(); if (element.Transform != null) { tg.Children.Add(element.Transform); } tg.Children.Add(Transforms[element]); element.Transform = tg; } } base.OnUpdateModel(); }
/// <summary> /// Transforms original stream using streaming scalable transformation from BizTalk API. /// </summary> /// <param name="inputStream"></param> /// <returns></returns> internal Stream TransformMessage(Stream inputStream, TransformMetaData map, IBaseMessage pInMsg) { XsltArgumentList args = null; Context ext = null; SchemaMetadata targetSchema = targetSchema = map.TargetSchemas[0]; string portname = String.Empty; //It is possible to add a param but then you you need to work arounds in the map // map.ArgumentList.AddParam //The statement bellow caused me some problems that was solved by creating the XsltArgumentList instead //args = map.ArgumentList; try { ext = new Context(pInMsg.Context, pInMsg.MessageID.ToString()); args = map.ArgumentList;//Include BizTalk extensions //args.AddExtensionObject("http://www.w3.org/1999/XSL/Transform", ext); strangely it seams i cannot use this namespace in vs 2012, but it worked in vs 2010 args.RemoveExtensionObject("urn:schemas-microsoft-com:xslt"); args.AddExtensionObject("urn:schemas-microsoft-com:xslt", ext); AddParameters(args); //2017-08-23 Added intermidiate stream as Transform kills the original stream, //this is a problem if the incomming message is a enveloped message. // XmlTranslatorStream stm = new XmlTranslatorStream(XmlReader.Create(inputStream)); //Opted to use non disposable stream instead NonDisposableStream stm = new NonDisposableStream(inputStream); VirtualStream outputStream = new VirtualStream(VirtualStream.MemoryFlag.AutoOverFlowToDisk); //TODO test to add declaration and see what happens with params!!!!!!!!!!!!!!!!!!!!!!!! BTSXslTransform btsXslTransform = null; if (Transforms.ContainsKey(map)) { btsXslTransform = Transforms[map]; } else { btsXslTransform = new BTSXslTransform(); XmlTextReader xmlTextReader = new XmlTextReader((TextReader) new StringReader(map.XmlContent)); btsXslTransform.Load((XmlReader)xmlTextReader, new MemoryResourceResolver(map.Assembly), (System.Security.Policy.Evidence)null); Transforms.TryAdd(map, btsXslTransform); } btsXslTransform.Transform(stm, args, outputStream, null); outputStream.Seek(0, SeekOrigin.Begin); if (_dynamicMap) { pInMsg.Context.Write("XSLTransform", "PipelineComponents.XSLTransform", map.AssemblyQualifiedName); } pInMsg.Context.Promote("MessageType", _systemPropertiesNamespace, targetSchema.SchemaName); //Changed to Write as SchemaStrongName could exceed 255 chars pInMsg.Context.Write("SchemaStrongName", _systemPropertiesNamespace, targetSchema.ReflectedType.AssemblyQualifiedName); //pInMsg.MessageID.ToString() return(outputStream); } catch (Exception ex) { throw new ApplicationException($"Error while trying to transform using MapType specification: {_mapName}\nMap Assembly {map.AssemblyQualifiedName} used\nError {ex.Message}", ex); } }
/// <summary> /// Instantiate the Doppeganger recursively. Makes a fully copy of all visual /// components of the object, discarding non-visual components. /// </summary> /// <param name="currentLevel">Current level to target</param> private void InstantiateDoppleganger(Transform currentLevel) { var other = SKSGeneralUtils.FindAnalogousTransform(currentLevel, Doppleganger.transform, Root, true); //Remove the MainCamera tag if it's been erroniously copied. if (currentLevel.tag.Equals("MainCamera")) { currentLevel.tag = Keywords.Tags.Untagged; } currentLevel.gameObject.name = currentLevel.gameObject.name; foreach (var component in currentLevel.GetComponents <Component>()) { if (component is Teleportable) { component.SafeDestroyComponent(); } //Copies Transforms for later updating else if (component is Transform) { if (other) { if (!Transforms.ContainsKey(other)) { Transforms.Add(other, (Transform)component); } } else { Destroy(currentLevel.gameObject); break; } } else if (component is Renderer) { if (component is SkinnedMeshRenderer) { SkinnedRenderers.Add(component as SkinnedMeshRenderer); } var meshRenderer = component as MeshRenderer; if (meshRenderer != null) { var otherRend = other.GetComponent <MeshRenderer>(); if (!Renderers.ContainsKey(otherRend)) { Renderers[otherRend] = meshRenderer; } //Adds colliders to list for collision ignoring upon Portal entry } else { var otherRend = other.GetComponent <Renderer>(); if (!Renderers.ContainsKey(otherRend)) { Renderers[otherRend] = (Renderer)component; } //Adds colliders to list for collision ignoring upon Portal entry } } else if (component is Collider) { if (!component.GetComponent <TeleportablePhysExclude>()) { var c = other.GetComponent <Collider>(); if (!_colliders.ContainsKey(c.GetInstanceID())) { _colliders.Add(c.GetInstanceID(), c); } #if SKS_VR else { //Fix for VRTK double-genning body colliders for no reason currentLevel.gameObject.transform.SetParent(null); c.enabled = false; int key = c.GetInstanceID(); _colliders[key].enabled = false; c.isTrigger = true; _colliders[key].isTrigger = true; DestroyImmediate(_colliders[key].gameObject); DestroyImmediate(currentLevel.gameObject); continue; } #endif } if (StripColliders && component) { component.SafeDestroyComponent(); } } else if (component is Rigidbody) { if (StripRigidbodies) { component.SafeDestroyComponent(); } } else if (component is Joint) { if (StripJoints) { component.SafeDestroyComponent(); } } else if (component is MonoBehaviour) { //Handling of teleportable scripts if (component is TeleportableScript) { TeleportableScripts.Add(other.GetComponent <TeleportableScript>()); } if (!StripScripts) { ((MonoBehaviour)component).enabled = true; } else { component.SafeDestroyComponent(); } //Nonspecific setup copying } else { var system = component as ParticleSystem; if (system != null) { var otherSystem = other.GetComponent <ParticleSystem>(); system.randomSeed = otherSystem.randomSeed; system.time = otherSystem.time; } else if (component is MeshFilter || component is Light) { //nothin to do } else { component.SafeDestroyComponent(); } } } if (other) { currentLevel.gameObject.SetActive(other.gameObject.activeSelf); } foreach (Transform t in currentLevel) { InstantiateDoppleganger(t); } }
private void InstantiateDoppleganger(Transform currentLevel) { Transform other = SKSGeneralUtils.FindAnalogousTransform(currentLevel, Doppleganger.transform, root, true); if (currentLevel.tag.Equals("MainCamera")) { currentLevel.tag = "Untagged"; } currentLevel.gameObject.name = currentLevel.gameObject.name; foreach (Component component in currentLevel.GetComponents <Component>()) { if (component is Teleportable) { component.SafeDestroyComponent(); } //Copies Transforms for later updating else if (component is Transform) { if (other) { if (!Transforms.ContainsKey(other)) { Transforms.Add(other, (Transform)component); } } else { Destroy(currentLevel.gameObject); break; } } else if (component is Renderer) { if (component is SkinnedMeshRenderer) { SkinnedRenderers.Add(component as SkinnedMeshRenderer); } if (component is Renderer) { if (!Renderers.ContainsKey((Renderer)component)) { Renderers[other.GetComponent <Renderer>()] = (Renderer)component; } //Adds colliders to list for collision ignoring upon Portal entry } } else if (component is Collider) { if (!component.GetComponent <TeleportablePhysExclude>()) { Collider c = other.GetComponent <Collider>(); if (!Colliders.ContainsKey(c.GetInstanceID())) { Colliders.Add(c.GetInstanceID(), c); } else { //Fix for VRTK double-genning body colliders for no reason currentLevel.gameObject.transform.SetParent(null); c.enabled = false; Colliders[c.GetInstanceID()].enabled = false; c.isTrigger = true; Colliders[c.GetInstanceID()].isTrigger = true; DestroyImmediate(Colliders[c.GetInstanceID()].gameObject); DestroyImmediate(currentLevel.gameObject); return; } } if (StripColliders && component) { component.SafeDestroyComponent(); } } else if (component is Rigidbody) { if (StripRigidbodies) { component.SafeDestroyComponent(); } } else if (component is Joint) { if (StripJoints) { component.SafeDestroyComponent(); } } else if (component is MonoBehaviour) { //Handling of teleportable scripts if (component is TeleportableScript) { TeleportableScripts.Add(other.GetComponent <TeleportableScript>()); } if (!StripScripts) { if (component != null) { ((MonoBehaviour)component).enabled = true; } } else { component.SafeDestroyComponent(); } //Nonspecific setup copying } else if (component is MeshFilter || component is ParticleSystem || component is Light) { //nothin to do } else { component.SafeDestroyComponent(); } } if (other) { currentLevel.gameObject.SetActive(other.gameObject.activeSelf); } foreach (Transform t in currentLevel) { InstantiateDoppleganger(t); } }