import gmsh import os import pandas as pd #Import offset table from excel file and convert to XYZ DataFrame: cwd = os.path.dirname(os.path.realpath('__file__')) inp_f='Lines.xlsx' df=pd.read_excel(cwd+'\\'+inp_f, sheet_name='Table of Offsets') df.drop(labels=df.columns[:2], axis=1, inplace=True) for i in range(0,df.shape[1]): df.iloc[:,i]=pd.to_numeric(df.iloc[:,i], errors='coerce') df.dropna(axis=0,how='any',inplace=True) for i in range(0,len(df)): df.iloc[i,0]=i df=df.round(1) gmsh.initialize() gmsh.option.setNumber("General.Terminal", 1) gmsh.model.add("Panel") lc = 1 df.iloc[:,0]=df.iloc[:,0].astype('int64') for i in range(0,len(df)): gmsh.model.geo.addPoint(df.iloc[i,1], df.iloc[i,2], df.iloc[i,3], lc, df.iloc[i,0]) #frame eq "1" l1=df.loc[df.iloc[:,1] == 147.8] l1=l1.drop_duplicates(subset ="Unnamed: 4") gmsh.model.geo.addBSpline(list(l1.iloc[:,0]), 1) #frame eq "2" l2=df.loc[df.iloc[:,1] == 142.4] l2=l2.drop_duplicates(subset ="Unnamed: 4") gmsh.model.geo.addBSpline(list(l2.iloc[:,0]), 2) #surf "1" to "2" i=1 gmsh.model.geo.addBSpline([9,23,37,51,65,79], 3) gmsh.model.geo.addLine(l1.iloc[0,0], l2.iloc[0,0], 4) gmsh.model.geo.addCurveLoop([1, 3, -2, -4], i) gmsh.model.geo.addSurfaceFilling([i],i) #frame eq "3" l3=df.loc[df.iloc[:,1] == 118.2] gmsh.model.geo.addBSpline(list(l3.iloc[:,0]), 5) #surf "2" to "3" i=i+1 gmsh.model.geo.addBSpline([79,122,165,207,250,293,321,349], 6) gmsh.model.geo.addLine(l2.iloc[0,0], l3.iloc[0,0], 7) gmsh.model.geo.addCurveLoop([2, 6, -5, -7], i) gmsh.model.geo.addSurfaceFilling([i],i) #frame eq "4" l4=df.loc[df.iloc[:,1] == 111.8] gmsh.model.geo.addBSpline(list(l4.iloc[:,0]), 8) #surf "3" to "4" i=i+1 gmsh.model.geo.addBSpline([349,363,391,405], 9) gmsh.model.geo.addLine(l3.iloc[0,0], l4.iloc[0,0], 10) gmsh.model.geo.addCurveLoop([5, 9, -8, -10], i) gmsh.model.geo.addSurfaceFilling([i],i) #frame eq "5" l5=df.loc[df.iloc[:,1] == 47.8] gmsh.model.geo.addBSpline(list(l5.iloc[:,0]), 11) #surf "4" to "5" i=i+1 gmsh.model.geo.addLine(l4.iloc[-1,0], l5.iloc[-1,0], 12) gmsh.model.geo.addLine(l4.iloc[0,0], l5.iloc[0,0], 13) gmsh.model.geo.addCurveLoop([8, 12, -11, -13], i) gmsh.model.geo.addSurfaceFilling([i],i) #frame eq "6" l6=df.loc[df.iloc[:,1] == 31.8] gmsh.model.geo.addBSpline(list(l6.iloc[:,0]), 14) #surf "5" to "6" i=i+1 gmsh.model.geo.addBSpline([419,447,475,503,531,559], 15) gmsh.model.geo.addLine(l5.iloc[0,0], l6.iloc[0,0], 16) gmsh.model.geo.addCurveLoop([11, 15, -14, -16], i) gmsh.model.geo.addSurfaceFilling([i],i) #frame eq "7" l7=df.loc[df.iloc[:,1] == 8] gmsh.model.geo.addBSpline(list(l7.iloc[:,0]), 17) #surf "6" to "7" i=i+1 gmsh.model.geo.addBSpline([559,587,629,685,741,811], 18) gmsh.model.geo.addLine(l6.iloc[0,0], l7.iloc[0,0], 19) gmsh.model.geo.addCurveLoop([14, 18, -17, -19], i) gmsh.model.geo.addSurfaceFilling([i],i) #bow gmsh.model.geo.addBSpline([854,874,889,902,905], 20) #deck gmsh.model.geo.addBSpline([905, 895, 881, 867, 853, 811], 21) #keel gmsh.model.geo.addLine(854,798, 22) #bow surface i=i+1 gmsh.model.geo.addCurveLoop([17,-21, -20,22], i) gmsh.model.geo.addSurfaceFilling([i],i) #stern gmsh.model.geo.addPoint(147.8, 0, 9, lc, -1) #deck gmsh.model.geo.addLine(910, 9, 23) #bulkhead gmsh.model.geo.addLine(910, 0, 24) #transom i=i+1 gmsh.model.geo.addCurveLoop([1,-23, 24], i) gmsh.model.geo.addSurfaceFilling([i],i) all_pt=list(df.iloc[:,0]) pts=gmsh.model.addPhysicalGroup(0, all_pt, 1) gmsh.model.setPhysicalName(0, pts, "Points") gmsh.model.geo.synchronize() gmsh.write("panel_1.geo_unrolled") gmsh.option.setNumber("Mesh.SaveAll", 1) gmsh.write("panel_2.geo") gmsh.fltk.run() gmsh.finalize()