

IJCAD2020でVB.NET(.NET API)を使用して開発を行っています。  
IJCADの生コマンドで選択した図形のうち特定の図形を除く処理を実装しております。

具体的には下記の関数内（Editor.PromptedForSelection置き換え）で選択セットの中から特定の図形を判定し、特定の図形を除外した新しい選択セットを取得してEditorにセットしています。

以下はサンプルコードです。

[code]

    Private Sub Editor_PromptedForSelection(ByVal sender As Object, ByVal e As PromptSelectionResultEventArgs)
        If Application.DocumentManager.MdiActiveDocument IsNot Nothing Then
            'Dim ed As Editor = DirectCast(sender, Editor)
            Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
            Dim icdSSetNew As SelectionSet = Nothing'新しい選択セット（特定の図形を除いた）
            Dim icdSSetOrg As SelectionSet = Nothing'元の選択セット
            IcadSelSet_Clear(icdSSetOrg)
            Try
                '選択された図形をEditorクラスインスタンスから取得
                Dim gcSSPrompt As PromptSelectionResult = ed.SelectImplied()
                If Not gcSSPrompt.Value Is Nothing Then
                    icdSSetOrg = gcSSPrompt.Value
                    Dim ssIdsNew As New ObjectIdCollection
                    Using icdTrans As Transaction = icdDoc.Database.TransactionManager.StartTransaction
                        'ターゲットを選択セットから除外する
                        For Each selobj As SelectedObject In icdSSetOrg
                            Dim icdEnt As Entity = IcadTrans_GetObject(icdTrans, selobj.ObjectId, OpenMode.ForRead)
                            If icdEnt Is Nothing Then Continue For
                            Try
                                If＜ターゲットか?＞ Then Continue For
                                If Not ssIdsNew.Contains(icdEnt.ObjectId) Then
                                    ssIdsNew.Add(icdEnt.ObjectId)
                                End If
                            Catch ex As System.Exception
                                
                            Finally
                                If Not icdEnt Is Nothing Then icdEnt.Dispose()
                            End Try
                        Next
    
                        'ssIdsNew→icdSSetNew(ObjectIdCollectionをSelectionSetに変換)
                          
                    End Using
                End If
            Catch ex As System.Exception
                
            End Try
    
            '選択セットをEditorに再セット
            ed.SetImpliedSelection(icdSSetNew)
    
        End If                                                                                                                                      
    End Sub
    
[/code]

別途、Document.ImpliedSelectionChanged（事前選択セットに図形を追加したり削除されたときに通知）では同様のコーディングで特定の図形を選択から除外することができました。

何かアドバイスをいただければ幸いです。

以上、よろしくお願いいたします。


CC BY-SA 4.0
2022-02-02T06:57:27.533
86094
2022-03-24T03:04:47.723
34508
question
.net ijcad arx autocad
CADの図形編集コマンド（MOVEなど）で選択した図形のうち特定の図形を除きたい


選択セットの置き換え方法としては、以下のイベントを使用する方法があります。  
・Editor.PromptForSelectionEnding 選択操作が完了したときに発生するイベント  
・Editor.SelectionAdded 現在の選択セットにオブジェクトが追加されたときに発生するイベント

また、Selection****EventArgs.Remove()メソッドで特定の図形を除く事が可能です。

なお、Editor.SelectImplied()メソッドは事前選択が行われた状態で選択セットを取得するものです。

MOVEコマンドなどの特定の編集コマンドに限定したい場合は、  
Document.CommandWillStartイベントと併用する方法が考えられます。


CC BY-SA 4.0
2022-03-24T03:04:47.723
88002
2022-03-24T03:04:47.723
39778
86094
answer