private void MapPorts(FamilyInstance fi) { parameterMap.Clear(); foreach (Parameter p in fi.Parameters) { if (!p.IsReadOnly) //don't want it if it is read only { if (p.StorageType == StorageType.Double) { string paramName = p.Definition.Name; PortData pd = new PortData(null, p.Definition.Name[0].ToString(), paramName, typeof(dynDouble)); InPortData.Add(pd); parameterMap.Add(paramName, pd.Object); } } } //add back new ports for (int i = 1; i < InPortData.Count; i++) { dynElement el = InPortData[i].Object as dynElement; RowDefinition rd = new RowDefinition(); gridLeft.RowDefinitions.Add(rd); //add a port for each input //distribute the ports along the //edges of the icon AddPort(el, PortType.INPUT, InPortData[i].NickName, i); } //resize this thing base.ResizeElementForInputs(); base.SetToolTips(); }
public dynConnector(dynElement start, dynElement end, int startIndex, int endIndex, int portType) { //this.workBench = settings.WorkBench; //if (start != null && end != null && start != end) //{ //in the start element, find the out port at the startIndex pStart = start.OutPorts[startIndex]; dynPort endPort = null; if (portType == 0) endPort = end.InPorts[endIndex]; else if (portType == 1) endPort = end.StatePorts[endIndex]; //connect the two ports //get start point pStart.Connect(this); #region bezier creation connector = new Path(); connector.Stroke = Brushes.Black; connector.StrokeThickness = STROKE_THICKNESS; connector.Opacity = .8; DoubleCollection dashArray = new DoubleCollection(); dashArray.Add(5); dashArray.Add(2); connector.StrokeDashArray = dashArray; PathGeometry connectorGeometry = new PathGeometry(); connectorPoints = new PathFigure(); connectorCurve = new BezierSegment(); connectorPoints.StartPoint = new Point(pStart.Center.X, pStart.Center.Y); connectorCurve.Point1 = connectorPoints.StartPoint; connectorCurve.Point2 = connectorPoints.StartPoint; connectorCurve.Point3 = connectorPoints.StartPoint; connectorPoints.Segments.Add(connectorCurve); connectorGeometry.Figures.Add(connectorPoints); connector.Data = connectorGeometry; dynElementSettings.SharedInstance.Workbench.Children.Add(connector); #endregion isDrawing = true; //set this to not draggable Dynamo.Controls.DragCanvas.SetCanBeDragged(this, false); Dynamo.Controls.DragCanvas.SetCanBeDragged(connector, false); //set the z order to the front Canvas.SetZIndex(this, 300); this.Connect(endPort); //} }
void SetState(dynElement el, ElementState state) { el.State = state; }
public dynElementUpdateEventArgs(dynElement element) { this.element = element; }
/// <summary> /// The build method is called back from the child class. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void Build(object sender, EventArgs e) { dynElement el = sender as dynElement; bool useTransaction = true; object[] attribs = el.GetType().GetCustomAttributes(typeof(RequiresTransactionAttribute), false); if (attribs.Length > 0) { if ((attribs[0] as RequiresTransactionAttribute).RequiresTransaction == false) { useTransaction = false; } } #region using transaction if (useTransaction) { Transaction t = new Transaction(dynElementSettings.SharedInstance.Doc.Document, el.GetType().ToString() + " update."); TransactionStatus ts = t.Start(); try { FailureHandlingOptions failOpt = t.GetFailureHandlingOptions(); failOpt.SetFailuresPreprocessor(dynElementSettings.SharedInstance.WarningSwallower); t.SetFailureHandlingOptions(failOpt); el.Destroy(); el.Draw(); UpdateLayoutDelegate uld = new UpdateLayoutDelegate(CallUpdateLayout); Dispatcher.Invoke(uld, System.Windows.Threading.DispatcherPriority.Background, new object[] { el }); elementsHaveBeenDeleted = false; ts = t.Commit(); } catch (Exception ex) { Debug.WriteLine(ex.Message + " : " + ex.StackTrace); dynElementSettings.SharedInstance.Bench.Log(ex.Message); SetToolTipDelegate sttd = new SetToolTipDelegate(SetTooltip); Dispatcher.Invoke(sttd, System.Windows.Threading.DispatcherPriority.Background, new object[] { ex.Message }); MarkConnectionStateDelegate mcsd = new MarkConnectionStateDelegate(MarkConnectionState); Dispatcher.Invoke(mcsd, System.Windows.Threading.DispatcherPriority.Background, new object[] { true }); if (ts == TransactionStatus.Committed) { t.RollBack(); } t.Dispose(); dynElementSettings.SharedInstance.Writer.WriteLine(ex.Message); dynElementSettings.SharedInstance.Writer.WriteLine(ex.StackTrace); } try { el.UpdateOutputs(); } catch (Exception ex) { //Debug.WriteLine("Outputs could not be updated."); dynElementSettings.SharedInstance.Bench.Log("Outputs could not be updated."); if (ts == TransactionStatus.Committed) { t.RollBack(); } t.Dispose(); dynElementSettings.SharedInstance.Writer.WriteLine(ex.Message); dynElementSettings.SharedInstance.Writer.WriteLine(ex.StackTrace); } } #endregion #region no transaction if (!useTransaction) { try { el.Destroy(); el.Draw(); UpdateLayoutDelegate uld = new UpdateLayoutDelegate(CallUpdateLayout); Dispatcher.Invoke(uld, System.Windows.Threading.DispatcherPriority.Background, new object[] { el }); elementsHaveBeenDeleted = false; } catch (Exception ex) { Debug.WriteLine(ex.Message + " : " + ex.StackTrace); dynElementSettings.SharedInstance.Bench.Log(ex.Message); SetToolTipDelegate sttd = new SetToolTipDelegate(SetTooltip); Dispatcher.Invoke(sttd, System.Windows.Threading.DispatcherPriority.Background, new object[] { ex.Message }); MarkConnectionState(true); dynElementSettings.SharedInstance.Writer.WriteLine(ex.Message); dynElementSettings.SharedInstance.Writer.WriteLine(ex.StackTrace); } try { el.UpdateOutputs(); } catch (Exception ex) { //Debug.WriteLine("Outputs could not be updated."); dynElementSettings.SharedInstance.Bench.Log("Outputs could not be updated."); dynElementSettings.SharedInstance.Writer.WriteLine(ex.Message); dynElementSettings.SharedInstance.Writer.WriteLine(ex.StackTrace); } } #endregion }