示例#1
0
        public void ZoomToFit(double margin = 10)
        {
            if (_nodes.Count == 0)
            {
                return;
            }

            var selectedNodes = SelectedModels.Where(s => s is NodeModel).Select(s => (NodeModel)s);

            (var minX, var maxX, var minY, var maxY) = GetNodesRect(selectedNodes.Any() ? selectedNodes : _nodes);
            var width  = maxX - minX + 2 * margin;
            var height = maxY - minY + 2 * margin;

            minX -= margin;
            minY -= margin;

            var xf = Container.Width / width;
            var yf = Container.Height / height;

            Zoom = Math.Min(xf, yf);

            var nx = Container.Left + Pan.X + minX * Zoom;
            var ny = Container.Top + Pan.Y + minY * Zoom;

            UpdatePan(Container.Left - nx, Container.Top - ny);

            Refresh();
        }
示例#2
0
        private void UpdateSelection(Point startPoint, Point endPoint)
        {
            Rect rubberBand = new Rect(startPoint, endPoint);

            foreach (ISelectable item in ItemsSource)
            {
                DependencyObject container = ItemContainerGenerator.ContainerFromItem(item);

                Rect itemRect   = VisualTreeHelper.GetDescendantBounds((Visual)container);
                Rect itemBounds = ((Visual)container).TransformToAncestor(_drawingCanvas).TransformBounds(itemRect);

                if (rubberBand.Contains(itemBounds))
                {
                    if (!item.IsSelected)
                    {
                        item.IsSelected = true;
                        SelectedModels.Add(item);
                    }
                }
                else
                {
                    if (!(Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)))
                    {
                        SelectedModels.Remove(item);
                        item.IsSelected = false;
                    }
                }
            }
        }
示例#3
0
        /// <summary>
        /// Group the Models based on Height and Width
        /// </summary>
        /// <returns> the width and height of the last model </returns>
        private Tuple <Double, Double> CalculateWidthAndHeight()
        {
            var xgroup = SelectedModels.OrderBy(x => x.X).ToList();
            var ygroup = SelectedModels.OrderBy(x => x.Y).ToList();

            return(Tuple.Create(xgroup.Last().Width, ygroup.Last().Height));
        }
示例#4
0
        private void _drawingCanvas_MouseLeftMouseDown(object sender, MouseButtonEventArgs e)
        {
            OnMouseLeftButtonDown(e);

            Keyboard.Focus(_drawingCanvas);

            _originMouseStartPoint = _previousPosition = e.GetPosition(_drawingCanvas);
            //if we are source of event, we are rubberband selecting
            if (e.Source == _drawingCanvas)
            {
                if (!IsDrawing && !(Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)))
                {
                    ClearSelections();
                }

                if (_propEditorViewModel.DrawingPanelViewModel.IsDrawing)
                {
                    AddLightCommand.Execute(_originMouseStartPoint);
                    //ClearSelections();
                }

                _isSelecting = false;
                e.Handled    = true;
            }
            else if (!IsDrawing && e.Source is Path)
            {
                var p = e.Source as Path;
                var l = p.DataContext as ISelectable;
                if (l != null)
                {
                    _isSelecting = true;


                    if (!(Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)))
                    {
                        if (!l.IsSelected)
                        {
                            ClearSelections();
                            SelectedModels.Add(l);
                            l.IsSelected = true;
                        }
                    }
                    else
                    {
                        if (l.IsSelected)
                        {
                            l.IsSelected = false;
                            SelectedModels.Remove(l);
                        }
                        else
                        {
                            SelectedModels.Add(l);
                            l.IsSelected = true;
                        }
                    }
                }
                e.Handled = true;
            }
        }
示例#5
0
 private void ClearSelections()
 {
     if (SelectedModels.Count > 0)
     {
         SelectedModels.Clear();
         if (ItemsSource != null)
         {
             foreach (ISelectable lvm in ItemsSource)
             {
                 lvm.IsSelected = false;
             }
         }
     }
 }
示例#6
0
        /// <summary>
        /// Group the Models based on Height and Width
        /// </summary>
        /// <returns> the width and height of the last model </returns>
        private Tuple <Double, Double> CalculateWidthAndHeight()
        {
            var    xgroup  = SelectedModels.OrderBy(x => x.X).ToList();
            var    ygroup  = SelectedModels.OrderBy(x => x.Y).ToList();
            double yheight = ygroup.Last().Height;

            //If the last model is Node, then increase the height so that
            //node border does not overlap with the group
            if (ygroup.Last() is NodeModel)
            {
                yheight = yheight + ExtendYHeight;
            }

            return(Tuple.Create(xgroup.Last().Width, yheight));
        }
示例#7
0
        private bool stringsCVS_Filter(object item)
        {
            if (string.IsNullOrWhiteSpace(Filter))
            {
                return(true);
            }
            if (SelectedModels != null && SelectedModels.Contains(item))
            {
                return(true);
            }

            string strItem = item as string;

            return(new Regex(Filter, RegexOptions.IgnoreCase).IsMatch(strItem));
        }
示例#8
0
        protected override void DeserializeCore(XmlElement element, SaveContext context)
        {
            XmlElementHelper helper = new XmlElementHelper(element);

            this.GUID           = helper.ReadGuid("guid", this.GUID);
            this.annotationText = helper.ReadString("annotationText", Resources.GroupDefaultText);
            this.X               = helper.ReadDouble("left", DoubleValue);
            this.Y               = helper.ReadDouble("top", DoubleValue);
            this.width           = helper.ReadDouble("width", DoubleValue);
            this.height          = helper.ReadDouble("height", DoubleValue);
            this.background      = helper.ReadString("backgrouund", "");
            this.fontSize        = helper.ReadDouble("fontSize", fontSize);
            this.textBlockHeight = helper.ReadDouble("TextblockHeight", DoubleValue);
            this.InitialTop      = helper.ReadDouble("InitialTop", DoubleValue);
            this.InitialHeight   = helper.ReadDouble("InitialHeight", DoubleValue);
            //Deserialize Selected models
            if (element.HasChildNodes)
            {
                var listOfModels = new List <ModelBase>();
                if (SelectedModels != null)
                {
                    foreach (var childnode in element.ChildNodes)
                    {
                        var mhelper = new XmlElementHelper(childnode as XmlElement);
                        var result  = mhelper.ReadGuid("ModelGuid", new Guid());
                        var model   = ModelBaseRequested != null
                            ? ModelBaseRequested(result)
                            : SelectedModels.FirstOrDefault(x => x.GUID == result);

                        if (model != null)
                        {
                            listOfModels.Add(model);
                        }
                    }
                }

                SelectedModels = listOfModels;
            }

            //On any Undo Operation, current values are restored to previous values.
            //These properties should be Raised, so that they get the correct value on Undo.
            RaisePropertyChanged("Background");
            RaisePropertyChanged("FontSize");
            RaisePropertyChanged("AnnotationText");
            RaisePropertyChanged("SelectedModels");
        }
示例#9
0
        private bool ValidateSelection()
        {
            WarningMessageLabel.Text = string.Empty;
            bool hasError = false;

            if (SelectedModels.Any(x => x.IsFlexible))
            {
                var allFlexible = SelectedModels.All(x => x.IsFlexible);
                if (!allFlexible)
                {
                    WarningMessageLabel.Text = WarningNotAllFlexible.Text;
                    hasError = true;
                }
            }

            return(!hasError);
        }
 private void BtnAdd_Click(object sender, EventArgs e)
 {
     foreach (var item in lstApiServices.CheckedItems)
     {
         SelectedApiServices.Add(item as Utilities.ClassModel);
     }
     foreach (var item in lstServices.CheckedItems)
     {
         SelectedServices.Add(item as Utilities.ClassModel);
     }
     foreach (var item in lstModels.CheckedItems)
     {
         SelectedModels.Add(item as Utilities.ClassModel);
     }
     foreach (var item in lstDialogs.CheckedItems)
     {
         SelectedDialogs.Add(item as Utilities.ClassModel);
     }
 }
示例#11
0
        public CodeModel SelectModels(CodeModelArgs args)
        {
            string GetCodeSp = "pk_atm_sp_code";

            try{
                SelectedModels = Ctx.Query <dynamic>(GetCodeSp,
                                                     new { P_GROUP_ID = args.Gropu_Id, P_WHERE = args.Where == "" ? null : args.Where },
                                                     commandType: CommandType.StoredProcedure)
                                 .Select(r =>
                                         new CodeModel {
                    CODE = r.CODE == null ?  r.코드 : r.CODE,
                    NAME = r.NAME == null ? r.이름 : r.NAME
                }
                                         ).ToList <CodeModel>();
            }
            catch (Exception ex) {
                SelectedModels.Add(new CodeModel {
                    Err = ex.Message
                });
            }
            return(SelectModel);
        }
示例#12
0
 public override bool CanExecute(object parameter)
 {
     return(base.CanExecute(parameter) && SelectedModels.Any(m => m.NeedUpdate == NeedUpdate));
 }
        /// <summary>
        ///     OnElementMouseDown: Click Event for each geometric element
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <param name="watch3DNode"></param>
        private void OnElementMouseDown(object sender, MouseButtonEventArgs e, Watch3DNode watch3DNode)
        {
            // 1-CLick event
            if (e.LeftButton != MouseButtonState.Pressed)
            {
                return;
            }

            // Get sender
            var element         = sender as ModelUIElement3D;
            var geometryModel3D = element?.Model as GeometryModel3D;

            if (geometryModel3D == null)
            {
                return;
            }

            // Check Type
            // If it is already selected ... Deselect
            if (SelectedModels.Contains(geometryModel3D))
            {
                // var geo = geometryModel3D.Clone();
                // geo.Material = geometryModel3D.BackMaterial;
                geometryModel3D.Material = geometryModel3D.BackMaterial;
                SelectedModels.Remove(geometryModel3D);
            }
            // If not ... Select!
            else
            {
                SelectedModels.Add(geometryModel3D);
                // var geo = geometryModel3D.Clone();
                // geo.Material = _selectionMaterial;
                geometryModel3D.Material = _selectionMaterial;
            }

            // Get the id of the selected model
            var reslist = new List <Guid>();

            if (SelectedModels != null && SelectedModels.Count > 0)
            {
                foreach (var item in _fallBackGeometry)
                {
                    foreach (var item_2 in SelectedModels)
                    {
                        if (Equals(item_2.Geometry, item.Model3D.Geometry))
                        {
                            reslist.Add(item.Id);
                        }
                    }
                }
            }

            string modelId   = null;
            string projectId = null;

            if (InputPorts[0].Data.GetType() == typeof(ModelInfo))
            {
                var input = InputPorts[0].Data as ModelInfo;
                if (input != null)
                {
                    modelId   = input.ModelId;
                    projectId = input.ProjectId;
                }
            }
            else if (InputPorts[0].Data.GetType() == typeof(BaseRelation))
            {
                var input = InputPorts[0].Data as BaseRelation;
                if (input != null)
                {
                    modelId   = input.ModelId.ToString();
                    projectId = input.ProjectId.ToString();
                }
            }
            else
            {
                return;
            }

            var res = new ModelInfo(projectId, modelId, reslist, ModelType.BimPlusModel);

            OutputPorts[0].Data = res;
            // Set selected models to Output ...

            e.Handled = true;
        }
示例#14
0
        private void ImportModels()
        {
            ProjectManager.StartBatchChanges();
            progressBar1.Style   = ProgressBarStyle.Continuous;
            progressBar1.Value   = 0;
            progressBar1.Maximum = SelectedModels.Count();

            var bonesToImport = GetBoneMappings();

            if (bonesToImport.Count > 0 && SelectedModels.Any(x => x.IsFlexible))
            {
                Project.Flexible = true;

                foreach (var boneMap in bonesToImport)
                {
                    var existing = Project.Bones.FirstOrDefault(x => x.BoneID == boneMap.AssimpID);

                    if (existing == null)
                    {
                        existing = new PartBone(boneMap.AssimpID);
                    }
                    existing.Transform = boneMap.Transform;

                    if (boneMap.ParentName != null)
                    {
                        var parentbone = bonesToImport.FirstOrDefault(x => x.Name == boneMap.ParentName);
                        existing.TargetBoneID = parentbone.AssimpID;
                    }

                    if (existing.Project == null)
                    {
                        Project.Bones.Add(existing);
                    }
                }
            }

            foreach (var model in SelectedModels)
            {
                var geom    = Meshes.MeshConverter.AssimpToLdd(SceneToImport, model.Mesh);
                var surface = Project.Surfaces.FirstOrDefault(x => x.SurfaceID == model.SurfaceID);

                if (surface == null)
                {
                    surface = new PartSurface(model.SurfaceID, Project.Surfaces.Max(x => x.SubMaterialIndex) + 1);
                    Project.Surfaces.Add(surface);
                }

                var partModel = surface.Components.FirstOrDefault(x => x.ComponentType == ModelComponentType.Part);

                if (partModel == null)
                {
                    partModel = new PartModel();
                    surface.Components.Add(partModel);
                }

                var modelMesh = Project.AddMeshGeometry(geom, model.Name);
                partModel.Meshes.Add(new ModelMeshReference(modelMesh));

                progressBar1.Value += 1;
            }

            if (bonesToImport.Any())
            {
                ProjectManager.RebuildBoneConnections();
            }

            ProjectManager.EndBatchChanges();
        }
示例#15
0
 public override bool CanExecute(object parameter)
 {
     return(base.CanExecute(parameter) && SelectedModels.Count() == 1);
 }
示例#16
0
 public override string ContextMenu(Point pos)
 {
     return(_profile.ShowContextmenu(pos, SelectedModels.ToArray()));
 }
        protected override void setupCommands()
        {
            base.setupCommands();


            CopyCommand = new SimpleCommand()
            {
                CanExecuteDelegate = (x) =>
                {
                    return(SelectedViewModels != null && SelectedViewModels.Count > 0);
                },
                ExecuteDelegate = (x) =>
                {
                    try
                    {
                        _profile.CopyToClipboard(SelectedModels.ToArray());
                    }
                    catch (Exception ex)
                    {
                        new WPFMessageBoxService().ShowError(ex.Message);
                    }
                }
            };

            NewFolderCommand = new SimpleCommand()
            {
                CanExecuteDelegate = (x) =>
                {
                    return(!EmbeddedDirectoryViewModel.EmbeddedDirectoryModel.IsReadonly);
                },
                ExecuteDelegate = (x) =>
                {
                    try
                    {
                        NewFolder("New Folder", x as string);
                    }
                    catch (Exception ex)
                    {
                        new WPFMessageBoxService().ShowError(ex.Message);
                    }
                }
            };



            PasteCommand = new SimpleCommand()
            {
                CanExecuteDelegate = (x) =>
                {
                    return(System.Windows.Clipboard.ContainsFileDropList() &&
                           EmbeddedDirectoryViewModel.EmbeddedDirectoryModel.IsSupportAdd);
                },
                ExecuteDelegate = (x) =>
                {
                    try
                    {
                        _profile.PasteFromClipboard(EmbeddedDirectoryViewModel.EmbeddedDirectoryModel);
                    }
                    catch (Exception ex)
                    {
                        new WPFMessageBoxService().ShowError(ex.Message);
                    }
                }
            };

            DeleteCommand = new SimpleCommand()
            {
                CanExecuteDelegate = (x) =>
                {
                    if (SelectedViewModels != null && SelectedViewModels.Count > 0)
                    {
                        foreach (var vm in SelectedViewModels)
                        {
                            if (vm.EmbeddedModel.IsReadonly)
                            {
                                return(false);
                            }
                        }
                        return(true);
                    }
                    return(false);
                },
                ExecuteDelegate = (x) =>
                {
                    try
                    {
                        string caption = String.Format(Texts.strConfirmDelete,
                                                       SelectedViewModels.Count, SelectedViewModels.Count > 1 ? "s" : "");

                        if (new WPFMessageBoxService().ShowYesNo(caption, CustomDialogIcons.Question)
                            == CustomDialogResults.Yes)
                        {
                            _profile.Delete(SelectedModels.ToArray(), EmbeddedDirectoryViewModel.EmbeddedDirectoryModel);
                        }
                    }
                    catch (Exception ex)
                    {
                        new WPFMessageBoxService().ShowError(ex.Message);
                    }
                }
            };

            PropertiesCommand = new SimpleCommand()
            {
                CanExecuteDelegate = x =>
                {
                    return(SelectedModels != null && SelectedModels.Count > 0);
                },
                ExecuteDelegate = x =>
                {
                    System.Windows.Point position = Mouse.GetPosition(null);
                    _profile.ShowProperties(position, SelectedModels.ToArray());
                }
            };

            SelectAllCommand = new SimpleCommand()
            {
                ExecuteDelegate = (x) =>
                {
                    if (SelectedViewModels == null ||
                        SelectedViewModels.Count < EmbeddedDirectoryViewModel.SubDirectories.Count)
                    {
                        foreach (var item in EmbeddedDirectoryViewModel.SubEntries)
                        {
                            item.IsSelected = true;
                        }
                        SelectedViewModels =
                            new List <EntryViewModel <FI, DI, FSI> >(from vm in
                                                                     EmbeddedDirectoryViewModel.SubEntries
                                                                     select vm);
                    }
                    else
                    {
                        foreach (var item in EmbeddedDirectoryViewModel.SubEntries)
                        {
                            item.IsSelected = false;
                        }
                        SelectedViewModels = new List <EntryViewModel <FI, DI, FSI> >();
                    }
                }
            };
        }