なぜかimap_headerinfo()の戻り値にはContent-Typeが含まれないので、
直に取得する力技で解決。

When you try to get charset of a mail on IMAP, imap_headerinfo() doesn’t include ‘Content-Type’ in the return value.
Below is a function to get type of charset from a mail header directly by calling imap_fetchheader.


<?

/**

@context IMAPハンドル

@number  メールのID

@defcharset 失敗した時に返すデフォルトの文字セット名

@return 文字セット名

*/

function imap_getcharset($context, $number, $defcharset = "iso-2022-jp")

{

    

    
// Get charset

    
$h = imap_fetchheader($context, $number);

    
$mc = preg_match("/charsets*=s*(.+?)[;\n]/s", $h, $m);

    
$charset = $m[1] ? strtolower(trim($m[1])) : $defcharset;

    

}

?>

Recently I have upgraded proce55ing to version 1.0.3.
And I tried to run a sketch “Particle Emitter” on FLIGHT404.

But I got this error:

"The method bindTexture(PImage) from the type PGraphicsOpenGL is not visible."

Because this sketch was built with v.135, it’s no longer available to call bindTexture().
So I found a solution.

Instead of

   pgl.bindTexture( images.particle );

We can use this:

  glParticle.bind();
  glParticle.enable();
  // rendering goes here
  glParticle.disable();

where images.glParticle is

  Texture glParticle;
  glParticle = TextureIO.newTexture(new File(dataPath("particle.png")), true);

Finally, here is the fixed code in emitter.pde.

import com.sun.opengl.util.texture.*;

class Emitter{
  Vec3D loc;
  Vec3D vel;
  Vec3D velToMouse;
  float radius;

  Texture coronaTex;
  Texture emitterTex;
  Texture particleTex;
  Texture reflectionTex;

  color myColor;

  ArrayList particles;
  ArrayList nebulae;

  Emitter(  ){

    try {
      coronaTex = TextureIO.newTexture(new File(dataPath("corona.png")), true);
      emitterTex = TextureIO.newTexture(new File(dataPath("emitter.png")), true);
      particleTex = TextureIO.newTexture(new File(dataPath("particle.png")), true);
      reflectionTex = TextureIO.newTexture(new File(dataPath("reflection.png")), true);
    }
    catch (IOException e) {
      println("Texture file is missing");
      exit();  // or handle it some other way
    }  

    loc        = new Vec3D();
    vel        = new Vec3D();
    velToMouse = new Vec3D();

    radius     = 100;

    myColor    = color( 1, 1, 1 );

    particles  = new ArrayList();
    nebulae    = new ArrayList();
  }

  void exist(){
    findVelocity();
    setPosition();
    iterateListExist();
    render();

    gl.glDisable( GL.GL_TEXTURE_2D );

    if( ALLOWTRAILS )
      iterateListRenderTrails();
  }

  void findVelocity(){
    Vec3D dirToMouse = new Vec3D( mouse.loc.sub( loc ).scale( .15 ) );
    vel.set( dirToMouse );
  }

  void setPosition(){
    loc.addSelf( vel );

    if( ALLOWFLOOR ){
      if( loc.y > floorLevel ){
        loc.y = floorLevel;
        vel.y = 0;
      }
    }
  }

  void iterateListExist(){
    gl.glEnable( GL.GL_TEXTURE_2D );

    int mylength = particles.size();
    for( int i=mylength-1; i>=0; i-- ){
      Particle p = ( Particle )particles.get(i);
      if( p.ISSPLIT )
        addParticles( p ); 

      if ( !p.ISDEAD ){
        //        pgl.bindTexture( images.particle );
        particleTex.bind();
        particleTex.enable();
        p.exist();
        particleTex.disable();

      }
      else {
        particles.set( i, particles.get( particles.size() - 1 ) );
        particles.remove( particles.size() - 1 );
      }
    }

    if( ALLOWFLOOR ){
      //      pgl.bindTexture( images.reflection );
      reflectionTex.bind();
      reflectionTex.enable();
      for( Iterator it = particles.iterator(); it.hasNext(); ){
        Particle p = (Particle) it.next();
        p.renderReflection();
      }
      reflectionTex.disable();
    }

    //    pgl.bindTexture( images.corona );
    coronaTex.bind();
    coronaTex.enable();
    for( Iterator it = nebulae.iterator(); it.hasNext(); ){
      Nebula n = (Nebula) it.next();
      if( !n.ISDEAD ){
        n.exist();
      }
      else {
        it.remove();
      }
    }
    coronaTex.disable();
  }

  void render(){
    //    pgl.bindTexture( images.emitter );
    emitterTex.bind();
    emitterTex.enable();
    renderImage( loc, radius, myColor, 1.0 );
    emitterTex.enable();

    if( ALLOWNEBULA ){
      nebulae.add( new Nebula( loc, 15.0, true ) );
      nebulae.add( new Nebula( loc, 45.0, true ) );
    }

    if( ALLOWFLOOR ){
      //      pgl.bindTexture( images.reflection );
      reflectionTex.bind();
      reflectionTex.enable();
      renderReflection();
      reflectionTex.disable();
    }
  }

  void renderReflection(){
    float altitude           = floorLevel - loc.y;
    float reflectMaxAltitude = 300.0;
    float yPer               = 1.0 - altitude/reflectMaxAltitude;

    if( yPer > .05 )
      renderImageOnFloor( new Vec3D( loc.x, floorLevel, loc.z ), radius * 10.0, color( 0.5, 1.0, yPer*.25 ), yPer );

    if( mousePressed )
      renderImageOnFloor( new Vec3D( loc.x, floorLevel, loc.z ), radius + ( yPer + 1.0 ) * radius * random( 2.0, 3.5 ), color( 1.0, 0, 0 ), yPer );
  }

  void iterateListRenderTrails(){
    for( Iterator it = particles.iterator(); it.hasNext(); ){
      Particle p = (Particle) it.next();
      p.renderTrails();
    }
  }

  void addParticles( int _amt ){
    for( int i=0; i<_amt; i++ ){
      particles.add( new Particle( 1, loc, vel ) );
    }

    if( ALLOWNEBULA ){
      nebulae.add( new Nebula( loc, 40.0, false ) );
      nebulae.add( new Nebula( loc, 100.0, false ) );
    }
  }

  void addParticles( Particle _p ){
    // play with amt if you want to control how many particles spawn when splitting
    int amt = (int)( _p.radius * .15 );
    for( int i=0; i<amt; i++ ){
      particles.add( new Particle( _p.gen + 1, _p.loc[0], _p.vel ) );
      if( ALLOWNEBULA )
        nebulae.add( new Nebula( _p.loc[0], random( 5.0, 50.0 ), true ) );
    }
  }
}

Then it got worked!
Particle Emitter

  1. EclipseでProce55ingするにはここを参照。
  2. プロジェクトを右クリックして[プロパティ]を選択
  3. [ビルドパス]の[ライブラリ]タブでjogl.jarの[Native library location]のところに、例えば
    C:\processing-0125-expert\libraries\opengl\library
    と入力する。
  4. さらに、JFrame内でPAppletをEmbeddedとして動作させるには、
    public static void main(String[] args) {
    JFrame f = new JFrame("Embedded");
    f.setLayout(new BorderLayout());
    PApplet embed = new PAppletのクラス名();
    f.add(embed, BorderLayout.CENTER);
    f.setSize(DIM, DIM);
    f.setVisible(true);
    // important to call this whenever embedding a PApplet.
    // It ensures that the animation thread is started and
    // that other internal variables are properly set.
    embed.init();
    }

    でOK。
return
odoruinu.net, softwares, drawings & photography by noradaiko.
all copyright(C) 2008 noradaiko.