In most cases this works well. However I found a case that it not work as well. When I try to change the definition from a new block that I have created in my test DWG, it disappears from the model.
I have a small vba sub wich changes the color and layer of all entities inside a block. It seems to work pretty well for the majority of blocks, but then if I try that on a dynamic block, the definition is correctly altered, but the references aren't updated...
I know for a fact that the definition has been correctly modified because if I type bedit, I can see the definition is modified. Then, in the block editor, if I save the block, the references are correctly updated.
How to force references to update after I made the modifications inside the definition ?
I searched for methods within the VBA Reference and I tried blockRef.Update but it doesn't seem to have any effect.
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.
I get a block reference (has attribute) from other drawing as code follow:
Public Sub GetBlock_Info() Dim blockName As String = "test" Try Dim doc As Document = Application.DocumentManager.MdiActiveDocument Dim doclock As DocumentLock = doc.LockDocument() Dim ed As Editor = doc.Editor Dim ofd As New OpenFileDialog("Select Drawing", Nothing, "dwg; dwt", "ATS detai drawing", Autodesk.AutoCAD.Windows.OpenFileDialog.OpenFileDialogFlags.DoNotTransferRemoteFiles) Dim dr As [code]..........
I have a block: “Block_A”. I am trying to determine if a block reference of the block exist.
Currently I would iterate every block Reference in the Block Table, and then dig deep into each block ref . . . . .
I was wondering if I could just take “Block_A” and see if it has reference and where the references are. Perhaps this is just wishful thinking but I was hoping for a faster way to obtain the references then to iterate thousands of blocks in each table record.
Drawing contains a block with "BlkName". I want to insert blockreferences of this existing block using .Net. All shows how to insert a new block and then use the BlockID returned by the insert function. In my case I only have the block name and there is no Block id. How to get it or how to create a block reference of an existing block?
I have a question regarding parameters in a block definition, or more specifically how to constrain parameters. I have attached a PDF showing exactly what I am working on. Basically I have an arm for a monitor which I need to add some parameters to. I need to be able to have a point that I can grab where the "primary grab" is located, and when I grab that I need the arm to pivot at the indicated pivot point, but be restrained by the first arm that is constrained to the circle. Is this possible to do in AutoCAD?
Is there any way not to show a particular block in block definition table ? My program bring a block into drawing thru a user form . And set some Xdata to it after insertion . If user bring the block manually into drawing then how would we know which one has xdata and which one doesn't. I came to this solution to hide it in block definition list.
how I can get VBA to insert/redefine a block reference from another file into a block (of the same name) that already exists in the target drawing?
I've tried using the insertblock method but it produces a 'filer error' - As a bonus point, it'd would also be good to be able to retrieve the contents of the blocks collection in the source drawing in some clever way other than opening it (a bit like browsing using the design centre) ?
ACad, MEP, 3DS Max Windows 7x64 X5482 @3.2Ghz 8Gb Ram Quadro FX1700
I need to remove lines from a block definition and replace them with LWpolyLines. I see there is a way to Append entities to a BlockTAbleRecord but I don't see a way of removing an entity.
I am wondering what Block Authoring actions i can use to move my Attribute Definitions up and down in a Dynamic Block. I understand duplication the definitions can get really ugly.
So i want to be able to have a second visibility tab in my block the nwhen i select it my Attribute Definitons insertion point moves to another co-ordinate with in the block.
How to do this so it doesn't ask for a block definition!
I have an extruded region of 50 x 50 (SHS) that I want to put a 45 degree mitre on, so I orientate my UCS to ortho, I have a reference line drawn over the job for my 45 degree/3 points to pick...
I Select 'both' to keep and it asks me for a block definition?
I have a large symbols library and need to have 1 block name and count but be able to show them in different colours depending on where they are placed. (eg pink block at low level and green at high level, but when counted by block name it counts 2 not 1 green 1 pink).
So far what I have found in this forum and TheSwamp the best way is to use DeepClone of BlockTableRecord but the objects in original BlockTableRecord need to be DeepCloneObjectes into new block. Otherwise new block will have all objects with ObjectId from old BlockTabkeRecord.
What order of operations do you use to include multiple attributes in a WBlock definition? I can't figure out to include all of attributes and have them in a specific order.
I am trying to assign a plotstyle to attribute while creating a block. First I create the block, then I insert the Blockref, in that process I have errors assigining a plotstyle to the attribute. (I have also tried to assign the plotstyle while creating the block and attribute with poor results.)
Here is my attempt to do this:
For Each objId As ObjectId In blkTblR Dim obj As DBObject = objId.GetObject(OpenMode.ForRead) If TypeOf obj Is AttributeDefinition Then
I'm having trouble getting my attribute definitions to work with my blocks.
I'm trying to create a tag that can flip around (dynamic) and have a tag number easily entered (attribute).
I notice that I could only get the attribute definition to work during a drawing insertion is when I wblocked out my block and inserted that drawing file. I was not able to insert the drawing file that had the block in it.
I can't seem to make a dynamic block drawing file, and then insert that dynamic block drawing file if I want the attribute to work..
Is there a short cout to getting to the source drawing file containing block data? Drilling down into the Program Files folder is tedious in the heat of getting drawings done.
I've got a drawing from a client, I've created a layer and I'm adding MTEXT to the drawing. Rather than creating a new MTEXT every time, I copy and paste the previous one and edit.
It works for a bit then out of the blue, it will give me that error after there's about 16 copy/pastes.
_pasteclip Duplicate definition of block _ArchTick ignored.
I don't understand what _ArchTick is or how I can get around this error?
I want to determine the size of a (non-dynamic non-annotative) block definition (BlockTableRecord). Does a block have a boundry or limits? For example, if the block would contain a simple square, the size of the block would be equal to the size of the square.
Presently if I insert a block into my drawing - and a block with the same name exists - the newly inserted block takes on the definition which exists in the receiving drawing . How do I reverse this i.e. I want to be able to overwrite the existing block definition by inserting the new wblock version.
I have several existing block definitions and need to change the insertion point. Also, when creating a new block in the Block Editor, how do I define the insertion point?
2014. In help, it says to "Click Insert tab-Block Definition panel-Manage Attributes" In my display, when clicking the Insert tab, I only have a "Block" panel, not a "Block Definition" panel. Trying to get to the Sync command.
I have a weird problem with exploding block reference with vb.net as follows.
When I use BR.explode(DBObjectCollection), and append the entities in the object collection to model space,
the 3d Polylines inside the block reference do not get appended and I do not get any kind of error. The reason for this eludes me as of yet. (remember, simple polylines and lines and other objects do get appended to model space)
When I use BR.explodetoOwnerSpace(), the block reference explodes as it normally is expected to, but then I have no way to collect the objects from the exploded BR.
I'm working with two different drawings to import Layers for Lot Grading and when I'm importing the Block Reference from the origin file, it's setup as Linescale 0.5, but when I import into my regular basemap, which is setup for Linescale 1, the text size is double what it should be.