Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    painting a Texture layer

    SDK Help
    0
    5
    440
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Helper
      last edited by

      On 05/12/2013 at 08:13, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   R15 
      Platform:   Windows  ;   
      Language(s) :     C++  ;

      ---------
      I'm trying to paint on a texture layer (Set pixels).
      So I go from Paintexture to Paintlayer to PaintlayerBmp and then use SetPixelCnt to set pixels in the layer (paint on it).

      However, from Paintlayer to Paintlayerbmp gives an error "cannot be used to initialize Paintlayerbmp".

      What to do?

      	// Get selected texture - layer
      	PaintTexture *pTex;
      	pTex = PaintTexture::GetSelectedTexture();
        
      	PaintLayer *pLayer = pTex->GetFirstLayer();
        
      	PaintLayerBmp*	cLayer = pLayer->GetLayerDownFirst();	//Here it goes wrong
      	
        
      	String name;
      	Int32 bh, bw;
      	
      	// getting the info of the painttexture and paintlayer is ok
      	name = pTex->GetPaintTexture()->GetName();	// texture name: myimage.jpg
      	bh = pTex->GetFirstLayer()->GetBh();
      	bw = pTex->GetFirstLayer()->GetBw();
      	GePrint ("bw -bh: " + String::IntToString(bw) + " - " + String::IntToString(bh));
        
      	Int32 y; UChar buf[] = { 128 };
      	for (y=0;y<100;y++)
         		cLayer->SetPixelCnt(0,y,100,buf,0,COLORMODE_GRAY, PIXELCNT_0);
      
      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        On 06/12/2013 at 04:42, xxxxxxxx wrote:

        This seems to get the PaintLayerBump: pLayerBmp = (PaintLayerBmp* )pTex->GetLayerDownFirst();
        So I can use SetPixelCnt so write onto the layerbmp.

        However, the layer does not seem to change. Nothing happens.
        Do I have to write back or do some update?
        EventAdd() did not help.

        	PaintTexture *pTex;
        	PaintLayerBmp *pLayerBmp;
          
        	pTex = PaintTexture::GetSelectedTexture();
        	pLayerBmp = (PaintLayerBmp* )pTex->GetLayerDownFirst();
          
        	
        	Int32 y; UChar buf[] = { 128 }; 
        	for (y=0;y<200;y++)
        		pLayerBmp->SetPixelCnt(0,y,200,buf,0,COLORMODE_RGB, PIXELCNT_0);
        
        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

          On 07/12/2013 at 07:29, xxxxxxxx wrote:

          I can now read and write to the texture layer using pLayerBmp->SetPixelCnt();
          However how can I update the texture view.

          I used functions below, but it only updates when the cursor re-enters the texture layer view?

          	//pLayerBmp->UpdateRefresh(0,0, bw,bh, UPDATE_STD);
          	pLayerBmp->UpdateRefreshAll(UPDATE_STD, TRUE);
            
          	//onoff to update layer
          	//pLayer->SetShowBit(FALSE, 0);
          	//pLayer->SetShowBit(TRUE, 0);
            
          	//EventAdd(EVENT_FORCEREDRAW);
          
          1 Reply Last reply Reply Quote 0
          • H
            Helper
            last edited by

            On 07/12/2013 at 08:54, xxxxxxxx wrote:

            I'm not sure I understand what it is you're trying to do.
            But if you're just trying to create a new BP texture then I think you need to use SetSelected_Texture() to update it after you've changed it.

            This how I create a new BP texture:

            //Creates a new paint texure in bodypaint  
              
              BaseContainer bc;  
              bc.SetLong(TEXTURE_FILEFORMAT,FILTER_JPG);  
              bc.SetLong(TEXTURE_WIDTH, 1024);  
              bc.SetLong(TEXTURE_HEIGHT, 1024);  
              bc.SetLong(TEXTURE_MODE, COLORMODE_RGB);  
              PaintTexture *pTex = PaintTexture::CreateNewTexture("C:\\Users\\user\\Desktop\\mytex", bc);  
              if(pTex)  
              {  
                  PaintLayer *pLayer = pTex->GetFirstLayer();  
                  if(pLayer && pLayer->IsInstanceOf(OBJECT_PAINTLAYERBMP))  
                  {  
                      Bool ret = PaintTexture::SetSelected_Texture((PaintLayerBmp* )pLayer,NULL);  
                  }  
              }
            

            -ScottA

            1 Reply Last reply Reply Quote 0
            • H
              Helper
              last edited by

              On 08/12/2013 at 09:41, xxxxxxxx wrote:

              Thanks for the information.
              Really helpful.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post