AutoCAD Visual LISP / AutoLISP :: Add / Modify And Remove Registry Key?
Feb 27, 2012Some time ago I was able to add modyfy and remove regestry keys ussing AutoLISP Unfortunatly I have lost the information on how to do this.
View 1 RepliesSome time ago I was able to add modyfy and remove regestry keys ussing AutoLISP Unfortunatly I have lost the information on how to do this.
View 1 RepliesI would like to capture a registry key value using autolisp if the value of they key equals TEXTEXAMPLE then exit Autocad else nothing.
View 4 Replies View RelatedI'm trying to fix my profile via lisp-registry key. Why? Because the profile we use is part of a plug-in meaning we can do it using our profile so I alternatively the answer is to tweak the one supplied as part of the plug in.
The method I’m familiar with is to edit using the following code as example;
(vl-registry-write "HKEY_CLASSES_ROOT\.PEN\Shell\open\command" "" "notepad.exe %1")
However that’s for creating a new registry key entry the one I have already exists but needs to be modified, better yet the profiles name (*.arg file) can change with updates, so in my search I came across the following link.
[URL]
Now I cant put it together and am not sure where I have gone wrong…(See code bellow)
(vl-registry-write "hkcu "\Profiles\" (getvar 'cprofile) "\General\DefaultConfig" "\\DCMAR02\A03P20")
How come I can't modify the following registry key to the SAVEFILEPATH variable?
(vl-registry-write "HKEY_CLASSES_ROOT\SOFTWARE\Treadstone\File Sweeper" "NETWORK_LOCATION" SAVEFILEPATH)
Which registry Key stores the name of the Current profile ("cprofile")?
I tried following, all reurn 'nil'
(vl-registry-read "HKEY_CURRENT_USER\Software\Autodesk\AutoCADR18.1\ACAD-9005:409\Profiles")
(vl-registry-read
"HKEY_CURRENT_USER\Software\Autodesk\AutoCADR18.1\ACAD-9005:409\Profiles\(default)")
In the registry when I double-click the key, the value is displayed. But I can't access it.
I downloaded a Copy of AutoCAD Recent Documents Manager.exe from the autodesk website and it won't run on any of the computers in our system. I was thinking about writing a LISP routine to delete the filenames with a DST suffix by replacing them with the next filename in the list. My question is If I replace the file with the next one above and the filetime,filepinned and class respectively. When I reach the end of the list can I just use "" for the file,filetime and class and integer 0 for filepinned (it looks like it requires a double).
View 1 Replies View RelatedMy company is in the process of upgrading to AutoCAD 2013 (yes, I know 2014 is out, but IT won’t let us get the most recent because of fear of “new release bugs”). My company is small and our CAD Standards/Management is less than desirable. Over the past few years I have become the unofficial company CAD Manager and have slowly been getting us up to speed with using the latest capabilities and following best practices.
An issue that I deal with constantly is a new user not having the correct registry-saved system variables set up. This also happens a lot because our IT guy frequently reinstalls AutoCAD to fix issues. Every time AutoCAD is installed/reinstalled, all the registry-saved system variables are set to their default values. We have several that need to be set a certain way to match our current drafting standards (a few examples: .bak files turned off, plot.log files turned off, advanced attribute editor turned on, plot area relative to edge of paper, etc, etc.). Typically, I will get complaints from users about something not working correctly, and then I will troubleshoot the issue and eventually find out that they just had their AutoCAD reinstalled and their system variables are not set how they should be. Then I will get out my list and have them set all the variable s properly via the AutoCAD command line.
I have read up on creating AutoCAD Deployments (and we will be using these Deployments for this upgrade), but there does not seem to be a way to set variables when creating the Deployment.
Finally, to complicate things a little more, most of our users actually use AutoCAD LT (so no Lisp), and only a select few (like me) have full AutoCAD. So, we will be creating two separate Deployment files as it stands (which is not a big deal).
Some of my preferred criteria for the solution:
-Solution can be used for both AutoCAD & AutoCAD LT (I’m okay with there being two separate system variable “deployment” files since we will already have two different AutoCAD Deployments. I would just like the procedure for deploying both packages to be the same regardless of whether it’s for LT or full version).
- Solution would be able to be applied to each workstation without opening AutoCAD on each machine (and ideally, it would all happen when the AutoCAD Deployment installer was run!)
Is there any current best practices for accomplishing this? (maybe by changing the registry through batch files, VBscript files, etc? Or using AutoCAD script files – however, this requires the program to be open to run, which I was trying to avoid).
Modify the attached lisp I found in this forum to work using a different hatch pattern, scale and angle. The new hatch should be in default Autocad "LINE" pattern and angle set to 90 degrees (vertical). If possible, I would like the angle and scale to be editable. Find attached Multi_Hatch-45 code posted by CADaStroumph in 2008.
View 9 Replies View RelatedI need the same funcionality as in code below, but without using "command".
The main idea is alowed user to modify Existing Selection Set.
(defun gt:ss->lst (a:ss / i lst ) ;_ / (setq i 0) (if a:ss (progn (repeat (sslength a:ss) (setq lst (cons (ssname a:ss i) lst) i (1+ i) ) ;_ setq ) ;_ repeat (reverse lst) ) ;_ progn ) ;_ if) ;_ defun gt:ss->lst(defun gt:ss_modify (a:en-lst / ) ;_ / ;;create Selection set (setq ss2 (ssadd)) (foreach f:en a:en-lst (ssadd f:en ss2) ) ;_ foreach ;;Run command and fill with initial content (command "_select" ss2) ;;Alow the user to modify the contents (while (/= (getvar "cmdnames") "") (command pause) ) ;_ while ;;get back the list of enames from modified selection set (setq ss3 (ssget "_P")) (setq ss3-lst (gt:ss->lst ss3))) ;_ defun gt:ss_modify(defun tst:gt:ss_modify ( / ) ;_ / (gt:ss_modify (gt:ss->lst (ssget)))) ;_ defum tst:gt:ss_modify
How do I change the insertion point of a text using "vla-put" ? I've tried using :
(vla-put-InsertionPoint en a)) with a = (4455.94 428.576 0.0)
and I get the following error:
lisp value has no coercion to VARIANT with this type: (4455.94 428.576 0.0)
I have a simple block with 2 attribute and 1 line inside it.
something like this:
Attribute1
──────
Attribute2
I want to modify length of line due to width of thoes attributs. length of line is equal to maximum(width attribute1 and width attribute2).
dxf code for start point of a line is 10 and end point for a line entity is 11.The question is: how can I modify the length of line automatically via maximum width of these attributes?
for getting width of a text:
(defun GetWidth ( en ) ((lambda ( lst ) (- (caadr lst) (caar lst))) (textbox en)))
sample:
A1
──────
Attribute2
Attribute1
──────
A2
Any lisp routine on how to change "Drawing Properties" (fields via Mtext) on multiple single drawing files?
There are several instances where we would need to take a project to create another one and simply change the title block description.
As of now, we are opening each drawing (there could be hundreds) and modifiying the drawing properties on each drawing to change the customer name and other project descriptions.
These are not attributes, but fields. I've researched alot on here and couldnt find anything.
The drawing is attached.
How to modify the column widths of an ACAD_TABLE?
I have known co-ordinates that I want each grip for the table to be set at. I can't just copy and paste the table from drawing to drawing. Each table of each drawing have different textual values, and the column widths will best be sized for each text value.
Is there a way to modify the existing Parametric Parameters that are in the Parameters Manager using LISP?
View 2 Replies View RelatedI am creating a selection set using ssget...
Then I copy that selection set multiple times in a loop. What I would like to do is then rotate (or otherwise modify) the last copied group of items. If I rotate "last" it will only accept the last drawn item, so only one item in the group of copied objects will rotate.
Here is the portion of simple code I am using right now (it's in a loop so all variables with 'Next' are changing each time):
(command "_.copy" SS1 "" SS1Base NextPT)
(command "_.Rotate" "l" "" NextPT NextAng)
This works fine with a single object, but I can't figure out how to call up the entire group of objects.
Civil 3D 2011
Windows 7 x64
I need a lisp routine that will add or subtract to modify a value in a text string. Its used for drainage fixture units on waste & vent plans. Example: We use basic dtext strings that look like this [color=red]4"(6)[/color]I would like to be able to add or subtract to the number that is [b][size=12pt]ONLY[/size][/b] in parenthesis and would like to be able to pick multiple text strings at one time so it would result in something like this: [color=green]4"(6)[/color] + 9 will become [color=blue]4"(15)[/color].
View 9 Replies View RelatedHow to change the dim text color in current dimstyle with a lisp routine? I want to modify current dimstyle instead of override current dimstyle, so it can change all existing dim text color under the current dimstyle.
View 9 Replies View RelatedI am starting with a polyline then i use the pasteblock command to insert that polyline as a block.Now i can pull up the property box and change the xyz scale.
I would like to know how to change these setting in my lisp.The scale will be x=1 y=0.1 z=1
I have a dynamic block that I would like to insert via a lisp routine. When the routine is run from my menu I would like to select two points on the drawing area. Then I would like my dynamic block to be inserted at one of the points I selected and then I would like a specific "point" of my block to be stretched to the other point that I selected. I was wondering if this is possible with LISP? I have my old LISP program I wrote that draws a leader and then inserts my block but that was before I started working with dynamic blocks.
Here is my current
(defun c:wldsym()
(setq osnapold (getvar "osmode"))
(setq orthold (getvar "orthomode"))
(setq dimsc (getvar "dimscale"))
[code]...........
wld1r.dwg is my current block. It has some dynamic properties already. But I'm trying to add new properties that can be seen in my working test drawing wld1r-new.dwg
When using my code with "wld1r.dwg" you can see how everything behaves right now. Then open "wld1r-new.dwg" and note that the insertion point and a stretch point my default are in the same spot. Work with the two stretch points and look at how the block reacts.
I am trying to make this: L:Engineering-208037SURVEYDRAWINGS turn into this: L:Engineering-208037DRAWINGS
I am using the dwgprefix and it returns the first string and i want to make it in the second string as a new variable or replace the old variable so i can use it in a save as routine i am working on.
The problem is sometimes them project number (0208037) will be longer or shorter so i can't use the substr command
I need to remove or replace text after comma in certain comment such as "Rope, approx. 0.3m length" i want to remove the red part
I've another LISP that only remove a fixed length which is not the case i've now.
I have the following code to delete all hatch in a drawing. At the end of the command there is a notice that all hatch have been eliminated.
However, the last message displayed is: "Hatch boundary associativity removed".
(defun c:deletehatch ( / d l )(vl-load-com) (setq d (vla-get-activedocument (vlax-get-acad-object))) (vlax-for a (vla-get-layers d)(if (eq :vlax-true (vla-get-lock a))(progn(vla-put-lock a :vlax-false)(setq l (cons a l)) ) ) ) (vlax-for b (vla-get-blocks d)(if (eq :vlax-false (vla-get-isxref b)) (vlax-for o b (if (wcmatch (vla-get-objectname o) "AcDbHatch")(vla-delete o)) ) ) ) (foreach a l (vla-put-lock a :vlax-true)) (vla-regen d acallviewports) (princ (strcat "All HATCH have been removed")) (princ))
I have a drawing that i know has xdata attached to layer zero. the problem is, it's not an object i can find. Any routine to remove xdata from ALL objects. like a global remove xdata?
View 6 Replies View RelatedSearched NG and did not find anything.
Given a list remove from list if both (nth 0) and (nth 5) are duplicates in list
(setq dolist '
(("CABLE, MIL-C-24640/18D " "IAF" "A/R" "FT" "6145-01-224-9183" "-" "3XSOW-7" "C-LC(1), (2)")
[Code]....
In my drawing I have lot of MTEXTS having unwanted spaces in between the text strings.
A lisp to remove space from MTEXT. Here i am attaching sample drawing with MTEXT which is to be modify. Magenta color MTEXT need to modify like yellow color MTEXT.
LISP application that will remove Proxy Images from inside a selected block?
View 9 Replies View RelatedI need a lisp sub-function that can empty all attributes of a specified dynamic block. The idea being that the specified block contains data that changes often and in order to repopulate the block's attributes with new data to replace the old I wish to just blank out the old data first, because it's possible that the new data may not utilize as many attributes and all of the old data must be removed.
The thing is the block I'm after is on several layouts, CTABs and they all need to be wiped clean.
I am looking for code to remove duplicate points (xy coords) from a list with a fuzz factor parameter.
View 1 Replies View RelatedThe routine below delete group of blocks by name, but if the blocks are on locked layers, these are not removed.
How can improve the lisp?
(defun c:deleteblock (/ rn ss)(defun Jd (realname) (setq ss (ssget "x" (list '(0 . "INSERT")(cons 2 (strcat "`*U*," REALNAME))))) (mapcar '(lambda (x) (if (not (eq REALNAME (vla-get-effectivename (vlax-ename->vla-object (cadr x))))) (ssdel (cadr x) ss))) (ssnamex ss))(setq ss_len (sslength ss)) (command "_erase" ss "") ) (setq rn (vla-get-effectivename (vlax-ename->vla-object (car (entsel "
Select the block you want to delete:"))))) (jd rn) (princ (strcat "
" (itoa ss_len) " Blocks called "" rn "" has been deleted")) (princ) )
There is a quick way to remove all attributes, including in nested blocks. Looking some lisp in the forum, I can't find one code for remove this elements completely.
View 9 Replies View RelatedI am trying to reduce the drawing file size. This is for uploading the drawings to AutoCAD WS. AutoCAD WS doesn't display or edit a drawing that is over 15MB. Unfortunately some of our drawings are over 15MB even after I have removed the background and others and have purged. I believe the reason why a drawing can be so big has to do with each object (grouped object) has a ton of information on it. For example, the properties of a typical object is like this:
( (-1 . <Entity name: 7ffffbece60>) (0 . "PRCD_FITTING") (5 . "145B6") (102 . "{ACAD_XDICTIONARY") (360 . <Entity name: 7ffffbece70>) (102 . "}") (330 . <Entity name: 7ffffbf59f0>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "BON-SupplyMP-3.0-4.0 RECT") (62 . 1) (100 . "CPrcdEntity") (280 . 10) (90 . 601861454) (70 . 24058) (70 . 4567) (280 . -65) . . Skip 3000 lines here for clarity . (90 . 0) (90 . 0) (90 . 0))
You can see from above that the list of properties are huge. All I really need are the visible parts of the object. This means most of the info above are junk.I try to reduce the size of object by exploding all the objects on the drawing. This sort of work in the sense that the file size of a test drawing is reduced from something like 8MB down to 6MB. But I am expecting far more reduction than this. The reason why I expect far more reduction is that the total number of lines of the exploded items of the same object mentioned above is reduced from 3000+ lines to only 300 lines as shown below:
( (-1 . <Entity name: 7fffe8654f0>) (0 . "LINE") (330 . <Entity name: 7ffffa1b9f0>) (5 . "3B11F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "BON-SupplyMP-3.0-4.0 RECT") (62 . 1) (100 . "AcDbLine") (10 4188.87 -423.095 156.0) (11 4188.87 -387.095 156.0) (210 0.0 0.0 1.0))( (-1 . <Entity name: 7fffe8655f0>) (0 . "LINE") (330 . <Entity name: 7ffffa1b9f0>) (5 . "3B12F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "BON-SupplyMP-3.0-4.0 RECT") (62 . 1) (100 . "AcDbLine") (10 4248.87 -453.095 156.0) (11 4212.87 -453.095 156.0) (210 0.0 0.0 1.0)).. Skip 250 lines here for clarity.( (-1 . <Entity name: 7fffe865260>) (0 . "MTEXT") (330 . <Entity name: 7ffffa1b9f0>) (5 . "3B0F6") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "BON-SupplyMP-3.0-4.0 RECT-ANNO") (62 . 1) (100 . "AcDbMText") (10 4193.39 -418.589 150.0) (40 . 3.0) (41 . 19.8) (46 . 0.0) (71 . 1) (72 . 1) (1 . "\Fdim.shx;\W0.7000000000;\T1.0000000000;\o\l24X30THRT") (7 . "BonDuctTXT") (210 0.0 0.0 1.0) (11 1.0 1.46161e-017 0.0) (42 . 17.5) (43 . 3.0) (50 . 1.46161e-017) (73 . 1) (44 . 1.0))
Therefore, I am expecting a 10-to-1 reduction, not just a 1/4 reduction.I am wondering there may be hidden data on the drawing that are left behind after I have exploded the objects. if there is a way to get rid of the hidden data?