Inventor Engineer-to-Order (ETO) Series is a product that allows the automation of repeatable designs. ETO captures engineering logic and taking care of the code typically required for configuring, placing and creating parts and assemblies in Inventor.
A little known fact is that ETO can also be used with AutoCAD much in the same way that it can be used with Inventor.
In this simplified example I have created an ETO model called "MarksDesign". "MarksDesign" is a model for laying out bolt configurations. It allows for the specification of bolt layout and type and provides some simple design attribution.
In AutoCAD, ETO adds an additional panel which displays information about the loaded ETO design model. Currently as shown below the design is using "M10" bolts, has 2 bolts per array and has two arrays.
By adjusting the parameters in the design we can see that the AutoCAD design will be updated.
We set the array quantity to three and the number of bolts in an array to four.
And set the bolt type to "M4", note the drop down list for selecting values.
After clicking "Ok" we can see that the drawing and annotations have been updated.
An ETO design is captured in a language called Intent, it looks similar to Visual Basic and shares some syntax, but that's where the similarities end.
ETO's Intent language is all about capturing the rules that create a design. When you look at Intent code you don't see the complexities of dealing with AutoCAD entities in the same way that you would with .Net, VBA or AutoLisp.
The code that is behind this demo ETO Design is as follows:
Design MarksDesign : AcDrawingDocument my_designs_Root
<%%Choices("M10,M4")> _
Parameter Rule boltType As String = "M10"
Parameter Rule arrayQuantity As Integer = 2
Parameter Rule boltsInArray As Integer = 2
Uncached Rule totalBolts As Integer = arrayQuantity * boltsInArray
Child boltArray As :BoltArray, Quantity = arrayQuantity
basePoint = Point(0,500 * (child.index - 1),0)
End Child
Child BoltArrayDimension As :LinearDimension
fromPoint = nth(1,boltArray).basePoint
toPoint = nth(arrayQuantity,boltArray).topPoint
location = Point(-50,0,0)
dimtype = :Vertical
charHeight = 40
End Child
Child TotalBoltLeader As :TextLeader
charHeight = 30.0
Text = "Total Bolts: " + stringValue(totalBolts) + "x " + _
boltType
location = nth(1,boltArray).basePoint + Vector(300,200,0)
toPoint = nth(arrayQuantity,boltArray).topPoint
End Child
End Design
Design BoltArray : my_designs_Root LightweightPart
Parameter Rule basePoint As Point = Point(0,0,0)
Parameter Rule topPoint As Point = basePoint + _
Vector(0,50 * (length(hBolt) - 1),0)
Lookup Rule boltType As String = "M3"
Lookup Rule boltsInArray = 5
Child hBolt As :Insert, Quantity = boltsInArray
blockName = :HexBolt
libraryFile = "G:\Dynamic Blocks\Mechanical - Metric.dwg"
sourceName = "Hex Socket Bolt (Side) - Metric"
reload? = False
origin = Vector(0,50 * (child.index - 1),0) + basePoint
dynamicProperties = {"Size", boltType}
End Child
End Design
At first glance the Intent code may appear daunting, but on closer inspection you'll see that all it is doing is creating properties that the user can interact with, creating arrays (groups) of elements in the design, and positioning where things should appear in the design.
To achieve something similar in a maintainable, reusable, rules orientated way in another language would require hundreds of lines of more code. This structured rules oriented way of designing saves a few man hours when creating a demo but is multiplied exponentially on a real project.
This is only the first snowflake on the tip of the iceberg of what ETO can do, for some online samples and videos check out: http://etosamples.autodesk.com/