clc, clear all
%
% CONFIGURATION
mirrowed = true;
plotPoints = false;
beginAtSection = 7;

if mirrowed==true
  catiaFileName = 'Rotorblatt-NREL1.CATPart';
else
  catiaFileName = 'Rotorblatt-NREL1_NichtGespiegelt.CATPart';
end
catiaFile = strcat(pwd,'\',catiaFileName);
% 18 more planes
planeDistances = [7000, 8333.3, 10500, 13500, 18500, 19950, 22000, 26100, ...
  32250, 33500, 38500, 40450, 42500, 43500, 46500, 48650, 56166.7, 58900];  % in mm
%
% KEYPOINTS
fid = fopen('keypointsTemp.txt');
j = 1;
while ~feof(fid)
  keypoints(j,:) = textscan(fid, '%s %f %f %f %f',1,'headerlines',0,'Delimiter',',','EmptyValue',0);
  j = j+1;
end
keypoints = keypoints(:,2:end);
keypoints = cell2mat(keypoints);
%
% SECTIONS
fid = fopen('sectionsTemp2.txt');
j = 1;
while ~feof(fid)
  sectionKeypoints(j,:) = textscan(fid, '%s %d %d %d %d %d',1,'headerlines',0,'Delimiter',',','EmptyValue',0);
  for i = 1:2
    fgets(fid);
  end
  j = j+1;
end
sectionKeypoints = sectionKeypoints(:,2:end);
sectionKeypoints(:,end) = [];
sectionKeypoints = cell2mat(sectionKeypoints);
% results(:)
uniqueSectionKeypoints = unique(sectionKeypoints(:));
%
% KEYPOINTS AND SECTIONS
iskeypointInSection = (ismember(keypoints(:,1) , uniqueSectionKeypoints));
j = 1;
for i=1:length(iskeypointInSection)
  if isequal(iskeypointInSection(i),true)
    keypointInSection(j,:) = keypoints(i,:);
    j = j+1;
  end
end
keypointInSectionIDs = keypointInSection(:,1);
keypointInSection = keypointInSection(:,2:end)*1000;
% 2866.7 entfernung Nabe - Spinnerkontaktflaeche zu Rotorblatt
zOffset = 2866.7 - 1366.7;
keypointInSection(:,3) = keypointInSection(:,3) + zOffset;
if mirrowed==true
  theta = 180;
  R = [cosd(theta), 0, -sind(theta);
       0,           1, 0;
       sind(theta), 0,  cosd(theta)];
  keypointInSection = keypointInSection*R;
else
  keypointInSection(:,1) = -1*keypointInSection(:,1);
end
if plotPoints == true
  scatter3(keypointInSection(:,1), keypointInSection(:,2), keypointInSection(:,3));
  axis equal
end
%
% LINES
fid = fopen('linesTemp.txt');
j = 1;
while ~feof(fid)
  lines(j,:) = textscan(fid, '%s %f %f %s',1,'headerlines',0,'Delimiter',',','EmptyValue',0);
  j = j+1;
end
lines = lines(:,2:3);
lines = cell2mat(lines);
combineLines{1} = [10801,10901,...
  11001,11101,11201,11301,11401,11501,11601,11701,11801,11901,...
  12001,12101,12201,12301,12401,12501,12601,12701,12801];
combineLines{2} = [10802,10902,...
  11002,11102,11202,11302,11402,11502,11602,11702,11802,11902,...
  12002,12102,12202,12302,12402,12502,12602,12702,12802,...
  12901,...
  13001,13101,13201,13301,13401,13501,13601,13701];
combineLines{3} = [10803,10903,...
  11003,11103,11203,11303,11403,11503,11603,11703,11803,11903,...
  12003,12103,12203,12303,12403,12503,12603,12703,12803,...
  12902,...
  13002,13102];
combineLines{4} = [10804,10904,...
  11004,11104,11204,11304,11404,11504,11604,11704,11804,11904,...
  12004,12104,12204,12304,12404,12504,12604,12704,12804,...
  12903,...
  13003,13103,...
  13202,13302,13402,13502,13602,13702];
combineLines{5} = [10805,10905,...
  11005,11105,11205,11305,11405,11505,11605,11705,11805,11905,...
  12005,12105,12205,12305,12405,12505,12605,12705,12805,...
  12904,...
  13004,13104,...
  13203,13303,13403,13503,13603,13703];
combineLines{6} = [10806,10906,...
  11006,11106,11206,11306,11406,11506,11606,11706,11806,11906,...
  12006,12106,12206,12306,12406,12506,12606,12706,12806,...
  12905,...
  13005,13105,...
  13204,13304,13404,13504,13604,13704];
% already in model
% combineLines{7} = [10807,10907,...
%   11007,11107,11207,11307,11407,11507,11607,11707,11807,11907,...
%   12007,12107,12207,12307,12407,12507,12607,12707,12807,...
%   12906,...
%   13006,13106,...
%   13205,13305,13405,13505,13605,13705];
combineLines{8} = [10808,10908,...
  11008,11108,11208,11308,11408,11508,11608,11708,11808,11908,...
  12008,12108,12208,12308,12408,12508,12608,12708,12808,...
  12907,...
  13007,13107,...
  13206,13306,13406,13506,13606,13706];
combineLines{9} = [10809,10909,...
  11009,11109,11209,11309,11409,11509,11609,11709,11809,11909,...
  12009,12109,12209,12309,12409,12509,12609,12709,12809,...
  12908,...
  13008,13108,...
  13207,13307,13407,13507,13607,13707];
combineLines{10} = [10810,10910,...
  11010,11110,11210,11310,11410,11510,11610,11710,11810,11910,...
  12010,12110,12210,12310,12410,12510,12610,12710,12810,...
  12909,...
  13009,13109,...
  13208,13308,13408,13508,13608,13708];
combineLines{11} = [10811,10911,...
  11011,11111,11211,11311,11411,11511,11611,11711,11811,11911,...
  12011,12111,12211,12311,12411,12511,12611,12711,12811,...
  12910,...
  13010,13110];
combineLines{12} = [10812,10912,...
  11012,11112,11212,11312,11412,11512,11612,11712,11812,11912,...
  12012,12112,12212,12312,12412,12512,12612,12712,12812,...
  12911,...
  13011,13111,13209,13309,13409,13509,13609,13709];
combineLines{13} = [10813,10913,...
  11013,11113,11213,11313,11413,11513,11613,11713,11813,11913,...
  12013,12113,12213,12313,12413,12513,12613,12713,12813];
%
% hybridBodies
% 1 Querschnittsebenen
% 2 variable temporary set; Flaechen (old), Abschnittstrennungen
% 3 Abschnittstrennungen
% 4 Gesamtoberflaeche
% 5 Spiegelung (old)
% 6 Punkte
% 7 Abschnittslinien
fileID = fopen('Makro_open_file_and_create_elements.catvbs','w');
% begin of file
fprintf(fileID,[...
  'Language="VBSCRIPT"\r\n\r\n'...
  'Sub CATMain()\r\n'...
  'CATIA.RefreshDisplay = False\r\n\r\n'...
  'Set partDocument1 = CATIA.Documents.Open("%s")\r\n'...
  'Set selection1 = partDocument1.Selection\r\n'...
  'Set visPropertySet1 = selection1.VisProperties\r\n'...
  'Set part1 = partDocument1.Part\r\n\r\n'], catiaFile);
% create planes
fprintf(fileID,[...
  'Set hybridBodies1 = part1.HybridBodies\r\n'...
  'Set hybridBody1 = hybridBodies1.Add()\r\n'...
  'hybridBody1.Name = "Querschnittsebenen"\r\n'...
  'part1.Update\r\n\r\n'...
  'Set hybridShapeFactory1 = part1.HybridShapeFactory\r\n\r\n'...
  'Set originElements1 = part1.OriginElements\r\n'...
  'Set hybridShapePlaneExplicit1 = originElements1.PlaneXY\r\n'...
  'Set reference1 = part1.CreateReferenceFromObject(hybridShapePlaneExplicit1)\r\n\r\n']);
numberOfPlanes = length(planeDistances);
for i=1:numberOfPlanes
  fprintf(fileID,[...
    'Set hybridShapePlaneOffset1 = '...
    'hybridShapeFactory1.AddNewPlaneOffset(reference1, %f, False)\r\n'...
    'hybridShapePlaneOffset1.Name = "Ebene.10%02d"\r\n'...
    'hybridBody1.AppendHybridShape hybridShapePlaneOffset1\r\n'...
    'part1.InWorkObject = hybridShapePlaneOffset1\r\n'...
    'part1.Update\r\n\r\n'], planeDistances(i), i);
end
% get whole surface
fprintf(fileID,...
  'Set hybridShapes1 = hybridBody1.HybridShapes\r\n\r\n');
% cut on planes
fprintf(fileID,[...
  'Set hybridBody3 = hybridBodies1.Add()\r\n'...
  'hybridBody3.Name = "Abschnittstrennungen"\r\n'...
  'part1.Update\r\n']);
for i=1:numberOfPlanes
  if i==1
    fprintf(fileID,[...
      'Set hybridBody2 = hybridBodies1.Item("Flaechen")\r\n'...
      'Set hybridShapes2 = hybridBody2.HybridShapes\r\n'...
      'Set hybridShapeAssemble2 = hybridShapes2.Item("Verbindung.16")\r\n']);
  elseif i==2
    fprintf(fileID,[...
      'Set hybridBody2 = hybridBodies1.Item("Abschnittstrennungen")\r\n'...
      'Set hybridShapes2 = hybridBody2.HybridShapes\r\n'...
      'Set hybridShapeAssemble2 = hybridShapes2.Item("Trennen.10%02dr")\r\n'],i-1);
  else
    fprintf(fileID,'Set hybridShapeAssemble2 = hybridShapes2.Item("Trennen.10%02dr")\r\n',i-1);
  end
  fprintf(fileID,[...
    'Set reference1 = part1.CreateReferenceFromObject( hybridShapeAssemble2)\r\n'...
    'Set hybridShapePlaneOffset1 = hybridShapes1.Item("Ebene.10%02d")\r\n'...
    'Set reference2 = part1.CreateReferenceFromObject( hybridShapePlaneOffset1)\r\n\r\n'...
    'Set hybridShapeSplit1 = hybridShapeFactory1.AddNewHybridSplit(reference1, reference2, -1)\r\n'...
    'hybridShapeFactory1.GSMVisibility reference1, 0\r\n'...
    'hybridShapeSplit1.Name = "Trennen.10%02d"\r\n'...
    'hybridBody3.AppendHybridShape hybridShapeSplit1\r\n'...
    'part1.InWorkObject = hybridShapeSplit1\r\n'...
    'part1.Update\r\n'...
    'part1.Update\r\n'],i,i);
  fprintf(fileID,[...
    'Set hybridShapeSplit1 = hybridShapeFactory1.AddNewHybridSplit(reference1, reference2, 1)\r\n'...
    'hybridShapeFactory1.GSMVisibility reference1, 0\r\n'...
    'hybridShapeSplit1.Name = "Trennen.10%02dr"\r\n'...
    'hybridBody3.AppendHybridShape hybridShapeSplit1\r\n'...
    'part1.InWorkObject = hybridShapeSplit1\r\n'...
    'part1.Update\r\n'...
    'part1.Update\r\n\r\n'], i);
end
% combine sections
fprintf(fileID,[...
  'Set hybridBody4 = hybridBodies1.Add()\r\n'...
  'hybridBody4.Name = "Gesamtoberflaeche"\r\n'...
  'part1.Update\r\n']);
for i=1:numberOfPlanes
  fprintf(fileID,[...
    'Set hybridShapeSplit1 = hybridShapes2.Item("Trennen.10%02d")\r\n'...
    'Set reference%d = part1.CreateReferenceFromObject(hybridShapeSplit1)\r\n'],i,i);
  if i==2
    fprintf(fileID,'Set hybridShapeAssemble1 = hybridShapeFactory1.AddNewJoin(reference1, reference2)\r\n');
  elseif i>2
    fprintf(fileID,'hybridShapeAssemble1.AddElement reference%d\r\n',i);
  end
  fprintf(fileID,'\r\n');
end
fprintf(fileID,[...
  'Set hybridShapeSplit1 = hybridShapes2.Item("Trennen.10%02dr")\r\n'...
  'Set reference%d = part1.CreateReferenceFromObject(hybridShapeSplit1)\r\n'...
  'hybridShapeAssemble1.AddElement reference%d\r\n\r\n'...
  'hybridShapeAssemble1.SetConnex 1\r\n'...
  'hybridShapeAssemble1.SetManifold 1\r\n'...
  'hybridShapeAssemble1.SetSimplify 0\r\n'...
  'hybridShapeAssemble1.SetSuppressMode 0\r\n'...
  'hybridShapeAssemble1.SetDeviation 0.001000\r\n'...
  'hybridShapeAssemble1.SetAngularToleranceMode 0\r\n'...
  'hybridShapeAssemble1.SetAngularTolerance 0.500000\r\n'...
  'hybridShapeAssemble1.SetFederationPropagation 0\r\n'...
  'hybridShapeAssemble1.Name = "Verbindung.1001"\r\n'...
  'hybridBody4.AppendHybridShape hybridShapeAssemble1\r\n'...
  'part1.InWorkObject = hybridShapeAssemble1\r\n'...
  'part1.Update\r\n'...
  'part1.Update\r\n'], i, i+1, i+1);
if mirrowed==true
  fprintf(fileID,[...
    'Set reference1 = part1.CreateReferenceFromObject(hybridShapeAssemble1)\r\n'...
    'Set reference2 = part1.CreateReferenceFromObject(hybridShapePlaneExplicit1)\r\n'...
    'Set hybridShapeSymmetry1 = hybridShapeFactory1.AddNewSymmetry(reference1, reference2)\r\n'...
    'hybridShapeSymmetry1.VolumeResult = False\r\n'...
    'hybridBody4.AppendHybridShape hybridShapeSymmetry1\r\n'...
    'part1.InWorkObject = hybridShapeSymmetry1\r\n'...
    'part1.Update\r\n'...
    'Set hybridBody5 = hybridBodies1.Item("Spiegelung")\r\n'...
    'selection1.Add hybridBody5\r\n'...
    'selection1.Add hybridShapeAssemble1\r\n']);
end
fprintf(fileID,'\r\n');
% create Points
fprintf(fileID,[...
  'Set hybridBody6 = hybridBodies1.Add()\r\n'...
  'hybridBody6.Name = "Punkte"\r\n'...
  'part1.Update\r\n'...
  'Set axisSystems1 = part1.AxisSystems\r\n'...
  'Set axisSystem1 = axisSystems1.Item("Achsensystem 0")\r\n'...
  'Set reference1 = part1.CreateReferenceFromObject(axisSystem1)\r\n\r\n']);
for i=1:length(keypointInSectionIDs)
  sectionID = int8(keypointInSectionIDs(i)/1000)+1;
  if sectionID > beginAtSection
    fprintf(fileID,[...
      'Set hybridShapePointCoord1 = hybridShapeFactory1.AddNewPointCoord(%f, %f, %f)\r\n'...
      'hybridShapePointCoord1.RefAxisSystem = reference1\r\n'...
      'hybridBody6.AppendHybridShape hybridShapePointCoord1\r\n'...
      'hybridShapePointCoord1.Name = "Punkt.1%05d"\r\n'...
      'part1.InWorkObject = hybridShapePointCoord1\r\n'...
      'part1.Update\r\n'...
      '\r\n'],keypointInSection(i,:),keypointInSectionIDs(i));
  end
end
myKeypoints = [ 0,0,2870; 0,0,42500; 0,0,46500; 0,0,63000];
if mirrowed == true
  myKeypoints = -myKeypoints;
end
for i=1:length(myKeypoints(:,1))
  fprintf(fileID,[...
    'Set hybridShapePointCoord1 = hybridShapeFactory1.AddNewPointCoord(%f, %f, %f)\r\n'...
    'hybridShapePointCoord1.RefAxisSystem = reference1\r\n'...
    'hybridBody6.AppendHybridShape hybridShapePointCoord1\r\n'...
    'hybridShapePointCoord1.Name = "Punkt.19%04d"\r\n'...
    'part1.InWorkObject = hybridShapePointCoord1\r\n'...
    'part1.Update\r\n\r\n'], myKeypoints(i,:), i);
end
% create Lines
fprintf(fileID,[...
  'Set hybridShapes6 = hybridBody6.HybridShapes\r\n'...
  'Set hybridBody7 = hybridBodies1.Add()\r\n'...
  'hybridBody7.Name = "Abschnittslinien"\r\n\r\n']);
sectionID = 0;
for i=1:length(lines)
  newSectionID = int8(lines(i,1)/1000)+1;
  if newSectionID > sectionID
    j = 1;
  end
  sectionID = newSectionID;
  if sectionID > beginAtSection
    fprintf(fileID,[...
      'Set hybridShapePointCoord1 = hybridShapes6.Item("Punkt.1%05d")\r\n'...
      'Set reference1 = part1.CreateReferenceFromObject(hybridShapePointCoord1)\r\n'...
      'Set hybridShapePointCoord2 = hybridShapes6.Item("Punkt.1%05d")\r\n'...
      'Set reference2 = part1.CreateReferenceFromObject(hybridShapePointCoord2)\r\n'...
      'Set hybridShapeLinePtPt1 = hybridShapeFactory1.AddNewLinePtPt(reference1, reference2)\r\n'...
      'hybridBody7.AppendHybridShape hybridShapeLinePtPt1\r\n'...
      'hybridShapeLinePtPt1.Name = "Linie.1%02d%02d"\r\n'...
      'part1.InWorkObject = hybridShapeLinePtPt1\r\n'...
      'part1.Update\r\n\r\n'],lines(i,1),lines(i,2),sectionID,j);
  end
  j = j+1;
end
jump1 = beginAtSection*14;
jump2 = 28*14;
jump3 = jump2+3*12;
myLines(:,1) = keypointInSectionIDs([jump1+2:jump1+7,jump1+9:jump1+14]);
myLines(:,2) = ones(length(keypointInSectionIDs([2:7,9:14])),1)*90001;
myLines = [myLines;
           [keypointInSectionIDs(jump2+2);
            keypointInSectionIDs(end-8);
            keypointInSectionIDs(jump3+2);
            keypointInSectionIDs([end-7:end-5,end-3:end-1]);
            keypointInSectionIDs(jump3+10);
            keypointInSectionIDs(end);
            keypointInSectionIDs(jump2+12)],...
           [90002;
            90004;
            90003;
            ones(length(keypointInSectionIDs([end-7:end-5, end-3:end-1])), 1)*90004;
            90003;
            90004;
            90002]];
myLines(end+1,:) = [90001,90002];
myLines(end+1,:) = [90002,90003];
myLines(end+1,:) = [90003,90004];
sectionID = 0;
for i=1:length(myLines)
  newSectionID = int8(myLines(i,1)/1000)+1;
  if newSectionID > sectionID
    j = 1;
  end
  sectionID = newSectionID;
  if sectionID > beginAtSection
    fprintf(fileID,[...
      'Set hybridShapePointCoord1 = hybridShapes6.Item("Punkt.1%05d")\r\n'...
      'Set reference1 = part1.CreateReferenceFromObject(hybridShapePointCoord1)\r\n'...
      'Set hybridShapePointCoord2 = hybridShapes6.Item("Punkt.1%05d")\r\n'...
      'Set reference2 = part1.CreateReferenceFromObject(hybridShapePointCoord2)\r\n'...
      'Set hybridShapeLinePtPt1 = hybridShapeFactory1.AddNewLinePtPt(reference1, reference2)\r\n'...
      'hybridBody7.AppendHybridShape hybridShapeLinePtPt1\r\n'...
      'hybridShapeLinePtPt1.Name = "Linie.2%02d%02d"\r\n'...
      'part1.InWorkObject = hybridShapeLinePtPt1\r\n'...
      'part1.Update\r\n\r\n'],myLines(i,1),myLines(i,2),sectionID,j);
  end
  j = j+1;
end
% combine lines
fprintf(fileID,'Set hybridShapes7 = hybridBody7.HybridShapes\r\n');
k = 1;
for i=1:length(combineLines)
  if ~isempty(combineLines{i})
    for j=1:length(combineLines{i})
      fprintf(fileID,'Set hybridShapeLinePtPt1 = hybridShapes7.Item("Linie.%d")\r\n',combineLines{i}(j));
      fprintf(fileID,'Set reference%d = part1.CreateReferenceFromObject(hybridShapeLinePtPt1)\r\n',j);
      if j==2
        fprintf(fileID,'Set hybridShapeAssemble1 = hybridShapeFactory1.AddNewJoin(reference1, reference2)\r\n');
      elseif j>2
        fprintf(fileID,'hybridShapeAssemble1.AddElement reference%d\r\n',j);
      end
      fprintf(fileID,'\r\n');
    end
    fprintf(fileID,[...
      'hybridShapeAssemble1.SetConnex 1\r\n'...
      'hybridShapeAssemble1.SetManifold 1\r\n'...
      'hybridShapeAssemble1.SetSimplify 0\r\n'...
      'hybridShapeAssemble1.SetSuppressMode 0\r\n'...
      'hybridShapeAssemble1.SetDeviation 0.001000\r\n'...
      'hybridShapeAssemble1.SetAngularToleranceMode 0\r\n'...
      'hybridShapeAssemble1.SetAngularTolerance 0.500000\r\n'...
      'hybridShapeAssemble1.SetFederationPropagation 0\r\n'...
      'hybridShapeAssemble1.Name = "Verbindung.11%02d"\r\n'...
      'hybridBody7.AppendHybridShape hybridShapeAssemble1\r\n'...
      'part1.InWorkObject = hybridShapeAssemble1\r\n'...
      'part1.Update\r\n'...
      'part1.Update\r\n\r\n'], k);
    k = k+1;
  end
end
% sweep combined lines
for i=[1:3,6:7,10:12]
  fprintf(fileID,[...
    'Set hybridShapeLinePtPt1 = hybridShapes7.Item("Linie.208%02d")\r\n'...
    'Set reference1 = part1.CreateReferenceFromObject(hybridShapeLinePtPt1)\r\n'...
    'Set hybridShapeDirection1 = hybridShapeFactory1.AddNewDirection(reference1)\r\n'...
    'Set hybridShapeAssemble1 = hybridShapes7.Item("Verbindung.11%02d")\r\n'...
    'Set reference2 = part1.CreateReferenceFromObject(hybridShapeAssemble1)\r\n'...
    'Set hybridShapeExtrude1 = hybridShapeFactory1.AddNewExtrude(reference2, 150.000000, 400.000000, hybridShapeDirection1)\r\n'...
    'hybridShapeExtrude1.SymmetricalExtension = 0\r\n'...
    'hybridBody4.AppendHybridShape hybridShapeExtrude1\r\n'...
    'hybridShapeExtrude1.Name = "Extrudieren.10%02d"\r\n'...
    'part1.InWorkObject = hybridShapeExtrude1\r\n'...
    'part1.Update\r\n\r\n'],i,i,i);
end
% Shear Web
fprintf(fileID,[...
  'Set hybridShapeLoft1 = hybridShapeFactory1.AddNewLoft()\r\n'...
  'hybridShapeLoft1.SectionCoupling = 1\r\n'...
  'hybridShapeLoft1.Relimitation = 1\r\n'...
  'hybridShapeLoft1.CanonicalDetection = 2\r\n'...
  'Set hybridShapeAssemble1 = hybridShapes7.Item("Verbindung.1104")\r\n'...
  'Set reference1 = part1.CreateReferenceFromObject(hybridShapeAssemble1)\r\n'...
  'hybridShapeLoft1.AddSectionToLoft reference1, 1, Nothing\r\n'...
  'Set hybridShapeAssemble2 = hybridShapes7.Item("Verbindung.1109")\r\n'...
  'Set reference2 = part1.CreateReferenceFromObject(hybridShapeAssemble2)\r\n'...
  'hybridShapeLoft1.AddSectionToLoft reference2, 1, Nothing\r\n'...
  'hybridBody4.AppendHybridShape hybridShapeLoft1\r\n'...
  'hybridShapeLoft1.Name = "Flaeche mit Mehrfachschnitten.1001"\r\n'...
  'part1.InWorkObject = hybridShapeLoft1\r\n'...
  'part1.Update\r\n\r\n'...
  'Set hybridShapeLoft1 = hybridShapeFactory1.AddNewLoft()\r\n'...
  'hybridShapeLoft1.SectionCoupling = 1\r\n'...
  'hybridShapeLoft1.Relimitation = 1\r\n'...
  'hybridShapeLoft1.CanonicalDetection = 2\r\n'...
  'Set hybridShapeAssemble1 = hybridShapes7.Item("Verbindung.1105")\r\n'...
  'Set reference1 = part1.CreateReferenceFromObject(hybridShapeAssemble1)\r\n'...
  'hybridShapeLoft1.AddSectionToLoft reference1, 1, Nothing\r\n'...
  'Set hybridShapeAssemble2 = hybridShapes7.Item("Verbindung.1108")\r\n'...
  'Set reference2 = part1.CreateReferenceFromObject(hybridShapeAssemble2)\r\n'...
  'hybridShapeLoft1.AddSectionToLoft reference2, 1, Nothing\r\n'...
  'hybridBody4.AppendHybridShape hybridShapeLoft1\r\n'...
  'hybridShapeLoft1.Name = "Flaeche mit Mehrfachschnitten.1002"\r\n'...
  'part1.InWorkObject = hybridShapeLoft1\r\n'...
  'part1.Update\r\n\r\n']);
% extrapolate shear web
fprintf(fileID,[...
  'Set hybridShapes4 = hybridBody4.HybridShapes\r\n\r\n'...
  'Set hybridShapeLoft1 = hybridShapes4.Item("Flaeche mit Mehrfachschnitten.1001")\r\n'...
  'Set reference1 = part1.CreateReferenceFromBRepName("BorderREdge:(BEdge:(Brp:(GSMLoft.88; (Brp:(GSMLine.84))); None:(Limits1:(); Limits2:(); -1); Cf11:()); WithPermanentBody; WithoutBuildError; WithSelectingFeatureSupport; MFBRepVersion_CXR15)", hybridShapeLoft1)\r\n'...
  'Set reference2 = part1.CreateReferenceFromObject(hybridShapeLoft1)\r\n'...
  'Set hybridShapeExtrapol1 = hybridShapeFactory1.AddNewExtrapolLength(reference1, reference2, 550.000000)\r\n'...
  'hybridShapeExtrapol1.ContinuityType = 0\r\n'...
  'hybridShapeExtrapol1.BorderType = 1\r\n'...
  'hybridShapeExtrapol1.LimitType = 0\r\n'...
  'hybridShapeExtrapol1.SetAssemble True\r\n'...
  'hybridShapeExtrapol1.PropagationMode = 2\r\n'...
  'hybridShapeExtrapol1.ExtendEdgesMode = False\r\n'...
  'hybridShapeExtrapol1.ConstantLengthMode = False\r\n'...
  'hybridBody4.AppendHybridShape hybridShapeExtrapol1\r\n'...
  'hybridShapeExtrapol1.Name = "Extrapol.1001"\r\n'...
  'part1.InWorkObject = hybridShapeExtrapol1\r\n'...
  'part1.Update\r\n'...
  'part1.Update\r\n\r\n'...
  'Set hybridShapeLoft1 = hybridShapes4.Item("Flaeche mit Mehrfachschnitten.1002")\r\n'...
  'Set reference1 = part1.CreateReferenceFromBRepName("BorderREdge:(BEdge:(Brp:(GSMLoft.89; (Brp:(GSMLine.83))); None:(Limits1:(); Limits2:(); -1); Cf11:()); WithPermanentBody; WithoutBuildError; WithSelectingFeatureSupport; MFBRepVersion_CXR15)", hybridShapeLoft1)\r\n'...
  'Set reference2 = part1.CreateReferenceFromObject(hybridShapeLoft1)\r\n'...
  'Set hybridShapeExtrapol1 = hybridShapeFactory1.AddNewExtrapolLength(reference1, reference2, 550.000000)\r\n'...
  'hybridShapeExtrapol1.ContinuityType = 0\r\n'...
  'hybridShapeExtrapol1.BorderType = 1\r\n'...
  'hybridShapeExtrapol1.LimitType = 0\r\n'...
  'hybridShapeExtrapol1.SetAssemble True\r\n'...
  'hybridShapeExtrapol1.PropagationMode = 2\r\n'...
  'hybridShapeExtrapol1.ExtendEdgesMode = False\r\n'...
  'hybridShapeExtrapol1.ConstantLengthMode = False\r\n'...
  'hybridBody4.AppendHybridShape hybridShapeExtrapol1\r\n'...
  'hybridShapeExtrapol1.Name = "Extrapol.1002"\r\n'...
  'part1.InWorkObject = hybridShapeExtrapol1\r\n'...
  'part1.Update\r\n'...
  'part1.Update\r\n\r\n']);
% set "Querschnittsebenen, Abschnittstrennungen, Punkte, Abschnittslinuien"
% invisible
fprintf(fileID,[...
  'selection1.Add hybridBody1\r\n'...
  'selection1.Add hybridBody2\r\n'...
  'selection1.Add hybridBody6\r\n'...
  'selection1.Add hybridBody7\r\n'...
  'Set visPropertySet1 = visPropertySet1.Parent\r\n'...
  'visPropertySet1.SetShow 1\r\n']);
% end of file
fprintf(fileID,[...
  'selection1.Clear\r\n'...
  'CATIA.RefreshDisplay = True\r\n\r\n'...
  'End Sub\r\n']);
fclose(fileID);
























