Ejemplo n.º 1
0
 public ElementViewModel(Element model)
 {
   Model = model;
   InitialElementViewModel = new InitialElementViewModel(model.InitialElement);
   ElementPropertiesViewModel = new ElementPropertiesViewModel(model.ElementProperties);
   Connectors = new ObservableCollection<ConnectorViewModel>();
 }
Ejemplo n.º 2
0
    protected override void OnDrop(DragEventArgs e)
    {
      base.OnDrop(e);
      var dragObject = e.Data.GetData(typeof (DragObject)) as DragObject;
      if (dragObject != null) // && !String.IsNullOrEmpty(dragObject.Xaml))
      {
        DesignerItem newItem = null;
        //Object content = XamlReader.Load(XmlReader.Create(new StringReader(dragObject.Xaml)));
        var content = "";
        if (content != null)
        {
          var vm = DataContext as EditorWindowViewModel;
          if (vm == null)
          {
            throw new ArgumentException("DataContext as ConstructorViewModel");
            return;
          }

          var visualProperties = new VisualProperties();
          //visualProperties.Size = 
          var elementProperties = new ElementProperties(visualProperties, new DomainProperties());
          var initialElement = dragObject.InitialElementViewModel.InitialElement;
          var model = new Element(initialElement, elementProperties);
          var elementViewModel = new ElementViewModel(model);
          elementViewModel.ElementPropertiesViewModel.Name = string.Format("{0} {1}", initialElement.Name, count++);
          newItem = new DesignerItem(elementViewModel);

          newItem.SizeChanged += (sender, args) =>
          {
            var newSize = args.NewSize;
            elementViewModel.ElementPropertiesViewModel.ElementVisualPropertiesViewModel.Size = new ElementSize(newSize.Height, newSize.Width);
          };

          var button = new Ellipse
          {
            //Width = 100,
            //Height = 100,
            Fill = Brushes.Aqua
          };
          newItem.Content = ResourceUtil.GetResourceByName(dragObject.InitialElementViewModel.StyleName) ?? button;

          var position = e.GetPosition(this);

          if (dragObject.DesiredSize.HasValue)
          {
            var desiredSize = dragObject.DesiredSize.Value;
            newItem.Width = desiredSize.Width;
            newItem.Height = desiredSize.Height;

            SetLeft(newItem, Math.Max(0, position.X - newItem.Width/2));
            SetTop(newItem, Math.Max(0, position.Y - newItem.Height/2));
          }
          else
          {
            SetLeft(newItem, Math.Max(0, position.X));
            SetTop(newItem, Math.Max(0, position.Y));
          }

          newItem.SetCoords();

          SetZIndex(newItem, Children.Count);
          Children.Add(newItem);
          SetConnectorDecoratorTemplate(newItem);

          //update selection
          SelectionService.SelectItem(newItem);
          newItem.Focus();

          vm.Add(newItem.ElementViewModel);

        }

        e.Handled = true;
      }
    }
Ejemplo n.º 3
0
    private static bool TryCalculatTee12Element(
      Element element,
      HashSet<ConnectorModel> calculatedConnectors,
      HashSet<ConnectorModel> remainedConnectors,
      bool forceElementInnerModel)
    {
      if (element.Connectors.Count != 3)
        return false;
      var socket = element.Connectors.FirstOrDefault(x => x.ConnectorType == ConnectorElementType.PipeInput);
      var jacks = element.Connectors.Where(x => x.ConnectorType == ConnectorElementType.PipeOutput).ToList();

      if ((socket == null) || (jacks.Count != 2))
      {
        return false;
      }

      var jack1 = jacks[0];
      var jack2 = jacks[1];

      var socketIsAccepted = socket.ConnectorProperties.IsSet || calculatedConnectors.Contains(socket);
      var jack1IsAccepted = jack1.ConnectorProperties.IsSet || calculatedConnectors.Contains(jack1);
      var jack2IsAccepted = jack2.ConnectorProperties.IsSet || calculatedConnectors.Contains(jack2);

      var socketProperties = socket.ConnectorProperties.DomainProperties as PipeConnectorDomainProperties;
      var jack1Properties = jack1.ConnectorProperties.DomainProperties as PipeConnectorDomainProperties;
      var jack2Properties = jack2.ConnectorProperties.DomainProperties as PipeConnectorDomainProperties;

      if (socketIsAccepted && jack1IsAccepted && jack2IsAccepted)
      {
        return (jack1Properties.Pressure + jack2Properties.Pressure == socketProperties.Pressure) &&
          (jack1Properties.Temperature + jack2Properties.Pressure == socketProperties.Temperature);
      }
      else
      {
        if (!forceElementInnerModel)
        {
          if (socketIsAccepted && jack1IsAccepted && !jack2IsAccepted)
          {
            var pressure = socketProperties.Pressure - jack1Properties.Pressure;
            var temperature = socketProperties.Temperature - jack1Properties.Temperature;
            if (pressure < 0)
            {
              return false;
            }

            jack2Properties.Pressure = pressure;
            jack2Properties.Temperature = temperature;
            calculatedConnectors.Add(jack2);
            remainedConnectors.Remove(jack2);
            return true;
          }
          else if(socketIsAccepted && !jack1IsAccepted && jack2IsAccepted)
          {
            var pressure = socketProperties.Pressure - jack2Properties.Pressure;
            var temperature = socketProperties.Temperature - jack2Properties.Temperature;
            if (pressure < 0)
            {
              return false;
            }

            jack1Properties.Pressure = pressure;
            jack1Properties.Temperature = temperature;
            calculatedConnectors.Add(jack1);
            remainedConnectors.Remove(jack1);
            return true;
          }
          else if(!socketIsAccepted && jack1IsAccepted && jack2IsAccepted)
          {
            var pressure = jack1Properties.Pressure + jack2Properties.Pressure;
            var temperature = jack1Properties.Temperature + jack2Properties.Temperature;

            socketProperties.Pressure = pressure;
            socketProperties.Temperature = temperature;
            calculatedConnectors.Add(socket);
            remainedConnectors.Remove(socket);
            return true;
          }
        }
        else
        {
          if(socketIsAccepted && !jack1IsAccepted && !jack2IsAccepted)
          {
            var pressure = socketProperties.Pressure/2;
            var temperature = socketProperties.Temperature/2;

            jack1Properties.Pressure = pressure;
            jack1Properties.Temperature = temperature;
            jack2Properties.Pressure = pressure;
            jack2Properties.Temperature = temperature;
            calculatedConnectors.Add(jack1);
            calculatedConnectors.Add(jack2);
            remainedConnectors.Remove(jack1);
            remainedConnectors.Remove(jack2);
            return true;
          }
        }
      }

      return false;
    }
Ejemplo n.º 4
0
    private static bool TryCalculateBiConnectorElement(Element element, HashSet<ConnectorModel> calculatedConnectors, HashSet<ConnectorModel> remainedConnectors)
    {
      if (element.Connectors.Count != 2)
        return false;
      var socket = element.Connectors.FirstOrDefault(x => x.ConnectorType == ConnectorElementType.PipeInput);
      var jack = element.Connectors.FirstOrDefault(x => x.ConnectorType == ConnectorElementType.PipeOutput);
      if ((socket == null) || (jack == null))
      {
        return false;
      }

      var socketIsAccepted = socket.ConnectorProperties.IsSet || calculatedConnectors.Contains(socket);
      var jackIsAccepted = jack.ConnectorProperties.IsSet || calculatedConnectors.Contains(jack);

      var jackProperties = jack.ConnectorProperties.DomainProperties as PipeConnectorDomainProperties;
      var socketProperties = socket.ConnectorProperties.DomainProperties as PipeConnectorDomainProperties;

      var coef = 0.9;

      if (socketIsAccepted && jackIsAccepted)
      {
        return (jackProperties.Pressure == socketProperties.Pressure * coef) &&
          (jackProperties.Temperature == socketProperties.Temperature * coef);
      }
      else if (socketIsAccepted && !jackIsAccepted)
      {
        jackProperties.Pressure = socketProperties.Pressure * coef;
        jackProperties.Temperature = socketProperties.Temperature * coef;
        calculatedConnectors.Add(jack);
        remainedConnectors.Remove(jack);
        return true;
      }
      else if (!socketIsAccepted && jackIsAccepted)
      {
        socketProperties.Pressure = jackProperties.Pressure / coef;
        socketProperties.Temperature = jackProperties.Temperature / coef;
        calculatedConnectors.Add(socket);
        remainedConnectors.Remove(socket);
        return true;
      }

      return false;
    }
Ejemplo n.º 5
0
    private static bool TryCalculate(Element element, HashSet<ConnectorModel> calculatedConnectors, HashSet<ConnectorModel> remainedConnectors, bool forceElementInnerModel)
    {
      var input = element.InitialElement as Input;
      if (input != null)
      {
        return true;
      }

      var output = element.InitialElement as Output;
      if (output != null)
      {
        return true;
      }

      var pipe = element.InitialElement as Pipe;
      if (pipe != null)
      {
        return TryCalculateBiConnectorElement(element, calculatedConnectors, remainedConnectors);
      }

      var tap = element.InitialElement as Tap;
      if (tap != null)
      {
        return TryCalculateBiConnectorElement(element, calculatedConnectors, remainedConnectors);
      }

      var tee12 = element.InitialElement as Tee12;
      if (tee12 != null)
      {
        return TryCalculatTee12Element(element, calculatedConnectors, remainedConnectors, forceElementInnerModel);
      }

      var flange = element.InitialElement as Flange;
      if (flange != null)
      {
        return TryCalculateBiConnectorElement(element, calculatedConnectors, remainedConnectors);
      }

      var fittings = element.InitialElement as Fittings;
      if (fittings != null)
      {
        return TryCalculateBiConnectorElement(element, calculatedConnectors, remainedConnectors);
      }

      return false;
    }