Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
 /// <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();
 }
Esempio n. 3
0
        /// <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);
            }
        }
Esempio n. 4
0
        /// <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);
            }
        }
Esempio n. 5
0
        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);
            }
        }