旋转类三维实体的创建
2010-12-06 16:48:45| 分类: AutoCAD.NET二次 | 标签:revolve region |字号大中小 订阅
前面介绍了通过对面域的创建实现了三维实体的拉伸,虽然这种方式能创建出很多比较复杂的三维实体,但显然还不够,许多零件,例如轴类,绝大部分都是用车床加工出来的,这类零件沿轴线方向上的图形是变化的,而且还不连续,这个时候采用拉升将是一个不明智的选择,因为这会涉及到多次创建面域及拉伸、并集的运算,如果采用旋转的方式将会大大简化模型创建。
采用旋转方式创建三维实体可以采用Solid3d类中的Revolve方法,该方法原型如下:
public virtual void Revolve(Region region, Point3d axisPoint, Vector3d axisDir, Double angleOfRevolution); |
第一个参数是被旋转的面域,这再次说明面域的重要性,第二个参数是指定旋转轴上的一个点,第三个参数则是旋转轴的方向,最后一个参数则是旋转的角度。
下面还是用一个实例来说明。如下图中的一个轴,各尺寸参数如下所示:
现在如何创建这一实体呢?首先还是使用多义线由于可以使用旋转,我们只需要条母线上的关键点即可,各关键点标记位置如下图:
设编号为1的点坐标为(0,0),则各点坐标分别如下:
编号 |
坐标 |
编号 |
坐标 |
1 |
(0,0) |
11 |
(214,37) |
2 |
(320,0) |
12 |
(214,36) |
3 |
(320,25) |
13 |
(212,34) |
4 |
(318,27) |
14 |
(144,34) |
5 |
(278,27) |
15 |
(142,32) |
6 |
(276,29) |
16 |
(80,32) |
7 |
(276,31) |
17 |
(79,31) |
8 |
(226,31) |
18 |
(2,31) |
9 |
(224,33) |
19 |
(0,29) |
10 |
(224,37) |
|
|
实现代码如下:
[CommandMethod("SHAFT")] public void Shaft() { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Transaction trans = db.TransactionManager.StartTransaction(); BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord btr = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; double pi = Math.PI; Polyline p = new Polyline(); p.AddVertexAt(0, new Point2d(0, 0), 0, 0, 0); p.AddVertexAt(1, new Point2d(320, 0), 0, 0, 0); p.AddVertexAt(2, new Point2d(320, 25), 0, 0, 0); p.AddVertexAt(3, new Point2d(318,27), 0, 0, 0); p.AddVertexAt(4, new Point2d(278, 27), -Math.Tan(pi / 8), 0, 0); p.AddVertexAt(5, new Point2d(276, 29), 0, 0, 0); p.AddVertexAt(6, new Point2d(276, 31), 0, 0, 0); p.AddVertexAt(7, new Point2d(226, 31), -Math.Tan(pi / 8), 0, 0); p.AddVertexAt(8, new Point2d(224, 33), 0, 0, 0); p.AddVertexAt(9, new Point2d(224, 37), 0, 0, 0); p.AddVertexAt(10, new Point2d(214, 37), 0, 0, 0); p.AddVertexAt(11, new Point2d(214, 36), -Math.Tan(pi/8), 0, 0); p.AddVertexAt(12, new Point2d(212, 34), 0, 0, 0); p.AddVertexAt(13, new Point2d(144, 34), -Math.Tan(pi / 8), 0, 0); p.AddVertexAt(14,new Point2d(142,32),0,0,0); p.AddVertexAt(15, new Point2d(80, 32), -Math.Tan(pi / 8), 0, 0); p.AddVertexAt(16, new Point2d(79, 31), 0, 0, 0); p.AddVertexAt(17,new Point2d(2,31),0,0,0); p.AddVertexAt(18,new Point2d(0,29),0,0,0); p.Closed = true; //创建面域 DBObjectCollection dboc = new DBObjectCollection(); dboc.Add(p); DBObjectCollection RegionCollection = Region.CreateFromCurves(dboc); Region reg = RegionCollection[0] as Region; Solid3d sol = new Solid3d();//实体 //创建旋转实体 sol.Revolve(reg, new Point3d(0, 0, 0), Vector3d.XAxis, 2 * pi); btr.AppendEntity(sol); trans.AddNewlyCreatedDBObject(sol, true); trans.Commit(); trans.Dispose(); } |
运行好输入“SHAFT”,用体着色方式并选择一种颜色,效果如下: