function mp= Build_Feria() % Bulid mp obj (contains models and all arguments) %% init pace=3.33; Pst=[-140 -40 -10]-pace*0.52; Ped=[30 40 10]; Ped=FCM_dV.round_Ped(Pst,Ped,pace); maxdeep=4; order=2; viewxy=[0 60]; Shape.accessThreshold(pace/maxdeep/2/2/2);% Oa=[0 0 0]; Ra=[0 0 0]; rvec=(Ped-Pst)/pace num_cells=rvec(1)*rvec(2)*rvec(3) fprintf("num_cells: %.0f\n",num_cells);% show num of cells %% add SS lib & python path additon_path=pwd; if count(py.sys.path,additon_path) == 0 insert(py.sys.path,int32(0),additon_path); end %% assemble c0 c=CSG("STL",[pwd,'/SolidWoks Files/Feria/stp1.STL'],'init'); cir_up_2d=Circle([-63.6,-117.95,0],140); cir_down_2d=Circle([-45.17 -67.23 0],70); cir_left_2d=Circle([-105 0 0],40); cir_right_2d=Circle([0 0 0],40); cir1_2d=Circle([-63.36 17.05 0],5); cir2_2d=Circle([-42.30 15.36 0],5); cir3_2d=Circle([-44.33 7.76 0],5); cir4_2d=Circle([-60.43 6.20 0],5); line1_2d=Line([0 0 0],[1 1 0]); obs1=Observer(line1_2d); obs1.modify_line_poins_by_circle1(cir1_2d,1); cir1_2d.addlistener('propChanged',@obs1.modify_line_poins_by_circle1); line2_2d=Line([0 0 0],[1 1 0]); obs2=Observer(line2_2d); obs2.modify_line_poins_by_circle2(cir2_2d,1); cir2_2d.addlistener('propChanged',@obs2.modify_line_poins_by_circle2); line3_2d=Line([0 0 0],[1 1 0]); obs3=Observer(line3_2d); obs3.modify_line_poins_by_circle3(cir3_2d,1); cir3_2d.addlistener('propChanged',@obs3.modify_line_poins_by_circle3); line4_2d=Line([0 0 0],[1 1 0]); obs4=Observer(line4_2d); obs4.modify_line_poins_by_circle4(cir4_2d,1); cir4_2d.addlistener('propChanged',@obs4.modify_line_poins_by_circle4); tmp_csg=(cir_up_2d-cir_down_2d-cir_left_2d-cir_right_2d)*(line1_2d*line2_2d*line3_2d*line4_2d)+... (cir1_2d+cir2_2d+cir3_2d+cir4_2d); % tmp_csg=cir_right_2d; skt=Sketch([0 0 -10],Ra,20,tmp_csg); neg_skt=CSG();neg_skt.init(skt,'neg'); neg_skt.set_display_args(Pst,Ped,pace/2,'viewxy',viewxy); neg_skt.display_csg(); c=c-neg_skt; V0=1; % time and calculate Volume tic fcmv=FCM_V(Pst,Ped,pace,maxdeep,order,@c.calSF,@(X) ones(size(X,1),1));% |||1 dV V0=fcmv.calIntegral_V(); fprintf('V0: %f ,Time: %f\n',V0,toc); %% build Dirichlet/Neumann boundary eepsD=1e-1; eepsN=1e-1; Dc1=Circle([-105 0 0],15); Dc2=Circle([-105 0 0],15-eps); Dcube1=Rect([-109 14.46 0],[-101 20.73 0],false); Dcube2=Rect([-109 14.46 0],[-101 20.73 0],false); Dcskt=(Dc1-Dc2)+(Dcube1-Dcube2); skt=Sketch([0 0 -10],Ra,10*2,Dcskt); Dirich_csg=CSG(); Dirich_csg.init(skt,'Dir'); Dirich_csg.judge_func=@(X) abs(vecnorm(X(:,1:2)-[-105 0],2,2)-15)=-109-eepsD & X(:,1)<=-101+eepsD & X(:,2)<20.73+eepsD & X(:,2)>14.46-eepsD); %------------------------------------------Neu Nc1=Circle(Oa,10); Nc2=Circle(Oa,10-eps); Ncskt=(Nc1-Nc2); skt=Sketch([0 0 -10],Ra,10*2,Ncskt); Neuman_csg=CSG(); Neuman_csg.init(skt,'Neu'); Neuman_csg.judge_func=@(X) abs(vecnorm(X(:,1:2)-[0 0],2,2)-10)