乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 126|回复: 8

.NET中如何把圆转成多义线?

[复制链接]

6

主题

16

帖子

2

银币

初来乍到

Rank: 1

铜币
40
发表于 2011-1-5 10:16:00 | 显示全部楼层 |阅读模式
如何把圆转成多义线? 这样可以控制圆的线宽。
没查到相关信息,在CAD命令下可以直接用ployline,选圆弧,输入直径,再选择原来的起点,好像生成的圆不是真正的圆,用bo命令可以生成,感觉不是很恰当,也没法用.net控制。
用.NET有什么其他方法吗?
回复

使用道具 举报

0

主题

37

帖子

2

银币

初来乍到

Rank: 1

铜币
37
发表于 2011-1-5 16:05:00 | 显示全部楼层
就用polyline生成两节圆弧
回复

使用道具 举报

6

主题

16

帖子

2

银币

初来乍到

Rank: 1

铜币
40
发表于 2011-1-5 20:53:00 | 显示全部楼层
我看到别的程序生成的好像不是2个圆弧啊,不知道怎么做的,圆环?
回复

使用道具 举报

19

主题

154

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
230
发表于 2011-1-5 21:54:00 | 显示全部楼层
同楼上观点,顺便给你写个代码吧:
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.Geometry;
  4. using Autodesk.AutoCAD.ApplicationServices;
  5. using Autodesk.AutoCAD.DatabaseServices;
  6. using Autodesk.AutoCAD.EditorInput;
  7. namespace CADTest
  8. {
  9.     public class Class1
  10.     {
  11.         [CommandMethod("c2p")]
  12.         public void CircleToPloyline()
  13.         {
  14.             Document doc = Application.DocumentManager.MdiActiveDocument;
  15.             Database db = doc.Database;
  16.             Editor ed = doc.Editor;
  17.             Transaction trans = db.TransactionManager.StartTransaction();
  18.             BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
  19.             BlockTableRecord btr = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  20.             PromptSelectionResult psr = ed.GetSelection();
  21.             //获取选择集,这里就不过滤了
  22.             SelectionSet ss = null;
  23.             if (psr.Status == PromptStatus.OK)
  24.             {
  25.                 ss = psr.Value;
  26.                 foreach (SelectedObject so in ss)
  27.                 {
  28.                     Circle c = trans.GetObject(so.ObjectId, OpenMode.ForWrite) as Circle;
  29.                     double r = c.Radius;
  30.                     Point3d cc = c.Center;
  31.                     Point2d p1 = new Point2d(cc.X + r, cc.Y);
  32.                     Point2d p2 = new Point2d(cc.X - r, cc.Y);
  33.                     Polyline poly = new Polyline();
  34.                     poly.AddVertexAt(0, p1, 1, 0, 0);
  35.                     poly.AddVertexAt(1, p2, 1, 0, 0);
  36.                     poly.AddVertexAt(2, p1, 1, 0, 0);
  37.                     btr.AppendEntity(poly);
  38.                     trans.AddNewlyCreatedDBObject(poly, true);
  39.                     c.Erase(true);
  40.                 }
  41.             }
  42.             trans.Commit();
  43.             trans.Dispose();
  44.         }
  45.         [CommandMethod("GET")]
  46.         public void GetEntityType()
  47.         {
  48.             Document doc = Application.DocumentManager.MdiActiveDocument;
  49.             Database db = doc.Database;
  50.             Editor ed = doc.Editor;
  51.             PromptEntityOptions peo = new PromptEntityOptions("请选择一个实体");
  52.             PromptEntityResult per = null;
  53.             try
  54.             {
  55.                 per = ed.GetEntity(peo);
  56.                 if (per.Status == PromptStatus.OK)
  57.                 {
  58.                     ObjectId id = per.ObjectId;
  59.                     Transaction trans = db.TransactionManager.StartTransaction();
  60.                     Entity ent = (Entity)trans.GetObject(id, OpenMode.ForRead, true);
  61.                     ed.WriteMessage("\n实体ObjectId为:" + ent.ObjectId + "\n实体类型为:" + ent.GetType().FullName);
  62.                     trans.Commit();
  63.                     trans.Dispose();
  64.                 }
  65.             }
  66.             catch (Autodesk.AutoCAD.Runtime.Exception exc)
  67.             {
  68.                 ed.WriteMessage("发生异常,原因为:" + exc.Message);
  69.             }
  70.         }
  71.     }
  72. }
回复

使用道具 举报

19

主题

154

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
230
发表于 2011-1-5 22:04:00 | 显示全部楼层

这个是效果图:

hawnu4mivhr.gif

hawnu4mivhr.gif


如果看不了,可以上我的博客看,地址在这里
回复

使用道具 举报

6

主题

16

帖子

2

银币

初来乍到

Rank: 1

铜币
40
发表于 2011-1-6 10:56:00 | 显示全部楼层
非常感谢cdinten ,提供代码和效果,效果很好,谢谢
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2011-9-18 23:50:00 | 显示全部楼层
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.Geometry;
  4. using Autodesk.AutoCAD.ApplicationServices;
  5. using Autodesk.AutoCAD.DatabaseServices;
  6. using Autodesk.AutoCAD.EditorInput;
  7. namespace CADTest
  8. {
  9.     public class Class1
  10.     {
  11.         [CommandMethod("c2p")]
  12.         public void CircleToPloyline()
  13.         {
  14.             Document doc = Application.DocumentManager.MdiActiveDocument;
  15.             Database db = doc.Database;
  16.             Editor ed = doc.Editor;
  17.             Transaction trans = db.TransactionManager.StartTransaction();
  18.             BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
  19.             BlockTableRecord btr = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  20.             PromptSelectionResult psr = ed.GetSelection();
  21.             //获取选择集,这里就不过滤了
  22.             SelectionSet ss = null;
  23.             if (psr.Status == PromptStatus.OK)
  24.             {
  25.                 ss = psr.Value;
  26.                 foreach (SelectedObject so in ss)
  27.                 {
  28.                     Circle c = trans.GetObject(so.ObjectId, OpenMode.ForWrite) as Circle;
  29.                     double r = c.Radius;
  30.                     Point3d cc = c.Center;
  31.                     Point2d p1 = new Point2d(cc.X + r, cc.Y);
  32.                     Point2d p2 = new Point2d(cc.X - r, cc.Y);
  33.                     Polyline poly = new Polyline();
  34.                     poly.AddVertexAt(0, p1, 1, 0, 0);
  35.                     poly.AddVertexAt(1, p2, 1, 0, 0);
  36.                     poly.AddVertexAt(2, p1, 1, 0, 0);
  37.                     btr.AppendEntity(poly);
  38.                     trans.AddNewlyCreatedDBObject(poly, true);
  39.                     c.Erase(true);
  40.                 }
  41.             }
  42.             trans.Commit();
  43.             trans.Dispose();
  44.         }
  45.         [CommandMethod("GET")]
  46.         public void GetEntityType()
  47.         {
  48.             Document doc = Application.DocumentManager.MdiActiveDocument;
  49.             Database db = doc.Database;
  50.             Editor ed = doc.Editor;
  51.             PromptEntityOptions peo = new PromptEntityOptions("请选择一个实体");
  52.             PromptEntityResult per = null;
  53.             try
  54.             {
  55.                 per = ed.GetEntity(peo);
  56.                 if (per.Status == PromptStatus.OK)
  57.                 {
  58.                     ObjectId id = per.ObjectId;
  59.                     Transaction trans = db.TransactionManager.StartTransaction();
  60.                     Entity ent = (Entity)trans.GetObject(id, OpenMode.ForRead, true);
  61.                     ed.WriteMessage("\n实体ObjectId为:" + ent.ObjectId + "\n实体类型为:" + ent.GetType().FullName);
  62.                     trans.Commit();
  63.                     trans.Dispose();
  64.                 }
  65.             }
  66.             catch (Autodesk.AutoCAD.Runtime.Exception exc)
  67.             {
  68.                 ed.WriteMessage("发生异常,原因为:" + exc.Message);
  69.             }
  70.         }
  71.     }
  72. }

回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2011-11-1 13:40:00 | 显示全部楼层
  1.    
  2.         
  3.         HTML5每日一练之Canvas标签的应用-坐标变换与路径结合使用
  4.                
  5.    
  6.    
  7.     [b]
  8.             
  9.     [/b]
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2012-3-7 19:39:00 | 显示全部楼层
复制代码
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-15 21:20 , Processed in 0.539343 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表