AutoCAD VB :: Extract Attribute Values From Block In External Reference?
Mar 23, 2013is it possible to extract attribute values from an block in an External Reference using VBA ?
View 5 Repliesis it possible to extract attribute values from an block in an External Reference using VBA ?
View 5 RepliesI wanna transfer my attribute block values to another attribute text blocks , is there any lisp for that?
Is there a possibility for sum tag values of choice attribute blocks to inside of another attribute text block ?
Is there a way.....
I have a drawing that has external references bound to it. I would like to extract the bound external reference to its own drawing. Can this be done?
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).
I'm inserting automatically many references to a couple of dynamic blocks in an AutoCAD drawing using VB.NET. If the number of inserted references is not very big, it works fine but, if I´m inserting hundreds of them, I noticed the app is slowing down a lot.
After taking some measures of the time the app uses in its execution, I noticed changing the value of the block reference property is slower as the number of inserted block increases: it takes 10 or 20 miliseconds at the begining but it can take more than 1 second after inserting one thousand of block references (to the same block).This is the function I use to change the property values:
Protected Sub CambiarPropiedades(ByRef ed As Editor, _ ByRef br As BlockReference, _ByVal nombrePropiedad As String, _ ByVal valor As Double) Dim pc As DynamicBlockReferencePropertyCollection = br.DynamicBlockReferencePropertyCollection If br IsNot Nothing And br.IsDynamicBlock Then For Each prop As DynamicBlockReferenceProperty In pc If prop.PropertyName = nombrePropiedad Then prop.Value = valor '
This line takes a long time the first time I call this function for the ' same block reference but it is faster in the next calls . It also changes the block reference name (br.name) in the first call
Exit For End If Next End If End Sub.
Which I call to change all the properties I need to change in an inserted block reference:
CambiarPropiedades(ed, br, "h_testua", objElementoLaboratorio.POS_TEXTO) CambiarPropiedades(ed, br, "d_texto_hor", posxTexto) CambiarPropiedades(ed, br, "largo", objElementoLaboratorio.LARGO) CambiarPropiedades(ed, br, "fondo", objElementoLaboratorio.FONDO)
A weird thing I noticed is that when I call this function to change the first property of an inserted block, it also changes the .Name of the block reference.
Even if I change the order in the property modification, it takes always a lot in the first call, it does not depend on the property I´m changing.
How to get attribute values to match in the same block? In my titleblock have the clients name displayed a couple of time in the block. I want to be able to change the clients name in one spot and have it change in the other. I have tried to use fields but the field will only display the default value of the attribute.
View 2 Replies View RelatedIs there a possibility to use "Dynamic Blocks" as an "External Reference" having the ability to use their features at the same time?
The thing is I have dwg1 and dwg2 files and in them I use "Dynamic Block1". Whenever I update "Dynamic Block1" in one of the dwg files I have to go to "design center" and update the "Dynamic Block1" in other dwg file.
How to get attributes from block located at external drawing?
View 2 Replies View RelatedI have a drawing with many block references on it and they have some attributes.
I know how to find the block reference witch the attribute value, and even change it but I don't know how to select it once I have the object ID of the block.
How can I do the selection without asking the user to select it?
I have an issue regarding nested entity.
I have a nested entity block reference. In this entity I have three blocks. if I change any of the block reference attribute definition in the nested block reference then it is changing the original block itself.
Actually I am getting the handle of the selected block reference in the nested Entity. and change the attribute reference later. but it is making change in the block itself and other block reference too.
Here is my
static public void CONTACTS()
{
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
string contactName = string.Empty;//to hold contact name, from xdata
[code].......
Is is possible to get the block handle from an attribute reference? I get the attribute reference from a previously stored attribute collection. I did try attref.BlockId.Handle.Value.ToString(), but it gives a different value, not the block's id.
View 2 Replies View RelatedIs that possible to have a lisp to extract the Field Expression of a attribute in a block?Specifically, to extract the property VALUE (TextString) of this attribute.After to extract, I would like to put this text extracted in a different layout tab, in the same drawing. In this way, I will have a text linked to the attribute value between two layout tabs. So, when I have to change the attribute value, the text will be updated automatically.
I know that if I use the FIELD command to manually copy and paste this value it will work, but when I have a lot of attributes it becomes very laborious.
Here's my situation:
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.
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.
We have generic drawings of assemblies we use in layout drawings as standard details. We insert them as blocks with one or two dimensions that vary (geometry remains the same-these are just representative for information).
We could define these as attribute values so that a user types a length that displays in the drawing but if we wish this to be part of a dimension we would have to explode the dimension to manually replace the mtext dim value with an attribute tag.
This seems unsubtle so I edited the dim value to be a field referencing the attribute value and made the tag invisible. This worked in the drawing-the attached shows the attribute tag ALL THREAD and the resultant dimension text (as a field value) replaced with the default value LENGTH.
When the drawing is inserted as a block it duly prompts for a value for ALLTHREAD and any value can be typed-`1200, 3500, 1672 etc. but the dimension does not update from the default value LENGTH, even after using attsync, regenall. So, if the drawing recognizes the attribute then how come it cant recognize the graphic via a field reference and update it? Is it buried too deep in the database hierarchy for LT to make sense of it maybe?
I dont want to explode the dim but it looks like I may have too if this cannot be made to work.
I have only one user with this problem. He tries to edit an attribute block and when he selects one of the values and erases it the default value doesn't erase. He then has to enter some text and erase that and it works.
View 3 Replies View RelatedI was wondering if it was the COND statement that I would need to use to evaluate a block to confirm that two attribute tags existed and if so, if would process the block to perform an attribute extraction of both of those tags. It would ignore blocks that only had one or the other attribute tags - and only extract the attribute values if the block had BOTH of the tags present - It could be blank, but it had to exist.
For example, I want to find blocks that have the attribute tag "PART_A" and "ID" - and then create a CDF that has the value of "PART_A" in the first column and "ID" in the second column. Then it closes my CDF file.
Then, I want it to scan my drawing again for blocks that contain attribute tag "PART_B" and "ID" and then re-open that CDF file and append the values so that the values of teh attribute "PART_B" is in the first column and the values of the tag "ID" are in the second column.
I have been playing with the following code --- is there anyway to modify the code to get it to do what I need? I have already removed the part that writes the header-row....
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 have a block with:
tag1: XX
tag2: YYYYYY
tag3: ZZZZZZZZ
I have an external file check.txt with string:
XXYYYYYYZZZZZZZZ
I would like to create a lisp program that check the attributes of block using an external database, if tag1+tag2+tag3 = XXYYYYYYZZZZZZZZ ok end program, if not make a circle on block :
I am looking for a way to use the ATTIN/ATTOUT workflow to bring in data from an excel spreadsheet to drive the size of each of my block's instances. The block will be simple, a rectangle, with width and length parameters. For each entity in my excel/csv file these parameter values are spelled out. I know how to display these parameters in my attributes, but I don't know how, if I were to feed in these values, to drive the geometry. If there's a better way to take a list of width and length values to generate a series of blocks each with a rectangle containing its respective size.
View 1 Replies View RelatedI 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
I attached a jpg file for explain much better
select all blocks on certain layers in a drawing, check attribute CIRCUIT in each block if it starts with MS then attribute CONTROL = switched. I hope thats clear enough the way
(defun c:control()
(graphscr)
(Setq sc (ssget "X" '((0 . "INSERT")
[Code].....
I am using M Text Attributes to store imperial lengths in the drawing, feet inches and fractions (stacked). When I read back the Text String property which, is the M text Attribute.Contents parsed, I am having problems because the parser does not add a space between the inch and the fraction. So, is there any setting that could be used to tell the parser to add the space between the inch and the fraction?
View 1 Replies View RelatedI want to copy attribute values. I'm making a catalogue of all the reinforcements in my drawing so I need to name those reinforcements. So what I want is to make a string of text that I don't need to totally modify everytime. Something like this:
Amount of reinforcement bars - 5
Diameter of the reinforcement - 12
Division of reinforcing bars - 100
Reinforcement bars: 5-T12-k100
So the only attributes I'd edit would be the first three not the last one. So how can this be accomplished?
What I really want to do is on our fire alarm blocks we have 3 different attributes one for the address, the candela and one for misc info. I want to make an attribute that takes the number from the candela (15,30,75or 110) and change a different attribute to a value depending on which candela we use (such as 15=.078, 30=.113, 75=.195 or 110=.259). But I don't want the .078,.113,.195,.259 to print out on paper, I want to export block information excel file so I can add up all values.
View 2 Replies View Relatedknows a lisp to extract each attribute value from multi-entity single layer blocks to respective different user-named layers? Say tag1 value to layer1, tag2 value to layer2,entity1 to layer-entity1 .The source blocks are all in one layer containing texts and symbols/entities.
[URL]
ACAD LT 2006
I have various blocks with a letter assigned to them as a type. Problem is that some blocks are the same one but have a different letter as an attribute.
Is there a way to extract the number of blocks by a different attribute?
how to extract value X Y Z of point p3 p4
(defun c:test ()
(vl-load-com)
(setq actdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq objm (vla-get-ModelSpace actdoc))
(setq obju (vla-get-Utility actdoc))
(setq oldhigh (getvar "Highlight") oldsnap (getvar "Osmode") oldblip (getvar "BlipMode") oldecho (getvar "Cmdecho") );setq
(setvar "Highlight" 0) (setvar "Osmode" 517) (setvar "Cmdecho" 0) (setvar "Blipmode" 0)
[code]....
I just want to extract the coordinates and number of survey locations that are represented by point blocks from a drawing.
My template is on the desktop and is named
TAYLOR EXTRACT.txt
BL:NAME C008000
BL:COMMENT C008000
BL:NORTHING N0010003
BL:EASTING N0010003
I get the attribute extraction menu
select some points, verify that points have been selected
specify the above template
Specify the export file name
select ok
returns 0 records
I'm trying to write some code that adds values to attributes of a specified block. I'm able to search for the block, but I'm having trouble editing it.
Dim acDoc AsDocument = Application.DocumentManager.MdiActiveDocument
Dim acCurDb AsDatabase = acDoc.Database
Dim acTransMgr As Autodesk.AutoCAD.DatabaseServices.TransactionManager= acCurDb.TransactionManager
Using acTrans1 AsTransaction= acTransMgr.StartTransaction
Dim acBlkTbl AsBlockTable = acTrans1.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)
If acBlkTbl.Has("blockname") Then
*** here I need to get the object found in the active block table and edit it's attributes by attribute name ****
End If
End Using
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.
View 2 Replies View Related