CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

编辑折线 (.NET)

2023-1-1 13:43| 发布者: admin| 查看: 275| 评论: 0|来自: AutoCAD

2D 和 3D 折线、矩形、多边形、甜甜圈和 3D 多边形网格都是折线变体,并且以相同的方式进行编辑。

AutoCAD 可识别拟合多段线和样条拟合多段线。样条拟合折线使用曲线拟合,类似于 B 样条。样条拟合折线有两种:二次折线和立方折线。两条折线都由样条线类型系统变量控制。拟合折线使用标准曲线进行曲线拟合,并利用在任何给定顶点上设置的任何切线方向。

要编辑折线,请使用 ,, 或对象的属性和方法。使用以下属性和方法打开或关闭折线、更改折线顶点的坐标或添加折点:PolylinePolyline2dPolyline3d

封闭式物业

打开或关闭折线。

“常量宽度”属性

设置轻量和二维折线的恒定宽度。

追加顶点法

将顶点添加到 2D 或 3D 折线。

添加顶点方法

将顶点添加到轻量级折线。

反向曲线

反转折线的方向。

使用以下方法更新折线的凸起或宽度:

设置凸起

设置给定线段索引的浅色折线的凸起。

设置开始宽度在

设置轻量级折线的起始宽度(给定线段索引)。

伸直

拉直 2D 或 3D 折线。

编辑折线

本示例创建一条轻量级折线。然后,它将凸起添加到折线的第三段,将顶点追加到折线,更改最后一段的宽度,最后闭合折线。

VB.NET

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
 
<CommandMethod("EditPolyline")> _
Public Sub EditPolyline()
    '' Get the current document and database
    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
    Dim acCurDb As Database = acDoc.Database

    '' Start a transaction
    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

        '' Open the Block table for read
        Dim acBlkTbl As BlockTable
        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
                                     OpenMode.ForRead)

        '' Open the Block table record Model space for write
        Dim acBlkTblRec As BlockTableRecord
        acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                        OpenMode.ForWrite)

        '' Create a lightweight polyline
        Using acPoly As Polyline = New Polyline()
            acPoly.AddVertexAt(0, New Point2d(1, 1), 0, 0, 0)
            acPoly.AddVertexAt(1, New Point2d(1, 2), 0, 0, 0)
            acPoly.AddVertexAt(2, New Point2d(2, 2), 0, 0, 0)
            acPoly.AddVertexAt(3, New Point2d(3, 2), 0, 0, 0)
            acPoly.AddVertexAt(4, New Point2d(4, 4), 0, 0, 0)

            '' Add the new object to the block table record and the transaction
            acBlkTblRec.AppendEntity(acPoly)
            acTrans.AddNewlyCreatedDBObject(acPoly, True)

            '' Sets the bulge at index 3
            acPoly.SetBulgeAt(3, -0.5)

            '' Add a new vertex
            acPoly.AddVertexAt(5, New Point2d(4, 1), 0, 0, 0)

            '' Sets the start and end width at index 4
            acPoly.SetStartWidthAt(4, 0.1)
            acPoly.SetEndWidthAt(4, 0.5)

            '' Close the polyline
            acPoly.Closed = True
        End Using

        '' Save the new objects to the database
        acTrans.Commit()
    End Using
End Sub

C#

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
 
[CommandMethod("EditPolyline")]
public static void EditPolyline()
{
    // Get the current document and database
    Document acDoc = Application.DocumentManager.MdiActiveDocument;
    Database acCurDb = acDoc.Database;

    // Start a transaction
    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
    {
        // Open the Block table for read
        BlockTable acBlkTbl;
        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
                                        OpenMode.ForRead) as BlockTable;

        // Open the Block table record Model space for write
        BlockTableRecord acBlkTblRec;
        acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                                        OpenMode.ForWrite) as BlockTableRecord;

        // Create a lightweight polyline
        using (Polyline acPoly = new Polyline())
        {
            acPoly.AddVertexAt(0, new Point2d(1, 1), 0, 0, 0);
            acPoly.AddVertexAt(1, new Point2d(1, 2), 0, 0, 0);
            acPoly.AddVertexAt(2, new Point2d(2, 2), 0, 0, 0);
            acPoly.AddVertexAt(3, new Point2d(3, 2), 0, 0, 0);
            acPoly.AddVertexAt(4, new Point2d(4, 4), 0, 0, 0);

            // Add the new object to the block table record and the transaction
            acBlkTblRec.AppendEntity(acPoly);
            acTrans.AddNewlyCreatedDBObject(acPoly, true);

            // Sets the bulge at index 3
            acPoly.SetBulgeAt(3, -0.5);

            // Add a new vertex
            acPoly.AddVertexAt(5, new Point2d(4, 1), 0, 0, 0);

            // Sets the start and end width at index 4
            acPoly.SetStartWidthAt(4, 0.1);
            acPoly.SetEndWidthAt(4, 0.5);

            // Close the polyline
            acPoly.Closed = true;
        }

        // Save the new objects to the database
        acTrans.Commit();
    }
}

VBA/ActiveX 代码参考

Sub EditPolyline()
    Dim plineObj As AcadLWPolyline
    Dim points(0 To 9) As Double
 
    ' Define the 2D polyline points
    points(0) = 1: points(1) = 1
    points(2) = 1: points(3) = 2
    points(4) = 2: points(5) = 2
    points(6) = 3: points(7) = 2
    points(8) = 4: points(9) = 4
 
    ' Create a light weight Polyline object
    Set plineObj = ThisDrawing.ModelSpace. _
                                 AddLightWeightPolyline(points)
 
    ' Add a bulge to segment 3
    plineObj.SetBulge 3, -0.5
 
    ' Define the new vertex
    Dim newVertex(0 To 1) As Double
    newVertex(0) = 4: newVertex(1) = 1
 
    ' Add the vertex to the polyline
    plineObj.AddVertex 5, newVertex
 
    ' Set the width of the new segment
    plineObj.SetWidth 4, 0.1, 0.5
 
    ' Close the polyline
    plineObj.Closed = True
    plineObj.Update
End Sub

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 14:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部