Exemplo n.º 1
0
        /// <summary>
        /// Creates an issue marker. It also creates an In-Canvas control on given element's position.
        /// </summary>
        /// <param name="document">Document in which the tracked element is.</param>
        /// <param name="elementId">Tracked element id.</param>
        /// <returns>IssueMarker created from data</returns>
        public static IssueMarker Create(Document document, ElementId elementId)
        {
            ResourceProvider resourceProvider = ResourceProvider.GetInstance();

            // Prepare InCanvasControlData. It needs position and image path.
            // In this example, all controls will share the same image - though it is possible to create controls with different images, or even change it via an update (see IssueMarkerSelector::SelectMarker).
            Element elementTracked = document.GetElement(elementId);

            XYZ elementLocation = new XYZ();

            if (elementTracked.Location is LocationPoint pointLoc)
            {
                elementLocation = pointLoc.Point;
            }
            else if (elementTracked.Location is LocationCurve curveLoc)
            {
                elementLocation = curveLoc.Curve.GetEndPoint(0);
            }

            InCanvasControlData inCanvasControlData = new InCanvasControlData(resourceProvider.IssueImage, elementLocation);

            // Create In-Canvas control
            TemporaryGraphicsManager manager = TemporaryGraphicsManager.GetTemporaryGraphicsManager(document);
            int controlIndex = manager.AddControl(inCanvasControlData, ElementId.InvalidElementId);

            return(new IssueMarker(elementId, controlIndex, inCanvasControlData));
        }
        /// <summary>
        /// Perform updates on in-canvas controls.
        /// In this example, the In-Canvas controls will be deleted, or have their positions changed, depending on the changes to related elements.
        /// </summary>
        /// <param name="data">Data about changes in the document.</param>
        public static void Execute(DocumentChangedEventArgs data)
        {
            Document doc = data.GetDocument();
            TemporaryGraphicsManager temporaryGraphicsManager = TemporaryGraphicsManager.GetTemporaryGraphicsManager(doc);
            IssueMarkerTracking      tracking = IssueMarkerTrackingManager.GetInstance().GetTracking(doc);

            foreach (ElementId deleted in data.GetDeletedElementIds())
            {
                if (tracking.GetMarkerByElementId(deleted) is IssueMarker marker)
                {
                    // This is how to delete control
                    temporaryGraphicsManager.RemoveControl(marker.ControlIndex);

                    // Don't forget to clean up your own data
                    tracking.RemoveMarkerByElement(deleted);
                }
            }

            foreach (ElementId updated in data.GetModifiedElementIds())
            {
                if (tracking.GetMarkerByElementId(updated) is IssueMarker marker)
                {
                    Element element = doc.GetElement(updated);

                    // Since we keep a copy of InCanvasControlData, we can avoid creating a new one. It already has image and position set - and we can just change the position
                    InCanvasControlData controlData = marker.InCanvasControlData;
                    if (element.Location is LocationPoint pointLoc)
                    {
                        controlData.Position = pointLoc.Point;
                    }
                    else if (element.Location is LocationCurve curveLoc)
                    {
                        controlData.Position = curveLoc.Curve.GetEndPoint(0);
                    }

                    marker.InCanvasControlData = controlData;

                    // This is how to set updated data to a control
                    temporaryGraphicsManager.UpdateControl(marker.ControlIndex, marker.InCanvasControlData);
                }
            }
        }
Exemplo n.º 3
0
 private IssueMarker(ElementId elementId, int controlIndex, InCanvasControlData inCanvasControlData)
 {
     this.elementId    = elementId;
     this.controlIndex = controlIndex;
     inCanvasData      = inCanvasControlData;
 }