Creating Part Design Hole Standards

Print Friendly, PDF & Email

Creating Part Design Hole Standards

When defining Holes, we ahve to key in values for all of the fields which can become very repetitive and even troublesome from human fallibility standpoint. Out of The Box there is a way to define sets of Standard Hole sizes for the Five Types of Holes; Simple, Tapered, Counter Bored, Counter Sunk and Counter Drilled. This will allow you to select a Standard from the dropdown menu in the Hole Definition dialogue window, which will automatically fill the values for Main Diameter, Depth, Counter Bore Diameter, Counter Bore Depth, Thread Pitch, Thread Diameter etc.

Hole Standard

Folder Structure

You must store hole standards .xml files in separate directories under the following directory.

<Installation>\resources\standard

You must create the following directories under the standard directory.

  • SimpleHole to store simple hole files.
  • TaperedHole to store tapered hole files.
  • CounterSunkHole to store countersunk hole.
  • CounterDrilledHole to store counter drilled hole.
  • CounterBoredHole to store counterbored hole.

XML Base Files

Simple Hole

  • Description of the standard: Mandatory
  • Main Hole diameter: Mandatory
  • Main Hole Depth: Optional
  • Bottom Angle: Optional
  • Thread Diameter: Optional
  • Thread Depth: Optional
  • Pitch: Optional
  • Thread Description: Optional
MandatoryMandatoryOptionalOptionalOptionalOptionalOptionalOptional
NameMainDiameterMainDepthBottomAngleThreadDiameterThreadDepthPitchThreadDescription
Sample1102012011.8101.25Sample1
Sample2131011014.2102Sample2
Simple Hole Example Data

Create a New XML file and paste this XML content into the new file, and save it to the SimpleHole directory.

<?xml version="1.0" ?>
<std:node name="S1_standard" xmlns:std="http://www.dsweb.com/std">
	<std:node name="Units">
		<std:node name="Length">
			<std:strval name="Length">mm</std:strval>
		</std:node>
		<std:node name="Angle">
			<std:strval name="Angle">deg</std:strval>
		</std:node>
	</std:node>
	<std:typedef name="SimpleHoleValues">
		<std:strval name="Name">S1</std:strval>
		<std:floatval name="MainDiameter">5.</std:floatval>
		<std:floatval name="MainDepth">10.</std:floatval>
		<std:floatval name="BottomAngle">110.</std:floatval>
		<std:floatval name="ThreadDiameter">6.</std:floatval>
		<std:floatval name="ThreadDepth">8.</std:floatval>
		<std:floatval name="Pitch">1.</std:floatval>
		<std:strval name="ThreadDescription">THD_S_01</std:strval>
	</std:typedef>
	<std:node name="SimpleHoleValues">
		<std:typeval name="SimpleHoleValues">
			<std:strval name="Name">S1</std:strval>
			<std:floatval name="MainDiameter">5.</std:floatval>
			<std:floatval name="MainDepth">10.</std:floatval>
			<std:floatval name="BottomAngle">105.</std:floatval>
			<std:floatval name="ThreadDiameter">6.</std:floatval>
			<std:floatval name="ThreadDepth">8.</std:floatval>
			<std:floatval name="Pitch">1.</std:floatval>
			<std:strval name="ThreadDescription">THD_S_01</std:strval>
		</std:typeval>
		<std:typeval name="SimpleHoleValues">
			<std:strval name="Name">STD_S_S2</std:strval>
			<std:floatval name="MainDiameter">6.</std:floatval>
			<std:floatval name="MainDepth">12.</std:floatval>
			<std:floatval name="BottomAngle">100.</std:floatval>
			<std:floatval name="ThreadDiameter">7.</std:floatval>
			<std:floatval name="ThreadDepth">10.</std:floatval>
			<std:floatval name="Pitch">1.05</std:floatval>
			<std:strval name="ThreadDescription">THD_S_02</std:strval>
		</std:typeval>
	</std:node>
</std:node>

Tapered Hole

  • Description of the standard: Mandatory
  • Main Hole diameter: Mandatory
  • Tapered angle: Mandatory
  • Anchor Point: Mandatory
    • Note: If you set the Anchor Point value to 0, the anchor point is placed at the bottom of the hole. If you set the Anchor Point value to 1, the anchor point is placed at the top of the hole.
  • Main Hole Depth: Optional
  • Bottom Angle: Optional
  • Thread Diameter: Optional
  • Thread Depth: Optional
  • Pitch: Optional
  • Thread Description: Optional
MandatoryMandatoryMandatoryMandatoryOptionalOptionalOptionalOptionalOptionalOptional
NameMainDiameterMainDepthTaperedAngleAnchorPointBottomAngleThreadDiameterThreadDepthPitchThreadDescription
Sample110525012011.251.25Sample1
Sample2141035111015.852Sample2

Create a New XML file and paste this XML content into the new file, and save it to the TaperedHole directory.

<?xml version="1.0" ?>
<std:node name="T1_standard" xmlns:std="http://www.dsweb.com/std">
	<std:node name="Units">
		<std:node name="Length">
			<std:strval name="Length">mm</std:strval>
		</std:node>
		<std:node name="Angle">
			<std:strval name="Angle">deg</std:strval>
		</std:node>
	</std:node>
	<std:typedef name="TaperedHoleValues">
		<std:strval name="Name">T1</std:strval>
		<std:floatval name="MainDiameter">5.0</std:floatval>
		<std:floatval name="MainDepth">10.</std:floatval>
		<std:floatval name="TaperedAngle">90.0</std:floatval>
		<std:intval name="AnchorPoint">0</std:intval>
		<std:floatval name="BottomAngle">110.0</std:floatval>
		<std:floatval name="ThreadDiameter">6.0</std:floatval>
		<std:floatval name="ThreadDepth">8.</std:floatval>
		<std:floatval name="Pitch">1.0</std:floatval>
		<std:strval name="ThreadDescription">THD_T_01</std:strval>
	</std:typedef>
	<std:node name="TaperedHoleValues">
		<std:typeval name="TaperedHoleValues">
			<std:strval name="Name">T1</std:strval>
			<std:floatval name="MainDepth">10.</std:floatval>
			<std:floatval name="MainDiameter">5.0</std:floatval>
			<std:floatval name="TaperedAngle">90.0</std:floatval>
			<std:intval name="AnchorPoint">0</std:intval>
			<std:floatval name="BottomAngle">100.0</std:floatval>
			<std:floatval name="ThreadDiameter">6.0</std:floatval>
			<std:floatval name="ThreadDepth">8.</std:floatval>
			<std:floatval name="Pitch">1.0</std:floatval>
			<std:strval name="ThreadDescription">THD_T_01</std:strval>
		</std:typeval>
		<std:typeval name="TaperedHoleValues">
			<std:strval name="Name">STD_T_2</std:strval>
			<std:floatval name="MainDiameter">6.0</std:floatval>
			<std:floatval name="MainDepth">12.</std:floatval>
			<std:floatval name="TaperedAngle">85.0</std:floatval>
			<std:intval name="AnchorPoint">0</std:intval>
			<std:floatval name="BottomAngle">105.0</std:floatval>
			<std:floatval name="ThreadDiameter">7.0</std:floatval>
			<std:floatval name="ThreadDepth">10.</std:floatval>
			<std:floatval name="Pitch">1.05</std:floatval>
			<std:strval name="ThreadDescription">THD_T_02</std:strval>
		</std:typeval>
	</std:node>
</std:node>

Countersunk Hole

  • Description of the standard: Mandatory
  • Main Hole diameter: Mandatory
  • Counter Sunk Mode: Mandatory
    • Notes:
      • If you set Counter Sunk Mode to 0, you can define Counter Sunk Depth and Counter Sunk Angle.
      • If you set Counter Sunk Mode to 1, you can define Counter Sunk Diameter and Counter Sunk Depth.
      • If you set Counter Sunk Mode to 2, you can define Counter Sunk Diameter and Counter Sunk Angle.
  • Counter Sunk Diameter: Mandatory
  • Counter Sunk Depth: Mandatory
  • Counter Sunk Angle: Mandatory
  • Main Hole Depth: Optional
  • Bottom Angle: Optional
  • Thread Diameter: Optional
  • Thread Depth: Optional
  • Pitch: Optional
  • Thread Description: Optional
MandatoryMandatoryMandatoryMandatoryMandatoryMandatoryOptionalOptionalOptionalOptional
NameMainDiameterModeCounterSunkDepthCounterSunkAngleCounterSunkDiameterBottomAngleThreadDiameterPitchThreadDescription

Create a New XML file and paste this XML content into the new file, and save it to the CounterSunkHole directory.

<?xml version="1.0" ?>
<std:node name="CS1_standard" xmlns:std="http://www.dsweb.com/std">
	<std:node name="Units">
		<std:node name="Length">
			<std:strval name="Length">mm</std:strval>
		</std:node>
		<std:node name="Angle">
			<std:strval name="Angle">deg</std:strval>
		</std:node>
	</std:node>
	<std:typedef name="CounterSunkHoleValues">
		<std:strval name="Name">CS1</std:strval>
		<std:floatval name="MainDiameter">5.0</std:floatval>
		<std:intval name="Mode">0</std:intval>
		<std:floatval name="CounterSunkDepth">5.0</std:floatval>
		<std:floatval name="CounterSunkAngle">90.0</std:floatval>
		<std:floatval name="CounterSunkDiameter">0.0</std:floatval>
		<std:floatval name="BottomAngle">120.0</std:floatval>
		<std:floatval name="ThreadDiameter">6.0</std:floatval>
		<std:floatval name="Pitch">1.0</std:floatval>
		<std:strval name="ThreadDescription">THD_CS_1</std:strval>
	</std:typedef>
	<std:node name="CounterSunkHoleValues">
		<std:typeval name="CounterSunkHoleValues">
			<std:strval name="Name">CS1</std:strval>
			<std:floatval name="MainDiameter">5.0</std:floatval>
			<std:intval name="Mode">0</std:intval>
			<std:floatval name="CounterSunkDepth">5.0</std:floatval>
			<std:floatval name="CounterSunkAngle">90.0</std:floatval>
			<std:floatval name="CounterSunkDiameter">0.0</std:floatval>
			<std:floatval name="BottomAngle">120.0</std:floatval>
			<std:floatval name="ThreadDiameter">6.0</std:floatval>
			<std:floatval name="Pitch">1.0</std:floatval>
			<std:strval name="ThreadDescription">THD_CS_1</std:strval>
		</std:typeval>
		<std:typeval name="CounterSunkHoleValues">
			<std:strval name="Name">STD_CS_2</std:strval>
			<std:floatval name="MainDiameter">6.0</std:floatval>
			<std:floatval name="MainDepth">12.</std:floatval>
			<std:intval name="Mode">0</std:intval>
			<std:floatval name="CounterSunkDepth">6.0</std:floatval>
			<std:floatval name="CounterSunkAngle">85.0</std:floatval>
			<std:floatval name="CounterSunkDiameter">0.0</std:floatval>
			<std:floatval name="BottomAngle">115.0</std:floatval>
			<std:floatval name="ThreadDiameter">7.0</std:floatval>
			<std:floatval name="ThreadDepth">10.</std:floatval>
			<std:floatval name="Pitch">1.05</std:floatval>
			<std:strval name="ThreadDescription">THD_CS_2</std:strval>
		</std:typeval>
	</std:node>
</std:node>

Counterdrilled Hole

  • Description of the standard: Mandatory
  • Main Hole diameter: Mandatory
  • Mode: Mandatory
    • Notes:
      • If you set Mode to 0, you cannot define Counter Sunk Diameter.
      • If you set Mode to 1, you can define Counter Sunk Diameter.
  • Counter Drilled Diameter: Mandatory
  • Counter Drilled Depth: Mandatory
  • Counter Drilled Angle: Mandatory
  • Counter Sunk Diameter: Mandatory
  • Main Hole Depth: Optional
  • Bottom Angle: Optional
  • Thread Diameter: Optional
  • Thread Depth: Optional
  • Pitch: Optional
  • Thread Description: Optional

Create a New XML file and paste this XML content into the new file, and save it to the CounterDrilledHole directory.

<?xml version="1.0" ?>
<std:node name="CD1_standard" xmlns:std="http://www.dsweb.com/std">
	<std:node name="Units">
		<std:node name="Length">
			<std:strval name="Length">mm</std:strval>
		</std:node>
		<std:node name="Angle">
			<std:strval name="Angle">deg</std:strval>
		</std:node>
	</std:node>
	<std:typedef name="CounterDrilledHoleValues">
		<std:strval name="Name">CD1</std:strval>
		<std:floatval name="MainDiameter">5.0</std:floatval>
		<std:intval name="Mode">0</std:intval>
		<std:floatval name="CounterDrilledDiameter">10.0</std:floatval>
		<std:floatval name="CounterDrilledDepth">5.0</std:floatval>
		<std:floatval name="CounterDrilledAngle">90.0</std:floatval>
		<std:floatval name="CounterSunkDiameter">0.0</std:floatval>
		<std:floatval name="BottomAngle">120.0</std:floatval>
		<std:floatval name="ThreadDiameter">6.0</std:floatval>
		<std:floatval name="Pitch">1.0</std:floatval>
		<std:strval name="ThreadDescription">THD_CD_1</std:strval>
	</std:typedef>
	<std:node name="CounterDrilledHoleValues">
		<std:typeval name="CounterDrilledHoleValues">
			<std:strval name="Name">CD1</std:strval>
			<std:floatval name="MainDiameter">5.0</std:floatval>
			<std:intval name="Mode">0</std:intval>
			<std:floatval name="CounterDrilledDiameter">10.0</std:floatval>
			<std:floatval name="CounterDrilledDepth">5.0</std:floatval>
			<std:floatval name="CounterDrilledAngle">90.0</std:floatval>
			<std:floatval name="CounterSunkDiameter">0.0</std:floatval>
			<std:floatval name="BottomAngle">120.0</std:floatval>
			<std:floatval name="ThreadDiameter">6.0</std:floatval>
			<std:floatval name="Pitch">1.0</std:floatval>
			<std:strval name="ThreadDescription">THD_CD_1</std:strval>
		</std:typeval>
		<std:typeval name="CounterDrilledHoleValues">
			<std:strval name="Name">STD_CD_2</std:strval>
			<std:floatval name="MainDiameter">6.0</std:floatval>
			<std:floatval name="MainDepth">12.</std:floatval>
			<std:floatval name="CounterDrilledDiameter">11.0</std:floatval>
			<std:floatval name="CounterDrilledDepth">5.0</std:floatval>
			<std:floatval name="CounterDrilledAngle">85.0</std:floatval>
			<std:floatval name="BottomAngle">115.0</std:floatval>
			<std:floatval name="ThreadDiameter">7.0</std:floatval>
			<std:floatval name="ThreadDepth">10.</std:floatval>
			<std:floatval name="Pitch">1.05</std:floatval>
			<std:strval name="ThreadDescription">THD_CD_2</std:strval>
		</std:typeval>
	</std:node>
</std:node>

Counterbored Hole

  • Description of the standard: Mandatory
  • Main Hole diameter: Mandatory
  • Counter Bored Diameter: Mandatory
  • Counter Bored Depth: Mandatory
  • Main Hole Depth: Optional
  • Bottom Angle: Optional
  • Thread Diameter: Optional
  • Thread Depth: Optional
  • Pitch: Optional
  • Thread Description: Optional

Create a New XML file and paste this XML content into the new file, and save it to the CounterBoredHole directory.

<?xml version="1.0" ?>
<std:node name="CB1_standard" xmlns:std="http://www.dsweb.com/std">
	<std:node name="Units">
		<std:node name="Length">
			<std:strval name="Length">mm</std:strval>
		</std:node>
		<std:node name="Angle">
			<std:strval name="Angle">deg</std:strval>
		</std:node>
	</std:node>
	<std:typedef name="CounterBoredHoleValues">
		<std:strval name="Name">CB1</std:strval>
		<std:floatval name="MainDiameter">5.0</std:floatval>
		<std:floatval name="CounterBoredDiameter">10.0</std:floatval>
		<std:floatval name="CounterBoredDepth">5.0</std:floatval>
		<std:floatval name="BottomAngle">120.0</std:floatval>
		<std:floatval name="ThreadDiameter">6.0</std:floatval>
		<std:floatval name="Pitch">1.0</std:floatval>
		<std:strval name="ThreadDescription">THD_CB_01</std:strval>
	</std:typedef>
	<std:node name="CounterBoredHoleValues">
		<std:typeval name="CounterBoredHoleValues">
			<std:strval name="Name">CB1</std:strval>
			<std:floatval name="MainDiameter">5.0</std:floatval>
			<std:floatval name="CounterBoredDiameter">10.0</std:floatval>
			<std:floatval name="CounterBoredDepth">5.0</std:floatval>
			<std:floatval name="BottomAngle">115.0</std:floatval>
			<std:floatval name="ThreadDiameter">6.0</std:floatval>
			<std:floatval name="Pitch">1.0</std:floatval>
			<std:strval name="ThreadDescription">THD_CB_01</std:strval>
		</std:typeval>
		<std:typeval name="CounterBoredHoleValues">
			<std:strval name="Name">STD_CB_2</std:strval>
			<std:floatval name="MainDiameter">6.0</std:floatval>
			<std:floatval name="MainDepth">15.</std:floatval>
			<std:floatval name="CounterBoredDiameter">11.0</std:floatval>
			<std:floatval name="CounterBoredDepth">5.0</std:floatval>
			<std:floatval name="BottomAngle">110.0</std:floatval>
			<std:floatval name="ThreadDiameter">7.0</std:floatval>
			<std:floatval name="ThreadDepth">10.</std:floatval>
			<std:floatval name="Pitch">1.05</std:floatval>
			<std:strval name="ThreadDescription">THD_CB_02</std:strval>
		</std:typeval>
	</std:node>
</std:node>

XML File Structure

Within the XML File Structure is comprised of three chunks;

  • Units
  • Type Definition
  • Type Value

Units

This section defines the used Units within the Type Definition

	<std:node name="Units">
		<std:node name="Length">
			<std:strval name="Length">mm</std:strval>
		</std:node>
		<std:node name="Angle">
			<std:strval name="Angle">deg</std:strval>
		</std:node>
	</std:node>

Type Definition

This section defines the structure of the Hole Type and the Attributes that can be Valuated within the XML file. I would recommend setting all of the values to 0.0 for the Float Values, 0 for the Int Values and set the Name and Description to Base<HoleType> i.e., BaseCounterDrilledHole, so you don’t confuse this with an actual set of values for a specific hole type.

<std:typedef name="CounterDrilledHoleValues">
		<std:strval name="Name">BaseCounterDrilledHole</std:strval>
		<std:floatval name="MainDiameter">0.0</std:floatval>
		<std:intval name="Mode">0</std:intval>
		<std:floatval name="CounterDrilledDiameter">0.0</std:floatval>
		<std:floatval name="CounterDrilledDepth">0.0</std:floatval>
		<std:floatval name="CounterDrilledAngle">0.0</std:floatval>
		<std:floatval name="CounterSunkDiameter">0.0</std:floatval>
		<std:floatval name="BottomAngle">0.0</std:floatval>
		<std:floatval name="ThreadDiameter">0.0</std:floatval>
		<std:floatval name="Pitch">0.0</std:floatval>
		<std:strval name="ThreadDescription">BaseCounterDrilledHole</std:strval>
	</std:typedef>

Type Value

The last section contains the individual Hole definitions, the Name attribute must be unique, I would recommend starting with Sample1 and Sample2 to get used to how this file works with the Hole function.

		<std:typeval name="CounterDrilledHoleValues">
			<std:strval name="Name">Sample1</std:strval>
			<std:floatval name="MainDiameter">5.0</std:floatval>
			<std:intval name="Mode">0</std:intval>
			<std:floatval name="CounterDrilledDiameter">10.0</std:floatval>
			<std:floatval name="CounterDrilledDepth">5.0</std:floatval>
			<std:floatval name="CounterDrilledAngle">90.0</std:floatval>
			<std:floatval name="CounterSunkDiameter">0.0</std:floatval>
			<std:floatval name="BottomAngle">120.0</std:floatval>
			<std:floatval name="ThreadDiameter">6.0</std:floatval>
			<std:floatval name="Pitch">1.0</std:floatval>
			<std:strval name="ThreadDescription">Sample1</std:strval>
		</std:typeval>
		<std:typeval name="CounterDrilledHoleValues">
			<std:strval name="Name">Sample2</std:strval>
			<std:floatval name="MainDiameter">6.0</std:floatval>
			<std:floatval name="MainDepth">12.</std:floatval>
			<std:floatval name="CounterDrilledDiameter">11.0</std:floatval>
			<std:floatval name="CounterDrilledDepth">5.0</std:floatval>
			<std:floatval name="CounterDrilledAngle">85.0</std:floatval>
			<std:floatval name="BottomAngle">115.0</std:floatval>
			<std:floatval name="ThreadDiameter">7.0</std:floatval>
			<std:floatval name="ThreadDepth">10.</std:floatval>
			<std:floatval name="Pitch">1.05</std:floatval>
			<std:strval name="ThreadDescription">Sample2</std:strval>
		</std:typeval>

Managing XML File Change

You can edit the XML file in two ways;

  • XML File Direct Edit
  • XML File Edition Through the Standards Interface

XML File Direct Edit

The XML file can be directly edited with a tool such as ‘NotePad++‘, without restarting CATIA. As long as the either the Hole Type is Changed and then changed back or the Standard set to No Standard or another Standard and then set back the Standard will update in the session post XML changes once the file is saved.

XML File Edition Through the Standards Interface

Its important to note that if the ‘CollectionStandard‘ environment variable is pointed to a different directory than the <Installation>\resources\standard folder then once any edition is made a copy of the new file will be created in the ‘CollectionStandard‘ folder. When a duplicate file is found in the ‘CollectionStandard‘ folder this file is used by default.

To use the Standards Interface you must have ‘Leader‘ access. Then from the top right hand corner within the thick client select Preferences->Standards to open the Standards Editor. In the top left-hand dropdown select the Category and then select the XML file to edit.

Standards Editor