function mp=Build_MMC() % Bulid mp obj (contains models and all arguments) %% init pace=0.3; Pst=[0 0 0]-pace*0.51; Ped=[2 4 2]; Ped=FCM_dV.round_Ped(Pst,Ped,pace); maxdeep=3; order=1; viewxy=[-30 30]; 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 % cube1=CSG("Cube","corner",[0 0 0],Ra,[12 12 1]); % cube2=CSG("Cube","corner",[0 0 7],Ra,[12 12 1]); % c=cube1+cube2; cyObjs=[]; diffCoord=[ 0 0 0; 1 0 0; 1 1 0; 0 1 0; ]; rotateAngles=[ -1 1 0; -1 -1 0; 1 -1 0; 1 1 0; ].*(ones(4,1)*[pi/5 pi/4 0]); lenCy=sqrt(3); for i=0:1:1 for j=0:1:3 for k=0:1:1 for idx=1:4 cy=CSG("Cylinder",[i j k]+diffCoord(idx,:),rotateAngles(idx,:),0.1,lenCy); cyObjs=[cyObjs cy]; end end end end firstFlg=1; cys=[]; for cy=cyObjs if firstFlg==1 firstFlg=0; cys=cy; else cys=cys+cy; end end limitedCube=CSG("Cube","corner",[0 0 0],Ra,[2 4 2]); c=(limitedCube*cys); %---------------------------assemble c % show model clf; c.set_display_args([Pst(1) Pst(2) Pst(3)],Ped,pace/5,'viewxy',viewxy); % c.display_csg(); % c.csg2stl('right'); 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=5e-1; % DC2d=Rect([0 0 0],[12 12 0],false); % Dskt=Sketch([0 0 0],[0 0 0],1e-9,DC2d); % Dirich_csg=CSG();Dirich_csg.init(Dskt); Dirich_csg=CSG("Cube","corner",[0 0 0],Ra,[2 0 2]); Dirich_csg.saveAs('Dir'); Dirich_csg.judge_func=@(X) abs(X(:,2))< eepsD*0.35; %------------------------------------------Neu % Ncir=Rect([0 0 0],[12 12 0],false); % Nskt=Sketch([0 0 8],[0 0 0],1e-9,Ncir); % Neuman_csg=CSG(); % Neuman_csg.init(Nskt,'Neu'); Neuman_csg=CSG("Cube","corner",[1-0.3 4 0-0.3],Ra,[1+0.3 4 0+0.3]); Neuman_csg.judge_func=@(X) abs(X(:,2)-4)