AutoCAD Visual LISP / AutoLISP :: Extracting Attribute Values And Assigning To Variables?
May 27, 2013
How can specific attribute values be extracted from a drawing and assigned to a variable in lisp.
The existing title block is having attributes : Area, Sub area, Description, Drawing type. I want to extract this values and assign it to some variable which I have already listed and then it shall be assigned to some other attributes in the same drawing with Area1, Subarea1, Description1, Drawing type1... and so on.. Both the attributes shall be in the same drawing file.
how to extract the attribute value of a particular block in multiple drawings to an excel file.
Eg... there are nearly 800 drawings where I need to list down the description and Drawing number which is mentioned in the title block name "Title". The Drawing Number and the description is done in same attribute block. extract the data into an excel file or txt file. All the drawings are saved in one location.
I have an attribute blocks and this att block has two tag values , is there a simple code for to change 1st tag values automaticly according to 2nd values ?
for example :
1st tag (50x50) - 2nd tag ( 100 ) ==> 50x50-100
if i enter 201 valuse to 2nd tag then 1 st tag has to change as 100x100
if i enter 501 valuse to 2nd tag then 1 st tag has to change as 150x510
Say I have a block that contains two attributes, one contains a value that is a number and another contains a value that is letters. I have many of these blocks placed in a drawing, could you create a lisp that would return the sum of the number value and return it to the command line along with the letter value. Something like this:
Any routine where I could keep picking on my exit arrow blocks (showing how many persons exiting from each space) one-by-one and the program would add up the numbers. For example I pick on blocks with numbers of 2, 4 & 3 and I would get 9.
I have a block named "WIDGET-A". And in that block are (4) attribute tags whose names are:
"ID" "TAG01" "TAG02" "TAG03"
The user will be prompted to pick the value displayed at any of the "TAG##" attributes - they will select the attribute tag they want (we don't know which one it is, we just want to assign that value of the attribute tag they clicked on to a variable called "VAR2".
Now, what we also want AutoCAD to evaluate, behind the scenes, is the value of the attribute tag named "ID" which we know always exists in the block and then assign that value to a variable called "VAR1".
Is there a way for AutoCAD to do this all from only a single user pick on top of an attribute value, in a block whose name isn't always going to be 'WIDGET-A' either.... But the block, whatever it's name, will always have the attribute tag "ID" with a value in it, and we always want to capture the value of whatever attribute tag within the block that the user clicked on.
This time I'm wrestling with getting the values from multiple blocks. The blocks all have the same name but at least the attributes have names this time. Each block have exactly 4 attributes, like: att1 (a number representing chronological order), att2 (some data), att3 (the actual date as a string of when the data was added), att4 (some more data)
I need to get and store the attribute's values. I was hoping to make a selectionset of the blocks and step through using the chronological order number.
At this point I have tried several combinations of foreach and ssget "x" (list (cons 2 MYBLOCK)), but I keep getting errors that I'm sure are telling me that I'm not passing the correct information to the function for iterating through. I'm banging my head.
I 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.
How to connect to MySQL database and insert data from a set of blocks containing attributes?
Something like:
block 1:
- x coordinate; - y coordinate; - handle;
block 2:
- x coordinate; - y coordinate; - handle;
block 3:
- x coordinate; - y coordinate; - handle;
I've just got the second part (retrieving info from the blocks), but when it comes to connect to the DB I'm completely lost.
For the DB I'm using XAMP for Windows, thus using localhost, user ('user123'), pass ('pass123') and table ('table123'). The table has ID (PriKey and AutoInc), px, py and hdl fields.
There is a BLOCKA that I'd like to extract its attributes - Tag and Color - into an external format (excel). There after, I'd like to import it into the drawing and based on its color attribute value, change the value to that color in the drawing.
I have several title blocks each in their own paperspace pages. Could have the attribute filled in, but more than likely only one page will have values filled in the attributes. I am looking for a VL method for finding which pages title block is filled in so that I can get those values and fill in the equivalent attributes for all of the other pages. Currently I am using a long set of :
(IF (setvar "ctab" "8.5x11") (IF(TBLSEARCH "BLOCK" "TB-8.5x11") (IF (/= "" (get-att "OWNER" "TB-8.5x11")) ; Function to read a named attribute(editblk "TB-8.5x11") ; Function to pull up the attdia(IF (setvar "ctab" "11x17") (IF (TBLSEARCH "BLOCK" "TB-11x17") (IF(/= "" (get-att "CUSTNMFIRST" "TB-11x17")) (progn ; At the last page ditch the [Code]..........
The example is just a very simplified version of what I'm doing. I just need to find the information, if it exists in any page and store it for later. Afterward, I'll fill in each page's Title Block with the stored information.
I know that this can be done much more efficiently. As I am currently flipping through the pages too much action is occurring on the screen and it makes some people nervous. With VL I should be able to run the search quietly, but I would still like to (setvar "ctab" "to the page with the filled attribute value") after the LISP is finished storing values.
I need to match few attribute values from one block to different block. I download a lisp file called; ca.lsp which can match the single attribute value. I modified it for more than one attribute value matching. It is ok but still wish to overcome two issues for batch prcess
1. picking up the blocks by selection
2. click the alternative block numbers of times to match the numbers of attribute values I needed.
How to modify this lisp I can run it by block name selections instead of picking selection which enable me to run batch process for numbers of drawing? That will be good...
Lisp & Demo file attached (Match attribute value, A, B & C to Attribute 1, 2 & 3).
So what I'm trying to do is make a selection set that will only select a specific dimension, as I don't know the exact placement as it varies depending on the size of the part. I know what the value will be, but again the value depends on the size of the part, but one of the items earlier in my program is I get the Hole Spacing, which the dimension I need to select is Half of the Hole Spacing. Here is what I'm trying:
(setq HALFBOLTSPCDXF '((1 . HALFBOLTSPC))) where HALFBOLTSPC is a variable that takes the Bolt Spacing and divides it by 2.
When I do a run selection in Visual LISP, I get the following:
((1 . HALFBOLTSPC))
But what I was expecting to get was:
((1 . "10.00""))
As my test case is using 20" Hole Spacing which means half the hole spacing is 10.00". So is there another way to do this? OR what do I need to do to get it to recognize the Variable and give the value instead of the Variable name?
If needed: AutoCAD 2013 User using Visual LISP for editing LISP and DCL files Also I have AutoCAD 2011 currently still available for us, but we are using AutoCAD 2013 for 99.9% of AutoCAD use
I have a custom variable id like to have displayed in my princ section I have the following however it keeps returning ; error: bad argument type: file
Background: Someone exploded an attribute block and copied it hundreds of times throughout a project, each time changing the Attribute Tag to match the Value they expected to appear in their drawing. The drawing must be xrefed, so the attribute definitions do not appear.
(There is only 1 attribute in the block.)
Proposed Solutions:
1:AutoLISP routine which copies Tag data from Attribute Definition into Value of Attribute Block:
Prompt-Select Attribute Definition
Copy Tag data
Prompt-Select Attribute Block
Paste data into Value
(Allow repeat to speed workflow)(*PREFERRED*)
2:AutoLISP routine which copies Tag data from Attribute Definition into Default Value and creates a new Block:
Prompt-Select Attribute Definition
Copy Tag data
Paste data into Default Value
Create New Block
(Select Multiple Objects)(Creates tons of new blocks which are messy)
I want to write content of variables to a text file but I should have conversion function for variables.
for example
(setq a 123); a is an integer type, contetnt of a is 123
so I should use (itoa a) to get "123" as a string and then I can write it to text file.
but what about another type of variables?
(defun ToString ( a / result)(setq result "")(cond((= (type a) 'ENAME) (progn (setq result "Entity names")))((= (type a) 'EXRXSUBR) (progn (setq result "External ObjectARX applications")))((= (type a) 'FILE) (progn (setq result "File descriptors")))((= (type a) 'INT) (progn (setq result (itoa
My 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).
What i need to happen is this: When "whatever" returns "value0" i need to set "value0" to the first item in list "newlist". Then when "whatever" returns "value1" i need to set "value1" to the second item. Now I can do it the long hand way, but i am trying to simplify this step, and shorten up my overall program.
We have a custom LISP program (Written, upadated in 2003) that takes a keyed in item number, opens and searches a .txt file with four coulmns, for the keyed in item number (column 1) and returns a part number (column 2), description (column 3) and any information in column 4.
A quetsion was asked if the data in the .txt file could be put in an Excel file. I tried looking at other post, but I can't seem to find a clear cut way to open and extract the data. Or this old dog overlooked a boand. Is there a easy way to do this, similar to the above?
Any routine that will allow to draw a polyline through existing blocks, in the order the blocks should be numbered? Therefore when the sequence has been specified by the polyline then user to define the number system required, and the blocks are automatically numbered in the sequence of the polyine start to finish.
I am using AutoCad LT 2013 and I am looking to extract at the Wire#, the To_Device and the From_Device. I really dont care about the block name but if I have to have it fine with me. I have tried to follow the extraction file within AutoCad LT but havent been able to figure it out.