VTKファイルをつくる18

 投稿者:しばっち  投稿日:2018年 3月10日(土)21時11分22秒
  ここではトーラス(ドーナツ型)を定義しています。
スカラー値にZ値を使用しています。

fileメニューのSave Dataからstlファイルで書き出せば3Dプリンターに出力できると思います。
(※「Mesh Lab」等3Dツールによるstlファイルの修正作業が別途必要です)

OPTION BASE 0
OPTION ANGLE DEGREES
RANDOMIZE
LET N=40 !'分割数
LET M=40
DIM X(N,M),Y(N,M),Z(N,M)
INPUT  PROMPT "MODE(0 - 2)=":MODE
SELECT CASE MODE
CASE 0
   LET RR=INT(RND*200)+45
   LET R=INT(RND*40)+5
   FOR J=0 TO M !'トーラス
      FOR I=0 TO N
         LET ALPHA=I*360/N
         LET BETA=J*360/M
         LET X(I,J)=(RR+R*COS(ALPHA))*COS(BETA)
         LET Y(I,J)=(RR+R*COS(ALPHA))*SIN(BETA)
         LET Z(I,J)=R*SIN(ALPHA)
      NEXT I
   NEXT J
CASE 1
   LET R1=INT(RND*200)+45
   LET R2=INT(RND*50)
   LET R=INT(RND*40)+5
   LET RR=INT(RND*40)+5
   LET K=INT(RND*10)+1
   FOR J=0 TO M !'変形トーラス
      FOR I=0 TO N
         LET ALPHA=I*360/N
         LET BETA=J*360/M
         LET  X(I,J)=(R1+R*COS(ALPHA))*(R2+RR*COS(K*BETA))*COS(BETA)
         LET  Y(I,J)=(R1+R*COS(ALPHA))*(R2+RR*COS(K*BETA))*SIN(BETA)
         LET  Z(I,J)=R*SIN(ALPHA)*(R2+RR*COS(K*BETA))
      NEXT I
   NEXT J
CASE 2
   LET RR=INT(RND*200)+45
   LET R=INT(RND*40)+5
   LET R1=INT(RND*30)
   LET K=INT(RND*10)+1
   FOR J=0 TO M !'歪んだトーラス
      FOR I=0 TO N
         LET ALPHA=I*360/N
         LET BETA=J*360/M
         LET  X(I,J)=(RR+R*COS(ALPHA))*COS(BETA)
         LET  Y(I,J)=(RR+R*COS(ALPHA))*SIN(BETA)
         LET  Z(I,J)=R*SIN(ALPHA)+R1*SIN(K*BETA)
      NEXT I
   NEXT J
END SELECT
FILE GETSAVENAME F$,"vtkファイル|*.vtk"
IF F$="" THEN STOP
IF POS(UCASE$(F$),".VTK")=0 THEN LET F$=F$&".vtk"
OPEN #1:NAME F$
ERASE #1
PRINT #1:"# vtk DataFile Version 2.0"
PRINT #1:"torus"
PRINT #1:"ASCII"
PRINT #1:"DATASET POLYDATA"
PRINT #1:"POINTS";4*N*M;"float"
FOR J=0 TO M-1
   FOR I=0 TO N-1
      PRINT #1:X(I+1,J+1);Y(I+1,J+1);Z(I+1,J+1) !'座標値書き込み
      PRINT #1:X(I+1,J);Y(I+1,J);Z(I+1,J)
      PRINT #1:X(I,J);Y(I,J);Z(I,J)
      PRINT #1:X(I,J+1);Y(I,J+1);Z(I,J+1)
   NEXT  I
NEXT  J
PRINT #1:"POLYGONS";N*M;5*N*M
FOR I=0 TO 4*N*M-1 STEP 4
   PRINT #1:4;I;I+1;I+2;I+3 !'meshデータ
NEXT I
PRINT #1:"POINT_DATA";4*N*M
PRINT #1:"SCALARS height float"
PRINT #1:"LOOKUP_TABLE default"
FOR J=0 TO M-1
   FOR I=0 TO N-1
      PRINT #1:Z(I+1,J+1)
      PRINT #1:Z(I+1,J)
      PRINT #1:Z(I,J)
      PRINT #1:Z(I,J+1)
   NEXT I
NEXT J
CLOSE #1
END
 

戻る