예제 #1
0
        /// <summary> <seealso cref="CommandDescription"/> </summary>
        public ExternalCmdResult EditEntityAnnotation(DocumentModifier docMdf, SelectionSet impliedSelection)
        {
            _docMdf = docMdf;
            //
            var ent = AddinManagerDebuger.PickObject <Entity>(docMdf.acEditor, "查看任意一个元素的注释");

            if (ent == null)
            {
                return(ExternalCmdResult.Cancel);
            }
            //
            AnnotationEntity.SetAppName(docMdf);
            var annoEnt = new AnnotationEntity(ent);
            var annots  = annoEnt.ExtractAnnotsFromXdata();

            //
            annoEnt.WriteAnnotationsOnEditor(docMdf);
            // 如果只有一行注释信息,则直接在Editor中编辑即可
            if (annots.Count <= 1)
            {
                bool   clearAnnot  = false;
                bool   editInForm  = false;
                bool   setNewValue = false;
                string newAnno     = null;
                var    succ        = GetAnnotationsKey(docMdf.acEditor, out clearAnnot, out editInForm, out setNewValue,
                                                       out newAnno);
                if (!succ)
                {
                    return(ExternalCmdResult.Cancel);
                }
                //
                if (clearAnnot)
                {
                    annoEnt.ClearAnnotations();
                }
                else if (editInForm)
                {
                }
                else if (setNewValue)
                {
                    newAnno = annots.Count == 0 ? "" : annots[0];
                    succ    = GetAnnotations(docMdf.acEditor, ref newAnno);
                    if (!succ)
                    {
                        return(ExternalCmdResult.Cancel);
                    }
                    annoEnt.SetAnnotsToXdata(newAnno);
                }
                else
                {
                    // 输入的为一般性的字符
                    // 如果为空,则保持原属性不变
                    if (!string.IsNullOrEmpty(newAnno))
                    {
                        annoEnt.SetAnnotsToXdata(newAnno);
                    }
                }
                // 新的属性值
                annoEnt.WriteAnnotationsOnEditor(docMdf);
            }
            else
            {
                // 要创建出一个窗口以进行编辑
            }
            //
            return(ExternalCmdResult.Commit);
        }
예제 #2
0
        // 开始具体的调试操作
        private ExternalCmdResult CreateViewport(DocumentModifier docMdf, SelectionSet impliedSelection)
        {
            _docMdf = docMdf;

            //// var vp1 = AddinManagerDebuger.PickObject<Entity>(docMdf.acEditor);
            //var hd = Utils.ConvertToHandle("AA07");
            //var vp2 = hd.GetObjectId(docMdf.acDataBase).GetObject(OpenMode.ForRead) as Viewport;
            //vp2.UpgradeOpen();
            //var lot = LayoutManager.Current.GetLayoutId("NewLayout4011").GetObject(OpenMode.ForRead) as Layout;
            //vp2.RotateViewport(_docMdf, lot, new Point2d(0, 0), 30.0 / 180 * Math.PI);

            //return ExternalCmdResult.Commit;
            // 从模型空间中获取视口裁剪框
            var     pl_Model      = AddinManagerDebuger.PickObject <Curve>(docMdf.acEditor);
            Point3d bottomLeftPt  = default(Point3d);
            Point3d bottomRightPt = default(Point3d);
            double  bottomLength  = 0;
            var     succ          = GraphicalElementsSelector.GetPoint(docMdf.acEditor, "选择图纸的左下角点", out bottomLeftPt);

            if (!succ)
            {
                return(ExternalCmdResult.Cancel);
            }
            succ = GraphicalElementsSelector.GetPoint(docMdf.acEditor, "选择图纸的右下角点", out bottomRightPt);
            if (!succ)
            {
                return(ExternalCmdResult.Cancel);
            }
            succ = GraphicalElementsSelector.GetDouble(docMdf.acEditor, "图纸宽度(布局空间的单位)", out bottomLength,
                                                       defaultValue: 420, allowNegative: false);
            if (!succ)
            {
                return(ExternalCmdResult.Cancel);
            }

            var modelUcs = docMdf.acEditor.GetCurrentView().Ucs;

            // 打开布局
            var               lm = LayoutManager.Current;
            Layout            layout;
            ObjectId          layoutId;
            Form_LayoutLister f = new Form_LayoutLister(docMdf);

            f.ShowDialog();
            if (f.CreateNewLayout)
            {
                var layoutName = "NewLayout" + DateTime.Now.Minute + DateTime.Now.Second;
                layoutId = lm.GetLayoutId(layoutName);
                if (!layoutId.IsValid)
                {
                    // 重启事务
                    docMdf.RestartTransaction(commitCancel: false);
                    //
                    layoutId = LayoutUtil.CreateLayout(layoutName);
                    layout   = layoutId.GetObject(OpenMode.ForRead) as Layout;
                    //
                    LayoutUtil.SetPlotSettings(layout, "A3", "monochrome.ctb", "交通院道路室 121");
                }
                else
                {
                    layout = LayoutManager.Current.GetLayoutId(name: layoutName).GetObject(OpenMode.ForRead) as Layout;
                }
            }
            else if (f.Layout != null)
            {
                layout = f.Layout;
            }
            else
            {
                return(ExternalCmdResult.Cancel);
            }

            // 创建视口
            lm.SetCurrentLayoutId(layout.Id);
            CreateViewport(docMdf, modelUcs, layout, pl_Model, bottomLeftPt, bottomRightPt, bottomLength);
            // LayoutUtil.SwitchLayout();
            return(ExternalCmdResult.Commit);
        }