乐筑天下

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

[编程交流] VB。net:创建油炸圈饼

[复制链接]

35

主题

97

帖子

62

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
175
发表于 2022-7-6 12:25:48 | 显示全部楼层 |阅读模式
任何人都知道如何使用创建甜甜圈。net(非lisp)?
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 12:58:28 | 显示全部楼层
 
试试这个
C#:
  1.        [CommandMethod("DON")]
  2.        static public void DrawDonut()
  3.        {
  4.            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  5.            try
  6.            {
  7.                PromptDoubleOptions pdo1 = new PromptDoubleOptions("\nSpecify inside diameter of donut: ");
  8.                pdo1.AllowNegative = false;
  9.                pdo1.AllowNone = false;
  10.                pdo1.AllowZero = false;
  11.                PromptDoubleResult dres1 = ed.GetDouble(pdo1);
  12.                if (dres1.Status != PromptStatus.OK)
  13.                {
  14.                    return;
  15.                }
  16.                PromptDoubleOptions pdo2 = new PromptDoubleOptions("\nSpecify outside diameter of donut: ");
  17.                pdo2.AllowNegative = false;
  18.                pdo2.AllowNone = false;
  19.                pdo2.AllowZero = false;
  20.                PromptDoubleResult dres2 = ed.GetDouble(pdo2);
  21.                if (dres2.Status != PromptStatus.OK)
  22.                {
  23.                    return;
  24.                }
  25.                PromptPointOptions pto = new PromptPointOptions("\nSpecify center point of donut: ");
  26.                pto.AllowNone = false;
  27.                PromptPointResult ptres = ed.GetPoint(pto);
  28.                Point3d center = ptres.Value;
  29.                if (ptres.Status != PromptStatus.OK)
  30.                {
  31.                    return;
  32.                }
  33.                Double rad1 = dres1.Value / 2;
  34.                Double rad2 = dres2.Value / 2;
  35.                Double lwt = rad2 - rad1;
  36.                Point2d pt1 = new Point2d(center.X - (rad1 + lwt / 2), center.Y);
  37.                Point2d pt2 = new Point2d(center.X + (rad1 + lwt / 2), center.Y);
  38.                Polyline pline = new Polyline();
  39.                pline.AddVertexAt(0, pt1, 1.0, lwt, lwt);
  40.                pline.AddVertexAt(1, pt2, 1.0, lwt, lwt);
  41.                pline.AddVertexAt(2, pt1, 0.0, lwt, lwt);
  42.                pline.Closed = true;
  43.                {
  44.                    Database db = HostApplicationServices.WorkingDatabase;
  45.                    AcDb.TransactionManager tm = db.TransactionManager;
  46.                    using (Transaction tr = tm.StartTransaction())
  47.                    {
  48.                        BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  49.                        btr.AppendEntity(pline);
  50.                        tr.AddNewlyCreatedDBObject(pline, true);
  51.                        tr.Commit();
  52.                    }
  53.                }
  54.            }
  55.            catch (Autodesk.AutoCAD.Runtime.Exception ex)
  56.            {
  57.                ed.WriteMessage(ex.StackTrace);
  58.            }
  59.        }

VB。净值:
  1.        <CommandMethod("DON")> _
  2.        Shared Public  Sub DrawDonut()
  3.            Dim ed As Editor =  Application.DocumentManager.MdiActiveDocument.Editor
  4.            Try
  5.                Dim pdo1 As PromptDoubleOptions =  New PromptDoubleOptions("\nSpecify inside diameter of donut: ")
  6.                pdo1.AllowNegative = False
  7.                pdo1.AllowNone = False
  8.                pdo1.AllowZero = False
  9.                Dim dres1 As PromptDoubleResult =  ed.GetDouble(pdo1)
  10.                If dres1.Status <> PromptStatus.OK Then
  11.                    Return
  12.                End If
  13.                Dim pdo2 As PromptDoubleOptions =  New PromptDoubleOptions("\nSpecify outside diameter of donut: ")
  14.                pdo2.AllowNegative = False
  15.                pdo2.AllowNone = False
  16.                pdo2.AllowZero = False
  17.                Dim dres2 As PromptDoubleResult =  ed.GetDouble(pdo2)
  18.                If dres2.Status <> PromptStatus.OK Then
  19.                    Return
  20.                End If
  21.                Dim pto As PromptPointOptions =  New PromptPointOptions("\nSpecify center point of donut: ")
  22.                pto.AllowNone = False
  23.                Dim ptres As PromptPointResult =  ed.GetPoint(pto)
  24.                Dim center As Point3d =  ptres.Value
  25.                If ptres.Status <> PromptStatus.OK Then
  26.                    Return
  27.                End If
  28.                Dim rad1 As Double =  dres1.Value / 2
  29.                Dim rad2 As Double =  dres2.Value / 2
  30.                Dim lwt As Double =  rad2 - rad1
  31.                Dim pt1 As Point2d =  New Point2d(center.X -(rad1 + lwt / 2),center.Y)
  32.                Dim pt2 As Point2d =  New Point2d(center.X +(rad1 + lwt / 2),center.Y)
  33.                Dim pline As Polyline =  New Polyline()
  34.                pline.AddVertexAt(0, pt1, 1.0, lwt, lwt)
  35.                pline.AddVertexAt(1, pt2, 1.0, lwt, lwt)
  36.                pline.AddVertexAt(2, pt1, 0.0, lwt, lwt)
  37.                pline.Closed = True
  38.                {
  39.                    Dim db As Database =  HostApplicationServices.WorkingDatabase
  40.                    Dim tm As AcDb.TransactionManager =  db.TransactionManager
  41.                    Imports (Transaction tr = tm.StartTransaction())
  42.                    {
  43.                        Dim btr As BlockTableRecord = CType(tr.GetObject(db.CurrentSpaceId,OpenMode.ForWrite), BlockTableRecord)
  44.                        btr.AppendEntity(pline)
  45.                        tr.AddNewlyCreatedDBObject(pline, True)
  46.                        tr.Commit()
  47.                    }
  48.                }
  49.            Catch ex As Autodesk.AutoCAD.Runtime.Exception
  50.                ed.WriteMessage(ex.StackTrace)
  51.            End Try
  52.        End Sub

 
~'J'~
回复

使用道具 举报

35

主题

97

帖子

62

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
175
发表于 2022-7-6 13:14:54 | 显示全部楼层
谢谢你,菲索,它工作得很好。
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 13:44:01 | 显示全部楼层
如果这有帮助的话,我很高兴
干杯
 
~'J'~
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 06:26 , Processed in 0.427427 second(s), 60 queries .

© 2020-2025 乐筑天下

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