FastFiber

SetSystemVariable en Invoegen Blocks, error in code.

Gestart door Bassiemeer, wo 23 03 2011, 09:46:52

Vorige topic - Volgende topic

Bassiemeer

Ik heb een probleem met mijn code, de regel met SetLayer geeft een fout.
Application.SetSystemVariable("CLAYER", 0) geeft de error: Expression does not produce a value.

Wat ik wil bereiken is dat als de knop "Invoegen" wordt ingedrukt dat de applicatie de huidige layer (CurrentLayer) ophaalt uit AutoCAD. Dit doet hij ook, gechecked via een MessageBox.
Vervolgens moet de huidige laat naar 0 worden gezet, nu doe ik dit nog met een SendstringToExecute.
En aan het eind moet ik de laag weer terugzetten op de oorspronkelijke laag.

Dim CurrentLayer = Application.GetSystemVariable("CLAYER")
Dim SetLayer = Application.SetSystemVariable("CLAYER", 0)

"Applicatie"

Dim SetLayer = Application.SetSystemVariable("CLAYER", CurrentLayer)


Maar door de foutmelding loop ik een beetje vast.

Bassiemeer

#1
Wow.. hoe kom ik erbij om hier een Dim enz. voor te zetten.
Application.SetSystemVariable("CLAYER", 0) moet het gewoon zijn  :oops: :oops:

EDIT:
Met de volgende code krijg ik in AutoCAD zelf een foutmelding, Unhandled exception.
Dim CurrentLayer = Application.GetSystemVariable("CLAYER")
Application.SetSystemVariable("CLAYER", 0)

"Applicatie"

Application.SetSystemVariable("CLAYER", CurrentLayer)


Wat gaat er mis ?

sschevers

Bassie,

Laagnamen zijn van het type string. Wat je nu doet is een integer naar de functie schrijven en dat vind autocad niet zo fijn. Wat je sowieso moet doen is het declareren van je variabelen het type variabele meegeven.

Dus:

Dim CurrentLayer as string = Application.GetSystemVariable("CLAYER")
Application.SetSystemVariable("CLAYER", "0")

<doe je ding.

;; Herstellen van laag instellingen
Application.SetSystemVariable("CLAYER", CurrentLayer)




succes

stephan

Bassiemeer

#3
Ooh nou dan ga ik dat eens proberen.
Waarschijnlijk gaat het alsnog fout omdat ik de blocks op dit moment insert via SendstringToExecute.
En gaat hij al terug naar de CurrentLayer terwijl ik in de "pause" zit van de stringtoexecute.

EDIT: Dit bovenstaande werkte niet. Weer een Unhandled Exception.

Ik ben aan het kijken naar de volgende code:
http://forums.autodesk.com/t5/NET/Insert-block-from-disk/m-p/1932281

Na het wegwerken van een aantal errors, bijvoorbeeld Imports AcDb = Autodesk.AutoCAD.DatabaseServices pakt hij niet. Maar wel Imports ADb = Autodesk.AutoCAD.DatabaseServices omdat anders Imports alias 'AcGe' conflicts with 'Structure AcGe' declared in the root namespace.
Is dit zo goed opgelost ?

En ik houdt uiteindelijk 3 errors over, 2 maal BlockNameToID(blockname) en 1 maal tbl.Item(BlockName)
En deze hebben dan de volgende 2 errors:
Value of type '1-dimensional array of Autodesk.AutoCAD.DatabaseServices.ObjectId' cannot be converted to 'Autodesk.AutoCAD.DatabaseServices.ObjectId'.
en
Value of type 'Autodesk.AutoCAD.DatabaseServices.ObjectId' cannot be converted to '1-dimensional array of Autodesk.AutoCAD.DatabaseServices.ObjectId'.   

Ik hoop hier nog een oplossing voor te vinden.
Ook heb ik geen idee hoe ik dit aan een userinterface te koppelen.