revit二次开发-1.取消选点操作报异常,如何提前预防?2.PickPoint()如何只在选中的架构上才可以取点?

不用回滚事务,有没有什么办法可以提前判断有没有选择点

public Result Execute(Autodesk.Revit.UI.ExternalCommandData commandData, ref string msg, ElementSet elems)
        {
            Document document = commandData.Application.ActiveUIDocument.Document;
            Transaction transaction = new Transaction(document);
            Selection selection = commandData.Application.ActiveUIDocument.Selection;
            SelectionlinkFilter sl = new SelectionlinkFilter();
            try
            {
                //选择元素
                transaction.Start("Create Circle");
                var referenceObject = selection.PickObject(ObjectType.Element, "请选择一个圆弧");
                m_Selectid = referenceObject.ElementId.ToString();
                if (referenceObject == null)
                {
                    TaskDialog.Show("Revit", "你没有选任何元素.");
                }
                else
                {     
                    var reference = referenceObject;
                    var elem = document.GetElement(reference);
                    string type = elem.GetType().ToString();
                    if (type == "Autodesk.Revit.DB.ModelArc")
                    {
                        XYZ[] arrpoint = new XYZ[3];//用于存储点
                        using (selection)
                        {
                            arrpoint[0] = selection.PickObject(ObjectType.Element, new SelectionlinkFilter(), "请选择点1").GlobalPoint;
                            arrpoint[1] = selection.PickObject(ObjectType.Element, new SelectionlinkFilter(), "请选择点2").GlobalPoint;
                            arrpoint[2] = selection.PickObject(ObjectType.Element, new SelectionlinkFilter(), "请选择点3").GlobalPoint;
                        }
                        SketchPlane modelSketch = SketchPlane.Create(document, commandData.Application.Application.Create.NewPlane(XYZ.BasisZ, XYZ.Zero));
                        Arc arc = Arc.Create(arrpoint[0], arrpoint[1], arrpoint[2]);//圆弧
                        ModelCurve modelCurve = document.Create.NewModelCurve(arc, modelSketch);//绘制圆弧
                        transaction.Commit();//提交
                    }
                    else
                    {
                        TaskDialog.Show("Revit", "该图形不是圆弧");
                        transaction.RollBack();//回滚
                    }
                }
            }
            catch (Exception)
            {
                transaction.RollBack();//回滚
                return Autodesk.Revit.UI.Result.Failed;//失败
            }
            return Autodesk.Revit.UI.Result.Succeeded;//成功
        }

另外PickPoint()怎么做到只有在选中的架构上才可以操作(取点)?,鼠标滑倒其他地方则不可以取点?

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。