Is it possible to save an object before I run dbDeleteObject so that it can be restored. I am working on a script where I may want to restore an instance I deleted.
Is the only way to do this brute force by saving all of the instances properties?
inst = car( cvid->instances); Get my instancebackupInst = instdbDeleteObject(inst); delete inst
inst = car( cvid->instances); Get my instance
backupInst = inst
dbDeleteObject(inst); delete inst
Both inst->?? and backupInst return:
-> dbGetq: object is a purged/freed object - db:0x2057b31b
What I want to do next:
dbCreateObject(backupInst); A function that doesn't exist.....
If you don't have a dbSave in your script, you should be able to do an undo and get the inst/objects back.
If you are wanting specific inst/objects, you are going to have to write to a file or create a variable to hold the deleted inst/object value.
In reply to psill000:
The simple answer to the original question is "no". The closest is hiUndo, as the previous poster explained.
There's no dbCreateObject - you have to use the specific dbCreate.* function to recreate the object. Bear in mind that deleting some objects actually can delete multiple objects - for example, if you delete a net, it will delete any terminals on that net, plus any pins on those terminals (not the figures though). I think it deletes the instTerms too. So restoring it will not be that straightforward.
I'd really advise against any methodology which relied on deleting something temporarily and then restoring, unless that objects is quite constrained - i.e. it's a known type of object which you can capture the info about an recreate using the appropriate API, rather than trying to make this work for any arbitrary kind of object.
In reply to Andrew Beckett:
OK. Thank you for the responses. The item in question is specifically an instance within a schematic so I can do as you say and just save specific properties required to reproduce the item (brute force but it works alright).
I'm curious, could you do something like create a temporary cellview and the set the cellView property of the instance you are "deleting" so that it moves to the temporary cellView?
tempCvid = A new schematic
inst = some schematic instance
-> db.....the original schematic Cvid
inst->cellView = tempCvid
Message: *Error* unknown: (DB-370034): dbSetq: Cannot set attribute - cellView
Doesn't look like this is possible.
In reply to acook:
Correct, you cannot change the cellView attribute. Using dbCopyFig() you could copy the instance to the scratch cellview:
scv = dbOpenCellViewByType("test" "scratch" "schematic" "schematic" "s")
I've assumed that the instance in question is selected in the schematic, but if you are working non-graphically in that cellview too, you could use something like dbFindAnyInstByName() to get the instance database ID.
Hope this helps.
In reply to skillUser:
Or you could use dbMoveFig() instead to move it directly from one cellView to a scratch one, and then move it back again afterwards. That's even simpler.