nanoCAD Platform Help

I-profiles GOST 19425

CAD drafting I-profiles GOST 19425 0

CAD software I-profiles GOST 19425 1

Source graphic

I-profile script:

SVersion = 2;
ObjectDescription = @ GOST_19425_74;
 
function ActHeader {
  NPart = 1;
  Public (
     // Open options- defining the geometry: length, height
     // Width of the shelves.
     L,LENGTH,
     h,I_SHAPE_HEIGHT,
     b,FLANGE_WIDTH,
     // Reference: weight per meter and the total weight
     massa,MASS,
     mas1,RUNNING_METER_MASS,
     // Standard designation and a series of I-beam
     Designation, @ STANDART_DESIGNATION,
     seria, @ SERIES,
    
     // Working planes
     WP1,CROSS_PLANE,
     WP2, @ BOTTOM_PLANE,
     WP3, @ SIDE_BOTTOM_RIGHT_PLANE,
     WP4, @ SIDE_TOP_RIGHT_PLANE,
     WP5, @ TOP_PLANE,
     WP6, @ SIDE_TOP_LEFT_PLANE,
     WP7, @ SIDE_BOTTOM_LEFT_PLANE,
     WP8, @ CROSS_PLANE
 
  );
 
  
  Protected (seted, massa, bHid, seria);
  
  Changeable (L, b, h, WP1, WP2, WP3, WP4, WP5, WP6, WP7, WP8, Designation);
  
  OnDlgBeforeSelectParam = 1;
  ShowWhenSelPnt = 1;
  ContourOnLine = 0;
  NotStdBody = 1;
};
 
function OnInitialization {
  LoadInCache (seria, Designation, h, b);
  if (seted == UnknownValue) {
     seted = 1;
     rZOrder = 100;
     bHid = 0;
     L = 50;
     strDesignName = "Implementation 1";
     SelectInCache ("kFirst", "seria", "~", "C", "h", "~", 100, "b", "~", 10, "Designation", "~", "1") ;
  };
};
 
function SetGripPoint {
  // At four I-beam handle
  NGrip = 4;
  // Handles are situated at the extreme points of the model I-beam
  // The insertion point
  pntGrip0 = pntOrigin;
  // On the opposite end
  pntGrip1 = pntOrigin + L * vecDirection;
  
  // At the midpoint of the top shelf
  pntGrip2 = pntOrigin + h * vecPlane;
  
  // At the extreme point of the bottom shelf
  vecNormal = getLocalNormal (vecDirection, vecPlane);
  pntGrip3 = pntOrigin + vecNormal * b / 2;
};
 
function OnMoveGripPoint {
  // The first carrying handle entire I-beam
  if (NMovingGrip == 0) {
     pntOrigin = pntGrip0;
  };
  
  // The second handle stretches the length of the I-beam and determines
  // Direction vector insertion I-beam
  if (NMovingGrip == 1) {
     L = max (vecLen (pntGrip0 - pntGrip1), 1);
     vecDirection = pntGrip1 - pntGrip0;
     LoadInCache (seria, h, b);
     SelectInCache ("kFirst", "seria", "~", "20", "h", "~", h, "b", "~", b);
  };
  
  // Handle height of an I-beam
  // At its height stretched selected new I-beam,
  // Roughly equal relative distance from the cursor point
  // Insert parts.
  if (NMovingGrip == 2) {
     // Auxiliary variable height of the new I-beam.
     rNew_h = vecLen (pntGrip0 - pntGrip2);
 
     LoadInCache (seria, h, b);
     SelectInCache ("kFirst", "seria", "~", "20", "h", "~", rNew_h, "b", "~", b);
  };
 
  // Handle I-beam flange width
  // If it is stretched selected new I-beam flange width,
  // Approximately equal to twice the relative distance
  if (NMovingGrip == 3) {
     // A new auxiliary variable distances.
     rNew_b = 2 * vecLen (pntGrip0 - pntGrip3);
 
     LoadInCache (b, h);
     SelectInCache ("kFirst", "b", "~", rNew_b, "h", "~", h);
  };
  
};
 
function OnMakeParameters {
  strTheName = "19425-74";
  strTheType = "Profile";
  strTheSubType = "I-Shape";
  
  massa = mas1 * L / 1000;
  
  // Find the right third vector in the workpiece coordinate system,
  // As the vector product
  vecNormal = getLocalNormal (vecDirection, vecPlane);
  
  // We place the plane in order counterclockwise
  // The plane of the first end
  WP1 = Plane (pntOrigin + vecDirection * (0), vecDirection);
  // The plane of the second end
  WP8 = Plane (pntOrigin + vecDirection * L, -vecDirection);
  // Plane from the middle of the bottom shelf.
  WP2 = Plane (pntOrigin-vecPlane * (0), -vecPlane);
  
  // Right side
  WP3 = Plane (pntOrigin + vecNormal * (b / 2), vecNormal);
  WP4 = Plane (pntOrigin + vecNormal * (b / 2) + vecPlane * h, vecNormal);
  
  // The plane from the middle of the upper shelf
  WP5 = Plane (pntOrigin + vecPlane * (h), vecPlane);
  
  // Left Side
  WP6 = Plane (pntOrigin-vecNormal * (b / 2) + vecPlane * h, -vecNormal);
  WP7 = Plane (pntOrigin-vecNormal * (b / 2), -vecNormal);
};
 
function OnDialog {
  // For beauty
  strRefDataHeader = "------";
  LoadInCache (seria, Designation, h, b);
  // Type of dialogue
  UniDialog (
     // Define the parameters of a series of height and width of the shelves
     DBFLD, seria, h, b,
     // Reference parameters - designation and weight per meter
     DBINF, Designation, mas1,
     // Arbitrary length parameter I-beam
     VFLD, L, @ I_SHAPE_LENGTH__MM,
       
     // Making reference block settings page
     // Arbitrary properties
     strRefDataHeader, @ REFERENCE_DATA_,
     A, @ A__CM2,
     Ix,IX__CM,
     ix,IX__CM,
     Wx, @ WX__CM3,
     Sx, @ SX__CM3,
     Iy, @ IY__CM4,
     Wy, @ WY__CM3,
     iy,IY__CM,
    
     // Jackdaw display hidden lines
     BFLD, bHid,HIDDEN_LINES,
     // Display types AnyWBK generation means
     // Mirror species, if they are not overridden performances
     TVIDS, lViewType, "AnyWBK",
    
     VIEW, "Vids"
  );
};
 
function OnDialogChanged {
  ShowBool ??(0,HIDDEN_LINES);
  // Check the "invisible line" is only required for those species
  // For which they have.
  if (lViewType == VLEFT || lViewType == VRIGHT)
     {ShowBool ??(1,HIDDEN_LINES)};
};
 
 
function OnChangeParameters {
  // To change the settings:
  // Arbitrary simply assigned new values
  L = new.L;
  
  // For table or selected by a combination of the defining parameters
  if (new.b! = b || new.h! = h) {
     LoadInCache (h, b);
     SelectInCache ("kFirst", "h", "~", new.h, "b", "~", new.b);
  // Or by defining a standard notation field
  } Else if (Designation! = New.Designation) {
     LoadInCache (Designation);
     SelectInCache ("kFirst", "Designation", "~", new.Designation);
  };
 
    
  Handled = OBJ_HANDLED;
  fix = 0;
  
  // The response to the change of position of the planes.
  // Is to recalculate the new position of the insertion point
  // And directions
  
  // Under the conditions IsFixedParam units can be grouped into
  // Options direction of the plane.
  
  // Surface normal collinear vecDirection
  if (IsFixedParam (WP1)) {
     fix = fix + 1;
     vecXOld = vecDirection;
     vecDirection = Vector (new.WP1);
     pntOrigin = Point (new.WP1) - vecDirection * (0);
     restoreBasis (vecXOld, vecPlane, vecDirection);
  };
  if (IsFixedParam (WP8)) {
     fix = fix + 1;
     vecXOld = vecDirection;
     vecDirection = -Vector (new.WP8);
     pntOrigin = Point (new.WP8) - vecDirection * (L);
     restoreBasis (vecXOld, vecPlane, vecDirection);
  };
  
  // Surface normal collinear vecPlane
  if (IsFixedParam (WP2)) {
     fix = fix + 1;
     vecYOld = vecPlane;
     vecNormal = getLocalNormal (vecDirection, vecYOld);
     vecPlane = -Vector (new.WP2);
     pntOrigin = Point (new.WP2) + vecPlane * (0);
     restoreBasis (vecYOld, vecNormal, vecPlane);
     vecDirection = getLocalNormal (vecPlane, vecNormal);
  };
  if (IsFixedParam (WP5)) {
     fix = fix + 1;
     vecYOld = vecPlane;
     vecNormal = getLocalNormal (vecDirection, vecYOld);
     vecPlane = Vector (new.WP5);
     pntOrigin = Point (new.WP5) - vecPlane * (h);
     restoreBasis (vecYOld, vecNormal, vecPlane);
     vecDirection = getLocalNormal (vecPlane, vecNormal);
  };
  
  
  // Surface normal collinear vecNormal
  if (IsFixedParam (WP3)) {
     fix = fix + 1;
     vecZOld = getLocalNormal (vecDirection, vecPlane);
     vecZNew = Vector (new.WP3);
     vecYNew = getLocalNormal (vecDirection, vecZNew);
    
     restoreBasis (vecZOld, vecPlane, vecZNew);
    
     pntOrigin = Point (new.WP3) - vecZNew * (b / 2);
     vecDirection = getLocalNormal (vecZOld, vecYNew);
  };
  
  if (IsFixedParam (WP4)) {
     fix = fix + 1;
     vecZOld = getLocalNormal (vecDirection, vecPlane);
     vecZNew = Vector (new.WP4);
     vecYNew = getLocalNormal (vecDirection, vecZNew);
    
     restoreBasis (vecZOld, vecPlane, vecZNew);
    
     pntOrigin = Point (new.WP4) - vecZNew * (b / 2) + vecYNew * h;
     vecDirection = getLocalNormal (vecZOld, vecYNew);
  };
  
  if (IsFixedParam (WP6)) {
     fix = fix + 1;
     vecZOld = getLocalNormal (vecDirection, vecPlane);
     vecZNew = -Vector (new.WP6);
     vecYNew = getLocalNormal (vecDirection, vecZNew);
    
     restoreBasis (vecZOld, vecPlane, vecZNew);
    
     pntOrigin = Point (new.WP6) + vecZNew * (b / 2) + vecYNew * h;
     vecDirection = getLocalNormal (vecZOld, vecYNew);
  };
 
 
  if (IsFixedParam (WP7)) {
     fix = fix + 1;
     vecZOld = getLocalNormal (vecDirection, vecPlane);
     vecZNew = -Vector (new.WP7);
     vecYNew = getLocalNormal (vecDirection, vecZNew);
    
     restoreBasis (vecZOld, vecPlane, vecZNew);
    
     pntOrigin = Point (new.WP7) + vecZNew * (b / 2);
     vecDirection = getLocalNormal (vecZOld, vecYNew);
  };
  
  if (fix > 1) {
     Handled = OBJ_ERROR;
  };
};
 
function BeforeConnect {
  ResetLastConstraint ();
};
 
function OnSelectParam {
  // The dynamic selection of parameters.
  if (lViewType == VTOP || lViewType == VBOTTOM)
     // Do not choose the parameters for the types of side
     {BreakAll = 1;}
  else {
     // For other species to choose the length of an I-beam in the relative
     // Cursor abscissa
     L = max (abs (rXcoord), 1);
     };
};
 
// Formation of the line specifications, as the sum of substring
strPartName =I_PROFILE_N_ + Designation + "x" + L + @ _MASS_ + massa + @ _GOST_19425_74;