DanielLench_
Advocate
1631 Views
17 min 7 sec read
This widget could not be displayed.
This widget could not be displayed.

The Network Pipe Catalog

 

The pipe catalog is pretty easy to put on a shared source for use across a distributed workforce. You browse to the out-of-the-box (OOB) location (for 2022: C:\ProgramData\Autodesk\C3D 2022\enu\Pipes Catalog), copy it to your server \ACAD\Pipe Catalog location, and set that location in the Civil 3D system by typing "SETNETWORKCATALOG" at the command line.

 

You can only set a pipe catalog location by the command line or button. The path is stored in the profile.arg file, and I cannot auto-load it. So this is the second part of my fancy two-step install process.

 

However, if you're following along with my series on CAD Management, you know I don't stop there. What I have found to be the most universally applicable pipe and structure size library begins with some customization. These edits have been future-proof for over 15 years, and I don't see any reason for them to be affected in upcoming releases. We rely on the program to validate our edits but start with an OOB object. I don't make a bunch of complicated customize parts that exactly model the structure they are meant to represent. Instead, I choose a general shape and run with it. This means the structure may be more of a clearance check than a pretty picture. If the program could realistically model the flow of water through structures, then maybe a true model would be needed. Additionally, I have used this generic style of part modeling on projects with high LOD (level of detail) BIM requirements with no issues.

 

To be clear, I personally have not needed to use pressure networks and therefore have not developed them. I also preface this article with some things to watch out for. We will be editing xml files, and they have the *.xml extension. I do not like working in the Part Builder, and I can make changes much faster in the xml files. However, we will use the Part Builder's "Getting Started - Catalog Screen" to test and validate our edits. Type "PARTBUILDER" in the command line to launch, and use the third and fourth buttons at the bottom to regen and validate the Pipe and Structure catalogs. Hit the cancel button when done, and view the results of the validation check in the "Validate" folder inside your catalog path.

 

DanielLenchWPM_0-1679499701067.png

 

I also will not be using the Content browser. We will be creating CORE parts and then copying the xml, dwg, and bmp, to build out the catalog. We must take great care to change the Universally Unique Identifiers or UUIDs in the xml files, or else we will have errors. I cheated a bit on this one and will explain later. I will also apologize to my friends not in the USA for the necessary use of the imperial system. It is what I have the most content developed for in these object types. I would much rather use metric for everything (cry). I will note the item to change for metric use below.

 

I make no guarantees of the code below, and if you see an error, PM me, and I'll fix it ASAP and credit you for your amazing brain. I also will not be held responsible for anything that may happen to your CAD system, either locally or across a working environment, or for any loss, real or otherwise. Please test anything you do extensively before rolling it out to production. This article is meant for educational purposes only.

 

If you want to support a legacy catalog along with the new pipes and structures to depreciate legacy items in the future, place the new files alongside the legacy ones. You can also make new organizational folders for the new parts. Dig around and understand the folder structure, and you'll come to a conclusion on which is right for you. Feel free to copy the contents of an OOB pipe catalog and delete anything except for these folders and their contents of them. Inside what I have renamed "Pipes" and "structures," I have also renamed and edited the *.apc and *.html files to match the folder name. Then I delete all folders inside these folders and make a few folders named based on the convention I desire, which is the generic shape in this case. I will copy OOB files into these new folders as I need and edit them. After you do this, run the PARTBUILDER to regen and validate the catalog before proceeding. DO NOT MESS with any other files in any other folders.

DanielLenchWPM_1-1679499843152.png

 

Let us briefly discuss the files that makeup Pipe and Structure definitions.

DanielLenchWPM_2-1679499887151.png

 

 

 

 

 

The *.bmp contains a simplified rendering of the part to be shown as a preview in various places in the program. The *.dwg file contains a sketch of the part with attributes that will query an external xml file to get the modeled size parameters. The *.xml has all the goodies and is what I edit. For pipes and structures, there are two kinds of xml files, one that has the inner dimensions linked to the wall thickness and the other that is basically a free for all regarding sizing.

 

A made-up example of the linked type would be a pipe with a 24-inch inside diameter that will always have a wall thickness of 2 inches. And in the same material, a pipe with a 36-inch inside diameter will always have a wall thickness of 3 inches. These are pipes where a manufacturer has provided specifications about their product. A made-up example of linked dimensions in structures would be where a 24-inch wide box has a predefined length of 36 inches, and any additional 24-inch wide boxes are also predefined with their respective lengths, such as a 24"x42" and 24"x60" or 36"x60" and 36"x96"

 

An example of a free for all would be a part where you could select a wall thickness and diameter independent of each other. So you could create a bonkers pipe with a 24-inch inside diameter and a 24-inch wall thickness. That pipe will be 6 feet in diameter. And again, the same thing happened for our 36-inch inside diameter and a 24-inch wall thickness for a total diameter of 7 feet! Why would you do this? Some thermal lines for campuswide heating and cooling use hot and chilled lines that run in a loop to multiple buildings and commence and terminate at a central utility plant. Think of these central utility plants as a heat pump or compressor unit and water heater for a house. They have pipes that run through the house to provide climate control and hot water for washing and typically have insulation around them. So with our bonkers pipes above, we have 24 inches of insulation surrounding the pipe and therefore need to account for clearances. There have also been uses for other strange sizing where you would use a pipe style that only shows the inside wall and a label with the inside diameter, but the outside diameter is large for one reason or another.

 

A free for all structure is one where any width can be combined with any length. A made-up example would be a 24-inch wide box with a 36-inch length like the above. However, you have the ability after the part is placed in the drawing to change the length to 42", 60", or 120" and anything else from a dropdown box. Another made-up example of a free for all structure is what I like to use as a generic null structure that replaces the program's null structure. My generic null structure is a cylinder with an inner diameter of 0.01 and a wall thickness of 0.01'. This structure can automatically adjust to the surface, unlike the default null structure. It also has the ability to have a description applied to it which can be shown on a label in addition to other options, as seen below.

 

Default Null

DanielLenchWPM_3-1679500100048.png

 

 

Custom Null Structure

 

DanielLenchWPM_4-1679500104167.png

 

 

Here is an example of a hardcoded part. The filename would be "CORE-CirPipe.xml." Look for the "RowUnique id="r#" and unique string of characters. This is the UUID I spoke about above. Looking further down in the code, you see coordinating rows for diameter and wall thickness. Each of these is wrapped inside some code that defines the parameter. You can see that RowUnique id="r0" UUID belongs to the Row id="r0" parameters, and by combining each of the "r0" numbers, you get a pipe with an inner diameter of 6 inches with a wall thickness of 1.5 inches, (look for the unit="inch" code which you would change to metric as appropriate).

 

 

 

 

 

 

 

 

 

 

<?xml version="1.0"?>
<LandPart desc="Part Table" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink" fixColumn="C1">
	<ColumnConstView desc="Parameter-driven Display" id="CCV1" viewKey="3d" viewName="AeccPartRecipe" pathsRelativeTo="Table">
		<Images>
			<Image>
				<URL xlink:title="Part Reference Image" xlink:href="CORE-CirPipe.bmp"/>
			</Image>
		</Images>
		<Recipe>CORE-CirPipe.dwg</Recipe>
	</ColumnConstView>
	<ColumnUnique desc="Primary Key" datatype="string" name="UUID" visible="0">
		<RowUnique id="r0">0a346449-3863-414f-ab57-1175da68fa20</RowUnique>
		<RowUnique id="r1">083e8b7e-7ea6-45ad-9bfa-3a3fe013011f</RowUnique>
	</ColumnUnique>
	<Column desc="Inner Pipe Diameter" dataType="float" unit="inch" name="PID" id="C1" visible="1" context="PipeInnerDiameter" index="0">
		<Row id="r0">6</Row>
		<Row id="r1">8</Row>
	</Column>
	<Column desc="Wall Thickness" dataType="float" unit="inch" name="WTh" id="C2" visible="1" context="WallThickness" index="0">
		<Row id="r0">1.5</Row>
		<Row id="r1">1.6</Row>
	</Column>
	<ColumnConst desc="Part Domain" dataType="string" unit="" name="PDom" id="CC0" visible="0" context="Catalog_Domain" index="0">Pipe_Domain</ColumnConst>
	<ColumnConst desc="Part Type" dataType="string" unit="" name="PTyp" id="CC1" visible="1" context="Catalog_PartType" index="0">Pipe</ColumnConst>
	<ColumnConst desc="Part Subtype" dataType="string" unit="" name="PSTyp" id="CC2" visible="1" context="Catalog_SubType" index="0">Undefined</ColumnConst>
	<ColumnConst desc="Part Name" dataType="string" unit="" name="PrtNm" id="CC3" visible="0" context="Catalog_PartName" index="0">CORE-CirPipe</ColumnConst>
	<ColumnConst desc="Part Description" dataType="string" unit="" name="PrtD" id="CC4" visible="1" context="Catalog_PartDesc" index="0">CORE-CirPipe</ColumnConst>
	<ColumnConst desc="Part ID" dataType="string" unit="" name="PrtID" id="CC5" visible="0" context="Catalog_PartID" index="0">51cf5a49-6b3d-405b-9e80-74da50496bca</ColumnConst>
	<ColumnConst desc="Data Version" dataType="string" unit="" name="DVer" id="CC6" visible="0" context="DataVersion" index="0">2.0</ColumnConst>
	<ColumnConst desc="Content Type" dataType="int" unit="" name="CntTy" id="CC7" visible="0" context="Content_Type" index="0">4</ColumnConst>
	<ColumnConst desc="Hide Part Flag" dataType="bool" unit="" name="HPrtF" id="CC8" visible="0" context="Catalog_PartHide" index="0">0</ColumnConst>
	<ColumnConst desc="Cross Sectional Shape" dataType="string" unit="" name="CSS" id="CC9" visible="1" context="SweptShape" index="0">SweptShape_Circular</ColumnConst>
	<ColumnConst desc="Custom Sizing Flag" dataType="bool" unit="" name="CusSF" id="CC10" visible="0" context="CustomPartSizing_Flag" index="0">1</ColumnConst>
	<ColumnConst desc="Material" dataType="string" unit="" name="Mat" id="CC11" visible="1" context="Material_Type" index="0">CORE-CirPipe</ColumnConst>
	<ColumnCalc desc="Part Size Name" dataType="string" unit="" name="PrtSN" id="CCA0" visible="1" context="Catalog_PartSizeName" index="0">FormatNumber($PID,0) + " in. CORE-CirPipe"</ColumnCalc>
	<ColumnCalc desc="Body Diameter  1" dataType="float" unit="inch" name="BdyD1" id="CCA1" visible="0" context="BodyGeometry_Diameter" index="1">$PID</ColumnCalc>
</LandPart>

 

 

 

 

 

 

 

 

 

 With the row with id="r1" you have a pipe with an inner diameter of 8 inches and a wall thickness of 1.6 inches. Using this knowledge, you can copy and paste as many row definitions as needed to build a circular pipe with predefined wall thicknesses. The only things you need to make sure are changed are the "r0" so you have unique and sequential row numbers, id="r27" or id="r302" up to any number you need. Then change the UUID, so they do not repeat. I use an online UUID or GUID generator to make a bunch and paste them into my code.

 

Change the CORE-CirPipe.bmp to the correct image as well as the recipe CORE-CirPipe.dwg. Make sure to change the Catalog_PartID UUID as well. Then change the Part name, Description, and Material to something meaningful. Last, change the Part Size Name, which currently is FormatNumber($PID,0) + " in. CORE-CirPipe" and will take the $PID, which is the part's inner diameter, and add the exact text in the quotes, which is one space, the letters in and a period, and CORE-CirPipe. The pipe label would say "8 in. CORE-CirPipe" without the quotes.

 

For this core pipe with hardcoded wall thicknesses, I suggest you copy the dwg and bmp for the OOB part AeccCircularCMPipe_Imperial.

 

Some pipes may need a Mannings parameter, which you can see examples of in the AeccCircularConcretePipe_Imperial.xml.

 

The same rules will apply to rectangular pipes with the different rows needed for "Inner Pipe Width" and "Inner Pipe Height" instead of diameter.

 

 

 

The code below is a free for all types of circular pipe. The filename would be "CORE-GenCirPipe.xml." This pipe again only has two items in it for the example but notice that they are not rows but items in lists. This method gives the user a drop-down box to pick from items predefined in a list as the Inner Pipe Diameter parameter has, or to enter any number they want from a range between 0.0100 to 100.0000 for the Wall Thickness parameter allows. The default for the range will be 1.0000 if nothing is changed.

 

For this core pipe with a list and range of dimensions, we can copy the same dwg and bmp for the OOB part AeccCircularCMPipe_Imperial.

 

Again, some pipes may need a Mannings parameter, which you can see examples of in the AeccCircularConcretePipe_Imperial.xml.

 

And again, the same rules will apply to a free for all rectangular pipe with the width and length parameters.

 

 

 

 

 

 

 

 

<?xml version="1.0"?>
<LandPart desc="Part Table" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink" fixColumn="C1">
	<ColumnConstView desc="Parameter-driven Display" id="CCV1" viewKey="3d" viewName="AeccPartRecipe" pathsRelativeTo="Table">
		<Images>
			<Image>
				<URL xlink:title="Part Reference Image" xlink:href="CORE-GenCirPipe.bmp"/>
			</Image>
		</Images>
		<Recipe>CORE-GenCirPipe.dwg</Recipe>
	</ColumnConstView>
	<ColumnConstList desc="Inner Pipe Diameter" dataType="float" unit="inch" name="PID" id="C1" visible="1" context="PipeInnerDiameter" index="0">
		<Item id="i0">1</Item>
		<Item id="i1">2</Item>
	</ColumnConstList>
	<ColumnRangeList desc="Wall Thickness" dataType="float" unit="inch" name="WTh" id="C2" visible="1" context="WallThickness" index="0">
		<Item id="i0" rangeVal="Min">0.0100</Item>
		<Item id="i1" rangeVal="Max">100.0000</Item>
		<Item id="i2" rangeVal="Default">1.000</Item>
	</ColumnRangeList>
	<ColumnConst desc="Part Domain" dataType="string" unit="" name="PDom" id="CC0" visible="0" context="Catalog_Domain" index="0">Pipe_Domain</ColumnConst>
	<ColumnConst desc="Part Type" dataType="string" unit="" name="PTyp" id="CC1" visible="1" context="Catalog_PartType" index="0">Pipe</ColumnConst>
	<ColumnConst desc="Part Subtype" dataType="string" unit="" name="PSTyp" id="CC2" visible="1" context="Catalog_SubType" index="0">Undefined</ColumnConst>
	<ColumnConst desc="Part Name" dataType="string" unit="" name="PrtNm" id="CC3" visible="0" context="Catalog_PartName" index="0">CORE-GenCirPipe</ColumnConst>
	<ColumnConst desc="Part Description" dataType="string" unit="" name="PrtD" id="CC4" visible="1" context="Catalog_PartDesc" index="0">CORE-GenCirPipe</ColumnConst>
	<ColumnConst desc="Part ID" dataType="string" unit="" name="PrtID" id="CC5" visible="0" context="Catalog_PartID" index="0">51cf5a49-6b3d-405b-9e80-74da50496bcb</ColumnConst>
	<ColumnConst desc="Data Version" dataType="string" unit="" name="DVer" id="CC6" visible="0" context="DataVersion" index="0">2.0</ColumnConst>
	<ColumnConst desc="Content Type" dataType="int" unit="" name="CntTy" id="CC7" visible="0" context="Content_Type" index="0">4</ColumnConst>
	<ColumnConst desc="Hide Part Flag" dataType="bool" unit="" name="HPrtF" id="CC8" visible="0" context="Catalog_PartHide" index="0">0</ColumnConst>
	<ColumnConst desc="Cross Sectional Shape" dataType="string" unit="" name="CSS" id="CC9" visible="1" context="SweptShape" index="0">SweptShape_Circular</ColumnConst>
	<ColumnConst desc="Custom Sizing Flag" dataType="bool" unit="" name="CusSF" id="CC10" visible="0" context="CustomPartSizing_Flag" index="0">1</ColumnConst>
	<ColumnConst desc="Material" dataType="string" unit="" name="Mat" id="CC11" visible="1" context="Material_Type" index="0">CORE-GenCirPipe</ColumnConst>
	<ColumnCalc desc="Part Size Name" dataType="string" unit="" name="PrtSN" id="CCA0" visible="1" context="Catalog_PartSizeName" index="0">FormatNumber($PID,0) + " in. CORE-GenCirPipe"</ColumnCalc>
	<ColumnCalc desc="Body Diameter  1" dataType="float" unit="inch" name="BdyD1" id="CCA1" visible="0" context="BodyGeometry_Diameter" index="1">$PID</ColumnCalc>
</LandPart>

 

 

 

 

 

 

 

 

Structures are a bit more involved because of the additional parameters, but with a good foundational understanding of the above, you'll be fine. Here is a rectangular curb inlet, which is basically a box. Nothing fancy here. You'll see a lot of similarities to the free for all pipe.

 

 

 

 

 

 

 

 

<?xml version="1.0"?>
<LandPart desc="Part Table" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink" fixColumn="C1">
	<ColumnConstView desc="Parameter-driven Display" id="CCV1" viewKey="3d" viewName="AeccPartRecipe" pathsRelativeTo="Table">
		<Images>
			<Image>
				<URL xlink:title="Part Reference Image" xlink:href="CORE-CurbInlet.bmp"/>
			</Image>
		</Images>
		<Recipe>CORE-CurbInlet.dwg</Recipe>
	</ColumnConstView>
	<ColumnConstList desc="Inner Structure Width" dataType="float" unit="inch" name="SIW" id="CCL1" visible="1" context="StructInnerWidth" index="0">
		<Item id="i0">.01</Item>
		<Item id="i1">1</Item>
		<Item id="i2">2</Item>
	</ColumnConstList>
	<ColumnConstList desc="Inner Structure Length" dataType="float" unit="inch" name="SIL" id="CCL2" visible="1" context="StructInnerLength" index="0">
		<Item id="i0">.01</Item>
		<Item id="i1">1</Item>
		<Item id="i2">2</Item>
	</ColumnConstList>
	<ColumnRangeList desc="Rim to Sump Height" dataType="float" unit="inch" name="SRS" id="CCR1" visible="1" context="StructRimToSumpHeight" index="0">
		<Item id="i0" rangeVal="Min">0.1000</Item>
		<Item id="i1" rangeVal="Max">6000.0000</Item>
		<Item id="i2" rangeVal="Default">24.0000</Item>
	</ColumnRangeList>
	<ColumnConst desc="Part Domain" dataType="string" unit="" name="PDom" id="CC0" visible="0" context="Catalog_Domain" index="0">Structure_Domain</ColumnConst>
	<ColumnConst desc="Part Type" dataType="string" unit="" name="PTyp" id="CC1" visible="1" context="Catalog_PartType" index="0">Struct_Junction</ColumnConst>
	<ColumnConst desc="Part Subtype" dataType="string" unit="" name="PSTyp" id="CC2" visible="1" context="Catalog_SubType" index="0">Undefined</ColumnConst>
	<ColumnConst desc="Part Name" dataType="string" unit="" name="PrtNm" id="CC3" visible="0" context="Catalog_PartName" index="0">CORE-CurbInlet</ColumnConst>
	<ColumnConst desc="Part Description" dataType="string" unit="" name="PrtD" id="CC4" visible="1" context="Catalog_PartDesc" index="0">Curb Inlet</ColumnConst>
	<ColumnConst desc="Part ID" dataType="string" unit="" name="PrtID" id="CC5" visible="0" context="Catalog_PartID" index="0">1E1B0E9A-923C-4935-A84B-00FFAF08B3F3</ColumnConst>
	<ColumnConst desc="Data Version" dataType="string" unit="" name="DVer" id="CC6" visible="0" context="DataVersion" index="0">2.0</ColumnConst>
	<ColumnConst desc="Content Type" dataType="int" unit="" name="CntTy" id="CC7" visible="0" context="Content_Type" index="0">4</ColumnConst>
	<ColumnConst desc="Hide Part Flag" dataType="bool" unit="" name="HPrtF" id="CC8" visible="0" context="Catalog_PartHide" index="0">0</ColumnConst>
	<ColumnConst desc="Structure Shape" dataType="string" unit="" name="SBS" id="CC9" visible="1" context="StructBoundingShape" index="0">BoundingShape_Box</ColumnConst>
	<ColumnConst desc="Wall Thickness" dataType="float" unit="inch" name="WTh" id="CC10" visible="1" context="WallThickness" index="0">4.0000</ColumnConst>
	<ColumnConst desc="Floor Thickness" dataType="float" unit="inch" name="FTh" id="CC11" visible="1" context="FloorThickness" index="0">6.0000</ColumnConst>
	<ColumnConst desc="Custom Sizing Flag" dataType="bool" unit="" name="CusSF" id="CC12" visible="0" context="CustomPartSizing_Flag" index="0">1</ColumnConst>
	<ColumnConst desc="Vertical Pipe Clearance" dataType="float" unit="inch" name="SVPC" id="CC13" visible="1" context="StructVertPipeClearance" index="0">0.1000</ColumnConst>
	<ColumnCalc desc="Part Size Name" dataType="string" unit="" name="PrtSN" id="CCA0" visible="1" context="Catalog_PartSizeName" index="0">FormatNumber($SIW,0) + "x" + FormatNumber($SIL,0) + " Curb Inlet"</ColumnCalc>
	<ColumnCalc desc="Box Width" dataType="float" unit="inch" name="LenA1" id="CCA1" visible="1" context="Geometry_Distance2D" index="1">$SIW + (2.0 * $WTh)</ColumnCalc>
	<ColumnCalc desc="Box Length" dataType="float" unit="inch" name="LenA2" id="CCA2" visible="1" context="Geometry_Distance2D" index="2">$SIL + (2.0 * $WTh)</ColumnCalc>
	<ColumnCalc desc="Box Height" dataType="float" unit="inch" name="LenB1" id="CCA3" visible="1" context="Geometry_Distance3D" index="1">$SRS + $FTh</ColumnCalc>
	<ColumnCalc desc="Structure Height " dataType="float" unit="inch" name="SBSH" id="CCA4" visible="1" context="StructHeight" index="0">$SRS + $FTh</ColumnCalc>
	<ColumnCalc desc="Structure Length " dataType="float" unit="inch" name="SBSL" id="CCA5" visible="1" context="StructLength" index="0">$SIL + (2.0 * $WTh)</ColumnCalc>
	<ColumnCalc desc="Structure Width " dataType="float" unit="inch" name="SBSW" id="CCA6" visible="1" context="StructWidth" index="0">$SIW + (2.0 * $WTh)</ColumnCalc>
</LandPart>

 

 

 

 

 

 

 

 

Below is a junction structure with a manhole and frame. This one has the same item method for parameter definition but has more parameters and a few tricks. Notice how the first item in the width and length are .01, and the first item in the wall and floor thickness along with the frame height are 8? I do this so the user can default to 8 inches for three parameters but still have more to select if needed and only have to select the length and width for most parts. This trick can help you create a "default" value for parameters in your catalog when using the item method, as the program displays the lists in order by the Item id="i#' value. Also, check out the Part Size Name line and how the different parameters combine with real text to output the label.

 

Use the AeccStructRectSlabTopCylFrame_Imperial objects from your OOB sources.

 

 

 

 

 

 

 

 

<?xml version="1.0"?>
<LandPart desc="Part Table" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink" fixColumn="C1">
	<ColumnConstView desc="Parameter-driven Display" id="CCV1" viewKey="3d" viewName="AeccPartRecipe" pathsRelativeTo="Table">
		<Images>
			<Image>
				<URL xlink:title="Part Reference Image" xlink:href="CORE-RectangularJunctionBoxManhole.bmp"/>
			</Image>
		</Images>
		<Recipe>CORE-RectangularJunctionBoxManhole.dwg</Recipe>
	</ColumnConstView>
	<ColumnConstList desc="Inner Structure Width" dataType="float" unit="inch" name="SIW" id="CCL1" visible="1" context="StructInnerWidth" index="0">
		<Item id="i0">.01</Item>
		<Item id="i1">1</Item>
		<Item id="i2">2</Item>
	</ColumnConstList>
	<ColumnConstList desc="Inner Structure Length" dataType="float" unit="inch" name="SIL" id="CCL2" visible="1" context="StructInnerLength" index="0">
		<Item id="i0">.01</Item>
		<Item id="i1">1</Item>
		<Item id="i2">2</Item>
	</ColumnConstList>
	<ColumnConstList desc="Wall Thickness" dataType="float" unit="inch" name="WTh" id="CCL3" visible="1" context="WallThickness" index="0">
		<Item id="i0">8</Item>
		<Item id="i1">.01</Item>
		<Item id="i2">1</Item>
		<Item id="i3">2</Item>
	</ColumnConstList>
	<ColumnConstList desc="Floor Thickness" dataType="float" unit="inch" name="FTh" id="CCL4" visible="1" context="FloorThickness" index="0">
		<Item id="i0">8</Item>
		<Item id="i1">.01</Item>
		<Item id="i2">1</Item>
		<Item id="i3">2</Item>
	</ColumnConstList>
	<ColumnConstList desc="Frame Height" dataType="float" unit="inch" name="SFH" id="CCL5" visible="1" context="StructFrameHeight" index="0">
		<Item id="i0">8</Item>
		<Item id="i1">.01</Item>
		<Item id="i2">1</Item>
		<Item id="i3">2</Item>
	</ColumnConstList>
	<ColumnConstList desc="Slab Thickness" dataType="float" unit="inch" name="SSTh" id="CCL6" visible="1" context="StructSlabThickness" index="0">
		<Item id="i0">8</Item>
		<Item id="i1">.01</Item>
		<Item id="i2">1</Item>
		<Item id="i3">2</Item>
	</ColumnConstList>
	<ColumnConstList desc="Frame Diameter" dataType="float" unit="inch" name="SFD" id="CCL7" visible="1" context="StructFrameDiameter" index="0">
		<Item id="i0">36.0000</Item>
		<Item id="i1">24.0000</Item>
		<Item id="i2">30.0000</Item>
		<Item id="i3">48.0000</Item>
	</ColumnConstList>
	<ColumnRangeList desc="Rim to Sump Height" dataType="float" unit="inch" name="SRS" id="CCR1" visible="1" context="StructRimToSumpHeight" index="0">
		<Item id="i0" rangeVal="Min">0.1000</Item>
		<Item id="i1" rangeVal="Max">6000.0000</Item>
		<Item id="i2" rangeVal="Default">24.0000</Item>
	</ColumnRangeList>
	<ColumnConst desc="Part Domain" dataType="string" unit="" name="PDom" id="CC0" visible="0" context="Catalog_Domain" index="0">Structure_Domain</ColumnConst>
	<ColumnConst desc="Part Type" dataType="string" unit="" name="PTyp" id="CC1" visible="1" context="Catalog_PartType" index="0">Struct_Junction</ColumnConst>
	<ColumnConst desc="Part Subtype" dataType="string" unit="" name="PSTyp" id="CC2" visible="1" context="Catalog_SubType" index="0">Slab Top</ColumnConst>
	<ColumnConst desc="Part Name" dataType="string" unit="" name="PrtNm" id="CC3" visible="0" context="Catalog_PartName" index="0">CORE-RectangularJunctionBoxManhole</ColumnConst>
	<ColumnConst desc="Part Description" dataType="string" unit="" name="PrtD" id="CC4" visible="1" context="Catalog_PartDesc" index="0">Rectangular Junction Box with Manhole</ColumnConst>
	<ColumnConst desc="Part ID" dataType="string" unit="" name="PrtID" id="CC5" visible="0" context="Catalog_PartID" index="0">B525A2E3-0291-4A22-8966-F17C16FD4836</ColumnConst>
	<ColumnConst desc="Data Version" dataType="string" unit="" name="DVer" id="CC6" visible="0" context="DataVersion" index="0">2.0</ColumnConst>
	<ColumnConst desc="Content Type" dataType="int" unit="" name="CntTy" id="CC7" visible="0" context="Content_Type" index="0">4</ColumnConst>
	<ColumnConst desc="Hide Part Flag" dataType="bool" unit="" name="HPrtF" id="CC8" visible="0" context="Catalog_PartHide" index="0">0</ColumnConst>
	<ColumnConst desc="Structure Shape" dataType="string" unit="" name="SBS" id="CC9" visible="1" context="StructBoundingShape" index="0">BoundingShape_Box</ColumnConst>
	<ColumnConst desc="Custom Sizing Flag" dataType="bool" unit="" name="CusSF" id="CC10" visible="0" context="CustomPartSizing_Flag" index="0">0</ColumnConst>
	<ColumnConst desc="Barrel Pipe Clearance" dataType="float" unit="inch" name="SBPC" id="CC11" visible="1" context="StructBarrelPipeClearance" index="0">0.1000</ColumnConst>
	<ColumnCalc desc="Part Size Name" dataType="string" unit="" name="PrtSN" id="CCA0" visible="1" context="Catalog_PartSizeName" index="0">FormatNumber($SIW,0) + "x" + FormatNumber($SIL,0) + " Junction Box with " + FormatNumber($SFD,0) + " dia Manhole"</ColumnCalc>
	<ColumnCalc desc="Frame Cyl Dia" dataType="float" unit="inch" name="BdyD1" id="CCA1" visible="0" context="BodyGeometry_Diameter" index="1">$SFD</ColumnCalc>
	<ColumnCalc desc="Structure Width" dataType="float" unit="inch" name="LenA1" id="CCA2" visible="1" context="Geometry_Distance2D" index="1">$SIW + (2.0 * $WTh)</ColumnCalc>
	<ColumnCalc desc="Structure Length" dataType="float" unit="inch" name="LenA2" id="CCA3" visible="1" context="Geometry_Distance2D" index="2">$SIL + (2.0 * $WTh)</ColumnCalc>
	<ColumnCalc desc="Slab To Bottom Dist" dataType="float" unit="inch" name="LenB1" id="CCA4" visible="1" context="Geometry_Distance3D" index="1">$SRS + $FTh - $SFH</ColumnCalc>
	<ColumnCalc desc="Frame Cyl Height" dataType="float" unit="inch" name="LenB2" id="CCA5" visible="1" context="Geometry_Distance3D" index="2">$SFH</ColumnCalc>
	<ColumnCalc desc="Structure Height " dataType="float" unit="inch" name="SBSH" id="CCA6" visible="1" context="StructHeight" index="0">$SRS + $FTh</ColumnCalc>
	<ColumnCalc desc="Structure Length " dataType="float" unit="inch" name="SBSL" id="CCA7" visible="1" context="StructLength" index="0">$SIL + (2.0 * $WTh)</ColumnCalc>
	<ColumnCalc desc="Structure Width " dataType="float" unit="inch" name="SBSW" id="CCA8" visible="1" context="StructWidth" index="0">$SIW + (2.0 * $WTh)</ColumnCalc>
	<ColumnCalc desc="Vertical Pipe Clearance" dataType="float" unit="inch" name="SVPC" id="CCA9" visible="1" context="StructVertPipeClearance" index="0">$SSTh + $SBPC</ColumnCalc>
	<ColumnCalc desc="Slab Top Plane" dataType="float" unit="inch" name="WPOf1" id="CCA10" visible="1" context="Geometry_WorkplaneOffset" index="1">$SFH</ColumnCalc>
</LandPart>

 

 

 

 

 

 

 

 

I know this is another deep dive, and I hope this is complete enough for you to get a custom catalog up and running. PM me or comment if I've omitted anything, and I'll update you. Thanks, everyone!

 

Next time I will be talking about some interesting Template hacks regarding layers :slightly_smiling_face: stay tuned!

Comments
Community Visitor
Community Visitor

Hello to all of you.

I'm investigating ways to make our pipe catalogs more efficient while working on a project involving networked CAD administration. I'm particularly curious about the best ways to integrate and manage pipe catalogues in a CAD system. I am concentrating in the following areas:

Catalogue Integration: In order to guarantee smooth updates and accessibility, how can I successfully incorporate pipe catalogues into our networked CAD system?

Explorer
Explorer

Networked CAD Management 3: Pipe Catalogue refers to a centralized system for managing and sharing pipe component data in CAD environments. Key features include:

  1. Centralized Pipe Database: A shared catalogue of pipe specifications and components for consistency.
  2. Collaboration: Enables multiple users to access and update the catalogue in real-time.
  3. Customization: Supports custom pipe designs and standards.
  4. Efficiency: Speeds up design processes by providing ready-to-use templates and accurate data.

This system improves design accuracy, collaboration, and efficiency in industries like plumbing, construction, and mechanical engineering.