找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1171|回复: 3

[求助]:急请教:我插入文字时,文字的位置不对?

[复制链接]
发表于 2005-9-21 14:09:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
用的是:C#.NET开发CAD2006;
开始用的是DOTNETARX,文字不能通过text.Position来定位。
后来不用DOTNETARX,改用C#托管类,还是不行。

请知道原因的朋友给我指点一下。
先谢过。
我的代码是这样的:

/// <summary>
                /// 插入文字到数据库中(模型空间)
                /// </summary>
                /// <param name="textstr">加入的文字</param>
                /// <param name="position">文字的位置</param>
                /// <param name="styleName">文字的样式名称,作为函数TextStyleId的参数</param>
                /// <param name="rotation">文字转角</param>
                /// <param name="horizontalMode">水平对齐方式:0--居中;-1--左对齐;1--右对齐</param>
                /// <param name="verticalMode">竖直对齐方式:0--居中;-1--上对齐;1--下对齐</param>
                /// <returns></returns>
public ObjectId insertText(string textstr,Point3d position,string styleName,double rotation,int horizontalMode,int verticalMode)
                {
                        ObjectId textId;
                        Database db=Application.DocumentManager.MdiActiveDocument.Database;
                        DBTransMan tm=db.TransactionManager;
                        using(Transaction trans=tm.StartTransaction())
                        {
                                BlockTable bt=(BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead,false);
                                BlockTableRecord btr=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite,false);
                                DBText text=new DBText();
                                text.TextString=textstr;
                                text.AlignmentPoint=position;
                                text.Position=position;
                                text.TextStyle=TextStyleId(styleName);
                                text.Rotation=rotation;
                                switch(horizontalMode)
                                {
                                        case 0:
                                                text.HorizontalMode=TextHorizontalMode.TextCenter;
                                                break;
                                        case -1:
                                                text.HorizontalMode=TextHorizontalMode.TextLeft;
                                                break;
                                        default:
                                                text.HorizontalMode=TextHorizontalMode.TextRight;
                                                break;
                                }
                                switch(verticalMode)
                                {
                                        case 0:
                                                text.VerticalMode=TextVerticalMode.TextVerticalMid;
                                                break;
                                        case -1:
                                                text.VerticalMode=TextVerticalMode.TextTop;
                                                break;
                                        default:
                                                text.VerticalMode=TextVerticalMode.TextBottom;
                                                break;
                                }
                                textId=btr.AppendEntity(text);
                                trans.AddNewlyCreatedDBObject(text,true);
                                trans.Commit();
                                trans.Dispose();
                        }
                        return textId;
                }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1个

财富等级: 恭喜发财

发表于 2005-9-28 14:12:05 | 显示全部楼层

  1. AcDbObjectId  createText(AcGePoint3d pt,CString strText,
  2.                                 char *pStyleName,double Height,double dWidth,
  3.                                 double rotation,char *pLayerName,AcDb::TextVertMode vMode,
  4.                                 AcDb::TextHorzMode hMode)
  5. {
  6.         AcDbTextStyleTable *pTextStyleTable;
  7.         AcDbObjectId objId,styleId;
  8.         char text[255];

  9.     acdbHostApplicationServices()->workingDatabase()
  10.         ->getSymbolTable(pTextStyleTable, AcDb::kForRead);

  11.         if (!pTextStyleTable->has(pStyleName)){
  12.                 pTextStyleTable->close();
  13.                 createTextStyle(pStyleName,"romanc.shx","hzdx.shx",Height,1.0,0.0,1.0);
  14.             acdbHostApplicationServices()->workingDatabase()
  15.                     ->getSymbolTable(pTextStyleTable, AcDb::kForRead);
  16.         }
  17.         if (pTextStyleTable->has(pStyleName)){
  18.                 pTextStyleTable->getAt(pStyleName,styleId,Adesk::kFalse);
  19.                 //&acute;&acute;&frac12;¨&Icirc;&Auml;×&Ouml;
  20.                 AcDbBlockTable *pBlockTable;
  21.                 acdbHostApplicationServices()->workingDatabase()
  22.                         ->getSymbolTable(pBlockTable,AcDb::kForRead);
  23.                 AcDbBlockTableRecord *pSpace;
  24.                 pBlockTable->getAt(ACDB_MODEL_SPACE,pSpace,AcDb::kForWrite);
  25.                 pBlockTable->close();

  26.             strcpy(text,strText);
  27.                 AcDbText *pText = new
  28.                         AcDbText(pt,text,styleId,Height,rotation);
  29.                 if(dWidth != 1.0)pText->setWidthFactor(dWidth);
  30.                 pText->setLayer(pLayerName);
  31.                 pText->setVerticalMode(vMode);
  32.                 pText->setHorizontalMode(hMode);
  33.                 pText->setAlignmentPoint(pt);
  34.                 pSpace->appendAcDbEntity(objId,pText);
  35.                 pText->close();
  36.                 pSpace->close();
  37.                 pBlockTable->close();

  38.                 pText = NULL;
  39.         }

  40.     pTextStyleTable->close();
  41.         return objId;
  42. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-29 13:12:33 | 显示全部楼层
如果不说左对齐要用dxf11来设置对齐点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-8-5 10:46:03 | 显示全部楼层
pText->setVerticalMode(vMode);
                pText->setHorizontalMode(hMode);
                pText->setAlignmentPoint(pt);
中顺序要注意!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-24 06:28 , Processed in 0.368224 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表