예제 #1
0
        private static void OnDragDropFromHierarchyTransformToHierachyTransform(
            ushort handleIdxS, ushort handleIdxT)
        {
            TransformNative.TransformHandle handleS;
            handleS.idx = handleIdxS;
            TransformNative.TransformHandle handleT;
            handleT.idx = handleIdxT;
            TransformNative.TransformMove(handleS, handleT);

            SceneNode nodeS = Scene.GetSceneNode(handleS);
            SceneNode nodeT = Scene.GetSceneNode(handleT);

            nodeS.Move(nodeT);
        }
예제 #2
0
        private void Setup()
        {
            int len = input.Length;

            FFTn = new TransformNative(len);
            FFTm = new Transform(len);

            fftn  = new Complex[len];
            ifftn = new Complex[len];

            fftm  = new Complex[len];
            ifftm = new Complex[len];

            inputReal  = input.Select(x => (double)x.Real).ToArray();
            outputReal = new double[len];
            outputImag = new double[len];
        }
예제 #3
0
        private static void OnDragDropFromHierarchyTransformToHierachyScene(
            ushort handleIdxS, ushort handleIdxT)
        {
            TransformNative.TransformHandle handleS;
            handleS.idx = handleIdxS;

            SceneNative.SceneHandle handleT;
            handleT.idx = handleIdxT;
            var root = SceneNative.SceneGetRoot(handleT);

            TransformNative.TransformMove(handleS, root);

            SceneNode node  = Scene.GetSceneNode(handleS);
            Scene     scene = Scene.GetScene(handleT);

            node.Move(scene.root);
        }
예제 #4
0
        public static double[][][] TransformWavetable(double[][] wavetable)
        {
            var waveCount    = wavetable.Length;
            var newWavetable = new double[waveCount][][];

            if (wavetable.Any(x => x.Length != WaveSize))
            {
                throw new Exception("Wave length must be " + WaveSize);
            }

            var trans = new TransformNative(WaveSize);

            for (var w = 0; w < waveCount; w++)
            {
                newWavetable[w] = new double[PartialsTableCount][];
                var baseWave = wavetable[w];

                var complexIn = baseWave.Select(x => new Complex(x, 0)).ToArray();
                var fft       = new Complex[complexIn.Length];
                var ifft      = new Complex[fft.Length];
                trans.FFT(complexIn, fft);

                for (var i = 0; i < PartialsTableCount; i++)
                {
                    var partials = PartialsPerWave[i];
                    for (var n = partials + 1; n < fft.Length - partials; n++)
                    {
                        fft[n].Real = 0;
                        fft[n].Imag = 0;
                    }

                    trans.IFFT(fft, ifft);
                    newWavetable[w][i] = ifft.Select(x => x.Real).ToArray();
                }
            }

            return(newWavetable);
        }
예제 #5
0
        void OnGUI_RightMenu(SceneNode scene)
        {
            // 暂时不支持创建多个场景
            if (ImGui.MenuItem("Create Scene", false))//!handle.IsValid()))
            {
                int    count = SceneNative.SceneCount();
                string _name = "Scene";
                if (count > 0)
                {
                    _name = string.Format("Scene ({0})", count);
                }
                SceneNative.SceneCreate(_name);
            }

            ImGui.Separator();
            if (ImGui.MenuItem("Rename", "F2", false, scene != null))
            {
                //curSelectedTransform = handle;
                renameing = true;
            }

            ImGui.Separator();

            if (ImGui.MenuItem("Create Empty", scene != null))
            {
                int    count = TransformNative.TransformChildCount(scene.handle);
                string _name = "GameObject";
                if (count > 0)
                {
                    _name = string.Format("GameObject ({0})", count);
                }
                var       gameObject     = GameObject.Inner_Create(scene.handle, _name);
                SceneNode gameObjectNode = new SceneNode();
                gameObjectNode.name      = _name;
                gameObjectNode.handle    = gameObject.transform.transformHandle;
                gameObjectNode.component = gameObject.transform;
                gameObjectNode.inspector = new InspectorTransform();
                Scene.current.root.AddChild(gameObjectNode);
            }

            if (ImGui.BeginMenu("3D Object", scene != null))
            {
                if (ImGui.MenuItem("Cube"))
                {
                    string    name             = "Cube";
                    IntPtr    native           = TransformNative.TransformGetNativeByHandle(scene.handle);
                    IntPtr    gameObjectNative = AppNative.InnerGeoCreateCube(native, name);
                    var       gameObject       = GameObject.CreateFromNative(gameObjectNative);
                    SceneNode gameObjectNode   = new SceneNode();
                    gameObjectNode.name      = name;
                    gameObjectNode.handle    = gameObject.transform.transformHandle;
                    gameObjectNode.component = gameObject.transform;
                    gameObjectNode.inspector = new InspectorRenderer();
                    Scene.current.root.AddChild(gameObjectNode);
                }

                ImGui.EndMenu();
            }

            if (ImGui.MenuItem("Camera", scene != null))
            {
                Camera    mainCamera  = Camera.Inner_Create(scene.handle, "Main Camera");
                SceneNode sceneCamera = new SceneNode();
                sceneCamera.name      = "Main Camera";
                sceneCamera.handle    = mainCamera.transformHandle;
                sceneCamera.component = mainCamera;
                sceneCamera.inspector = new InspectorCamera();
                Scene.current.root.AddChild(sceneCamera);
            }
        }
예제 #6
0
        bool OnGUI_TransformTree(SceneNode scene, int idx, ref bool selected)
        {
            int count = scene.children.Count;

            SceneNode curSelected = null;
            var       _selected   = Selector.GetSelected();

            if (_selected?.Count > 0)
            {
                curSelected = _selected[0] as SceneNode;
            }

            for (var i = 0; i < count; i++)
            {
                SceneNode node  = scene.children[i];
                string    label = string.Format("{0}##_Transform_{1}_{2}", node.name, idx, i);

                int childCount = node.children.Count;

                ImGuiTreeNodeFlags flags = flagsBase
                                           | (childCount == 0 ? ImGuiTreeNodeFlags.Leaf : ImGuiTreeNodeFlags.None);
                flags |= curSelected == node ? ImGuiTreeNodeFlags.Selected : ImGuiTreeNodeFlags.None;

                if (renameing && curSelected == node)
                {
                    label = string.Format("###_{0}", label);
                }
                if (ImGui.TreeNodeEx(label, flags))
                {
                    if (renameing && curSelected == node)
                    {
                        neo_name = node.name;
                        ImGuiInputTextFlags inputFlags = ImGuiInputTextFlags.EnterReturnsTrue
                                                         | ImGuiInputTextFlags.AutoSelectAll;
                        if (!ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))
                        {
                            ImGui.SetKeyboardFocusHere(0);
                        }

                        ImGui.SameLine(ImGui.GetCursorPosX());
                        Vector2 padding = ImGui.GetStyle().FramePadding;
                        padding.Y = 0;
                        ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, padding);

                        if (ImGui.InputText(
                                string.Format("##Transform_{0}_{1}", node.name, i),
                                ref neo_name, 64, inputFlags))
                        {
                            TransformNative.TransformSetName(curSelected.handle, neo_name);
                            renameing = false;
                        }

                        ImGui.PopStyleVar();
                    }
                    if (DragDropManager.DragDrop(node.name, node.handle.idx,
                                                 DragDropWindow.Hierarchy, DragDropTree.Transforms,
                                                 "_DDTreeWindow", ImGuiDragDropFlags.None,
                                                 DragDropManager.OnDragDropAction))
                    {
                        ImGui.TreePop();
                        return(false);
                    }

                    OnGUI_TransfromMenu(node, label);
                    OnGUI_TransformTree(node, i, ref selected);
                    ImGui.TreePop();
                }
                else
                {
                    OnGUI_TransfromMenu(node, label);
                }

                if (!selected)
                {
                    bool clicked = ImGui.IsItemClicked();
                    //bool focused = childCount == 0 ? ImGui.IsItemFocused() : ImGui.IsItemHovered();
                    if (clicked)
                    {
                        curSelected = node;
                        selected    = true;
                        Selector.Select(node);
                    }
                }
            }


            if (curSelected != null)
            {
                // F2
                if (ImGui.GetIO().KeysDown[113])
                {
                    neo_name  = TransformNative.TransformGetName(curSelected.handle);
                    renameing = true;
                }
            }

            return(true);
        }