AutoCAD .NET :: How To Get Custom Property Names / Values From Custom Property Bag
Sep 15, 2011
I have been trying to find a method to extract custom properties from the custom property bag.
I have been able to extract the property value, using the "GetProperty" and the associated "GetValue" method, this method works when I know exactly what property name I am looking for. What do you do when you don't know the property name?
here is my code snippet..
dim myProps as acsmcustompropertybag = mysheet.getcustompropertybag
dim myProp as iacsmcustompropertyvalue = myprops.getproperty("SOMENAME")
dim myPV as string = myProp.GetValue
what I want to do is:
dim myProps as acsmcustompropertybag = mysheet.getcustompropertybag
dim myPN as string = ??????????.tostring
dim myProp as iacsmcustompropertyvalue = myprops.getproperty(myPN)
dim myPV as string = myProp.GetValue
When using Inventor with Vault, we have a problem when categorizing custom content center parts in Vault. In short, custom content center parts are incorrectly categorized as "Content Center" and automatically released - as there is no property that we can use to identify these files.
I need iLogic code to trigger when custom content center files are created/saved, wich adds the following custom iproperty "IsCustomContentCenter=True".
But this does not work anymore. So I created this sub but it does not seem to work either.
Public
Sub subFindCustomParam(ByVal strUserParameter AsString) Dim infoDB AsDatabase =Application.DocumentManager.MdiActiveDocument.Database Dim infoBuilder AsDatabaseSummaryInfoBuilder = NewDatabaseSummaryInfoBuilder(infoDB.SummaryInfo) [code]........
I am trying to create a sketched symbol on the fly that has custom properties in it. I am also creating the custom properties on the fly. I need to get the actual expression for the property into the sketched symbol not just a value. I need this so that I can export the drawing as an autocad .dwg that has attributes in it.
I am mainly developing for AutoCAD 2013/2014 how to implement a custom property as a drop-down list using OPM and .NET/C# wrapper. I have successfully created categorized custom properties already and can read/save them in XRecords via the OPM. I further implemented the members for IDynamicEnumProperty (using an ObjectARX DLL) in .NET/C# which are:
And I have implemented the GetCurrentValueData() and SetCurrentValueData() members in my .NET/C# wrapper as per the IDynamicProperty2 interface as following:
public void GetCurrentValueData( Object pUnk, ref Object varData ) {AcadObject obj = pUnk as AcadObject; if ( obj != null ){using ( Active .Document.LockDocument( DocumentLockMode.ProtectedAutoWrite, null, null, true ) ){using ( var tr = Active.Transaction ){ObjectId ObjId = new ObjectId( (IntPtr) obj.ObjectID ); DBObject DbObj = tr.GetObject( ObjId, OpenMode.ForRead ); if ( DbObj != null ){try {if ( [code]....
This code compiles without error but instead of the expected drop-down list the OPM only shows a field where I can enter or edit integer numbers, but there is no drop-down list when clicking on the field....
The SheetSetObject has an inbuilt custom property called "TransmittalSetups", but the property has a different internal object structure compared to other CustomProperty
Ie:
[code]
Dim myPropEnum As IAcSmEnumProperty = myCPB.GetPropertyEnumerator Dim myPropName As String = Nothing Dim myPropValue As AcSmCustomPropertyValue = Nothing
myPropEnum.Next(myPropName, myPropValue)
[/code]
myPropName is a string, and in this instance it returns a value of "TransmittalSetups"
myPropValue.GetValue is a string, and it says "System.__ComObject" not a "value".
So my question is, how do identify this object, how to interigate it or assign it to its native object type.
I have tried to cast it to different IAcSmEnum types but without success.
I would like to set the custom property format for all user paramters from an iLogic code. This is what I've come up with. It runs, but it does not seem to alter the custom property format. What am I doing wrong here?
I am having trouble getting a field in a multi leader which is part of a block to reference a sheet set custom property. I have fields within mtext in paper space that are not blocked that are referencing correctly but just not in my blocks.
The company I work for produce drawings for various types of fabrication.
Using Inventor I have a drawing border in which tolerance values change depending on the type of fabrication to be produced. The type of fabrication (0,1,2,or 3) is designated by a custom property entered during part/fab model creation.
This property may change depending on various production factors. The issue I have is how do I get the border to recognize this potential change in fab type and populate the tolerance fields with the necessary information?
I am using some custom property set definitions to add information to spaces. However as I insert spaces I find that I have to go to the extra step to add the property set to the object using the Extended Data tab in the Properties Palette.
It is not a huge deal but sometimes it is forgotten and schedules are not reporting properly, or the display theme is not correct. Although there are tools to quickly add them I would like to know if there is an automatic way to add them while creating the spaces/zones.
On a related note. There is a property set definition that is in each file by default called RoomFinishObjects. Is there a way to purge this? I don't want to attach finishes to my objects. But it seems to be embedded in the file.
My company has a custom property named 'Released date, Type Date.
This date is still empty
I am working on a rule that adds all the custom properties required for the company title block.
This rule can be useful whenever you get a model from a supplier.
I can add a custom property date using the following
Dim oDoc As Document = ThisApplication.ActiveDocument Dim customPropertySet As PropertySet = oDoc.PropertySets.Item("Inventor User Defined Properties") Try iProperties.Value("Custom", "Released Date") = iProperties.Value("Custom", "Released Date") Catch
[Code]...
This code works but sets the released date to Now.
But the release date needs to remain blank when adding.
I tried to make the value Null but I get the error:
"Value of type 'System.DBNull' cannot be converted to 'Date'."
Is there a way to keep a custom property date blank?
I FINALLY decided to get my head around the Sheet Set Manager (kudos to Kate Morrical's video series).
I understand the need to create custom properties, and I can see that you can either "add" or "delete" custom properties, but is there any way to CHANGE the property after it's been defined?
For example, if I create a custom property complete with a default value, but discover later that I made a spelling mistake (eg. "Darwn By" instead of "Drawn By"), is there any way to MODIFY it?
I'm tasked with setting up a new dwt file to be used along with the Sheet Set Manager.
I've got as far as adding in my own custom properties at both the Sheet Set level (things like project name, site name, etc.), and at the Sheet level (drawing title).
But more specifically, at the Sheet Level, I want to be able to facilitate having a multi-line drawing title. Things start to get a little cloudy.
In order to be able to control where the line breaks are, I've simply created 5 fields (3 for an odd number of lines, 2 for even), and I want to set their Default Value so they don't display anything, i.e. a space or blank of some kind, instead of the four dots. So when I want to add the title I go to the Sheet properties and change the value.
I thought it'd be as simple as adding the ASCII code for a space (U+00A0) into the Default Value, but that seems to display the text U+00A0 instead of the space.
I'm trying to see if I can write a rule that will link a custom property at the part level in a template and have it update when I copy the part and drawing to a new design. Below is the formula I'm using and it works in the original files but when I use Design Assistant to create a copy for a new design, this formula will not update.
I have a part number that i want to defined in custom properties.
Then would it be possible to call it out in Ilogic? that way in any drawing doesn't matter where the part number will always be the same for that part when i balloon and the same in the BOM.
I have a frame fabrication / assembly with a Custom iProperty called "FINISHED MATERIAL SIZE". I have set the following parameter for this property:
FINISHED MATERIAL SIZE = <Stock Number> x <G_L>mm
This returns the stock size and length to my drawing cutlist. The problem is that the <G_L> Parameter returns the trailing zeros and unit string.
I would like to set all the frame members in the assembly such that the G_L parameter returns a value rounded off to 0 decimal places with no trailing zeros and removes the unit string as well.
Is there a way I can achieve this from the assembly so I don't have to manually open each frame member and make the changes in the fx parameters dialog one at a time?
How would i insert the "variable name" of a custom iProp to a sketched symbol definition (in an idw)?
I can plonk the value of the iProp in no worries, but to make it "live" is a bit beyond me...
Sub WeldNote()On Error Resume NextDim oDoc As DrawingDocumentDim SketchedSym As SketchedSymbolDefinitionDim oNoteDef As SketchedSymbolDefinitionDim oDefSketch As SketchDim oTextbox As TextBoxDim SNewText As StringDim sNoteText As StringDim oReffedDoc As DocumentDim lReffedWeldType As Long'Err.ClearIf
I need importing and exporting custom layer property filters. Long story short, we XREF a lot of mechanical equipment in our models and when we create a structural drawing make all of the mechanical item print in a light ghosted color. I created a layer property filter with a huge list of all the possible equipment prefix's like *cl-* *tk-* *rv-* and so on to filter out all the equipment layers. It took a long time to create, so I want to export it and import it into future drawing.
Having problems using custom pipe properties in pipe label expressions in 2013? I have some expressions relating to stub callouts and the ones that directly reference the custom properties lose that reference every so often.
For example I have and expression called "STUB-Riser-Length2d" which is defined as "{Riser Length} / SQRT(2)" where "Riser Length" is the custom pipe property. Every week or so it changes to "/ SQRT(2)".
I haven't been able to find the pattern as to exactly when this happens yet. All expressions not referencing custom properties seem to be holding steady. The pipe catalog is on a shared drive on the network, if that makes any difference.
Civil 3D 2013 - Windows 7 Pro 64 - Dell T3500 - Xeon 2.67 - 24gb - Quadro 600
I have generated frame that has 100 members in it. Is there a quicker way of changing G_L unit to a mm so that I don't have to go into all 100 parts to change the custom properties? also I do not need unit string to be appear in my BOM.
By Opening File into AutoCAD I can set the Custom Property(dwgname,dwgid,projectname) of the File. But I want to set value of these properties without opening AutoCAD application.
I can set it using: public void SetAttributes(Hashtable hashTable,String fileOpenPath){ Document Doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.Open(fileOpenPath);
Can we create this Object using any other way??
Database Db = Doc.Database; DatabaseSummaryInfoBuilder DbSib = new DatabaseSummaryInfoBuilder(); Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = Db.TransactionManager; using (Transaction aTran = tm.StartTransaction())
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.
Just a quick query about Dynamic Blocks. I use dynamic blocks with various visibility states regularly in my drawings. Is it possible to add some kind of custom variable or value to a dynamic block so that I can identify them in automated scheduling?
For example, if I have a dynamic block which represents three variations of very similar machine models is it possible to somehow give each visibility state a value, ie: the model numbers. M100/M125/M150 etc which can then be extrapolated depending which visibility state is active?
Also regarding the limitations of dynamic blocks. Is there a number of visibility states I should not exceed so that the blocks still perform 100%?
I need to insert a table on one of my Inventor drawings, however, it will vary in size (Fixed colums, variable number of rows). I have searched the forum and found this snippet of code to add a 2x20 table.
Sub Main()Dim oDrawDoc As DrawingDocumentoDrawDoc = ThisApplication.ActiveDocumentDim oSheet As SheetoSheet = oDrawDoc.ActiveSheet' Set the column titlesDim oTitles() As String = {"Member","Pos. From Datum A"}Dim oPoint As Point2doPoint = ThisApplication.TransientGeometry.CreatePoint2d(1, 28.7)' Create the custom tableDim oCustomTable As CustomTableoCustomTable = oSheet.CustomTables.Add("Infill Spacing", oPoint, 2, 20, oTitles)End Sub
The Problem
I now need to be able to do two things:
1. Delete all custom tables that may be on the drawing ( I may have more than 1 custom table on the drawing)
2. Access the individual rows and colums in a specific table so I can write a variable into them.
I have searched high and low for the API commands, but cant seem to find them.
In CorelDraw X3 we had named our custom color tabs for easy cross checking before processing the files. When we bring these files in to X6 it is not holding the same file name that we put in place on X3. This information shows up in the bottom right had corner of your Coreldraw page.
How the custom naming looks in X3
How the custom naming looks in X6
We need the file to tell us the Dates#1 DD1111 as all the information. We have thousands of x3 file that this will affect for checking purposes.
I've recently switched to Lightroom and was wondering whether it is possible to change the date format for the folders used for inport. Ideally I would like to use a structure such as this:
2012 |_ 01 - Jan |_ 02 - Feb
As far as I can see that's not possible with the buit-in import presets organized by date. Is there any way to cusomize these formats to add 2012/01 - Jan etc?
I want to add a column to my parts list, which displays a value based on a formula.
Lets say i want to show the submerged weight of a part; So i need to create a column, which can use the information about a parts volume and mass to calculate its submerged weight.
An easy formula, but is this possible in Inventor (2012 Pro)?