2013-07-10 1 views
1

C# Autocad 플러그인 응용 프로그램에서 활성 AutoCAD 도면에서 선택된 모든 객체를 어떻게 얻을 수 있습니까?acitve Autocad 문서에서 선택된 모든 객체 가져 오기

다음과 같이 내가 선택 설정 얻을 시도 : 내가 같은 선택 세트가있는 경우 내가 선택한 객체를 얻을 수있는 것 같다

SelectionSet Selection = AcadApp.DocumentManager.MdiActiveDocument.Editor.SelectImplied().Value; 

foreach (SelectedObject Instance in Selection) ... 

. 테 문제는 줄에서 null 참조 예외가 발생합니다.

AcadApp.DocumentManager.MdiActiveDocument.Editor.SelectImplied().Value 
+0

지금까지 시도한 것이 있습니까? –

+0

나는 지금까지 내가 한 일을 설명하기 위해 질문을 편집했다. – Demir

답변

1

에 출근하지 못할.

AcadApp.DocumentManager.MdiActiveDocument.Editor.SelectImplied().Value 

이 코드는 선택한 객체를 제공하지만 내가 null 참조 예외를 얻은 점에 유의하십시오. 이것은 배경 스레드에서 객체를 가져 오려고했기 때문입니다. http://adndevblog.typepad.com/autocad/2012/06/use-thread-for-background-processing.html에는이 문제가 언급되어 있습니다.

메인 스레드에서 MdiActiveDocument를 호출하면 문제가 해결 된 다음 처리를 위해 백그라운드 스레드의 결과를 보냅니다.

+0

좋은 거래. 네가 해결했으면 좋겠다. 스레딩 작업을하기 때문에 휘발성 수정자를 확인하십시오. –

2

생각합니다. IDE없이 이것을 테이프로 찍었습니다.

using AcApp = Autodesk.Autocad.ApplicationServices.Application; 


public class yourclass 
{ 
    public Document AcDoc { 
     get { return AcApp.DocumentManager.MdiActiveDocument;} 
    }  
    public static void getSelectionSet() 
    { 
    var _editor = AcDoc.Editor; 
    var _selAll = ed.SelectAll(); 
    var _SelectionSet = _selAll.Value; 

    using(var trans = AcDoc.TransactionManager.StartTransaction()){ 
     foreach(var ObjId in _SelectionSet.GetObjectIds()){ 
     // apply logic 
     } 
     trans.Commit(); 
    } 
    } 

하거나 서식을 용서해 SelectionSet

public class yourclass 
{ 
public Document AcDoc { 
    get { return AcApp.DocumentManager.MdiActiveDocument;} 
} 

    public static SelectionSet getSelectionSet() 
    { 
     var _editor = AcDoc.Editor; 
     var _selAll = ed.SelectAll(); 
     return _selAll.Value; 
    } 
} 

을 반환 할 경우, 나는 그것을 잘 스택

나는 그가 솔루션을 가지고
+0

제안 해 주셔서 대단히 감사드립니다. 배경 스레드에서 MdiActiveDocument에 액세스하려고하면 null 참조로 인해 실제로 문제가 발생했습니다. 나는 내 대답에 해결책을 주었다. – Demir

+1

매우 늦은 응답이지만이 질문에 대한 답을 찾기 위해이 문제를 발견했습니다. 이 대답은 정확하지 않습니다. SelectAll()은 원래의 질문과 같은 선택된 객체가 아닌 도면에서 * all *을 찾습니다. – mohnston

+0

내일 아침에 더 좋은 대답으로 해결하겠습니다. 이 진절머리 나는 코드. –

관련 문제