AutoCAD VB :: Inserting Stored Block Into Active Drawing
Jan 7, 2014
I want to insert a stored block into a drawing (model space). Below is the code I'm using and I get
Runtime Error '5': Invalid procedure call or argument.
Sub Dummy()
Dim COESTD_obj As AcadBlockReference, InsPtStd(0 To 2) As Long, COESTD As String
COESTD = "C:JimHYDROCAD_DwgsBlocksZ_COE_STDS.dwg"
InsPtStd(0) = 0#: InsPtStd(1) = 0#: InsPtStd(2) = 0# 'Set insertion point as 0,0,0
Set COESTD_obj = ThisDrawing.ModelSpace.InsertBlock(InsPtStd, COESTD, 1#, 1#, 1#, 0#)
End Sub
I am trying to insert a block from another drawing, the only way I have been to acheive this has been to open the drawing
Set ObjDocument = ThisDrawing.Application.Documents.Open("D:ACADBlocksGENERAL.dwg") For Each ObjBlock In ObjDocument.Blocks If InStr(ObjBlock.Name, "LOGO") <> 0 Then CopyObjects End If Next
ObjDocument.Close
I would prefer not to open the drawing to access the block, is this possible in VBA.
I'm trying to build a routine for my job to insert a block which consists of 3 single line variable attributes in a specific order. I need to be able to do this on many different drawings, and I would like to share this ability with my coworkers. Using the DesignCenter is not an option. In order to do this, I saved a drawing which consisted of the three attributes in the layout in which I need them to appear, however the order in which it prompts me to enter them is reversed. I already know how to set the order of attributes in an EXISTING block definition using the BATTMAN command, as every time I run the routine again, I'm redefining the block definition.
I'm not sure if it's important to know this, but the routine consists of a button with the following macro:
I have created a dynamic block of our companies Stage section. The block is set up as a rectangular array using XY parameters.
The block itself works fine however I created block attributes in the block dwg to display its measurements using the Distance x and Distance y totals.
When inserting the block into a new drawing I need to explode the block in order for the array to work, however this also means that the text is no longer locked to the block.
I had been trying to insert a title block (block) in to a drawing as part of changing the title block But in some drawings the block gets scaled off. Is there any system variable or any solution to maintain the drawing without getting scaled while inserting block.
I had used -dwg units and this appears to single drawings only. Any other way to do this to all the files in a folder.
We're using C3D 2013 SP2. The survey company we use uses point styles to show the blocks. Say they shoot a catchbasin. Instead of inserting the block, the point shows up as the block.
I did a field check & needed to insert a missed CB. When I inserted the block, the other points that were CBs disappeared. I had to insert the block, copy it the clipboard, undo the insertion & then paste the block in. It did this on other drawings & other blocks.
Is it possible, via whatever methods (lisp?) to be able to have a premade block with an attribute and insert it into a drawing then assign a value to it by selecting another existing block in the drawing and using one of its own attribute’s values?
For example, say I have a block representing a telephone and it had an attribute called "PhoneNo" and I inserted it into a drawing showing an office floor plan that had blocks in each office space that are telephone junction boxes with attributes "PhoneExtension". I would like to be able to autocomplete the entering of the “PhoneNo” data by selecting one of the telephone junction boxes in the drawing and using its attribute’s value.
I have created d/blocks for my different pipe sizes i.e one block with a dropdown to select the different sizes and have done the same for my flanges. now how do I link / insert the flange d/block to the piping block so that I can export the information into a material list later on.
I can insert a block with block attributes using the Inter op very easily:
Dim theBlock AsAcadBlockReference Dim pickScreenVBA = myDoc.Utility.GetPoint(, "insert the hydrant") theBlock = myDoc.ModelSpace.InsertBlock(pickScreenVBA, "Hydrant", 1.0#, 1.0#, 1.0#, 0) Dim varAttributes AsObject varAttributes = theBlock.GetAttributes varAttributes(0).TextString ="3 Ports" varAttributes(1).TextString ="Salt water"
Works great, but when I try using the non-inter op, all the example insert new Attributes and not add block with existing attribute (so I end up with duplicate attributes for each block - i.e "Salt water" attribute is added to the block each time I run the code),
Are they any examples that does the same as above using the non-interop code?
I have several blocks saved as separate .DWGs, some of which are dynamic. I want to review and test these blocks, but I can't find a way to open the existing block definitions in the Block Editor without first inserting the blocks into a drawing.
I would like to know if there is a way to insert drawing no.1 into drawing no.2 (not copy sheets!) so that if I change the drawing no.1, the drawing no.2 (the one that contains no.1) also updates.
That is because I would like to have one part of the drawing that is ''standard'' and multiple drawings that contain this part (so that this part is defined in all drawings but is always the same). Because I don't want to have a separate drawing for the ''standard'' part, but only drawings that contain it.
Dim editor As Editor = Application.DocumentManager.MdiActiveDocument.Editor Dim db As Database = HostApplicationServices.WorkingDatabase Dim tr As Transaction = db.TransactionManager.StartTransaction()
[Code].....
the only prob is : I want selec all block but not the block on layer frozen, off or not visible...
I can check all layer stat on each block.. (i do that already for check each block (name) but i want a solution more easy.)
it errors with an elock violation, even though I lock the document with dwg1DOC.LockDocument before I try to save and unlock it after.
The same code runs fine on the current document so at this time I just ended making the other document current just to save it then switch back to previously current document.
What am I missing to save a document that is open but not current?
I have several closed ployline shapes in a particular layer, I need to know a way to:
a) pick all the entites on that layer
b) export to a dxf file each individual entity on the layer (yes, each entity saved to a separate dxf)
I am almost positive I can answer 'a' on my own using an object collection and a conditional statement? I am really more interested in how to export an entity from current open drawing to a dxf file in .net
I wish to insert a title sheet dwg, which has attribute definitions, as a block in another dwg. I can insert it, and if I explode it, the attribute definitions appear. Otherwise they are not added to the database.
I am using standard code, which I can attach. it starts
Dim btr As BlockTableRecord .. Dim blk As BlockReference = New BlockReference(ip, blkid) ' insert block .. btr.AppendEntity(blk) If btr.HasAttributeDefinitions Then ForEach attID As ObjectId In btr etc.
We have just done an overhaul of all our standard block symbols. These ultimately get saved into our title block template files.
Is there an easier way than Inserting each block individually?
Is there a variable that can automatically Redefine all blocks if I drag them in using ADC? The default setting is that any block that is already defined in that drawing will not get redefined.
Im having some troubles inserting a block into a line. See image. The block on the left inserts into the line and has attachment points (AutoCAD P&ID Provided) the block on the right i created. Im unable to get it to insert within the line without manually breaking the line after insertion, the result being the line through my block.
Every time I insert a block (dynamic or otherwise) into any drawing (I have tried several) my ucs (0,0) changes to the insertion point of that new block. I don't know what I have done, what button I have inadvertently pushed or setting that I have set, but I do not know how to undo this!
First, it requires there to be a prompted entry text box in the title block named <SCALE>, is there any way to write to a textbox that is not prompted entry? The prompt when a new drawing or sheet is created is misleading and makes users think they need to manually fill out the prompt. Secondly, this code works on multi-sheet drawings but it concludes by making the last sheet active. Since we are triggering this rule before save it's a nuisance to have the drawing switch sheets everytime you do a save. Ideally, the current active sheet should remain active when the rule runs. Here is the
For Each oSheet In ThisApplication.ActiveDocument.Sheets ActiveSheet=ThisDrawing.Sheet(oSheet.Name) If oSheet.TitleBlock Is Nothing Or oSheet.DrawingViews.count=0 Then Exit Sub oTitleBlock=oSheet.TitleBlock oTextBoxes=oTitleBlock.Definition.Sketch.TextBoxes [code]....
I have written a program that basically replaces certain mvblocks, tags actually, in several drawings, the purpose being to change the displayed label of an object.
I have just 2 of the 3 affected drawings open and just 1 of those 2 is acually active at the time the program runs.When I run the program the tags in the open and active drawing get replaced fine.
The tags in the open but NOT active drawing appear unchanged but a "regen" causes them to go away but the new tags do not appear, if I save, close, and reopen the drawing, as the drawing is reopening I see the new tags but the label text is offset and just prior to the drawing being fully open (back at "command" prompt) the tag text does move to its correct location. a save now saves the drawing correctly so on subsequent openings everything is correct.
The tags in the unopened drawing, when I do open it, once again, I see the new tags but the label text is offset and just prior to the drawing being fully open (back at "command" prompt) the tag text does move to its correct location. a save now saves the drawing correctly so on subsequent openings everything is correct.
Regardless of the state (open, unopen, active, inactive) I am running each drawing through the same subroutines to delete the old tag and put on the new as I am passing the drawing DB to the subroutines, the only difference being that I am putting a document lock on the open drawings documents before I start the subroutines.
I do have the CommandFlags.Session flag set on the command that launches the program. So, what am i missing that the new tags are not showing up in the open but inactive dwg until the drawing is saved and reopened, and then in both, open and inactive and the unopened dwg the label text appears offset until the dwg opens completely?
I'm new to the style library and how to take an existing drawing that was created on one standard, and changing it to another standard I just created. The new standard has different dimension styles, text, and layers. I've added all the styles to my style library and I've set the new standard to the active standard in both the styles and standards editor and the document settings. If I create a new view, it comes in on the new standard, but the existing views are still on the old. How to I get the existing views on the new standard?
I have a ton of blocks with attributes. Sometimes when I insert them, AutoCAD (2011) prompts me in the command line (perfect). Other times, a prompt box appears to insert attribute definitions (annoying).
What setting do I have wrong, or am I setting the blocks up incorrectly?