DBText 和 MText互转

 

        [CommandMethod("MTtoDB")]
        public void MTextToDBText()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTableRecord btr = (BlockTableRecord)tran.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead);

                //Create a 'static' list of the BlockIds, before altering the BlockTableRecord with adding/removing entities
                foreach (ObjectId id in btr.Cast<ObjectId>().ToList())
                {
                   DBText text = null; 
                   MText mText = null; 

                   ///You can find the EntityType without opening the ID with GetObject
                    //Entity ent = tran.GetObject(id, OpenMode.ForWrite, false) as Entity;
                    //if (ent != null && ent.GetType() == typeof(MText))
                    if (id.ObjectClass.DxfName == "MTEXT")
                    {
                        text = tran.GetObject(id, OpenMode.ForRead, false) as DBText;
                        mText = new MText();
                        mText.SetDatabaseDefaults(db);
                        //Copy the DBText properties to the MText entity
                        mText.Contents = text.TextString;
                        mText.Location = text.Position;
                        //...

                        text.UpgradeOpen();
                        text.Erase();
                    }
                    //if (ent != null && ent.GetType() == typeof(DBText))
                    else if (id.ObjectClass.DxfName == "TEXT")
                    {

                        mText = tran.GetObject(id, OpenMode.ForRead, false) as MText;
                        text = new DBText();
                        //Copy the MText properties to the DBText entity
                        text.TextString = mText.Contents;
                        text.Position = mText.Location;
                        //....
                        mText.UpgradeOpen();
                        mText.Erase();
                    }
                }

                tran.Commit();
            }
        }
[CommandMethod("MTextToText")]
public static void MTextToText()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            try
            {
                using (Transaction tran = db.TransactionManager.StartTransaction())
                {
                    BlockTableRecord btr = (BlockTableRecord)tran.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForWrite);  
                    foreach (ObjectId id in btr.Cast<ObjectId>().ToList())
                    {
                        DBText text = null;
                        MText mText = null;

                        if (id.ObjectClass.DxfName == "MTEXT")
                        {
                            mText = tran.GetObject(id, OpenMode.ForRead, false) as MText;
                            text = new DBText();
                            text.TextString = mText.Contents;
                            text.Position = mText.Location;
                            text.Layer = mText.Layer;
                            text.Color = mText.Color;
                            text.Height = mText.TextHeight;
                            btr.AppendEntity(text);
                            tran.AddNewlyCreatedDBObject(text, true);
                            mText.UpgradeOpen();
                            mText.Erase();
                        }   //Chưa xử lý lỗi cho font "Times New Roman"
                    }
                    tran.Commit();
                }
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                Application.ShowAlertDialog(ex.ToString());
            }
        }

// Counterwork for "TextToMText"

 

帮我把一下lisp代码转成C#,实现相同的功能:(vl-load-com) ; 加载VL函数 (setq source_text nil) ; 设源文字为全局变量 (defun c:22 (/ en en_data en1 en1_data ent entype i ob pt ss ss_data) (setvar "cmdecho" 0) (setvar "ErrNo" 0) (command "_.undo" "begin") (if (= source_text nil) (if (setq en (nentsel "\n请选择源文字(右键退出):")) (setq en_data (entget (car en)) entype (cdr (assoc 0 en_data)) source_text (if (= entype "ATTDEF")(cdr (assoc 2 en_data))(cdr (assoc 1 en_data)));如果是属性字,则取“标记”为源文字 ) ) (if (and (= (setq en (nentsel (strcat "\n请选择源文字: 默认:" source_text))) nil) (= (getvar "ErrNo") 52)) (setvar "ErrNo" 0) (if en (setq en_data (entget (car en)) entype (cdr (assoc 0 en_data)) source_text (if (= entype "ATTDEF")(cdr (assoc 2 en_data))(cdr (assoc 1 en_data))) ) (setvar "ErrNo" 52) ) ) ) (prompt "\n请选择要修改内容的文字:") (while (/= (getvar "ErrNo") 52) (prompt (strcat "\n文字内容将被刷成:" source_text)) (if (and (setq ss (ssget ":S" '((0 . "*TEXT,TCH_DRAWINGNAME,TCH_ELEVATION,INSERT,ATTDEF,ATTRIB")))) source_text) (progn (if (= (caar (setq ss_data (ssnamex ss 0))) 1) (progn ; 点选时 (setq ent (ssname ss 0) pt (cadr (last (car ss_data))) en1 (car (nentselp pt)) en1_data (entget en1) entype (cdr (assoc 0 en1_data)) ob (vlax-ename->vla-object en1) ) (wenzishua entype ob source_text en1 ent) (princ) ) (progn ; 框选时 (setq i 0) (repeat (sslength ss) (setq en1 (ssname ss i) ent en1 en1_data (entget en1) entype (cdr (assoc 0 en1_data)) ob (vlax-ename->vla-object en1) ) (wenzishua entype ob source_text en1 ent) (setq i (1+ i)) ) ; end repeat ) ) ) ) ) ; end while (command ".undo" "_end") (setvar "ErrNo" 0) (setvar "cmdecho" 1) (princ) ) (defun wenzishua (entype ob source_text en1 ent) ; cad文字的内容格式刷 (if (or (= entype "TEXT") (= entype "MTEXT") ) (progn (vla-put-TextString ob source_text) (entupd en1) (entupd ent) ) ) ; 天正文字的内容格式刷 (if (or (= entype "TCH_TEXT") (= entype "TCH_ELEVATION") ) (progn (vlax-put-property ob 'Text source_text) (entupd en1) (entupd ent) ) ) ; 天正图名、标高的内容格式刷 (if (= entype "TCH_DRAWINGNAME") (progn (vlax-put-property ob 'NameText source_text) (entupd en1) (entupd ent) ) ) ; 属性文字 只改"标记" (if (= entype "ATTDEF") (progn (vla-put-TagString ob source_text);改标记 (entupd en1) (entupd ent) ) ) ; 块中属性文字 只改"默认" (if (= entype "ATTRIB") (progn (vla-put-TextString ob source_text);改默认 (entupd en1) (entupd ent) ) ) )
06-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值