Страницы

воскресенье, 29 декабря 2013 г.

Труба по ГОСТ 8732-78, 8734-75, 550-75, ТУ 14-3-1080-81

Пример скрипта трубы по  ГОСТ 8732-78 и не только

Подробнее :
//************************************************************************
//  Name:   труба.SPDS
// Date creation: 26/10/13
// File Version:  1
//************************************************************************
// Author:     ©RAZYGRAEV&DEVELOPMENT/Разыграев Андрей Алексеевич/
//          mailto:doctorRAZ@yandex.ru
// Company:    "ООО ЛУКОЙЛ Волгограднефтепереработка", ПКО
//************************************************************************
//  Last Modified: 26/11/13
// Changes:    1.01
//
//************************************************************************
// Description: Трубы стальные бесшовные горячедеформированные по 
//        ГОСТ 8732-78, 8734-75, 550-75 и ТУ 14-3-1080-81.
//        Материал сталь 20, 15Х5М, 12Х18Н10Т
//        Коннект с трубой, отводами, переходами и задвижками
//        Исполнение одно.
//        Вид полный, упрощенный и с разрезом: спереди, и слева,
//************************************************************************
SVersion=2;
ObjectDescription="Трубы стальные бесшовные горячедеформированные (©RAZYGRAEV&&DEVELOPMENT)";
function ActHeader {
 NPart=1;
 NSelect = 1;
 Public(
// характеристика линии
  NumSection, "Номер участка",
  StartSection, "Начало участка",
  EndSection, "Конец участка",
// характеристика среды
  Sreda, "Среда, продукт",
  T_Raboch, "Рабочая температура",
  P_Raboch, "Рабочее давление",
// геометрия и физика объекта
  L,"Длина, мм",
  PN, "Номинальное давление",
  DNf, "Наружный диаметр трубы, мм",
  mas1,"Масса единицы",
  strMaterial, "hidden", // "Материал",
// параметры для зависимости  
  WP1,"Рабочая плоскость 1",
  WP2,"Рабочая плоскость 2",
  WPnormal,"Нормальная плоскость",
  rdE1,"hidden",//first diameter to connect
  rdE2,"hidden",//second diameter to connect
  rS1,"hidden",//thickness of wall 1
  rS2,"hidden", //thickness of wall 2
//параметры для спецификации
  Multiplicity, "Кратность", 
  Count, "Общее количество * %, м",
  sUnits, "Единица измерения",
  strSpecSubPartition, "hidden",//"Подраздел спецификации",
  Zavod, "hidden", //"Завод изготовитель",
  bSpec, "Признак включения в спецификацию",
// параметры для ведомости трубопроводов
  strPartNameBT, "hidden", //"Наименование ВТ",
  MaterialBT, "hidden", //"Материал ВТ",
// параметры для универсального маркера
  TopMarker, "hidden", //"Первая строка маркера",
  BotMarker, "hidden", //"Вторая строка маркера",
 );
 Protected(
  seted,
  hid,
  bFilterGost,
  bbFilterGost,
 );
 Changeable(
  NumSection,
  StartSection,
  EndSection,
  Sreda,      //"Среда, продукт",
  T_Raboch,     //"Рабочая температура",
  P_Raboch,     //"Рабочее давление",
  Multiplicity,
  L,
  DNf,
  PN,
  bSpec,
 );
 OnDlgBeforeSelectParam = 1; //Вызов диалога перед вызовом функции OnSelectParam.
 ShowWhenSelPnt = 1;     //Если установлен этот флажок, объект, будет отрисовываться во время вставки, если не указано, то по умолчанию включен
 ContourOnLine = 0;     //Генерация контура не из скрипта отрисовки, а на лету после отрисовки
 NotStdBody=0;        //Если ==1, то деталь не помещается в каталог компонентов
}

function OnInitialization {
 if(seted==UnknownValue) {
  seted=1;
  rZOrder=50;
  hid=0;
  NumSection=1;
  StartSection=EndSection="";
  Multiplicity=1;
  Sreda="судовое топливо"; // "Среда, продукта",
  T_Raboch=100;  //, "Рабочая температура",
  P_Raboch=2 ;   //, Рабочее давление
  Zavod="";
  sUnits="м";
  bSpec=1;
  L=1000;
  Count=L/1000*Multiplicity;
  PN=16;     // "Номинальное давление",
  strMaterial="20";
  bFilterGost=1;
  bbFilterGost=2;
  SelectInCache("kFirst", "DNf","~",219, "s", "~", 8);
  SelectInCache(1,"kFirst","MaterialMarka", "=", strMaterial);
  strDesignName="Implementation 1";
 }
}

function SetGripPoint {
 NGrip=2;
 pntGrip0=pntOrigin;
 pntGrip1=pntOrigin+vecDirection*L;
}

function OnMoveGripPoint{
 if (NMovingGrip==1){
  L=GridRound(vecLen(pntGrip0-pntGrip1))/rScl;
  vecDirection=(pntGrip1-pntGrip0);
 } else 
  pntOrigin=pntGrip0; 
} 

function OnMakeParameters {
 strTheName="ГОСТ 8732-78, 8734-75, 550-75, ТУ 14-3-1080-81";
 strTheType="vaPipe";
 strTheSubType="Round";
// плоскости
 WP1=Plane(pntOrigin,-vecDirection);
 WP2=Plane(pntOrigin+vecDirection*L*rScl,vecDirection);
 WPnormal=Plane(pntOrigin-vecPlane*(0),vecPlane);
// обновляем если параметры пришли через копи свойства, непонятно почему, но поогает
 SelectInCache("kFirst", "FilterGost", "<", bbFilterGost, "DNf","~",DNf, "s", "~", s); //если обновились через копи свойства
 SelectInCache(1,"kFirst","MaterialMarka", "=", strMaterial); //тянем тип материала
 if ((DNf>219) && (MaterialMarka=="15Х5М")){ //по ТУ 14-3-1080-81
  TrubaGost="ТУ 14-3-1080-81";
  TrubaOboz="Трубы стальные бесшовные для нефтеперерабатывающей и нефтехимической промышленности";
 } else if ((DNf<=219) && (DNf>=20) && (MaterialMarka=="15Х5М")){ // по ГОСТ 550-75
  TrubaGost="ГОСТ 550-75";
  TrubaOboz="Трубы стальные бесшовные для нефтеперерабатывающей и нефтехимической промышленности";
 } else if (DNf<25) { //по ГОСТ 8734-75
  TrubaGost="ГОСТ 8734-75";
  TrubaOboz="Трубы стальные бесшовные холоднодеформированные";
 }else { //по ГОСТ 8732-78
  TrubaGost="ГОСТ 8732-78";
  TrubaOboz="Трубы стальные бесшовные горячедеформированные";
 }
 rdE1=DNf;
 rdE2=DNf;
 rS1=s;
 rS2=s;
 L1=L/1000;
// строки для спецификации
 Count=L/1000*Multiplicity; 
 SpecPartition="Tрубопроводы"; //Раздел сецификации в который попадает деталь
 strSpecSubPartition=TrubaOboz+", сталь "+MaterialMarka+" "+MaterialGost; //подраздел спецификации в который попадает деталь;
 strPartDescription=TrubaGost; //Описание детали в спецификации (ОБОЗНАЧЕНИЕ)
 strPartName=strPartNameBT=FmtText("Труба ",FmtDiv(Designation+" "+TrubaGost, "Б "+MaterialMarka+" "+MaterialGost,TRUE)); //Сокращенное обозначение детали в сецификации (Наименование)
//для Ведомость трубопроводов
 MaterialBT="Сталь "+MaterialMarka;
// для маркера
 TopMarker=NumSection;
 BotMarker=DN;
}

function OnDialog {
 LoadInCache(DNf, s);
 ShowForm("Form1");
}

function OnChangeParameters {
 NumSection=new.NumSection;
 StartSection=new.StartSection;
 EndSection=new.EndSection;
 Multiplicity=new.Multiplicity;
 Sreda=new.Sreda;
 T_Raboch=new.T_Raboch;
 P_Raboch=new.P_Raboch;
 PN=new.PN;
 strMaterial=new.strMaterial;
 L=abs(GridRound(new.L));

 if(DNf != new.DNf)  {
  SelectInCache("kFirst","FilterGost", "<", bbFilterGost, "DNf","~",new.DNf, "s", "~",s);
 } else if (rdE1!=new.rdE1){
  SelectInCache("kFirst","FilterGost", "<", bbFilterGost, "DNf","~",new.rdE1, "s", "~",s); 
 } else if (rdE2!=new.rdE2){
  SelectInCache("kFirst","FilterGost", "<", bbFilterGost, "DNf","~",new.rdE2, "s", "~",s);  
 }
// если не обновилось
 Handled=OBJ_HANDLED;
 if(DNf != new.DNf) Handled=OBJ_WARNING;
 if (new.bSpec==0 || new.bSpec==1) bSpec=new.bSpec;
//  зависимости по плоскостям
 fix=0;
 if(IsFixedParam(WP1,TRUE)){
  fix=1;
  pntOrigin=Point(new.WP1);
  vecDirection=-Vector(new.WP1);
 }
 if(IsFixedParam(WP2,TRUE)){
   if(fix==1) {
    L=abs(new.WP2-new.WP1)/rScl;
   } else {
    fix=fix+1;
    vecDirection=Vector(new.WP2);
    pntOrigin=Point(new.WP2)-(L)*vecDirection*rScl;
   }
  }
  if(IsFixedParam(WPnormal)) {
   fix=fix+1;
   vecYOld=vecPlane;
   vecNormal=getLocalNormal(vecDirection,vecYOld);
   vecPlane=-Vector(new.WPnormal);
   pntOrigin=Point(new.WPnormal)+vecPlane*(0);
   restoreBasis(vecYOld,vecNormal,vecPlane);
   vecDirection=getLocalNormal(vecPlane,vecNormal);
  }
  if(fix>1) Handled=OBJ_ERROR;
}

function OnSelectParam {
 if (IsFixedParam(WP2))  BreakAll=1;
 else L=abs(GridRound(rXcoord));
}

function OnDialogChanged {
 if (bFilterGost==1) {
  bbFilterGost=2;
 } else {
  bbFilterGost=100000;
 }
 LoadInCache(DNf, s,);
 SelectInCache("kFilter", "FilterGost","<", bbFilterGost); //kAskIfNeed kFilter
 L=L1*1000;
 Count=L/1000*Multiplicity;
}

function BeforeConnect {
 ResetLastConstraint();
}

function OnConnect {
 if(rPart == 0){
  if((obj.strTheType == "Tube" && obj.strTheSubType == "Round") || (obj.strTheType=="vaPipe" && obj.strTheSubType!="vaPipeFlange")){
   ResetAllConstraint (); //сбрасываем все зависимости перед вставкой объекта в цепь // ХЗ как работает, но помогает )))
   iWPindx=findNearest(pntOrigin, obj.WP,1,4);
   if  (iWPindx==1 || iWPindx==2 || iWPindx==3 || iWPindx==4){
    SetParamConstraint(rdE1,obj,EXPR,"obj.rdE"+iWPindx,TRUE); 
//    SetParamConstraint(rS1,obj,EXPR,"obj.rS"+iWPindx,TRUE);
    SetGeomConstraint(INSERT,CONTRDIRECT,obj,WP1,obj.WP[iWPindx],0,0);
    SetParamConstraint(PN, obj, EXPR, "obj.PN", TRUE);
    SetParamConstraint(Sreda, obj, EXPR, "obj.Sreda", TRUE);
    SetParamConstraint(T_Raboch, obj, EXPR, "obj.T_Raboch", TRUE);
    SetParamConstraint(P_Raboch, obj, EXPR, "obj.P_Raboch", TRUE);
    SetParamConstraint(strMaterial, obj, EXPR, "obj.strMaterial", TRUE);
    SetParamConstraint(NumSection, obj, EXPR, "obj.NumSection", TRUE);
    SetParamConstraint(StartSection, obj, EXPR, "obj.StartSection", TRUE);
    SetParamConstraint(EndSection, obj, EXPR, "obj.EndSection", TRUE);
    lSimpleView = obj.lSimpleView;
    NoVectorSelect = 1;
    Handled = OBJ_HANDLED;
   }
  } else if (obj.strTheSubType=="vaPipeFlange") {
   SetParamConstraint(rdE1,obj,EXPR,"obj.rdE2",TRUE); //цепляемся к сварке
   SetGeomConstraint(INSERT,CONTRDIRECT,obj,WP1,obj.WP2,0,0); //---//---
   SetParamConstraint(PN, obj, EXPR, "obj.Pyk", TRUE);  //номинальное давление (поправить скрипт фланца)
   SetParamConstraint(Sreda, obj, EXPR, "obj.Sreda", TRUE);
   SetParamConstraint(T_Raboch, obj, EXPR, "obj.T_Raboch", TRUE);
   SetParamConstraint(P_Raboch, obj, EXPR, "obj.P_Raboch", TRUE);
   SetParamConstraint(strMaterial, obj, EXPR, "obj.strMaterial", TRUE);
   SetParamConstraint(NumSection, obj, EXPR, "obj.NumSection", TRUE);
   SetParamConstraint(StartSection, obj, EXPR, "obj.StartSection", TRUE);
   SetParamConstraint(EndSection, obj, EXPR, "obj.EndSection", TRUE);
   lSimpleView = obj.lSimpleView;
   NoVectorSelect = 1;
   Handled = OBJ_HANDLED;
  }
 }
}
Если Ваш вопрос касается программного обеспечения (ПО)
Обязательно указывайте версию ПО, наличие локализации, дополнительные аддоны и надстройки, наличие пакетов обновлений (SP). Желательно, а в случаях, когда речь идет о различных ошибках и глюках, производительности системы, обязательно указывать конфигурацию Вашего "железа", установленную ОС. Желательно при этом указать, какие операции проводились на компьютере непосредственно перед возникновением проблемы: переустановка системы, установка различного ПО, чистка реестра и т.п.


Комментариев нет :

Отправить комментарий