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
    • Recent
    • Tags
    • Users
    • Login

    materials

    Scheduled Pinned Locked Moved SDK Help
    12 Posts 0 Posters 764 Views
    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 Offline
      Helper
      last edited by

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 23/10/2008 at 09:02, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   11 
      Platform:      Mac OSX  ; 
      Language(s) :   C.O.F.F.E.E  ;

      ---------
      I'm wanting to populate a document with many random shapes and colors. I don't understand how to assign materials to these shapes via COFFEE. For instance, say I've got this:

      > var foo_sphere; \> foo_sphere=new(SphereObject); \> doc->InsertObject(foo_sphere,NULL,NULL);
      ,

      and I'd like to

      1. create a material
      2. fill, say, the luminance channel with a particular color
      3. assign that material to the sphere I've just created above.

      If someone could show me the few lines of COFFEE code that would do this, and/or point me somewhere in the "minimalist" documentation to look, I'd be extremely appreciative.

      thanks,
      Michael

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

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 23/10/2008 at 12:54, xxxxxxxx wrote:

        Materials are assigned to objects using Texture tags (Ttexture). So:

        1. create a material
        2. configure the material's channels
        3. create a Texture tag on the object (sphere)
        4. assign the material to the Texture tag (TextureTag::SetMaterial()).

        There is example code at the bottom of the BaseMaterial and BaseChannel sections in the COFFEE documentation.

        For the Texture tag do something like this:

        var mat = AllocMaterial(Mmaterial);
        if (!mat) // error: return FALSE or something
        var textag = AllocTag(Ttexture);
        if (!textag) // error: good to check allocations always!
        foo_sphere->InsertTag(textag, NULL);
        textag->SetMaterial(mat);
        // Get your channel, configure, and set the channel here
        mat->Update();

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

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 23/10/2008 at 14:33, xxxxxxxx wrote:

          Thanks! That is immensely helpful. One last thing on this: I don't see in the documentation (in the portions that you mentioned) how to write vectors of color data to individual channels, such as the luminance channel. Any tips on that score would be again immensely appreciated!
          best,
          Michael

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

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 23/10/2008 at 15:28, xxxxxxxx wrote:

            If you have trouble with SetMaterial() because it wants a Marker, use this method instead:

            textag->SetMaterial(mat->GetMarker());

            For changing Channel colors,

            // Enable (or disable 'FALSE') material channel
            material->SetChannelState(CHANNEL_COLOR, TRUE);
            // Get Channel
            var channel = material->GetChannel(CHANNEL_COLOR);
            if (!channel) return FALSE;
            // Get Channel's BaseContainer
            var container = channel->GetContainer();
            if (!container) return FALSE;
            // Set Color to Red
            container->SetData(CH_COLOR, vector(1.0, 0.0, 0.0));
            // Set Channel's BaseContainer (with changes)
            channel->SetContainer(container);

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

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 23/10/2008 at 19:44, xxxxxxxx wrote:

              Sorry to be a nag here, (and I'm going to go away and play with this for weeks once I'm in business), but for some reason the color isn't taking (though the material and the tag are). I tried to collate the stuff from the above posts. There are no errors, but the material simply doesn't turn red. Also, why does this execute on every frame, even though I'm testing the value of "f?"
              I really appreciate the help!
              regards, Michael

              > var f = 0; \> \> main(doc,op) \> { \> \> if (f == 0); \>      { \>       \>      f++; \> \>      var foo_sphere=new(SphereObject); \>      doc->InsertObject(foo_sphere,NULL,NULL); \> \>      var mat = AllocMaterial(Mmaterial); \>      if (!mat) return FALSE; \> \>      var textag = AllocTag(Ttexture); \>      if (!textag) return FALSE; \> \>      foo_sphere->InsertTag(textag, NULL); \>      textag->SetMaterial(mat->GetMarker()); \> \>      // Enable (or disable 'FALSE') material channel \>      mat->SetChannelState(CHANNEL_COLOR, TRUE); \>       \>      // Get Channel \>      var channel = mat->GetChannel(CHANNEL_COLOR); \>      if (!channel) return FALSE; \>       \>      // Get Channel's BaseContainer \>      var container = channel->GetContainer(); \>      if (!container) return FALSE; \>       \>      // Set Color to Red \>      container->SetData(CH_COLOR, vector(1.0, 0.0, 0.0)); \>       \> // Set Channel's BaseContainer (with changes) \>      channel->SetContainer(container); \>      mat->Update(); \> } \> \> }

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

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                On 23/10/2008 at 20:21, xxxxxxxx wrote:

                You're doing it in a COFFEE tag or Xpresso node? The tag is evaluated at every frame. But that isn't your problem. See this:

                if (f == 0);

                That's you entire conditional 'if' block. Delete the ';' so that the {} block after it is part of the conditional.

                After you create the material you need to insert it into the document:

                doc->InsertMaterial(mat);

                Sorry about that. COFFEE isn't my normal language. I mainly do C++ plugins.

                If that still doesn't help, add an EventAdd(); call after the mat->Update(); call.

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

                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                  On 23/10/2008 at 20:46, xxxxxxxx wrote:

                  Is the code at bottom in the order that you were suggesting? This compiles with no errors, but on execute it complains that the doc->InsertMaterial(mat); has too few parameters, and the texture tag no longer gets applied.

                  I found this in the docs:
                  > InsertMaterial( mat, [prev] ) \> [bool] InsertMaterial([BaseMaterial] mat, [[BaseMaterial] prev = NULL});

                  Is not the 2nd argument optional? If so, why would it complain about too few parameters? Thanks for all your help so far, Robert!

                  > var f = 0; \> \> main(doc,op) \> { \> \> if (f == 0) \>      { \>       \>      f++; \> \>      var foo_sphere=new(SphereObject); \>      doc->InsertObject(foo_sphere,NULL,NULL); \>       \> \>      var mat = AllocMaterial(Mmaterial); \>      if (!mat) return FALSE; \>      doc->InsertMaterial(mat); //on execute, we stop here with "too few parameters" \> \>      var textag = AllocTag(Ttexture); \>      if (!textag) return FALSE; \> \>      foo_sphere->InsertTag(textag, NULL); \>      textag->SetMaterial(mat->GetMarker()); \> \>      // Enable (or disable 'FALSE') material channel \>      mat->SetChannelState(CHANNEL_COLOR, TRUE); \> \>       \>      // Get Channel \>      var channel = mat->GetChannel(CHANNEL_COLOR); \>      if (!channel) return FALSE; \>       \>      // Get Channel's BaseContainer \>      var container = channel->GetContainer(); \>      if (!container) return FALSE; \>       \>      // Set Color to Red \>      container->SetData(CH_COLOR, vector(1.0, 0.0, 0.0)); \>       \> // Set Channel's BaseContainer (with changes) \>      channel->SetContainer(container); \>       \>      mat->Update(); \> \>      EventAdd(); \> \> } \> \> }

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

                    THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                    On 23/10/2008 at 21:18, xxxxxxxx wrote:

                    It is possible that something has changed with R11 but the second argument shouldn't be needed (it has a default value). Try doc->InsertMaterial(mat, NULL); and see if it still complains.

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

                      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                      On 23/10/2008 at 21:22, xxxxxxxx wrote:

                      That was it! Thank you very, very much. I've got a project that is now ready to fully take off with this information. regards,
                      Michael

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

                        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                        On 23/10/2008 at 21:37, xxxxxxxx wrote:

                        Glad to help. 🙂

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

                          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                          On 24/10/2008 at 01:35, xxxxxxxx wrote:

                          You can use the operators directly as well, like:

                          > \>      var hue = vector(huevalue,1,1);              // Create a color range using hue value \>      var torgb = HSVToRGB(hue);                    // Convert the HSV values to RGB values \>      mat#MATERIAL_COLOR_COLOR      = torgb;             // Set the RGB into the ColorChannel \>      mat#MATERIAL_LUMINANCE_COLOR = torgb; \>

                          Cheers
                          Lennart

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

                            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                            On 24/10/2008 at 08:51, xxxxxxxx wrote:

                            super cool! Thanks for the help, Lennart and Robert!

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