乐筑天下

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

请问如何打断直线?

[复制链接]

19

主题

154

帖子

5

银币

后起之秀

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

铜币
230
发表于 2010-12-7 10:46:00 | 显示全部楼层 |阅读模式
如果我已经知道了直线的两个端点的坐标,请问如何将该直线打断为三个等长度的小直线?
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2010-12-7 11:54:00 | 显示全部楼层
Split函数
回复

使用道具 举报

19

主题

154

帖子

5

银币

后起之秀

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

铜币
230
发表于 2010-12-7 18:18:00 | 显示全部楼层
回复
谢谢你的回答。请问具体如何使用?我是用的.NET,不知道在那个类库中
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-12-7 20:49:00 | 显示全部楼层
  1.         static int _divNumber = 2;
  2.         [CommandMethod("mdiv")]
  3.         public static void MyDiv()
  4.         {
  5.             Document doc = Application.DocumentManager.MdiActiveDocument;
  6.             Editor ed = doc.Editor;
  7.             Database db = doc.Database;
  8.             PromptEntityOptions optsEnt = new PromptEntityOptions("\n请选择一个曲线:");
  9.             optsEnt.SetRejectMessage("\n你选择的不是曲线!");
  10.             optsEnt.AddAllowedClass(typeof(Curve), false);
  11.             PromptEntityResult resEnt = ed.GetEntity(optsEnt);
  12.             if (resEnt.Status != PromptStatus.OK) return;
  13.             PromptIntegerOptions optsInt = new PromptIntegerOptions("\n请输入段数:");
  14.             optsInt.DefaultValue = _divNumber;
  15.             PromptIntegerResult resInt = ed.GetInteger(optsInt);
  16.             if (resInt.Status != PromptStatus.OK) return;
  17.             optsInt.Message = "段数应大于1,请重新输入:";
  18.             while (resInt.Value < 2)
  19.             {
  20.                 resInt = ed.GetInteger(optsInt);
  21.                 if (resInt.Status != PromptStatus.OK) return;
  22.             }
  23.             int n = _divNumber = resInt.Value;
  24.             using (Transaction tr = db.TransactionManager.StartTransaction())
  25.             {
  26.                 Curve c = tr.GetObject(resEnt.ObjectId, OpenMode.ForWrite) as Curve;
  27.                 double len = c.GetDistanceAtParameter(c.EndParam);
  28.                 double ilen = len / n;
  29.                 DoubleCollection pars = new DoubleCollection();
  30.                 if (c.Closed) pars.Add(0);
  31.                 for (int i = 1; i < n; i++)
  32.                 {
  33.                     pars.Add(c.GetParameterAtDistance(ilen * i));
  34.                 }
  35.                 DBObjectCollection objs = c.GetSplitCurves(pars);
  36.                 BlockTableRecord btr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
  37.                 foreach (Entity ent in objs)
  38.                 {
  39.                     btr.AppendEntity(ent);
  40.                     tr.AddNewlyCreatedDBObject(ent, true);
  41.                 }
  42.                 c.Erase();
  43.                 tr.Commit();
  44.             }
  45.         }
回复

使用道具 举报

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-12-9 20:14:00 | 显示全部楼层
目前看不懂,先收藏,之后来慢学习...
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 17:36 , Processed in 0.673984 second(s), 62 queries .

© 2020-2025 乐筑天下

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