Filter löschen
Filter löschen

How to visualise 10000 cell volume

1 Ansicht (letzte 30 Tage)
Pierre Lebel
Pierre Lebel am 25 Sep. 2019
Kommentiert: Pierre Lebel am 11 Okt. 2019
I have tried to view this system in 3D using patch. It is very slow. I've seen other software do this much much faster, even with transparency. What am i missing?
  2 Kommentare
Fabio Freschi
Fabio Freschi am 25 Sep. 2019
Any data? I visualize easily millions of patches but it is difficult to help without a simple example of the data
Jan
Jan am 25 Sep. 2019
Please explain any details. How are the "10000 cell volume" represented? If you post code and data, it is likely, that the speed can be improved.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Fabio Freschi
Fabio Freschi am 25 Sep. 2019
Load nodes and faces in a unique structure and plot all patches in a single command
tic
nodes = []; faces = [];
for i = 1:length(PatchWork)
faces = [faces; PatchWork{i}.FaceVertices+size(nodes,1)];
nodes = [nodes; PatchWork{i}.VertexXYZs.'];
end
figure
patch('Faces',double(faces),'Vertices',nodes,'FaceColor','red');
view([1 1 1]);
toc
>> Elapsed time is 1.018881 seconds.
  11 Kommentare
Fabio Freschi
Fabio Freschi am 11 Okt. 2019
The point is: if there are duplicated nodes, so that each face has its own set of nodes, so you won't have problems in using 'FaceVertexAlphaData'.
There is still the fact that you must address the specific property to the right node. and this may not be simple if your data are generated by an unknown software/function (like an independent mesh generator). I actually haven't check your data in details, but you may know what you really have as input.
I usually work with non-duplicated nodes, like in finite element meshes. In this case, for example, one of your corner nodes is hsared by three faces. Suppose that this corner node is the first node for all 3 faces: so you cannod specify different transparencies for these faces.
Pierre Lebel
Pierre Lebel am 11 Okt. 2019
Thanks again,
Those are several good points.
  • The first is that in my case, there are 10000 cells each with eight vertices and six faces. Vertices are [80000x3 double] and so, are independent for each cell. Faces are [60000x4] and point to the vertices. Each vertex is used three times (3-faces) and only in one cell.
  • Color and transparency are both assigned by face. The colors appear to be assigned correctly.
  • Your last point is good, but because I use duplicated nodes, not really applicable.
I think I should ask Mathworks about the 'FaceVertexAlphaData' feature, but your approach (above) will certainly work, although not quite as elegant or versatile as I would like.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Pierre Lebel
Pierre Lebel am 25 Sep. 2019
variable "PatchWork" attached,
code as follows:
for ib = 1:10000
zz(ib) = patch( app.UIAxes2 ...
, 'Faces',PatchWork{ib}.FaceVertices ...
, 'Vertices',PatchWork{ib}.VertexXYZs' ...
, 'FaceVertexCData', rand() ...
, 'FaceColor','flat');
end

Kategorien

Mehr zu Graphics Object Programming finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by