| 选择绘图区域中的对象 (.NET) 您可以通过让用户以交互方式选择对象来选择对象,也可以通过 AutoCAD .NET API 模拟许多不同的对象选择选项。如果例程执行多个选择集,则需要跟踪返回的每个选择集,或创建一个对象来跟踪所有选定对象。以下函数允许您从图形中选择对象:ObjectIdCollection 
 提示屏幕上的对象并迭代选择集本示例提示用户选择对象,然后将所选每个对象的颜色更改为“绿色”或“AutoCAD 颜色索引”3。 VB.NETImports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
 
<CommandMethod("SelectObjectsOnscreen")> _
Public Sub SelectObjectsOnscreen()
    '' 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()
        '' Request for objects to be selected in the drawing area
        Dim acSSPrompt As PromptSelectionResult = acDoc.Editor.GetSelection()
        '' If the prompt status is OK, objects were selected
        If acSSPrompt.Status = PromptStatus.OK Then
            Dim acSSet As SelectionSet = acSSPrompt.Value
            '' Step through the objects in the selection set
            For Each acSSObj As SelectedObject In acSSet
                '' Check to make sure a valid SelectedObject object was returned
                If Not IsDBNull(acSSObj) Then
                    '' Open the selected object for write
                    Dim acEnt As Entity = acTrans.GetObject(acSSObj.ObjectId, _
                                                            OpenMode.ForWrite)
                    If Not IsDBNull(acEnt) Then
                        '' Change the object's color to Green
                        acEnt.ColorIndex = 3
                    End If
                End If
            Next
            '' Save the new object to the database
            acTrans.Commit()
        End If
        '' Dispose of the transaction
    End Using
End SubC#using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
 
[CommandMethod("SelectObjectsOnscreen")]
public static void SelectObjectsOnscreen()
{
    // Get the current document and database
    Document acDoc = Application.DocumentManager.MdiActiveDocument;
    Database acCurDb = acDoc.Database;
    // Start a transaction
    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
    {
        // Request for objects to be selected in the drawing area
        PromptSelectionResult acSSPrompt = acDoc.Editor.GetSelection();
        // If the prompt status is OK, objects were selected
        if (acSSPrompt.Status == PromptStatus.OK)
        {
            SelectionSet acSSet = acSSPrompt.Value;
            // Step through the objects in the selection set
            foreach (SelectedObject acSSObj in acSSet)
            {
                // Check to make sure a valid SelectedObject object was returned
                if (acSSObj != null)
                {
                    // Open the selected object for write
                    Entity acEnt = acTrans.GetObject(acSSObj.ObjectId,
                                                        OpenMode.ForWrite) as Entity;
                    if (acEnt != null)
                    {
                        // Change the object's color to Green
                        acEnt.ColorIndex = 3;
                    }
                }
            }
            // Save the new object to the database
            acTrans.Commit();
        }
        // Dispose of the transaction
    }
}VBA/ActiveX 代码参考Sub SelectObjectsOnscreen()
    ' Create a new selection set
    Dim sset As AcadSelectionSet
    Set sset = ThisDrawing.SelectionSets.Add("SS1")
 
    ' Prompt the user to select objects
    ' and add them to the selection set.
    sset.SelectOnScreen
 
    Dim acEnt As AcadEntity
 
    ' Step through the selected objects and change
    ' each object's color to Green
    For Each acEnt In sset
        ' Use the Color property to set the object's color
        acEnt.color = acGreen
    Next acEnt
 
    ' Remove the selection set at the end
    sset.Delete
End Sub选择具有交叉窗口的对象本示例选择交叉窗口内和与交叉窗口相交的对象。 VB.NETImports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.EditorInput
 
<CommandMethod("SelectObjectsByCrossingWindow")> _
Public Sub SelectObjectsByCrossingWindow()
    '' Get the current document editor
    Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor
    '' Create a crossing window from (2,2,0) to (10,8,0)
    Dim acSSPrompt As PromptSelectionResult
    acSSPrompt = acDocEd.SelectCrossingWindow(New Point3d(2, 2, 0), _
                                              New Point3d(10, 8, 0))
    '' If the prompt status is OK, objects were selected
    If acSSPrompt.Status = PromptStatus.OK Then
        Dim acSSet As SelectionSet = acSSPrompt.Value
        Application.ShowAlertDialog("Number of objects selected: " & _
                                    acSSet.Count.ToString())
    Else
        Application.ShowAlertDialog("Number of objects selected: 0")
    End If
End SubC#using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
 
[CommandMethod("SelectObjectsByCrossingWindow")]
public static void SelectObjectsByCrossingWindow()
{
    // Get the current document editor
    Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor;
    // Create a crossing window from (2,2,0) to (10,8,0)
    PromptSelectionResult acSSPrompt;
    acSSPrompt = acDocEd.SelectCrossingWindow(new Point3d(2, 2, 0),
                                                new Point3d(10, 8, 0));
    // If the prompt status is OK, objects were selected
    if (acSSPrompt.Status == PromptStatus.OK)
    {
        SelectionSet acSSet = acSSPrompt.Value;
        Application.ShowAlertDialog("Number of objects selected: " +
                                    acSSet.Count.ToString());
    }
    else
    {
        Application.ShowAlertDialog("Number of objects selected: 0");
    }
}VBA/ActiveX 代码参考Sub SelectObjectsByCrossingWindow()
    ' Create a new selection set
    Dim sset As AcadSelectionSet
    Set sset = ThisDrawing.SelectionSets.Add("SS1")
 
    ' Define the points for the crossing window
    Dim pt1(0 To 2) As Double
    Dim pt2(0 To 2) As Double
 
    pt1(0) = 2#: pt1(1) = 2#: pt1(2) = 0#:
    pt2(0) = 10#: pt2(1) = 8#: pt2(2) = 0#:
 
    ' Create a crossing window from (2,2,0) to (10,8,0)
    sset.Select acSelectionSetCrossing, pt1, pt2
 
    MsgBox "Number of objects selected: " & sset.Count
 
    ' Remove the selection set at the end
    sset.Delete
End Sub父主题: | 
 |Archiver|CAD开发者社区
( 苏ICP备2022047690号-1   苏公网安备32011402011833)
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1   苏公网安备32011402011833)
GMT+8, 2025-10-31 10:09
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.