gisempire100
捉鬼专家
捉鬼专家
  • 注册日期2004-08-13
  • 发帖数552
  • QQ
  • 铜币2462枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1830回复:0

创建合理位置的线标注

楼主#
更多 发布于:2008-04-01 23:33
<P>有时候在AutoCad成图的过程中,需要为线创建合理位置的标注,这个合理位置不同的人可能有不同的理解,或者是不同的项目有不同的需要,就看个人所需了。我这里的合理位置其实就是标注顺着线的方向,标注底部与线有适当的距离,标注的总体位置居于线段的中央。如图:<BR><IMG src="http://www.cnblogs.com/images/cnblogs_com/figo/5.jpg" border=0><BR>思路很简单,先计算两点的中央点座标,再计算线段的旋转角,最后根据旋转角和标记离线段距离计算出标注点的座标。<BR>线的正方向为从下往上。负方向则将旋转角加PI。<BR>代码如下: </P>
<DIV >/// <summary><BR>        /// 计算旋转角<BR>        /// </summary><BR>        /// <param name="x1">起点X座标</param><BR>        /// <param name="y1">起点Y座标</param><BR>        /// <param name="x2">终点X座标</param><BR>        /// <param name="y2">终点Y座标</param><BR>        /// <returns>旋转角</returns><BR>        private double CountRotation(double x1,double y1,double x2,double y2)<BR>        {<BR>            double rotation = 0;<BR>            double k = 0;<BR>            if (x2 == x1)<BR>            {<BR>                k = 1;<BR>                rotation = Math.PI / 2;<BR>            }<BR>            else<BR>            {<BR>                k = (y2 - y1) / (x2 - x1);<BR>                if (k>=0)<BR>                {<BR>                    rotation = Math.Atan(k);<BR>                }<BR>                else<BR>                {<BR>                    rotation = Math.Atan(k)+Math.PI;<BR>                }<BR>            }<BR>            <BR>            return rotation;<BR>        }</DIV>
<DIV >/// <summary><BR>        /// 生成线标注<BR>        /// </summary><BR>        /// <param name="x">中央点X</param><BR>        /// <param name="y">中央点Y</param><BR>        /// <param name="z">中央点Z</param><BR>        /// <param name="text">标注文字</param><BR>        /// <returns>ObjectId</returns><BR>        private ObjectId CreateLineText(double x,double y,double z,double rotation, string text)<BR>        {<BR>            ObjectId textId;<BR>            Database db = HostApplicationServices.WorkingDatabase;<BR>            using (Transaction trans = db.TransactionManager.StartTransaction())<BR>            {<BR>                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead, false);<BR>                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);<BR>                Point3d point = new Point3d(x - 0.5 * Math.Sin(rotation), y + 0.5 * Math.Cos(rotation), z);<BR>                DBText objDBText = new DBText();<BR>                //HorizontalMode与VerticalMode非默认值时设置AlignmentPoint<BR>                objDBText.HorizontalMode = TextHorizontalMode.TextCenter;<BR>                objDBText.AlignmentPoint = point;<BR>                objDBText.Rotation = rotation;<BR>                objDBText.TextString = text;<BR>                objDBText.Height = 1;<BR>                textId = btr.AppendEntity(objDBText);<BR>                trans.AddNewlyCreatedDBObject(objDBText, true);<BR>                trans.Commit();<BR>            }<BR>            return textId;<BR>        }</DIV>
喜欢0 评分0
A friend is never known till a man has need. ...CL
游客

返回顶部