Пример скрипта трубы по ГОСТ 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). Желательно, а в случаях,
когда речь идет о различных ошибках и глюках, производительности системы,
обязательно указывать конфигурацию Вашего "железа", установленную ОС.
Желательно при этом указать, какие операции проводились на компьютере
непосредственно перед возникновением проблемы: переустановка системы,
установка различного ПО, чистка реестра и т.п.
Комментариев нет :
Отправить комментарий