AutoCAD Visual LISP / AutoLISP :: Layer State Delete
Feb 20, 2013
i have a small lisp and i would like for it to:
when i invoke the plot command, it will first check if there is a layer state called "Temp"if "Temp" exists, then delete "Temp", then re-create "Temp", then switch layer state temporariliy to "Plot" to plot the file, and then switch back to the "Temp" layer state againbasically, the "Plot" layer state will be set based on how the drawing(s) will plot. if a user makes changes here-n-there in the drawing, when the user wants to plot, the software will save current state as "Temp", plot using the "Plot" state, and switch back to "Temp" state at the end. all i am trying to achieve is to somehow over-write the "Temp" state. below is the LISP.
I have 2000+ drawings that have either the layer state "LMAN_DWF" or "DWF". I want all of them to read "DWF" for scripting purposes. LSIP routine that will go into a drawing and change rename a layerstate if it is named incorreclty, but do nothing if it is named correctly?
Does Layer State "DWF" exist?
If Yes, skip file and move on to next file
If No, does Layer State "LMAN_DWF" exist?
if Yes Rename Layer State to "DWF"
If No, skip file and move to next file.
Or a LSIP routine that can simply dump a list of all drawings in a directory that contain "LMAN_DWF" as a layer state. I could then use that list to do a simple script to change the layer state names on those specific files.
we have a good size project going on with lots of view ports of a base map (floor plan or site plan). Then we set the viewport layers the way we would like it, but along the way, we keep getting updated base maps (floor plan or site plan) with new layer created in them. These newly created layers are for the originator and will not affect our project.
Is there a way to have our project set to ignore any newly created layer from the originator of the base files? That is, we have our project (viewport layers) set the way we want it. When we get an updated base file, replace the xref(s), our layer state will still be the same, ignoring any newly created layer, automatically. I sure hope I am clear enough here.
Our problem is that when we get a new base file, then we would have to go to every file that has a viewport related to this new base file and turn off the new layers.
I'm creating a drawing set that has over 100 sheets with varying amounts of viewports on each sheet (from one to four). Each sheet is its own file, so there is only one layout per file. For each section of the drawing set, the viewports will have the same layer state.
Is there were a way to update the layerstate of each viewport through a batch LISP routine? This would save me DAYS in opening each file, importing the layer state, and restoring it for each viewport. It seems straight forward, but I have no idea where to start with batch routines.
(Part of a table that shows the block in the first column the block name in the second and the count in the third)
(IF (SETQ ss (SSGET "x" '((0 . "INSERT") (2 . "PoolLight,`*U*") (410 . "Model")))) ;| <- Just an example the full blocklist is much longer and not all are dynamic |; (WHILE (SETQ Ent (SSNAME ss 0)) (SETQ BlkName (CDR (ASSOC 2 (ENTGET Ent)))) (IF(SETQ tempList (ASSOC BlkName EndList)) (SETQ EndList (SUBST (CONS BlkName (1+ (CDR tempList))) tempList EndList)) (SETQ EndList (CONS (CONS BlkName 1) EndList)) ) (SSDEL Ent ss) ))
getting the visibility state name for each instance of a dynamic block. The blocks display properly with the count, but the block name displays the Uname - *U59, *U61, *U66, *U68, etc...
(Also, why LISP created tables always seem to force a Title or Header no matter how I try to supress it?)
toggling ribbonclose and ribbon but that did not answer my question. I'm using AutoCAD 2014 and there is a setting to either toggle through all ribbon states or you can select one. You can cycle through:
Minimize to Tabs
Minimize to Panel Tiles
Minimize to Panel Buttons or
Cycle Through All
I want it to always minimze to tabs but when I close CAD and re-open it doesn't remember that selection and always cycles through all minimized states again.
I don't see any system variable or registry value that seems to save this. how I can make it remember?
I have 4 Dynamic Blocks with the same name, but each are on different layout pages. I need to change the visibility state of all 4 to the same value. So far every attempt of mine has failed.
My process at this point is to: build a selectionset of all 4 Dynamic Blocks with the same effective name, convert the selectionset to a list of entity names, then use a foreach to change the visibility states one at a time. Currently, I get "error: bad argument type: lselsetp <Entity name: 7ffff7b6c90>". <Entity name: 7ffff7b6c90> is the entity name of the first block in the list. I'm guessing it's because the block is found on a non-current tab
(defun chgdynprop (e propname newval / obj v vval sal tot i) (setqobj (if(= (type e) 'vla-object) e (vlax-ename->vla-object e))) (if (= (vlax-get-property obj
I currently insert certain dynamic block into drawings with a short function that first inserts the specified dynamic block and then immediately changes the visibility state to one specified as an argument to the function.
I'm wondering if it is possible / better / faster to somehow insert the dynamic block with the decided visibility state simultaneously. I've been amazed by many capabilities of VL so I wouldn't at be surprised if this can be done. (the dynamic blocks I'm inserting could have many multiples in the drawing but I need this method to only affect the one being inserted at the time the function is called. I currently use entlast to decide which one is being inserted.)
I have created a bunch of templates (title block type drawings) for my company. In these templates there is a dynamic block used for a particular note. Based on customer number, this note will be changed.
We have a program that will insert the correct template based on the drawing type. It will know the customer number and change the dynamic block visibility state to reflect the correct text in the note.
Here's the problem; I don't know why, but sometimes the visibility state does not change. It's not the code as it works just fine in some drawings.
I've gone in and just changed the visibility state name, then changed it back, then saved the drawing and it worked. In some cases, I've also just gone into the template and deleted the dynamic block and re-inserted it, and it began to work again.
Having trouble with dynamic block visibility states not working when using an automated process?
I have a dynamic block with several visibility states, and each visibility state has one invisible-constant attribute. I can't seem to wrap my head around dynamic blocks well enough to get the value from the active visibility state invisible constant attribute. I know how to get the visibility state like this:
There are many lisp that draw offset line but what about opposite way , I have wall of double line i need to delete one of them let's say inside wall line .
why i need to do this usually when i tracing in external program like autocad architecture or Revit or archicad i just need outline of exterior and interior walls !.
is there way that can delete the offset line ?(or within range predefined in lisp to prevent interfering of lines deletion).
A plugging we use has just updated and loading double menus causing error messages prompting that menu already exists unable to load.
In my cui the menus are loaded in my enterprise as well as my main.
How do I keep the menu with the same name in my enterprise yet unload the one of the same name in my main (where it shouldn’t be) using lisp (I want to Automate this using lisp, since I'm not always in office at the same time as everyone else)?
I am looking for code that will delete all the properties within a DWG file.
Searching the forum, I found the following
; Remove any existing Properties (dictremove (namedobjdict) "DWGPROPS")
However, further research (forum, testing and help system) indicates that it no longer applies to current releases of AutoCAD so my initial happiness was short-lived!
The below gets the block names of empty block records. The blocks may or may not be actually inserted in the dwg. In my case though, apparently they are nested in other blocks in the drawing I am working with... but it looks as if they are part of deeply nested block definitions and therefore cannot be purged. I checked a couple blocks (the code returns over 1000 in my case) it returns and there are no objects in its definition.
How can I force them out of a drawing - and hopefully reduce it's file size?
I would like to use a lisp routine to open all the files in a selected folder, search for a blocks by name, delete them, purge the drawing, save and close.
trying to delete a file every time CAD is fired up and/or a new drawing is opened. i cannot make it work so far. planning to incorporate it into acaddoc lsp file.
I have a company .cuix menu that is loaded as a partial menu to the main acad.cuix file. I want to delete all the toolbars and pull down menus associated with it and leave the other stuff in place. This is in Autocad 2011 but should also translate to 2013. So far, I have tried opening the CUI menu, going to the company.cuix partial menu and deleting the toolbars. Then I hit save, then Apply. Toolbars disappear and pulldown menus go away. But when I reload AutoCAD they come back.
I have a program that makes 3d polylines from various data. That 3d pline then gets added to a civil 3d surface as a breakline. I want to modify the pline with my program, but preserve the handle, as I think that is what C3D uses to decide if its part of the surface. I tried this as a sample with no luck:
;DELETE 3RD VERTEXT FROM 3D PLINE (DEFUN C:T3 ( / EN ENAME ENT ENTL) ;GET 3D PLINE (SETQ ENT (ENTSEL " Select 3D Pline:")
[Code] .....
I know you can modify a vertex, but what about add and delete with entmake and entmod? I also considered using activex for this task, but you can only add verticies from what I could tell in the object browser of VBA, not delete them.
What I will be doing is deleting all the verticies and adding back the correct ones. Or if there was a way to transfer a handle to a new entity after deleting the old, that would suffice too.