2017-04-13 2 views
1

AutoCAD hat eine raffinierte Weise Systemvariablen durch seine APIAutoCAD .NET-API (in Bearbeitung) WIPOUTFRAME Systemvariable

Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable (string, object)

die Zeichenfolge des Änderns ist die Variable-Name-System - in meinem Fall „WIPEOUTFRAME“

das Objekt die Einstellung - ich habe es auf 0

ich habe verwendet, um das Verfahren für andere Systemvariablen festlegen möchten, und es funktioniert, aber nicht dieser.

Stattdessen bekomme ich den eInvalidInput Fehler zur Laufzeit.

Ich habe festgestellt, dass WIPEOUTFRAME korrekt ist (I sie über die Kommandozeile in autoCAD einstellen) und I verifiziert, dass der Wert 0.

I ist auch die GetSystemVariable (string) Verfahren verwendet haben, die gibt die Einstellung als ein Objekt zurück, um zu überprüfen, ob das Programm WIPEOUTFRAME versteht und dass es den Wert 0 zurückgeben kann. Außerdem habe ich den Typ des zurückgegebenen Objekts bestätigt: INT16.
Ich habe auch das von GetSystemVariable an SetSystemVariable zurückgegebene Objekt übergeben und es funktioniert! Auch wenn ich sicherstelle, dass der Wert von WIPEOUTFRAME 0 ist. Es ist das einzige Mal, dass ich die Methode zum Laufen brachte. Aber natürlich möchte ich den Wert von 1 auf 0 ändern. Während also bestätigt wird, dass die Methode funktionieren kann, hilft mir die Weitergabe des gleichen Objekts nicht, den Wert zu ändern.

Ich habe versucht, den Wert 0 an den Parameter als ein Objekt übergeben, als ein int16-Objekt, als einfach 0, als eine Zeichenfolge, und so weiter ... kein Erfolg.

Könnte dies ein Fehler in der API sein, oder kann mir jemand sagen, was ich vermisse?

+1

Ich arbeitete mit einem anderen CAD in C#, die eine komische Schnittstelle hatte. Am Ende schrieb ich Brute-Force-Tests, um herauszufinden, wie alle undokumentierten Funktionen funktionierten. Sie könnten versuchen, wie andere numerische Typen oder auch nur eine Zeichenfolge "0" (auch wenn es scheint, ein int16 zu sein), versuchen, es mehrmals (wahrscheinlich mit einer Verzögerung zwischen den Versuchen), etc .. In einigen Fällen Ich fand Wege, Dinge zum Laufen zu bringen, die keinen Sinn ergaben. aber sie waren zuverlässig reproduzierbar, also machte ich eine Wrapper-Klasse, die die COM-Schnittstelle umging und diese merkwürdigen Dinge machte. – Nat

+1

In einigen Fällen konnte ich nicht herausfinden, wie man den Wert einer Variablen einstellt - das System ließ mich einfach nicht. Aber ich habe herausgefunden, wie man willkürlichen Code in "Rechner" -Blöcke schreibt, damit ich die Simulation ausführen kann, wann immer ich wollte; Also habe ich einige Calculator-Blöcke an den richtigen Stellen in der Simulation erstellt, dann habe ich ihren Code so umgeschrieben, dass er eine Reihe von Variablenzuweisungsbefehlen enthält. Definitiv ein Hack, aber ich konnte die Variablenwerte ändern. – Nat

+1

Sie könnten andere Bedingungen erfüllen, z. Sie können die Werte möglicherweise nicht ändern, während eine Simulation ausgeführt wird (nicht sicher, ob dies ein gültiges Konzept in dem jeweiligen Paket ist, mit dem Sie arbeiten), oder die Variable ist möglicherweise nur ein Alias ​​für einen anderen Speicherort, an dem sie tatsächlich gespeichert ist. – Nat

Antwort

1

Gelöst - Ohne die Anwendung zu sperren und eine Transaktion zu erstellen, akzeptiert die API die Eingabe nicht.