コード例 #1
0
        public override Helix.Element3D GetElement(SceneNodeModel treeNode, int itemIndex)
        {
            var nodeType   = treeNode?.NodeType ?? NodeType.None;
            var paletteKey = PaletteType.FromNodeType(nodeType);

            return(PaletteHolders[paletteKey].Elements[itemIndex]);
        }
コード例 #2
0
        public override bool ExecuteObjectOperation(SceneNodeModel treeNode, ObjectOperation operation, int itemIndex)
        {
            var paletteKey = PaletteType.FromNodeType(treeNode.NodeType);
            var holder     = PaletteHolders[paletteKey];

            var blockEditor = scenario.MetadataStream.GetBlockEditor(holder.Definition.PlacementBlockRef.TagBlock.Pointer.Address);

            switch (operation)
            {
            case ObjectOperation.Add:
                blockEditor.Add();
                blockEditor.UpdateBlockReference(holder.Definition.PlacementBlockRef);

                var placement = holder.InsertPlacement(blockEditor.EntryCount - 1, scenario, paletteKey);

                //setting the palette index causes a refresh which builds an element for the new object
                //these also need to be set to -1 initially anyway
                placement.PaletteIndex = placement.NameIndex = -1;
                break;

            case ObjectOperation.Remove:
                if (itemIndex < 0 || itemIndex >= holder.Definition.Placements.Count)
                {
                    return(false);
                }

                ShiftObjectNames(paletteKey, itemIndex, holder.Definition.Placements.Count, true);

                blockEditor.Remove(itemIndex);
                blockEditor.UpdateBlockReference(holder.Definition.PlacementBlockRef);
                holder.RemovePlacement(itemIndex);

                UpdateBlockIndexes(paletteKey, itemIndex, holder.Definition.Placements.Count);
                break;

            case ObjectOperation.Copy:
                if (itemIndex < 0 || itemIndex >= holder.Definition.Placements.Count)
                {
                    return(false);
                }

                ShiftObjectNames(paletteKey, itemIndex, holder.Definition.Placements.Count, false);

                var destIndex = itemIndex + 1;
                blockEditor.Copy(itemIndex, destIndex);
                blockEditor.UpdateBlockReference(holder.Definition.PlacementBlockRef);

                placement = holder.InsertPlacement(destIndex, scenario, paletteKey);
                placement.CopyFrom(holder.Definition.Placements[itemIndex]);

                UpdateBlockIndexes(paletteKey, itemIndex, holder.Definition.Placements.Count);
                break;

            default:
                return(false);
            }

            return(true);
        }
コード例 #3
0
        public override IEnumerable <ScenarioListItem> GetListItems(SceneNodeModel treeNode)
        {
            var paletteKey = PaletteType.FromNodeType(treeNode.NodeType);

            foreach (var placement in scenario.Palettes[paletteKey].Placements)
            {
                yield return(new ScenarioListItem(placement));
            }
        }
コード例 #4
0
        private void btnEditPalette_Click(object sender, RoutedEventArgs e)
        {
            var paletteKey = PaletteType.FromNodeType(scenario.SelectedNodeType);

            if (paletteKey != null)
            {
                new PaletteEditorWindow(scenario, paletteKey)
                {
                    Owner = Window.GetWindow(this)
                }
            }
コード例 #5
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var nodeType = value as NodeType? ?? NodeType.None;
            var action   = parameter?.ToString();

            var paletteKey = PaletteType.FromNodeType(nodeType);

            if (paletteKey != null)
            {
                return(true);
            }

            return(false);
        }
コード例 #6
0
        public override void OnSelectedTreeNodeChanged(SceneNodeModel newNode)
        {
            var nodeType = newNode?.NodeType ?? NodeType.None;

            //if the node is not a palette this will disable hit testing on all palettes
            var paletteKey = PaletteType.FromNodeType(nodeType);

            foreach (var palette in PaletteHolders.Values)
            {
                palette.GroupElement.IsHitTestVisible = palette.Name == paletteKey;
            }

            //only render decals when the decal node is selected
            PaletteHolders[PaletteType.Decal].GroupElement.IsRendering = nodeType == NodeType.Decals;
        }
コード例 #7
0
        internal override BlockPropertiesLocator GetPropertiesLocator(SceneNodeModel treeNode, int itemIndex)
        {
            var paletteKey = PaletteType.FromNodeType(treeNode.NodeType);

            if (itemIndex >= 0)
            {
                var palette  = scenario.Palettes[paletteKey];
                var altNodes = new List <Tuple <XmlNode, long> >();
                altNodes.Add(Tuple.Create(scenario.Sections[Section.ObjectNames].Node, scenario.RootAddress));
                altNodes.Add(Tuple.Create(palette.PaletteNode, scenario.RootAddress));

                return(new BlockPropertiesLocator
                {
                    RootNode = palette.PlacementsNode,
                    BaseAddress = palette.PlacementBlockRef.TagBlock.Pointer.Address
                                  + itemIndex * palette.PlacementBlockRef.BlockSize,
                    AdditionalNodes = altNodes,
                    TargetObject = palette.Placements[itemIndex]
                });
            }

            return(null);
        }
コード例 #8
0
 public override bool SupportsObjectOperation(ObjectOperation operation, NodeType nodeType) => PaletteType.FromNodeType(nodeType) != null;
コード例 #9
0
 public override bool HandlesNodeType(NodeType nodeType) => PaletteType.FromNodeType(nodeType) != null;
コード例 #10
0
        public override int GetElementIndex(SceneNodeModel treeNode, Helix.Element3D element)
        {
            var paletteKey = PaletteType.FromNodeType(treeNode.NodeType);

            return(scenario.Palettes[paletteKey].Placements.IndexOf(element.DataContext as ObjectPlacement));
        }