public List <AcadDB.Entity> Draw() { List <AcadDB.Entity> ents = new List <AcadDB.Entity>(); if (0 == steel_pos.Count) { return(ents); } AcadGeo.Point3d tmp_line = steel_pos[0]; foreach (var sp in steel_pos) { AcadDB.Line line = new AcadDB.Line(); line.StartPoint = sp + length_line * AcadGeo.Vector3d.XAxis + length_line * AcadGeo.Vector3d.YAxis; line.EndPoint = sp - length_line * AcadGeo.Vector3d.XAxis - length_line * AcadGeo.Vector3d.YAxis; ents.Add(line); if (position.DistanceTo(sp) > position.DistanceTo(tmp_line)) { tmp_line = sp; } } ents.Add(new AcadDB.Line(position, tmp_line)); ents.Add(new AcadDB.Circle(position - AcadGeo.Vector3d.XAxis * cir_radius, AcadGeo.Vector3d.ZAxis, cir_radius)); //Draw number { AcadDB.DBText text = new AcadDB.DBText(); text.TextString = number.ToString(); text.Justify = AcadDB.AttachmentPoint.MiddleCenter; text.Height = text_height; text.WidthFactor = text_w_factor; text.AlignmentPoint = position - AcadGeo.Vector3d.XAxis * cir_radius; ents.Add(text); } //draw content { AcadDB.DBText text = new AcadDB.DBText(); text.TextString = content; text.Justify = AcadDB.AttachmentPoint.BottomLeft; text.Height = text_height; text.WidthFactor = text_w_factor; text.AlignmentPoint = position + AcadGeo.Vector3d.XAxis * 10.0 + AcadGeo.Vector3d.YAxis * 10.0; ents.Add(text); } return(ents); }
public List <AcadDB.Entity> Draw() { AcadGeo.Line3d xline = new AcadGeo.Line3d(position, AcadGeo.Vector3d.XAxis); List <AcadDB.Entity> ents = new List <AcadDB.Entity>(); AcadGeo.Point3d pnt = new AcadGeo.Point3d(position.X, position.Y, position.Z); foreach (var sp in steel_pos) { AcadGeo.Line3d steel_line = new AcadGeo.Line3d(sp, new AcadGeo.Vector3d(Math.Sin(angle), Math.Cos(angle), 0.0)); AcadGeo.Point3d[] intersected_pnts = xline.IntersectWith(steel_line); if (intersected_pnts.Length > 0) { ents.Add(new AcadDB.Line(intersected_pnts[0], sp)); if (intersected_pnts[0].DistanceTo(position) > pnt.DistanceTo(position)) { pnt = intersected_pnts[0]; } } } ents.Add(new AcadDB.Line(position, pnt)); ents.Add(new AcadDB.Circle(position - AcadGeo.Vector3d.XAxis * cir_radius, AcadGeo.Vector3d.ZAxis, cir_radius)); //draw value { AcadDB.DBText text = new AcadDB.DBText(); text.TextString = number.ToString(); text.Justify = AcadDB.AttachmentPoint.MiddleCenter; text.Height = text_height; text.WidthFactor = text_w_factor; text.AlignmentPoint = position - AcadGeo.Vector3d.XAxis * cir_radius; ents.Add(text); } //draw content { AcadDB.DBText text = new AcadDB.DBText(); text.TextString = content; text.Justify = AcadDB.AttachmentPoint.BottomLeft; text.Height = text_height; text.WidthFactor = text_w_factor; text.AlignmentPoint = position + AcadGeo.Vector3d.XAxis * 10.0 + AcadGeo.Vector3d.YAxis * 10.0; ents.Add(text); } return(ents); }
//open -> opened -> modified -> (1) tr.Dispose() -> closed -> (2) closed ( public void ClosedHandler(object sender, AcadDb.ObjectClosedEventArgs args) { using (var tr = AcadFuncs.GetActiveDb().TransactionManager.StartOpenCloseTransaction()) { AcadDb.BlockTableRecord model_space = AcadFuncs.GetModelSpace(tr); model_space.UpgradeOpen(); AcadDb.DBText text = new AcadDb.DBText(); text.Position = curr_pl.StartPoint; text.TextString = curr_pl.Length.ToString(); model_space.AppendEntity(text); tr.AddNewlyCreatedDBObject(text, true); tr.Commit(); } }
/// <summary> /// 根据参数绘制边坡。 /// </summary> /// <param name="param"></param> /// <returns></returns> public static AcDb.Entity[] MakeBianpo(BpDesignView param) { var result = new List <AcDb.Entity>(); var db = AcAp.Application.DocumentManager.MdiActiveDocument.Database; // 边坡顶点。 var vertexes = new List <Point2d>(); // 线路顶部。 vertexes.Add(new Point2d(-param.Lujiankuan * 0.5, 0)); vertexes.Add(new Point2d(param.Lujiankuan * 0.5, 0)); // 路肩宽标注。 result.Add(new AcDb.AlignedDimension( new Point3d(-param.Lujiankuan * 0.5, 1, 0), new Point3d(param.Lujiankuan * 0.5, 1, 0), new Point3d(0, 1.5, 0), null, AcDb.ObjectId.Null)); // 路肩高程标记。 var lujianTriangle = EntityHelper.CreatePolygon(new[] { -param.Lujiankuan * 0.5, 0, -param.Lujiankuan * 0.5 + 0.2, 0.4, -param.Lujiankuan * 0.5 - 0.2, 0.4, }); result.Add(lujianTriangle); result.Add(lujianTriangle.GetTransformedCopy( AcGe.Matrix3d.Displacement(Vector3d.XAxis * param.Lujiankuan))); // 路肩高程文字。 var lujianHeight = new AcDb.DBText(); lujianHeight.SetDatabaseDefaults(db); // 重要! lujianHeight.TextString = param.Lujiangaocheng.ToString("0.##"); lujianHeight.HorizontalMode = AcDb.TextHorizontalMode.TextCenter; lujianHeight.AlignmentPoint = new Point3d(-param.Lujiankuan * 0.5, 0.5, 0); lujianHeight.AdjustAlignment(db); // 重要! result.Add(lujianHeight); result.Add(lujianHeight.GetTransformedCopy( AcGe.Matrix3d.Displacement(Vector3d.XAxis * param.Lujiankuan))); // 一级边坡。 var yijipogao = param.HasErjibianpo ? param.Yijipogao : (param.Lujiangaocheng - param.Churukougaocheng); vertexes.Insert(0, vertexes.First() + new Vector2d(-yijipogao * param.Yijipolv, -yijipogao)); vertexes.Add(vertexes.Last() + new Vector2d(yijipogao * param.Yijipolv, -yijipogao)); // 一级边坡坡率。 var yjbppl = new AcDb.DBText(); yjbppl.SetDatabaseDefaults(db); // 重要! yjbppl.TextString = "1:" + param.Yijipolv.ToString("0.##"); yjbppl.HorizontalMode = AcDb.TextHorizontalMode.TextCenter; var yjbppl1 = yjbppl.Clone() as AcDb.DBText; // 右侧对称。 yjbppl.AlignmentPoint = new Point3d( -(param.Lujiankuan + yijipogao * param.Yijipolv) * 0.5, -yijipogao * 0.5 + 0.1, 0); yjbppl.Rotation = Math.Atan2(1, param.Yijipolv); yjbppl.AdjustAlignment(db); // 重要! result.Add(yjbppl); yjbppl1.AlignmentPoint = new Point3d( (param.Lujiankuan + yijipogao * param.Yijipolv) * 0.5, -yijipogao * 0.5 + 0.1, 0); yjbppl1.Rotation = -Math.Atan2(1, param.Yijipolv); yjbppl1.AdjustAlignment(db); // 重要! result.Add(yjbppl1); // 一级边坡宽度标注。 result.Add(new AcDb.AlignedDimension( new Point3d(-param.Lujiankuan * 0.5, 1, 0), new Point3d(-param.Lujiankuan * 0.5 - yijipogao * param.Yijipolv, 1, 0), new Point3d(0, 1.5, 0), null, AcDb.ObjectId.Null)); result.Add(new AcDb.AlignedDimension( new Point3d(param.Lujiankuan * 0.5, 1, 0), new Point3d(param.Lujiankuan * 0.5 + yijipogao * param.Yijipolv, 1, 0), new Point3d(0, 1.5, 0), null, AcDb.ObjectId.Null)); // 二级边坡。 if (param.HasErjibianpo) { // 1米加宽平台。 vertexes.Insert(0, vertexes.First() + new Vector2d(-1, 0)); vertexes.Add(vertexes.Last() + new Vector2d(1, 0)); // 标注。 result.Add(new AcDb.AlignedDimension( new Point3d(vertexes[0].X, vertexes[0].Y, 0), new Point3d(vertexes[1].X, vertexes[1].Y, 0), new Point3d(0, 1.5, 0), null, AcDb.ObjectId.Null)); result.Add(new AcDb.AlignedDimension( new Point3d(vertexes[vertexes.Count - 1].X, vertexes[vertexes.Count - 1].Y, 0), new Point3d(vertexes[vertexes.Count - 2].X, vertexes[vertexes.Count - 2].Y, 0), new Point3d(0, 1.5, 0), null, AcDb.ObjectId.Null)); // 二级边坡。 var erjipogao = param.HasSanjibianpo ? param.Erjipogao : (param.Lujiangaocheng - param.Churukougaocheng - yijipogao); vertexes.Insert(0, vertexes.First() + new Vector2d(-erjipogao * param.Erjipolv, -erjipogao)); vertexes.Add(vertexes.Last() + new Vector2d(erjipogao * param.Erjipolv, -erjipogao)); // 二级边坡坡率。 var ejbppl = new AcDb.DBText(); ejbppl.SetDatabaseDefaults(db); // 重要! ejbppl.TextString = "1:" + param.Erjipolv.ToString("0.##"); ejbppl.HorizontalMode = AcDb.TextHorizontalMode.TextCenter; var ejbppl1 = ejbppl.Clone() as AcDb.DBText; // 右侧对称。 ejbppl.AlignmentPoint = new Point3d( -param.Lujiankuan * 0.5 - yijipogao * param.Yijipolv - 1 - erjipogao * param.Erjipolv * 0.5, -yijipogao - erjipogao * 0.5 + 0.1, 0); ejbppl.Rotation = Math.Atan2(1, param.Erjipolv); ejbppl.AdjustAlignment(db); // 重要! result.Add(ejbppl); ejbppl1.AlignmentPoint = new Point3d( param.Lujiankuan * 0.5 + yijipogao * param.Yijipolv + 1 + erjipogao * param.Erjipolv * 0.5, -yijipogao - erjipogao * 0.5 + 0.1, 0); ejbppl1.Rotation = -Math.Atan2(1, param.Erjipolv); ejbppl1.AdjustAlignment(db); // 重要! result.Add(ejbppl1); // 二级边坡宽度标注。 result.Add(new AcDb.AlignedDimension( new Point3d(-param.Lujiankuan * 0.5 - yijipogao * param.Yijipolv - 1, 1, 0), new Point3d(-param.Lujiankuan * 0.5 - yijipogao * param.Yijipolv - 1 - erjipogao * param.Erjipolv, 1, 0), new Point3d(0, 1.5, 0), null, AcDb.ObjectId.Null)); result.Add(new AcDb.AlignedDimension( new Point3d(param.Lujiankuan * 0.5 + yijipogao * param.Yijipolv + 1, 1, 0), new Point3d(param.Lujiankuan * 0.5 + yijipogao * param.Yijipolv + 1 + erjipogao * param.Erjipolv, 1, 0), new Point3d(0, 1.5, 0), null, AcDb.ObjectId.Null)); } // TODO 三级边坡。 result.Add(EntityHelper.CreatePolygon( vertexes.SelectMany(p2d => p2d.ToArray()).ToArray(), closed: false)); return(result.ToArray()); }