예제 #1
0
        private void StartAddLink(ConnectorElement connStart, Point mousePoint)
        {
            if (Document.Action == DesignerAction.Connect)
            {
                _connStart = connStart;
                _connEnd   = new ConnectorElement(connStart.ParentElement)
                {
                    Location = connStart.Location
                };

                var controller = (IMoveController)((IControllable)_connEnd).GetController();
                controller.Start(mousePoint);

                _isAddLink = true;

                _linkLine = new StraightLinkElement(connStart, _connEnd)
                {
                    BorderWidth = 1
                };

                Invalidate(_linkLine, true);

                OnElementConnecting(new ElementConnectEventArgs(connStart.ParentElement, null, _linkLine));
            }
        }
예제 #2
0
        private void GetConnectors(Link link, out ConnectorElement startConnectorElement, out ConnectorElement endConnectorElement)
        {
            startConnectorElement = (ConnectorElement)Document.FindElement(new Point(link.StartPointX, link.StartPointY));
            endConnectorElement   = (ConnectorElement)Document.FindElement(new Point(link.EndPointX, link.EndPointY));

            if (startConnectorElement == null || endConnectorElement == null)
            {
                var startNode = Document.Elements.GetArray().FirstOrDefault(n => n.Id == link.StartNodeId);
                var endNode   = Document.Elements.GetArray().FirstOrDefault(n => n.Id == link.EndNodeId);

                if (startNode != null && endNode != null)
                {
                    var listTuples = new List <LineVariantTuple>();
                    foreach (var connector1 in ((NodeElement)startNode).Connectors)
                    {
                        foreach (var connector2 in ((NodeElement)endNode).Connectors)
                        {
                            listTuples.Add(new LineVariantTuple
                            {
                                StartPoint = connector1.Location,
                                EndPoint   = connector2.Location
                            });
                        }
                    }

                    var minLengthLine = listTuples.OrderBy(l => l.Length).FirstOrDefault();
                    if (minLengthLine != null)
                    {
                        startConnectorElement = (ConnectorElement)Document.FindElement(minLengthLine.StartPoint);
                        endConnectorElement   = (ConnectorElement)Document.FindElement(minLengthLine.EndPoint);
                    }
                }
            }
        }
예제 #3
0
        /// <summary>
        /// 获得指定设备的所有连接键
        /// </summary>
        /// <param name="revitDoc">Revit Document</param>
        /// <param name="instId">实例ID</param>
        public static List <RevitConnector> GetRevitConnectors(Document revitDoc, ElementId instId)
        {
            FamilyInstance          oInst     = revitDoc.GetElement(instId) as FamilyInstance;
            Family                  family    = oInst.Symbol.Family;
            Document                familyDoc = revitDoc.EditFamily(family);
            List <ConnectorElement> elems     = GetConnectorElement(familyDoc);
            Transform               transfrom = GetTransform(revitDoc, oInst);

            if (transfrom == null)
            {
                return(null);
            }
            List <RevitConnector> rcList = new List <RevitConnector>();

            foreach (Element elem in elems)
            {
                ConnectorElement ce   = elem as ConnectorElement;
                Parameter        para = ce.get_Parameter(BuiltInParameter.RBS_CONNECTOR_DESCRIPTION);
                if (para != null)
                {
                    RevitConnector rc = new RevitConnector();
                    rc.Description = para.AsString();
                    rc.Direction   = transfrom.OfPoint(ce.CoordinateSystem.BasisZ);
                    rc.LocalPoint  = transfrom.OfPoint(ce.Origin);
                    rc.Connector   = GetConnector(oInst, rc.LocalPoint);
                    rcList.Add(rc);
                }
            }
            return(rcList);
        }
예제 #4
0
        internal BaseLinkElement(ConnectorElement connectorElement1, ConnectorElement connectorElement2)
        {
            borderWidth = 1;

            connector1 = connectorElement1;
            connector2 = connectorElement2;

            connector1.AddLink(this);
            connector2.AddLink(this);
        }
예제 #5
0
 public BaseLinkElement AddLink(ConnectorElement start, ConnectorElement end)
 {
     if (CanAddLink(start, end))
     {
         var linkElement = new StraightLinkElement(start, end);
         _elements.Add(linkElement);
         linkElement.AppearanceChanged += ElementAppearanceChanged;
         OnAppearancePropertyChanged(new EventArgs());
         return(linkElement);
     }
     return(null);
 }
예제 #6
0
        static ElementFactory()
        {
            _boxPrototype = new BoxElement();
            _boxPrototype.Title = "New box element.";

            _circleProrotype = new CircleElement();
            _circleProrotype.Title = "New circle element";

            _connectorPrototype = new ConnectorElement();
            _connectorPrototype.Title = "New connector element";

        }
예제 #7
0
        private void EndAddLink()
        {
            if (_connEnd != _linkLine.Connector2)
            {
                _linkLine.Connector1.RemoveLink(_linkLine);
                _linkLine = Document.AddLink(_linkLine.Connector1, _linkLine.Connector2);
                OnElementConnected(new ElementConnectEventArgs(_linkLine.Connector1.ParentElement, _linkLine.Connector2.ParentElement, _linkLine));
            }

            _connStart = null;
            _connEnd   = null;
            _linkLine  = null;
        }
예제 #8
0
        public static void Implement()
        {
            BoxElement boxPrototype = new BoxElement();
            DynamiFabric.AddPrototype(boxPrototype);

            CircleElement circlePrototype = new CircleElement();
            DynamiFabric.AddPrototype(circlePrototype);

            ConnectorElement connectorPrototype = new ConnectorElement();
            DynamiFabric.AddPrototype(connectorPrototype);

            BoxElement newBox = (BoxElement)DynamiFabric.CreateObject((typeof(BoxElement)));
        }
예제 #9
0
        public void RestartInitValues()
        {
            // Reinitialize status
            _moveAction = null;

            _isMultiSelection = false;
            _isAddSelection   = false;
            _isAddLink        = false;

            _changed = false;

            _connStart = null;

            _selectionArea.FillColor = SystemColors.Control;

            Document.CalcWindow(true);
        }
예제 #10
0
        public BaseLinkElement AddLink(ConnectorElement connStart, ConnectorElement connEnd)
        {
            if (CanAddLink(connStart, connEnd))
            {
                BaseLinkElement lnk;
                
                if (_linkType == LinkType.Straight)
                    lnk = new StraightLinkElement(connStart, connEnd);
                else // (linkType == LinkType.RightAngle)
                    lnk = new RightAngleLinkElement(connStart, connEnd);

                Elements.Add(lnk);
                lnk.AppearanceChanged += ElementAppearanceChanged;
                OnAppearancePropertyChanged(new EventArgs());
                return lnk;
            }
            return null;
        }
예제 #11
0
        private void RestartInitValues()
        {
            // Reinitialize status
            _moveAction = null;

            _isMultiSelection = false;
            _isAddSelection   = false;
            _isAddLink        = false;

            Changed = false;

            _connStart = null;

            _selectionArea.FillColor1  = SystemColors.Control;
            _selectionArea.BorderColor = SystemColors.Control;
            _selectionArea.Visible     = false;

            _document.CalcWindow(true);
        }
        private void BuildBasicNodes(DragNodeChart chart)
        {
            chart.DataSet.SeriesName = "DS1";

            for (int i = 1; i <= 10; i++)
            {
                var set = new DragNodeSetElement
                {
                    Id       = i.ToString(),
                    X        = _random.Next(5, 90),
                    Y        = _random.Next(5, 90),
                    Width    = _random.Next(30, 60),
                    Height   = _random.Next(30, 60),
                    Radius   = _random.Next(30, 70),
                    Label    = "Node " + i.ToString(),
                    NumSides = _random.Next(3, 9),
                    Shape    = DragNodeShapes.Polygon
                };

                set.Link.SetLink(FusionLinkMethod.NewWindow, "http://www.realweb21.com");

                chart.DataSet.Add(set);
            }

            chart.Connectors.Color        = "#FF0000".FromHtml();
            chart.Connectors.StdThickness = 5;

            for (int i = 1; i <= 5; i++)
            {
                var connector = new ConnectorElement
                {
                    Strength     = _random.Next(100) / 100.0,
                    Label        = "Link " + i.ToString(),
                    From         = i.ToString(),
                    To           = (_random.Next(10 - i) + i).ToString(),
                    Color        = "#BBBB00".FromHtml(),
                    ArrowAtStart = false,
                    ArrowAtEnd   = true
                };
                chart.Connectors.Add(connector);
            }
        }
예제 #13
0
파일: SectorData.cs 프로젝트: gormed/darwin
    ////////////////////////////////////////////////////////////////////

    Vector3 PlaceModule(ConnectorElement outConnector, Module module)
    {
        if (module == null)
        {
            throw new System.ArgumentNullException("module");
        }

        Vector3 newPos;

        // first connector is null!
        if (outConnector == null)
        {
            newPos = new Vector3(0, 0, 0);
        }
        else
        {
            newPos = -module.InConnector.transform.localPosition + outConnector.transform.position;            // outConnector.transform.localPosition);
        }
        return(newPos);
    }
예제 #14
0
        private void EndAddLink()
        {
            if (_connEnd != _linkLine.Connector2)
            {
                _linkLine.Connector1.RemoveLink(_linkLine);
                _linkLine = _document.AddLink(_linkLine.Connector1, _linkLine.Connector2);
                var eventArgs = new ElementConnectEventArgs(_linkLine.Connector1.ParentElement, _linkLine.Connector2.ParentElement, _linkLine);
                var accepted  = true;
                if (_linkLine.Connector1.ParentElement is DiagramBlock)
                {
                    accepted = (_linkLine.Connector1.ParentElement as DiagramBlock).OnElementConnected(this, eventArgs);
                }
                if (accepted)
                {
                    OnElementConnected(eventArgs);
                }
            }

            _connStart = null;
            _connEnd   = null;
            _linkLine  = null;
        }
예제 #15
0
        private void StartAddLink(ConnectorElement connectorStart, Point mousePoint)
        {
            if (_document.Action != DesignerAction.Connect)
            {
                return;
            }
            _connStart = connectorStart;
            _connEnd   = new ConnectorElement(connectorStart.ParentElement)
            {
                Location = connectorStart.Location
            };

            var ctrl = (IMoveController)((IControllable)_connEnd).GetController();

            ctrl.Start(mousePoint);

            _isAddLink = true;

            switch (_document.LinkType)
            {
            case (LinkType.Straight):
                _linkLine = new StraightLinkElement(connectorStart, _connEnd);
                break;

            case (LinkType.RightAngle):
                _linkLine = new RightAngleLinkElement(connectorStart, _connEnd);
                break;
            }
            _linkLine.Visible     = true;
            _linkLine.BorderColor = Color.FromArgb(150, Color.Black);
            _linkLine.BorderWidth = 1;

            Invalidate(_linkLine, true);

            OnElementConnecting(new ElementConnectEventArgs(connectorStart.ParentElement, null, _linkLine));
        }
예제 #16
0
        /// <summary>
        /// create the connectors on the extrusions
        /// </summary>
        private void CreateConnectors()
        {
            List <PlanarFace> m_planarFaces = null;
            Parameter         param         = null;

            #region Create the Supply Air duct connector

            // get the planar faces of extrusion1
            m_planarFaces = GetPlanarFaces(extrusions[1]);

            // create the Supply Air duct connector
            //DuctConnector connSupplyAir = f.NewDuctConnector(m_planarFaces[0].Reference,
            //    DuctSystemType.SupplyAir);
            ConnectorElement connSupplyAir = ConnectorElement.CreateDuctConnector(m_document, DuctSystemType.SupplyAir, ConnectorProfileType.Rectangular, m_planarFaces[0].Reference);
            param = connSupplyAir.get_Parameter(BuiltInParameter.CONNECTOR_HEIGHT);
            param.Set(connectorDimensions[0, 0]);
            param = connSupplyAir.get_Parameter(BuiltInParameter.CONNECTOR_WIDTH);
            param.Set(connectorDimensions[0, 1]);
            param = connSupplyAir.get_Parameter(BuiltInParameter.RBS_DUCT_FLOW_DIRECTION_PARAM);
            param.Set(2);
            param = connSupplyAir.get_Parameter(BuiltInParameter.RBS_DUCT_FLOW_CONFIGURATION_PARAM);
            param.Set(1);
            param = connSupplyAir.get_Parameter(BuiltInParameter.RBS_DUCT_FLOW_PARAM);
            param.Set(flow);

            #endregion

            #region Create the Return Air duct connector

            // get the planar faces of extrusion2
            m_planarFaces = GetPlanarFaces(extrusions[2]);

            // create the Return Air duct connector
            //DuctConnector connReturnAir = f.NewDuctConnector(m_planarFaces[0].Reference,
            //    DuctSystemType.ReturnAir);
            ConnectorElement connReturnAir = ConnectorElement.CreateDuctConnector(m_document, DuctSystemType.ReturnAir, ConnectorProfileType.Rectangular, m_planarFaces[0].Reference);
            param = connReturnAir.get_Parameter(BuiltInParameter.CONNECTOR_HEIGHT);
            param.Set(connectorDimensions[1, 0]);
            param = connReturnAir.get_Parameter(BuiltInParameter.CONNECTOR_WIDTH);
            param.Set(connectorDimensions[1, 1]);
            param = connReturnAir.get_Parameter(BuiltInParameter.RBS_DUCT_FLOW_DIRECTION_PARAM);
            param.Set(1);
            param =
                connReturnAir.get_Parameter(BuiltInParameter.RBS_DUCT_FLOW_CONFIGURATION_PARAM);
            param.Set(1);
            param = connReturnAir.get_Parameter(BuiltInParameter.RBS_DUCT_FLOW_PARAM);
            param.Set(flow);

            #endregion

            #region Create the Supply Hydronic pipe connector

            // get the planar faces of extrusion3
            m_planarFaces = GetPlanarFaces(extrusions[3]);

            // create the Hydronic Supply pipe connector
            //PipeConnector connSupplyHydronic = f.NewPipeConnector(m_planarFaces[0].Reference,
            //    PipeSystemType.SupplyHydronic);
            ConnectorElement connSupplyHydronic = ConnectorElement.CreatePipeConnector(m_document, PipeSystemType.SupplyHydronic, m_planarFaces[0].Reference);
            param = connSupplyHydronic.get_Parameter(BuiltInParameter.CONNECTOR_RADIUS);
            param.Set(arcRadius);
            param =
                connSupplyHydronic.get_Parameter(BuiltInParameter.RBS_PIPE_FLOW_DIRECTION_PARAM);
            param.Set(2);

            #endregion

            #region Create the Return Hydronic pipe connector

            // get the planar faces of extrusion4
            m_planarFaces = GetPlanarFaces(extrusions[4]);

            // create the Hydronic Return pipe connector
            //PipeConnector connReturnHydronic = f.NewPipeConnector(m_planarFaces[0].Reference,
            //    PipeSystemType.ReturnHydronic);
            ConnectorElement connReturnHydronic = ConnectorElement.CreatePipeConnector(m_document, PipeSystemType.ReturnHydronic, m_planarFaces[0].Reference);
            param = connReturnHydronic.get_Parameter(BuiltInParameter.CONNECTOR_RADIUS);
            param.Set(arcRadius);
            param =
                connReturnHydronic.get_Parameter(BuiltInParameter.RBS_PIPE_FLOW_DIRECTION_PARAM);
            param.Set(1);

            #endregion
        }
예제 #17
0
        private void Stream( ArrayList data, ConnectorElement connElem )
        {
            data.Add( new Snoop.Data.ClassSeparator( typeof( ConnectorElement ) ) );

              data.Add( new Snoop.Data.Object( "Coordinate system", connElem.CoordinateSystem ) );
              data.Add( new Snoop.Data.String( "Domain", connElem.Domain.ToString() ) );
              data.Add( new Snoop.Data.Double( "Height", connElem.Height ) );
              data.Add( new Snoop.Data.Double( "Width", connElem.Width ) );
              data.Add( new Snoop.Data.Bool( "Is primary", connElem.IsPrimary ) );
              data.Add( new Snoop.Data.Object( "Linked connector", connElem.GetLinkedConnectorElement() ) );
              data.Add( new Snoop.Data.Xyz( "Origin", connElem.Origin ) );
              data.Add( new Snoop.Data.Double( "Radius", connElem.Radius ) );
              data.Add( new Snoop.Data.String( "Shape", connElem.Shape.ToString() ) );
              //data.Add(new Snoop.Data.String("System type", connElem.SystemType.ToString()));
        }
예제 #18
0
 internal bool CanAddLink(ConnectorElement connStart, ConnectorElement connEnd)
 {
     return((connStart != connEnd) && (connStart.ParentElement != connEnd.ParentElement));
 }
예제 #19
0
        void designer1_ElementsWillConnect(object sender, Designer.ElementsLinkedArgs e)
        {
            NodeElement node1 = e.Element1 as NodeElement;
            NodeElement node2 = e.Element2 as NodeElement;

            ConnectorElement connector1 = e.Connector1;
            ConnectorElement connector2 = e.Connector2;


            ElementInputType  input  = null;
            ElementOutputType output = null;

            bool inputOnRight  = false;
            bool outputOnRight = false;

            BaseLinkElement outputLink = null;

            if (e.Element1.Tag is ElementInputType)
            {
                inputOnRight = node1.Connectors[1] == connector1;
                input        = (ElementInputType)e.Element1.Tag;
            }

            if (e.Element2.Tag is ElementInputType)
            {
                inputOnRight = node2.Connectors[1] == connector2;
                input        = (ElementInputType)e.Element2.Tag;
            }

            if (e.Element1.Tag is ElementOutputType)
            {
                outputOnRight = node1.Connectors[1] == connector1;
                output        = (ElementOutputType)e.Element1.Tag;
            }

            if (e.Element2.Tag is ElementOutputType)
            {
                outputOnRight = node2.Connectors[1] == connector2;
                output        = (ElementOutputType)e.Element2.Tag;
            }

            if (input == null)
            {
                e.Cancel = true;
                MessageBox.Show("Cannot connect two outputs");
                return;
            }

            if (output == null)
            {
                e.Cancel = true;
                MessageBox.Show("Cannot connect two inputs");
                return;
            }

            if (input.InputType != output.OutputType)
            {
                e.Cancel = true;
                MessageBox.Show("Cannot connect an input of type " + input.InputType + " to an output of type " + output.OutputType);
                return;
            }

            Guid g = Guid.NewGuid();

            var lnk = new BaseElementLink {
                Input = input, InputOnLeft = !inputOnRight, Output = output, OutputOnLeft = !outputOnRight
            };

            linkedIOS.Add(g.ToString(), lnk);

            e.NewLink.Tag = lnk;
        }
예제 #20
0
파일: SectorData.cs 프로젝트: gormed/darwin
 public void EndSector(out ConnectorElement outConnector)
 {
     fightingModule = InstantiateModule(generatorSector.Fighting) as FightingModule;
     outConnector   = lastOutConnector;
 }
예제 #21
0
파일: SectorData.cs 프로젝트: gormed/darwin
    ////////////////////////////////////////////////////////////////////

    public void BeginSector(ConnectorElement outConnector)
    {
        lastOutConnector = outConnector;
        spawnModule      = InstantiateModule(generatorSector.Spawn) as SpawnModule;
    }
예제 #22
0
 internal bool CanAddLink(ConnectorElement start, ConnectorElement end)
 {
     return((start != end) && (start.ParentElement != end.ParentElement));
 }
예제 #23
0
        private static IChart ConnectorChart()
        {
            //
            //      chart.Connectors.AddConnector() 를 사용하세요
            //

            var chart = (GanttChart)MilestoneChart();

            var connector = new ConnectorElement
            {
                // FromTaskId = chart.Tasks.TaskElements[1].Id,
                // ToTaskId = chart.Tasks.TaskElements[3].Id,
                FromTaskId           = chart.Tasks[1].Id,
                ToTaskId             = chart.Tasks[3].Id,
                FromTaskConnectStart = false,
                ToTaskConnectStart   = true,
                LineAttr             =
                {
                    Thickness =    2,
                    IsDashed  = true,
                    Color     = Color.Blue
                },
            };

            // chart.Connectors.ConnectorElements.Add(connector);
            chart.Connectors.Add(connector);

            connector = new ConnectorElement
            {
                //FromTaskId = chart.Tasks.TaskElements[4].Id,
                //ToTaskId = chart.Tasks.TaskElements[6].Id,
                FromTaskId         = chart.Tasks[4].Id,
                ToTaskId           = chart.Tasks[6].Id,
                ToTaskConnectStart = true,
                LineAttr           =
                {
                    Thickness =    2,
                    IsDashed  = true,
                    Color     = Color.Red
                },
            };

            // chart.Connectors.ConnectorElements.Add(connector);
            chart.Connectors.Add(connector);

            connector = new ConnectorElement
            {
                //FromTaskId = chart.Tasks.TaskElements[6].Id,
                //ToTaskId = chart.Tasks.TaskElements[7].Id,
                FromTaskId         = chart.Tasks[6].Id,
                ToTaskId           = chart.Tasks[7].Id,
                ToTaskConnectStart = true,
                LineAttr           =
                {
                    Thickness =     2,
                    IsDashed  = false,
                    Color     = Color.DarkTurquoise
                },
            };

            // chart.Connectors.ConnectorElements.Add(connector);
            chart.Connectors.Add(connector);

            var trendline = new DateTimeLineElement
            {
                // Start = chart.Tasks.TaskElements[3].Start.Value,
                Start        = chart.Tasks[3].Start.Value,
                DisplayValue = "Today",
                Color        = "#33333".FromHtml(),
                Thickness    = 2,
                IsDashed     = false
            };

            // chart.Trendlines.TrendlineElements.Add(trendline);
            chart.Trendlines.Add(trendline);

            // TrendZone (범위)
            trendline = new DateTimeLineElement
            {
                //Start = chart.Tasks.TaskElements[5].Start.Value.AddDays(10),
                //End = chart.Tasks.TaskElements[5].Start.Value.AddDays(15),
                Start       = chart.Tasks[5].Start.Value.AddDays(10),
                End         = chart.Tasks[5].Start.Value.AddDays(15),
                IsTrendZone = true,
                //  범위를 나타냄
                DisplayValue = "Vacation",
                Color        = "#FF5904".FromHtml(),
                Alpha        = 20,
                Thickness    = 2,
                IsDashed     = false
            };

            // chart.Trendlines.TrendlineElements.Add(trendline);
            chart.Trendlines.Add(trendline);

            return(chart);
        }