2017-04-13 2 views
1

AutoCAD가 해당 API닷넷 API WIPOUTFRAME 시스템 변수

Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable (캐릭터 오브젝트)

스트링을 통해 시스템 변수를 변경하는 방법이 재치 시스템 변수 이름입니다 - 내 경우 "WIPEOUTFRAME"

객체에있는 설정 - 내가 0

내가 다른 시스템 변수에 대한 방법을 사용했는데 작동으로 설정하려면, 그러나이 것은 아닙니다.

대신 런타임에 eInvalidInput 오류가 발생합니다.

I는 WIPEOUTFRAME (나는 AutoCAD에서 명령 라인을 통해 설정할 수) 맞는지 확인한 나는 값이 I 또한 GetSystemVariable (문자열) 방법을 사용한 0

임을 확인하는 이 설정을 객체로 반환하여 프로그램이 WIPEOUTFRAME을 인식하는지 확인하고 값 0을 반환 할 수 있는지 확인합니다. 또한 반환하는 객체의 유형을 확인했습니다. INT16.
GetSystemVariable에 의해 반환 된 개체를 SetSystemVariable에 전달했으며 작동합니다! WIPEOUTFRAME의 값이 0인지 확인하는 경우에도 작동하는 방법이있는 유일한 경우입니다. 하지만 물론 값을 1에서 0으로 변경하고 싶습니다. 따라서 CAN 메서드가 작동하는지 확인하는 동안 같은 개체를 전달해도 값을 변경하는 데 도움이되지 않습니다.

값 0을 매개 변수로 개체로, int16 개체로, 단순히 0으로, 문자열로 전달하는 등의 시도가 성공했습니다.

API의 버그 일 수 있습니까? 아니면 내가 누락 된 내용을 누구에게 말해 줄 수 있습니까?

+1

이상한 COM 인터페이스가있는 C#에서 다른 CAD로 작업했습니다. 필자는 문서화되지 않은 기능이 모두 어떻게 작동하는지 알아 내려는 무차별 대책을 작성했습니다. 다른 숫자 형식이나 심지어 문자열 "0"(int16 인 것처럼 보일지라도)을 사용하는 것과 같은 시도를 시도 할 수도 있고 여러 번 (아마도 시도 사이의 지연으로) 설정하려고 시도 할 수도 있습니다. , 나는 의미가없는 일을하도록 만드는 방법을 찾았습니다. 하지만 그들은 신뢰성있게 재현 할 수 있었기 때문에 COM 인터페이스를 돌아 다니며 그 이상한 것들을 처리하는 래퍼 클래스를 만들었습니다. – Nat

+1

경우에 따라 변수 값을 설정하는 방법을 알 수 없었습니다. 시스템에서 그냥 허용하지 않았습니다. 그러나 필자는 원하는 때마다 시뮬레이션을 실행할 수있는 "Calculator"블록에 임의의 코드를 쓰는 방법을 찾아 냈습니다. 그래서 시뮬레이션의 올바른 위치에 Calculator 블록을 몇 개 만들었습니다. 그런 다음 코드를 일련의 변수 할당 명령으로 다시 작성했습니다. 확실히 해킹이 가능하지만 변수 값을 변경할 수있었습니다. – Nat

+1

다른 조건이있을 수 있습니다 (예 : 시뮬레이션이 실행 중일 때 값을 변경하지 못하게 할 수도 있습니다 (작업중인 특정 패키지에서 유효한 개념인지 확실하지 않음). 또는 변수가 실제로 저장된 다른 위치의 별명 일 수도 있습니다. – Nat

답변

1

해결 - 응용 프로그램을 잠그지 않고 트랜잭션을 만들지 않으면 API가 입력을 허용하지 않습니다.