明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1777|回复: 3

用VB或C#.NET实现任意两点画线

[复制链接]
发表于 2010-10-30 08:16:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2010-11-1 22:28:08 编辑

刚结束NET做CAD二次开发,请教高手指点以下问题!!

用VB或C#.NET如何实现指定任意两点画线 

发表于 2010-10-30 14:01:00 | 显示全部楼层
以下是C#的实例代码,跟你Lisp代码类似,可惜我对几何类不熟悉,不然可能还更加简练一些.关于几何类,可以向孤哥多请教.
  1. public void LzxTest()
  2. {
  3.     using (Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())
  4.     {
  5.         Autodesk.AutoCAD.EditorInput.Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  6.         PromptPointOptions proOne = new PromptPointOptions("\n请选取第一个点:");
  7.         //定义第一个点
  8.         Point3d ptOne = new Point3d();
  9.         //定义第二个点
  10.         Point3d ptTwo = new Point3d();
  11.         PromptPointResult resOne = ed.GetPoint(proOne);
  12.         if (resOne.Status == PromptStatus.OK)
  13.         {
  14.             ptOne = resOne.Value;
  15.             PromptPointOptions proTwo = new PromptPointOptions("\n请选取第二个点:");
  16.             proTwo.BasePoint = ptOne;
  17.             proTwo.UseBasePoint = true;
  18.             PromptPointResult resTwo = ed.GetPoint(proTwo);
  19.             if (resTwo.Status == PromptStatus.OK)
  20.             {
  21.                 ptTwo = resTwo.Value;
  22.                 Database db = HostApplicationServices.WorkingDatabase;
  23.                 using (Transaction trans = db.TransactionManager.StartTransaction())
  24.                 {
  25.                     BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead, false);
  26.                     BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);
  27.                     Line lineObject = new Line(ptOne, ptTwo);
  28.                     double douLineAngle = lineObject.Angle;
  29.                     #region 计算双重线的起终点坐标
  30.                     //----------------------------------------------------------------------------------------------
  31.                     double douDis = 0.5;
  32.                     Point3d ptLineBen1 = new Point3d(ptOne.X + douDis * Math.Cos(douLineAngle + Math.PI / 2),
  33.                                                         ptOne.Y + douDis * Math.Sin(douLineAngle + Math.PI / 2),
  34.                                                         ptOne.Z);
  35.                     Point3d ptLineEnd1 = new Point3d(ptTwo.X + douDis * Math.Cos(douLineAngle + Math.PI / 2),
  36.                                                         ptTwo.Y + douDis * Math.Sin(douLineAngle + Math.PI / 2),
  37.                                                         ptTwo.Z);
  38.                     Point3d ptLineBen2 = new Point3d(ptOne.X + douDis * Math.Cos(douLineAngle - Math.PI / 2),
  39.                                                         ptOne.Y + douDis * Math.Sin(douLineAngle - Math.PI / 2),
  40.                                                         ptOne.Z);
  41.                     Point3d ptLineEnd2 = new Point3d(ptTwo.X + douDis * Math.Cos(douLineAngle - Math.PI / 2),
  42.                                                         ptTwo.Y + douDis * Math.Sin(douLineAngle - Math.PI / 2),
  43.                                                         ptTwo.Z);
  44.                     //----------------------------------------------------------------------------------------------
  45.                     #endregion
  46.                     Line lineObject1 = new Line(ptLineBen1, ptLineEnd1);
  47.                     Line lineObject2 = new Line(ptLineBen2, ptLineEnd2);
  48.                     btr.AppendEntity(lineObject1);
  49.                     btr.AppendEntity(lineObject2);
  50.                     trans.AddNewlyCreatedDBObject(lineObject1, true);
  51.                     trans.AddNewlyCreatedDBObject(lineObject2, true);
  52.                     lineObject.Dispose();
  53.                     trans.Commit();
  54.                 }
  55.             }
  56.         }
  57.     }
  58. }
 楼主| 发表于 2010-10-30 19:21:00 | 显示全部楼层

非常感谢版主的热心帮助!!!

我刚测试了一下,这正是我需要实现的效果

 楼主| 发表于 2010-10-30 19:59:00 | 显示全部楼层
本帖最后由 作者 于 2010-10-31 15:01:57 编辑

另外再请教一个问题

C#中类似LISP中的(polar)相对点是那个函数

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 00:48 , Processed in 0.175312 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表