乐筑天下

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

拖出来咋这个效果呢?

[复制链接]

6

主题

30

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2011-9-2 11:48:00 | 显示全部楼层 |阅读模式
  1. using Autodesk..Runtime;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.EditorInput;
  5. using Autodesk.AutoCAD.Geometry;
  6. using System.Collections.Generic;
  7. [assembly: CommandClass(typeof(CAD0901.JigClass))]
  8. namespace CAD0901
  9. {
  10.     class JigClass : DrawJig
  11.     {
  12.         private Polyline pl=new Polyline();
  13.         private Point3d p1;
  14.         private Point3d p2;
  15.        [CommandMethod("jc")]
  16.         public void MyTest()
  17.         {
  18.             
  19.                
  20.                 Database db = HostApplicationServices.WorkingDatabase;
  21.                 Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  22.                 try
  23.                 {
  24.                     Matrix3d mx = ed.CurrentUserCoordinateSystem;
  25.                     PromptPointOptions ppo = new PromptPointOptions("\n第一点");
  26.                     PromptPointResult ppr = ed.GetPoint(ppo);
  27.                     p1 = ppr.Value;
  28.                  using (Transaction trans = db.TransactionManager.StartTransaction())
  29.                  {
  30.                      BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId,
  31.                          OpenMode.ForRead);
  32.                      BlockTableRecord btr = (BlockTableRecord)trans.GetObject
  33.                          (bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  34.                      PromptResult resJig = ed.Drag(this);
  35.                      if (resJig.Status == PromptStatus.OK)
  36.                      {
  37.                      btr.AppendEntity(pl);
  38.                      trans.AddNewlyCreatedDBObject(pl, true);
  39.                      trans.Commit();
  40.                      }
  41.                  }
  42.             }
  43.             catch (Exception ex)
  44.             {
  45.                
  46.             }
  47.         
  48.         }
  49.         protected override bool WorldDraw(Autodesk.AutoCAD.GraphicsInterface.WorldDraw draw)
  50.         {
  51.             draw.Geometry.Draw(pl);
  52.             return true;
  53.         }
  54.         protected override SamplerStatus Sampler(JigPrompts prompts)
  55.         {
  56.             JigPromptPointOptions jpo = new JigPromptPointOptions("\n另一点");
  57.             jpo.UserInputControls = UserInputControls.Accept3dCoordinates;
  58.             PromptPointResult pr = prompts.AcquirePoint(jpo);
  59.             Point3d tempt = pr.Value;
  60.             if (pr.Status==PromptStatus.Cancel)
  61.             {
  62.                 return SamplerStatus.Cancel;
  63.             }
  64.             if (p2!= tempt)
  65.             {
  66.                 p2 = tempt;
  67.                 pl.AddVertexAt(0, new Point2d(p1.X, p1.Y), 0, 0, 0);
  68.                 pl.AddVertexAt(1, new Point2d(p2.X, p1.Y), 0, 0, 0);
  69.                 pl.AddVertexAt(2, new Point2d(p2.X, p2.Y), 0, 0, 0);
  70.                 pl.AddVertexAt(3, new Point2d(p1.X, p2.Y), 0, 0, 0);
  71.                 pl.Closed = true;
  72.                 return SamplerStatus.OK;
  73.             }
  74.             else return SamplerStatus.NoChange;
  75.         }
  76.         private ObjectId AppendEntity(Entity ent)
  77.         {
  78.             ObjectId entId;
  79.             Database db = HostApplicationServices.WorkingDatabase;
  80.             using (Transaction trans = db.TransactionManager.StartTransaction())
  81.             {
  82.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId,
  83.                     OpenMode.ForRead);
  84.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject
  85.                     (bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  86.                 entId = btr.AppendEntity(ent);
  87.                 trans.AddNewlyCreatedDBObject(ent, true);
  88.                 trans.Commit();
  89.             }
  90.             return entId;
  91.         }
  92.         
  93.     }
  94. }
上面这段程序,拖出一个矩形框,结果悲剧了……
我该怎么改呢?

5hsuxn5gfuj.jpg

5hsuxn5gfuj.jpg

回复

使用道具 举报

6

主题

30

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2011-9-2 12:26:00 | 显示全部楼层
快来看看呀……
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2011-9-2 13:34:00 | 显示全部楼层
protected override SamplerStatus Sampler(JigPrompts prompts)
        {
//////////////////////////////////////////////
这里加一次点就够了
            if (p2!= tempt)
            {
                p2 = tempt;
                pl.AddVertexAt(0, new Point2d(p1.X, p1.Y), 0, 0, 0);
                pl.AddVertexAt(1, new Point2d(p2.X, p1.Y), 0, 0, 0);
                pl.AddVertexAt(2, new Point2d(p2.X, p2.Y), 0, 0, 0);
                pl.AddVertexAt(3, new Point2d(p1.X, p2.Y), 0, 0, 0);
                pl.Closed = true;
                return SamplerStatus.OK;
            }      
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
        }
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2011-9-2 13:35:00 | 显示全部楼层
加一次后是修改点的位置,而不是再加新点
回复

使用道具 举报

6

主题

30

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2011-9-2 14:11:00 | 显示全部楼层

你的意思是:这里只保留 p2 = tempt;
下面添加多段线顶点的代码提到上面去?
好像也不行呀!
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2011-9-2 14:19:00 | 显示全部楼层
拜托!你想画一个矩形对吧?矩形一共只有4个点对吧?
          pl.AddVertexAt(0, new Point2d(p1.X, p1.Y), 0, 0, 0);
                pl.AddVertexAt(1, new Point2d(p2.X, p1.Y), 0, 0, 0);
                pl.AddVertexAt(2, new Point2d(p2.X, p2.Y), 0, 0, 0);
                pl.AddVertexAt(3, new Point2d(p1.X, p2.Y), 0, 0, 0);
pl.AddVertexAt(0, new Point2d(p1.X, p1.Y), 0, 0, 0); 是往多段线加点对吧?你不停的加,那这个多段线会是几个节点?
回复

使用道具 举报

6

主题

30

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2011-9-2 14:34:00 | 显示全部楼层

[em0],我对JIG是如何作用的一直没搞明白,您的意思是说不需要if语句吗?
我实在是不太懂这个,还望大哥悉心指导一下……
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2011-9-2 14:44:00 | 显示全部楼层
建议你仔细看看你目前出来的多段线,仔细看,放大来看.或许这样你能明白你的问题所在;
回复

使用道具 举报

6

主题

30

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2011-9-2 21:56:00 | 显示全部楼层
复制代码siben兄,
    终于发现问题所在了,把添加顶点的代码添加到WorldDraw方法中就OK了,谢谢你的指点哈
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2011-9-3 01:30:00 | 显示全部楼层

这样或许实现了你的需求,但我认为不应该这样做,因为若实现的功能若再复杂些,你将会很难处理;
另外,目前的做法是无数次的生成了一个转眼就被自杀的new polyline,实在是劳心劳力的做些无用工.
幸好.Net的垃圾收集机制或许处理了你遗留的东西.
另:我是Sieben
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-29 19:15 , Processed in 1.979981 second(s), 87 queries .

© 2020-2025 乐筑天下

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