nanoCAD Platform Help
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Object - centre holes GOST 14034-74
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Object - centre holes GOST 14034-74
SVersion = 2; // The first line of the script determines the version of the interpreter
// Description. It will be displayed in the Properties pane
// You can also sort the objects in the field
// Tabular data and mcqs
ObjectDescription = "center hole";
// This is the function description of the object
function ActHeader {
NPart = 2; // The number of requests to a dynamic selection of parameters
// This section contains descriptions of the parameters open object
// Visible to other objects
Public (
// Define the parameter size hole - the diameter
d, "diameter",
// Plane to install, depending on the shaft end
WP1, "the beginning of the plane"
rValType, "Shaft Type" // Type of shaft, which connect the hole
// Set for overlap on
// Kinds and with a cut without cutting
Lhole, "The depth of the holes," // This is the total hole depth
Lthread, "Thread length" parameter // length thread
// Parameters specific performances
DF, "shaft diameter to form F",
DH, "The diameter of the shaft to form H"
);
// Private parameters used to plot
// And calculate the limits of other parameters
Protected (seted, freeLen, bBlind, rSuppressPointHeight);
// This section lists the parameters of the open,
// Which will be accessible from the outside for editing
// This is only classified as specific actions under
// Changing the parameters of external functions defined in
// OnChangeParameters
Changeable (d, WP1, DF, DH, rValType, Lhole, Lthread);
// Show dialog box to insert dynamic selection parameters
OnDlgBeforeSelectParam = 1;
// Do not regenerate suppression circuit after insertion
ContourOnLine = 0;
// This is the part of the shaft member
IsAValPart = 1;
// And a built-in part of the shaft
InsidePart = 1;
// This element - opening (this variable is used to
// Dimensioning in Inventor)
IsAHole = 1;
};
// Initialize the object parameters
function OnInitialization {
// Load the table into the cache
// Parameters table of the current line in the script is always available
// Therefore loaded only one parameter d
LoadInCache (d);
// Variable seted is the default value UnknownValue
// As initialized with this value
// So, if we put the following test, this unit
// Operators will be executed only once:
if (seted == UnknownValue) {
seted = 1; // Set seted 1 to the condition is not fulfilled
// Again
// Set initial values
rValType = 1; // The hole is placed on the shaft portion
rZOrder = 4220; // Ranking - initial value of
// Select from a table initial values
SelectInCache ("kFirst", "Form", "~", "FH", "d", "~", 10);
//T.e. according to the syntax of the operator - selected the first record
// Table where Form parameter is "FH", and a parameter
// Hole diameter d is approximately equal to 10
// Set, pursuant to which the object will be initially
// Displays
strDesignName = "Form F";
// Set the initial value of arbitrary parameters
Lhole = 30; // The length of the hole
Lthread = Lhole-d / 2; // This is the minimum possible length of the thread
// The variable that determines whether the hole deaf.
// Default - blind.
bBlind = TRUE;
// This variable determines the value of the parameter is relative to
// Height of the end point of the cone of suppression. (See the drawing)
rSuppressPointHeight = tg (30) * (d-1.082 * p) / 2;
};
};
// Setting function handles
function SetGripPoint {
NGrip = 3; // Total 3 pens
pntGrip0 = pntOrigin; // The first - at the insertion point
// The second handle - the handle length of the threaded portion
pntGrip1 = pntOrigin + vecDirection * Lthread;
// Third handle - handle is the total length of the hole
pntGrip2 = pntOrigin + vecDirection * Lhole;
};
// This function determines the reaction of the object on the movement of the handles
function OnMoveGripPoint {
// Here comes the variable NMovingGrip, equal to the index with a slide
// Handle the numbering of the array starts from zero.
// When editing the first handle just move the item to
// Where the cursor is with this pen. Ie move the insertion point
// Where is the first pen
if (NMovingGrip == 0) {
pntOrigin = pntGrip0;
};
// This we stretch the length of the (second pen)
// This defines the length of the threaded portion, depending on the current
// Execution of holes
if (NMovingGrip == 1) {
// Determine the distance stretching as vector length,
// Defines a point ruchki1 and ruchki0
rDistance = vecLen (pntGrip1-pntGrip0);
// For the execution (shaped hole) "P"
if (Form == "P") {
// The length of the thread should be limited to reduce the amount of
// (L-d / 2). Obviously, the length parameter thread Lthread
// Will be set to the relative position of the cursor
// If it is greater than (L-d / 2).
Lthread = max (rDistance, L-d / 2);
};
// For the execution of "F H"
if (Form == "F H") {
// The same goes for the execution of the thread length must be
// Size is bounded below by (l + d / 2).
Lthread = max (rDistance, l + d / 2);
};
// Finally, in this condition, we limit the length of the thread
// On, since the length of the thread can not be more
// The length of the hole. Therefore, we will pull out all the hole
// According to the new diameter of the thread.
if (Lthread > Lhole-d / 2) {
//T.e. when you change the length greater than the length of the thread holes
// Set the new length of the holes equal
// Thread length plus half the diameter
Lhole = Lthread + d / 2;
};
};
// This section examines the movement of the third handle.
// The result of editing it is increasing the length of the hole,
// Without affecting the thread.
if (NMovingGrip == 2) {
// In this case, the current distance is defined as
// Length of the vector formed by dots and ruchki0 ruchki2
rDistance = vecLen (pntGrip2-pntGrip0);
// For the execution of "P"
if (Form == "P") {
// The length of the hole is limited below the parameter L
Lhole = max (rDistance, L);
};
// Dlyaispolneniya "F H"
if (Form == "F H") {
// Length of the restricted orifice parameters (l + d)
Lhole = max (rDistance, l + d);
};
// If you change the length of the hole is less than the length of the thread
// Move thread abroad
if (Lhole > Lthread + d / 2) {
// That is, if the length of the opening is smaller than Lthread + d / 2,
// Recalculate the new thread length which is less than
// Current length of the holes in the d / 2
Lthread = Lhole-d / 2;
};
};
};
// Function of the final calculation of parameters
function OnMakeParameters {
// Name, surname and patronymic of the object
strTheName = "CenterHole"; // Centering Hole
strTheType = "ArborParts"; // Refers to detail shafts
strTheSubType = "Simple"; // Type of opening - easy
// Set the position of the plane WP1. It's just a plane
// The base point at the insertion point and a normal vector,
// Coincides with the vector direction of insertion
WP1 = Plane (pntOrigin, vecDirection);
// Realize the overlap for different occasions:
// If the variable rValType, specifying the type section of the shaft, at the
// Set that the hole is equal to 1 (this is a simple
// Portion of the shaft), the order of the overlap is equal to 4220
// (This number is given on the basis of the values ??of the order of
// Portions of the shaft, so that the hole overlaps the shaft to its
// Loop suppression
if (rValType == 1) rZOrder = 4220;
// For internal shaft portions and other portions where rValType not equal to 1
else rZOrder = 2150;
// The sequence will be different
// This parameter constraints are found, depending on the version
// For the execution of "P", more precisely, for the current record in the table,
// Form that meets the hole "P".
if (Form == "P") {
// Limits the length of the holes parameter L
Lhole = max (Lhole, L);
// Limits the length of the thread parameter (Ld / 2)
Lthread = max (Lthread, L-d / 2);
// Define strDesignName in "Form P"
//t.e. choose what the two-dimensional design, which corresponds to
// The current parameters of the table
strDesignName = "Form P";
};
// The same goes for the form "F H"
if (Form == "F H") {
// Limit the parameters of the holes and the length of the thread length
Lhole = max (Lhole, l + d);
Lthread = max (Lthread, l + d / 2);
// This reassurance, if it does the user chose
// Execution "P" in the two-dimensional forms, since the table
// Exhibited parameter value in Form "FH".
// In general, if you select the wrong version, the set
// First correct.
if (strDesignName == "Form P") {
strDesignName = "Form F";
};
};
// Limiting the length of the thread from the top, depending on the
// Total length of the hole
Lthread = min (Lthread, Lhole-d / 2);
// The holes form P always deaf
if (Form == "P") {bBlind = TRUE;};
// This is to ensure that the correct path is drawn suppression
// The schedule has a contour suppression, the position of one of the points
// Which is specified by rSuppressPointHeight
// So as to whether the user has selected the display
// Blind or through-hole, set the parameter
// RSuppressPointHeight desired value
if (bBlind == TRUE) {// For blind hole
rSuppressPointHeight = tg (30) * (d-1.082 * p) / 2;
} Else {// For the through-hole (ie, not from the cone drill)
rSuppressPointHeight = 0;
};
// This line simply sets specifications
// Depending on the version adds the necessary letter
// To the designated holes.
if (strDesignName == "Form F") {strLetterForm = "F";};
if (strDesignName == "FormaH") {strLetterForm = "H";};
if (strDesignName == "FormaP") {strLetterForm = "P";};
// Parameter strPartName - a string specification holes.
// In addition, he also displayed hinte.
strPartName = "Ed. Center." + strLetterForm + "M" + d + "GOST14034-74";
// Format string automatically, ie
// When adding a string value with
// Numerical value is automatically converted to a string
};
// This function determines the type of dialogue the insertion hole
function OnDialog {
// Load the parameters of the cache work table
LoadInCache (d);
// Call the dialogue with the key
UniDialog (
// This defines the fields of the table hole
// The shape and diameter. Output as a table defining the parameters
DBFLD, Form, d,
// The diameter of the shaft to form F and Form H
// Output only as reference parameters
DBINF, DF, DH,
// Parameters asked randomly (subject to restrictions, of course)
// Display on the Properties tab
VFLD,
Lthread, "thread depth"
Lhole, "The depth of the hole"
// Tag blind or through hole
// Display on the properties tab in the form of a tick
BFLD,
bBlind, "Deaf"
// Choices performances. Displays all performance
VIDS, strDesignName, "All",
// Displays all recognized types
TVIDS, lViewType, "All",
// Displays preview
VIEW, "Vids"
);
};
// This function is performed before the dynamic selection of the parameters
function OnInitSelect {
// This function comes variable rPart - sequence number
// Prompt you to choose the dynamic parameters. counting begins at 0
if (rPart == 0) {
// For the first case indicate the diameter of the thread
// Output a corresponding hint
strPromt = "Enter the depth of the thread";
};
if (rPart == 1) {
// For the second case indicates the depth of the hole (it zhe
// Total length).
strPromt = "Enter the hole depth";
};
};
// This function defines the behavior of the object in the dynamic selection of the parameters
function OnSelectParam {
// For the first cycle of selection parameters. In principle, the limitations
// The same as for the handles.
// These variables come rXcoord and rYcoord - relative
// Abscissa and ordinate of the cursor
if (rPart == 0) {
// Parameter range is determined
// Module relative abscissa
rDistance = Abs (rXcoord);
// Limitations on choice of parameters depending on the version
if (Form == "P") {
Lthread = max (rDistance, L-d / 2);
};
if (Form == "F H") {
Lthread = max (rDistance, l + d / 2);
};
if (Lthread > Lhole-d / 2) {
Lhole = Lthread + d / 2;
};
};
// For the second request
if (rPart == 1) {
// Parameter distance
rDistance = Abs (rXcoord);
// Restrictions.
if (Form == "P") {
Lhole = max (rDistance, L);
};
if (Form == "F H") {
Lhole = max (rDistance, l + d);
};
if (Lhole < Lthread + d / 2) {
Lhole = Lthread + d / 2;
};
};
};
// This function is performed when the parameters in the dialog insert
function OnDialogChanged {
// Function adds interactivity in the form of dialogue.
// In this case we need to hide execution and daw "deaf"
// Operator ShowDesign hides or displays performance.
// Depending on the value of the first parameter (1 - Shows
// 0 - hides.
// Operator ShowBool ??hides and displays switches (tick)
// For a start, execution and show all daw
ShowDesign (1 "Form F");
ShowDesign (1, "Form H");
ShowDesign (1 "FormaP");
ShowBool ??(1, "deaf");
// If you choose such a line in the table where d3 is 0,
// It is necessary to hide the performance of "Form H". (As defined in the guest,
// That the performance is not used for such values
// Settings
if (d3 == 0) ShowDesign (0, "Form H");
// If the selected row corresponding to the shape of the hole "P", then
// To hide the other two performance (they can not be selected)
// And daw "blind" because the shape of P is always blind.
if (Form == "P") {
ShowDesign (0, "FormaH");
ShowDesign (0, "FormaF");
ShowBool ??(0, "deaf");
};
// But for the chosen form of "FH", you need only to hide
// Execution "Form F"
if (Form == "F H") {
ShowDesign (0, "Form P");
};
};
// Function OnChangeParameters performed under external influence
// Object. It is an attempt to establish a dependence or direct
// Change the parameters of the object properties panel
// This function determines the reaction of the object to such a change.
function OnChangeParameters {
// Here comes the object new, representing a
// The same object with the new value of open options.
// Random variable we can immediately assign new values
rValType = new.rValType;
Lhole = new.Lhole;
Lthread = new.Lthread;
// Here consistently given, how to choose a line from the table,
// The new value of the corresponding parameters.
// Check whether the changed parameter d
if (new.d! = d) {// ie. If the new value is not equal to the old
// Table is loaded into the cache
LoadInCache (d);
// And get out of it the first available record with a parameter
// D, approximately equal to the new value.
SelectInCache ("kFirst", "d", "~", new.d);
// Then we check not change any other parameters
} Else if (DH! = New.DH) {// change the diameter of the shaft H performance
// Load
LoadInCache (DH);
// Select the first record
SelectInCache ("kFirst", "DH", "~", new.DH);
} Else if (DF! = New.DF) {// change the diameter of the shaft version F
// Load
LoadInCache (DF);
// Select the first entry with an approximately equal value
SelectInCache ("kFirst", "DF", "~", new.DF);
};
// Default processing completed successfully.
//T.e. send the object to change the parameters that
// Set the necessary parameters.
// To do this, we assign the value of the variable Handled OBJ_HANDLED
Handled = OBJ_HANDLED;
// If after selecting from the table the shaft diameter is not established
// The new value, it may require the cyclical update
// Send a variable object variable
// Handled equal OBJ_WARNING
if (d! = new.d) {
Handled = OBJ_WARNING;
};
// In this block operators recalculated the new position of the object
// When you change its work plane
// Variable fix to test the ability to move.
// In general, in this case it could not be used
// Because the hole does not change when you change its geometry
// Planes.
// This block is generated script wizard, so it has
// This unified view
fix = 0;
// Check if the dependency has changed and whether the
// PloskostWP1
if (IsFixedParam (WP1)) {
// Increase the value of the variable fix, for the follow-up audit
fix = fix + 1;
// Save the old value of the vector insertion.
vecXOld = vecDirection;
// Assign new value to the vector inserts match
// To the new position of the plane WP1
vecDirection = Vector (new.WP1);
// And move the insertion point to a new position openings
// PloskostiWP1
pntOrigin = Point (new.WP1);
// Restore the coordinate system on the basis of
// Old and new values ??of the vectors
restoreBasis (vecXOld, vecPlane, vecDirection);
};
// If all of a sudden hole with fixed geometry
// Objects begin to stretch in different directions, then
// Return an error
if (fix > 1) {
Handled = OBJ_ERROR;
};
};
// This function is performed before each attempt to establish a relationship
function BeforeConnect {
// Here we just reset according to the latest
// The following function to establish new
ResetLastConstraint ();
}
// This function sets dependency. More specifically,
// It determines exactly how to behave when an object
// Accession to another object
function OnConnect {
// Check for the value of the variable rPart, defining
// The sequence number of the request to join the parts.
//T.e. if the relationship is set in two stages,
// Or more, it is possible to install one piece
// Depending on two or more parts.
// But in this particular case, depending on established only
// From one piece, so only one request and verification
// RPart equal to 0
if (rPart == 0) {
// The function comes onConnect object obj - this is a detail,
// To which we are trying to join. We can help qualifier
// Access to the parameters of the parts to check whether
// Automatically install dependencies or not.
// Check whether the part to which are trying to join,
// Shaft:
if (obj.strTheType == "Arbor") {
// Next - will set depending on the current execution
// Holes. Ie different versions is implemented differently depending on the shaft.
if (Form == "F H") {
// Set for the opening of the shaft of the same type as that of the
// Section of the shaft, which join (this is necessary for the implementation of
// Overlap
rValType = obj.rValType;
// Find the nearest plane to the plane of the opening WP1:
strNearestPlane = nearestPlaneName (WP1, obj.WP1, obj.WP2);
// This takes into account only the plane WP1 and WP2 object
//t.e. if these are not the nearest plane, strNearestPlane
// Is uncertain.
// Further - check the shaft type. for common areas (external):
if (obj.rValType! = 1)
// Set the geometric relationship
// Type "insert" codirectional. By the object to which
// Subscribe for planes WP1 details and found
// The nearest plane. The distance between the planes - 0 mm.
// Dependence unidirectional
SetGeomConstraint (INSERT, CODIRECT, obj, WP1, strNearestPlane, 0, FALSE);
// For the internal sections of shafts:
else
// Set the relationship with the same parameters,
// But oppositely.
SetGeomConstraint (INSERT, CONTRDIRECT, obj, WP1, strNearestPlane, 0, FALSE);
// Set the parameter depending on the current execution
// Holes.
// To form the hole F must be equated
// Parameter rDiameter (shaft diameter) to the diameter DF table hole
if (strDesignName == "Form F") {
// So if the test is performed, the
// Set the parametric dependence on expression.
// RDiameter equating to DF
SetParamConstraint (DF, obj, EXPR, "obj.rDiameter");
};
// To form H is the same test, but establishes a relationship
// Already diameter hole DH.
if (strDesignName == "FormaH") {
SetParamConstraint (DH, obj, EXPR, "obj.rDiameter");
};
NoVectorSelect = 1; // setting the variable NoVectorSelect 1
// Disable the selection of the direction vector for details
// Since been joined and established addiction
// Then choose further it is not necessary.
Handled = OBJ_HANDLED; // Set the variable Handled
// Value OBJ_HANDLED, ie saying that according to
// Set successfully.
};
};
};
}