Exemple #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));
        }
Exemple #2
0
        /// <summary>
        /// Changes selected issue marker in given document's tracking
        /// </summary>
        /// <param name="document">A Revit document</param>
        /// <param name="controlIndex">Id of the clicked In-Canvas control</param>
        public static void SelectMarker(Document document, int controlIndex)
        {
            TemporaryGraphicsManager tempGraphicsManager = TemporaryGraphicsManager.GetTemporaryGraphicsManager(document);
            IssueMarkerTracking      issueMarkerTracking = IssueMarkerTrackingManager.GetInstance().GetTracking(document);
            ResourceProvider         provider            = ResourceProvider.GetInstance();

            // Check if the new selection is valid
            IssueMarker newSelectedMarker = issueMarkerTracking.GetMarkerByIndex(controlIndex);

            if (newSelectedMarker == null)
            {
                return;
            }

            // clear previous selection
            IssueMarker selectedMarker = issueMarkerTracking.GetMarkerByIndex(issueMarkerTracking.GetSelected());

            if (selectedMarker != null)
            {
                selectedMarker.InCanvasControlData.ImagePath = provider.IssueImage;

                // This is how to set updated data to a control
                tempGraphicsManager.UpdateControl(selectedMarker.ControlIndex, selectedMarker.InCanvasControlData);

                issueMarkerTracking.SetSelected(-1);
            }

            if (newSelectedMarker != selectedMarker)
            {
                newSelectedMarker.InCanvasControlData.ImagePath = provider.SelectedIssueImage;

                // This is how to set updated data to a control
                tempGraphicsManager.UpdateControl(newSelectedMarker.ControlIndex, newSelectedMarker.InCanvasControlData);

                issueMarkerTracking.SetSelected(controlIndex);
            }
        }