DemoCutting intraction function: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 2: | Line 2: | ||
{| border="1" cellpadding="1" cellspacing="1" | {| border="1" cellpadding="1" cellspacing="1" | ||
|- valign="top" | |- valign="top" | ||
|width="200px"|[[File:GPT_DemoCutting_20121114-000001-0001.png|200px|GFtbox interface]] | |width="200px"|[[File:GPT_DemoCutting_20121114-000001-0001.png|200px|GFtbox interface]]Starting mesh, green shows growth rate. Red line shows the position of the seam. | ||
|width="200px"|[[File:GPT_DemoCutting_20121114-000050-0001.png|200px|GFtbox interface]] | |width="200px"|[[File:GPT_DemoCutting_20121114-000050-0001.png|200px|GFtbox interface]]After growing to 50 steps. | ||
|} | |} | ||
{| border="1" cellpadding="1" cellspacing="1" | {| border="1" cellpadding="1" cellspacing="1" | ||
|- valign="top" | |- valign="top" | ||
|width="200px"|[[File:GPT_DemoCutting 20121114-000051-0001.png|200px|GFtbox interface]] | |width="200px"|[[File:GPT_DemoCutting 20121114-000051-0001.png|200px|GFtbox interface]]After dissecting along the seam, the seam vanishes but the parts do not separate. | ||
|width="200px"|[[File:GPT_DemoCutting 20121114- | |width="200px"|[[File:GPT_DemoCutting 20121114-000052-0001.png|200px|GFtbox interface]]Explode to separate the parts. | ||
|width="200px"|[[File:GPT_DemoCutting 20121114- | |width="200px"|[[File:GPT_DemoCutting 20121114-000053-0001.png|200px|GFtbox interface]]Flatten and rearrange. | ||
|} | |} | ||
=Interaction function illustrating operations on the mesh= | =Interaction function illustrating operations on the mesh= |
Latest revision as of 12:23, 16 November 2012
Return to GFtbox hints and tips
Starting mesh, green shows growth rate. Red line shows the position of the seam. | After growing to 50 steps. |
After dissecting along the seam, the seam vanishes but the parts do not separate. | Explode to separate the parts. | Flatten and rearrange. |
Interaction function illustrating operations on the mesh
Run the project (example project )for 50 steps then single step to see the effects of:
- dissection (cutting)
- exploding (separating the parts)
- flattening
Note
- these three operations change the mesh and have to be placed at the end of the interaction function (the region is shown in red).
- where to cut (dissect) is set through 'seams' (region is shown in blue)
- most of the comments (green stuff) has been removed from the interaction function itself (although the starting conditions, shown at the bottom, are preserved as part of the detailed description of the model)
function m = gpt_democutting_20121114( m ) %m = gpt_democutting_20121114( m ) % Morphogen interaction function. % Written at 2012-11-16 09:30:03. % GFtbox revision 4351, . % The user may edit any part of this function between delimiters % of the form "USER CODE..." and "END OF USER CODE...". The % delimiters themselves must not be moved, edited, deleted, or added. if isempty(m), return; end fprintf( 1, '%s found in %s\n', mfilename(), which(mfilename()) ); try m = local_setproperties( m ); catch end realtime = m.globalDynamicProps.currenttime; %%% USER CODE: INITIALISATION %%% END OF USER CODE: INITIALISATION %%% SECTION 1: ACCESSING MORPHOGENS AND TIME. %%% AUTOMATICALLY GENERATED CODE: DO NOT EDIT. if isempty(m), return; end setGlobals(); global gNEW_KA_PAR gNEW_KA_PER gNEW_KB_PAR gNEW_KB_PER global gNEW_K_NOR gNEW_POLARISER gNEW_STRAINRET gNEW_ARREST dt = m.globalProps.timestep; polariser_i = gNEW_POLARISER; P = m.morphogens(:,polariser_i); [kapar_i,kapar_p,kapar_a,kapar_l] = getMgenLevels( m, 'KAPAR' ); [kaper_i,kaper_p,kaper_a,kaper_l] = getMgenLevels( m, 'KAPER' ); [kbpar_i,kbpar_p,kbpar_a,kbpar_l] = getMgenLevels( m, 'KBPAR' ); [kbper_i,kbper_p,kbper_a,kbper_l] = getMgenLevels( m, 'KBPER' ); [knor_i,knor_p,knor_a,knor_l] = getMgenLevels( m, 'KNOR' ); [strainret_i,strainret_p,strainret_a,strainret_l] = getMgenLevels( m, 'STRAINRET' ); [arrest_i,arrest_p,arrest_a,arrest_l] = getMgenLevels( m, 'ARREST' ); [id_mid_i,id_mid_p,id_mid_a,id_mid_l] = getMgenLevels( m, 'ID_MID' ); [id_rim_i,id_rim_p,id_rim_a,id_rim_l] = getMgenLevels( m, 'ID_RIM' ); % Mesh type: rectangle % base: 0 % centre: 0 % randomness: 0.1 % version: 1 % xdivs: 4 % xwidth: 2 % ydivs: 4 % ywidth: 2 % Morphogen Diffusion Decay Dilution Mutant % -------------------------------------------------- % KAPAR ---- ---- ---- ---- % KAPER ---- ---- ---- ---- % KBPAR ---- ---- ---- ---- % KBPER ---- ---- ---- ---- % KNOR ---- ---- ---- ---- % POLARISER ---- ---- ---- ---- % STRAINRET ---- ---- ---- ---- % ARREST ---- ---- ---- ---- % ID_MID ---- ---- ---- ---- % ID_RIM ---- ---- ---- ---- %%% USER CODE: MORPHOGEN INTERACTIONS if (Steps(m)==0) && m.globalDynamicProps.doinit % Initialisation code. % increase growth around the edge of the canvas to force it to buckle m = leaf_mgen_edge( m, 'id_rim',1); [id_rim_i,id_rim_p,id_rim_a,id_rim_l] = getMgenLevels( m, 'ID_RIM' ); % assign a morphogen down the middle of the y axis id_mid_p((m.nodes(:,2)<0.2)&(m.nodes(:,2)>-0.2))=1; % To cut the mesh, set a temporary morphogen to 1 in places to cut seams=zeros(size(P)); seams(id_mid_p>0.5)=1; m=leaf_set_seams(m,seams); end STOP_GROWING_TIME=50; if realtime<STOP_GROWING_TIME % Grow kapar_p(id_rim_p==0)=5; kbpar_p(id_rim_p==0)=0.5; kaper_p(id_rim_p==0)=5; kbper_p(id_rim_p==0)=0.5; knor_p =0; elseif realtime>=STOP_GROWING_TIME && realtime<STOP_GROWING_TIME+dt % dissect, explode and flatten kapar_p=0; kbpar_p=0; kaper_p=0; kbper_p=0; knor_p =0; end %%% END OF USER CODE: MORPHOGEN INTERACTIONS %%% SECTION 3: INSTALLING MODIFIED VALUES BACK INTO MESH STRUCTURE %%% AUTOMATICALLY GENERATED CODE: DO NOT EDIT. m.morphogens(:,polariser_i) = P; m.morphogens(:,kapar_i) = kapar_p; m.morphogens(:,kaper_i) = kaper_p; m.morphogens(:,kbpar_i) = kbpar_p; m.morphogens(:,kbper_i) = kbper_p; m.morphogens(:,knor_i) = knor_p; m.morphogens(:,strainret_i) = strainret_p; m.morphogens(:,arrest_i) = arrest_p; m.morphogens(:,id_mid_i) = id_mid_p; m.morphogens(:,id_rim_i) = id_rim_p; %%% USER CODE: FINALISATION % Cut the mesh along the seams (see above) % In this case once dissected and exploded (see GUI) the parts are flattened % Here the three processes are done in successive step to make them visible if realtime>=STOP_GROWING_TIME && realtime<STOP_GROWING_TIME+dt m=leaf_dissect(m); m = leaf_setproperty( m, 'freezing', 0.999 ); elseif realtime>=STOP_GROWING_TIME+1 && realtime<STOP_GROWING_TIME+1+dt m=leaf_explode(m,0.2); elseif realtime>=STOP_GROWING_TIME+2 && realtime<STOP_GROWING_TIME+2+dt m=leaf_flatten(m); end %%% END OF USER CODE: FINALISATION end %%% USER CODE: SUBFUNCTIONS function m = local_setproperties( m ) % This function is called at time zero in the INITIALISATION section of the % interaction function. It provides commands to set each of the properties % that are contained in m.globalProps. Uncomment whichever ones you would % like to set yourself, and put in whatever value you want. % % Some of these properties are for internal use only and should never be % set by the user. At some point these will be moved into a different % component of m, but for the present, just don't change anything unless % you know what it is you're changing. % m = leaf_setproperty( m, 'trinodesvalid', true ); % m = leaf_setproperty( m, 'prismnodesvalid', true ); % m = leaf_setproperty( m, 'thicknessRelative', 0.200000 ); % m = leaf_setproperty( m, 'thicknessArea', 0.000000 ); % m = leaf_setproperty( m, 'thicknessMode', 'physical' ); % m = leaf_setproperty( m, 'activeGrowth', 1.000000 ); % m = leaf_setproperty( m, 'displayedGrowth', 10 ); % m = leaf_setproperty( m, 'displayedMulti', [] ); % m = leaf_setproperty( m, 'allowNegativeGrowth', true ); % m = leaf_setproperty( m, 'usePrevDispAsEstimate', true ); % m = leaf_setproperty( m, 'perturbInitGrowthEstimate', 0.000010 ); % m = leaf_setproperty( m, 'perturbRelGrowthEstimate', 0.010000 ); % m = leaf_setproperty( m, 'perturbDiffusionEstimate', 0.000100 ); % m = leaf_setproperty( m, 'resetRand', false ); % m = leaf_setproperty( m, 'mingradient', 0.000000 ); % m = leaf_setproperty( m, 'relativepolgrad', false ); % m = leaf_setproperty( m, 'usefrozengradient', true ); % m = leaf_setproperty( m, 'userpolarisation', false ); % m = leaf_setproperty( m, 'thresholdsq', 1.000000 ); % m = leaf_setproperty( m, 'splitmargin', 1.400000 ); % m = leaf_setproperty( m, 'splitmorphogen', ); % m = leaf_setproperty( m, 'thresholdmgen', 0.500000 ); % m = leaf_setproperty( m, 'bulkmodulus', 1.000000 ); % m = leaf_setproperty( m, 'unitbulkmodulus', true ); % m = leaf_setproperty( m, 'poissonsRatio', 0.300000 ); % m = leaf_setproperty( m, 'starttime', 0.000000 ); % m = leaf_setproperty( m, 'timestep', 1.000000 ); % m = leaf_setproperty( m, 'timeunitname', ); % m = leaf_setproperty( m, 'distunitname', 'mm' ); % m = leaf_setproperty( m, 'scalebarvalue', 0.000000 ); % m = leaf_setproperty( m, 'validateMesh', true ); % m = leaf_setproperty( m, 'rectifyverticals', false ); % m = leaf_setproperty( m, 'allowSplitLongFEM', true ); % m = leaf_setproperty( m, 'longSplitThresholdPower', 0.000000 ); % m = leaf_setproperty( m, 'allowSplitBentFEM', false ); % m = leaf_setproperty( m, 'allowSplitBio', true ); % m = leaf_setproperty( m, 'allowFlipEdges', false ); % m = leaf_setproperty( m, 'allowElideEdges', true ); % m = leaf_setproperty( m, 'mincellangle', 0.200000 ); % m = leaf_setproperty( m, 'alwaysFlat', 0.000000 ); % m = leaf_setproperty( m, 'flattenforceconvex', true ); % m = leaf_setproperty( m, 'flatten', false ); % m = leaf_setproperty( m, 'flattenratio', 1.000000 ); % m = leaf_setproperty( m, 'useGrowthTensors', false ); % m = leaf_setproperty( m, 'plasticGrowth', false ); % m = leaf_setproperty( m, 'totalinternalrotation', 0.000000 ); % m = leaf_setproperty( m, 'stepinternalrotation', 2.000000 ); % m = leaf_setproperty( m, 'showinternalrotation', false ); % m = leaf_setproperty( m, 'performinternalrotation', false ); % m = leaf_setproperty( m, 'internallyrotated', false ); % m = leaf_setproperty( m, 'maxFEcells', 0 ); % m = leaf_setproperty( m, 'inittotalcells', 0 ); % m = leaf_setproperty( m, 'bioApresplitproc', ); % m = leaf_setproperty( m, 'bioApostsplitproc', ); % m = leaf_setproperty( m, 'maxBioAcells', 0 ); % m = leaf_setproperty( m, 'colors', (6 values) ); % m = leaf_setproperty( m, 'colorvariation', 0.050000 ); % m = leaf_setproperty( m, 'colorparams', (12 values) ); % m = leaf_setproperty( m, 'biocolormode', 'auto' ); % m = leaf_setproperty( m, 'freezing', 0.999000 ); % m = leaf_setproperty( m, 'canceldrift', false ); % m = leaf_setproperty( m, 'mgen_interaction', (unknown type function_handle) ); % m = leaf_setproperty( m, 'mgen_interactionName', 'gpt_demosubdivision_20121114' ); % m = leaf_setproperty( m, 'allowInteraction', true ); % m = leaf_setproperty( m, 'interactionValid', true ); % m = leaf_setproperty( m, 'gaussInfo', (unknown type struct) ); % m = leaf_setproperty( m, 'stitchDFs', [] ); % m = leaf_setproperty( m, 'D', (36 values) ); % m = leaf_setproperty( m, 'C', (36 values) ); % m = leaf_setproperty( m, 'G', (6 values) ); % m = leaf_setproperty( m, 'solver', 'cgs' ); % m = leaf_setproperty( m, 'solverprecision', 'double' ); % m = leaf_setproperty( m, 'solvertolerance', 0.001000 ); % m = leaf_setproperty( m, 'solvertolerancemethod', 'max' ); % m = leaf_setproperty( m, 'diffusiontolerance', 0.000010 ); % m = leaf_setproperty( m, 'allowsparse', true ); % m = leaf_setproperty( m, 'maxIters', 3.000000 ); % m = leaf_setproperty( m, 'maxsolvetime', 1000.000000 ); % m = leaf_setproperty( m, 'cgiters', 0.000000 ); % m = leaf_setproperty( m, 'simsteps', 0 ); % m = leaf_setproperty( m, 'stepsperrender', 0 ); % m = leaf_setproperty( m, 'growthEnabled', true ); % m = leaf_setproperty( m, 'diffusionEnabled', true ); % m = leaf_setproperty( m, 'flashmovie', false ); % m = leaf_setproperty( m, 'makemovie', 0.000000 ); % m = leaf_setproperty( m, 'moviefile', ); % m = leaf_setproperty( m, 'codec', 'None' ); % m = leaf_setproperty( m, 'autonamemovie', true ); % m = leaf_setproperty( m, 'overwritemovie', false ); % m = leaf_setproperty( m, 'framesize', [] ); % m = leaf_setproperty( m, 'mov', [] ); % m = leaf_setproperty( m, 'boingNeeded', false ); % m = leaf_setproperty( m, 'initialArea', 4.000000 ); % m = leaf_setproperty( m, 'bendunitlength', 2.000000 ); % m = leaf_setproperty( m, 'targetRelArea', 1.000000 ); % m = leaf_setproperty( m, 'defaultinterp', 'min' ); % m = leaf_setproperty( m, 'readonly', false ); % m = leaf_setproperty( m, 'projectdir', 'D:\ab\Matlab stuff\Growth models' ); % m = leaf_setproperty( m, 'modelname', 'GPT_DemoSubdivision_20121114' ); % m = leaf_setproperty( m, 'allowsave', 1.000000 ); % m = leaf_setproperty( m, 'addedToPath', true ); % m = leaf_setproperty( m, 'bendsplit', 0.300000 ); % m = leaf_setproperty( m, 'usepolfreezebc', false ); % m = leaf_setproperty( m, 'dorsaltop', true ); % m = leaf_setproperty( m, 'defaultazimuth', -45.000000 ); % m = leaf_setproperty( m, 'defaultelevation', 33.750000 ); % m = leaf_setproperty( m, 'defaultroll', 0.000000 ); % m = leaf_setproperty( m, 'defaultViewParams', (unknown type struct) ); % m = leaf_setproperty( m, 'comment', ); % m = leaf_setproperty( m, 'legendTemplate', '%T: %q\n%m' ); % m = leaf_setproperty( m, 'bioAsplitcells', true ); % m = leaf_setproperty( m, 'bioApullin', 0.142857 ); % m = leaf_setproperty( m, 'bioAfakepull', 0.202073 ); % m = leaf_setproperty( m, 'interactive', false ); % m = leaf_setproperty( m, 'coderevision', 4351.000000 ); % m = leaf_setproperty( m, 'coderevisiondate', ); % m = leaf_setproperty( m, 'modelrevision', 0.000000 ); % m = leaf_setproperty( m, 'modelrevisiondate', ); % m = leaf_setproperty( m, 'savedrunname', ); % m = leaf_setproperty( m, 'savedrundesc', ); % m = leaf_setproperty( m, 'vxgrad', (108 values) ); % m = leaf_setproperty( m, 'lengthscale', 2.000000 ); end