📄 gmcavity.m
字号:
function b = gmcavity(b1, b2);% gmcavity: Make a brep that has as a cavity another brep.% brep = gmcavity(brep1, brep2);% This routine creates a new brep formed by making brep2% a cavity in brep1. The routine glues the two breps together% and renumbers everything. It does not check that the gluing% is sensible -- in particular, it does not verify that % brep2 actually is enclosed by brep1.if ~isa(b1,'zba') | ~isa(b2,'zba') error('Object passed to gmcavity not a zba');endif length(b1) < 1 | length(b2) < 1 error('Object passed to gmcavity not a brep');endglobal GM_BREP_TYPE_CODEif ~strcmpi(double(b1{0}), GM_BREP_TYPE_CODE) | ... ~strcmpi(double(b2{0}), GM_BREP_TYPE_CODE) error('Object passed to gmcavity not a brep');enddi = double(b1{2});if b2{2} ~= di error('Error: breps have different embedded dimensions')endif b1{1} ~= di error('Error: brep1 is not full dimensional')end[scrap, nf] = size(b1{5+di});if nf ~= 1 error('Error: brep1 has more than one top-level face')endallfacenames = '';for fdim = 0 : di [scrap,nf] = size(b1{5+fdim}); for faceind = 0 : nf - 1 allfacenames = [allfacenames, ' ', double(b1{5+fdim}{0,faceind})]; endendallfacenames = lower(allfacenames);for co = 1 : 10000000 appendstr = sprintf('_cav%d', co); if length(findstr(allfacenames, appendstr)) == 0 | ... length(allfacenames) < length(appendstr) break endendgdim2 = double(b2{1});[scrap,numtoplevface] = size(b2{5+gdim2});[scrap,brep1_numcp] = size(b1{4});new_cplist = [double(b1{4}),double(b2{4})];b = zba(cell(6 + di,1));b{0} = GM_BREP_TYPE_CODE; b{1} = [di]; b{2} = [di]; b{3} = {};b{4} = new_cplist;level_size1 = zba(zeros(di + 1,1));for fdim = 0 : di [scrap,level_size1(fdim)] = size(b1{5+fdim});endnewbdry = {};newib = {};[scrap,numface2] = size(b2{5+gdim2});numface1 = double(level_size1(gdim2));if gdim2 < di - 1 newib = cell(1,numface2); for i = 0 : numface2 - 1 newib{i + 1} = [double(b2{5+gdim2}{i}), appendstr]; endelseif gdim2 == di - 1 newbdry = cell(1, numface2); for i = 0 : numface2 - 1 newbdry{i + 1} = [double(b2{5+gdim2}{i}), appendstr]; endelse for faceind = 0 : numface2 - 1 for i = 0 : length(b2{5 + gdim2}{2,faceind}) - 1 ch1 = double(b2{5 + gdim2}{2,faceind}{i}); if (ch1(1) == '+' | ch1(1) == '-') ch1 = ch1(2:end); end newbdry{length(newbdry) + 1} = ... [double(ch1), appendstr]; end for i = 0 : length(b2{5 + gdim2}{3,faceind}) - 1 ch1 = b2{5 + gdim2}{3,faceind}{i}; newib{length(newib) + 1} = ... [double(ch1), appendstr]; end endendfor fdim = 0 : di if fdim == di b{5+fdim} = cell(5,1); b{5+fdim}{0,0} = double(b1{5+fdim}{0,0}); b{5+fdim}{1,0} = double(b1{5+fdim}{1,0}); b{5+fdim}{2,0} = [double(b1{5+fdim}{2,0}),newbdry]; b{5+fdim}{3,0} = [double(b1{5+fdim}{3,0}),newib]; b{5+fdim}{4,0} = {}; else b{5 + fdim} = double(b1{5 + fdim}); if fdim <= gdim2 [scrap,levsize2] = size(b2{5+fdim}); for faceind = 0 : levsize2 - 1 nfaceind = faceind + double(level_size1(fdim)); b{5+fdim}{0, nfaceind} = ... [double(b2{5+fdim}{0,faceind}),appendstr]; b{5+fdim}{1, nfaceind} = ... double(b2{5+fdim}{1,faceind}); [scrap,numchildren] = size(b2{5+fdim}{2,faceind}); newch1 = cell(1,numchildren); for i = 0 : numchildren - 1 newch1{i+1} = [double(b2{5+fdim}{2,faceind}{i}),appendstr]; end b{5+fdim}{2,nfaceind} = newch1; [scrap,numib] = size(b2{5+fdim}{3,faceind}); newib1 = cell(1,numib); for j = 0 : numib - 1 newib{i+1} = [double(b2{5+fdim}{3,faceind}{j}),appendstr]; end b{5+fdim}{3, nfaceind} = newib1; b{5+fdim}{4, nfaceind} = double(b2{5+fdim}{4,faceind}); [scrap,numpatch] = size(b{5+fdim}{4, nfaceind}); for k = 0 : numpatch - 1 [n1,n2] = size(b{5+fdim}{4,nfaceind}{2,k}); b{5+fdim}{4,nfaceind}{2,k} =... double(b{5+fdim}{4,nfaceind}{2,k}) + ... brep1_numcp * ones(n1,n2); end end end endend% ------------------------------------------------------------------% Copyright (c) 1999 by Cornell University. All rights reserved.% See the accompanying file 'Copyright' for authorship information,% the terms of the license governing this software, and disclaimers% concerning this software.% ------------------------------------------------------------------% This file is part of the QMG software. % Version 2.0 of QMG, release date September 3, 1999% ------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -