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

    Disappearing tags

    Scheduled Pinned Locked Moved SDK Help
    10 Posts 0 Posters 781 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 04/09/2009 at 15:02, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   R11.5 
      Platform:   Windows  ;   Mac OSX  ; 
      Language(s) :     C++  ;

      ---------
      This is very odd. Same code works in R8-R11 (and everywhere inbetween on both systems, 32-bit and 64-bit) but in R11.5, the tags disappear as if InsertTag() is failing. Anything need to be different?

      > // Sort Polygon/Point Selection tags on Figure/Prop \> //\*---------------------------------------------------------------------------\* \> void IPPSortSelections(BaseDocument\* doc, BaseObject\* baseObject, BaseTag\* ptag) \> //\*---------------------------------------------------------------------------\* \> { \>      // Separate material and bodypart selections \>      AutoAlloc<AtomArray>     aa; \>      if (!aa)                    return; \>      BaseTag\*     tag; \>      LONG          cnt, i; \>      // - Fill array with Material polygon selection tags \>      for (tag = baseObject->GetFirstTag(); tag; tag = tag->GetNext()) \>      { \>           if (tag->IsInstanceOf(Tpolygonselection) && tag->GetName().FindLast(".mtl", &cnt;)) \>                aa->Append(tag); \>      } \>      cnt =                         aa->GetCount(); \>      for (i = 0L; i != cnt; ++i) \>      { \>           tag =     static_cast<BaseTag\*>(aa->GetIndex(i)); \>           doc->AddUndo(UNDO_CHANGE,     tag); \>           tag->Remove(); \>           tag->InsertBefore(ptag); \>      } \>      aa->Flush(); \>      // - Fill array with Bodypart polygon selection tags \>      for (tag = baseObject->GetFirstTag(); tag; tag = tag->GetNext()) \>      { \>           if (tag->IsInstanceOf(Tpolygonselection) && !tag->GetName().FindLast(".mtl", &cnt;)) \>                aa->Append(tag); \>      } \>      cnt =                         aa->GetCount(); \>      for (i = cnt-1L; i >= 0L; --i) \>      { \>           tag =     static_cast<BaseTag\*>(aa->GetIndex(i)); \>           doc->AddUndo(UNDO_CHANGE,     tag); \>           tag->Remove(); \>           baseObject->InsertTag(tag, ptag); \>      } \>      aa->Flush(); \>      // - Fill array with Bodypart point selection tags \>      for (tag = baseObject->GetFirstTag(); tag; tag = tag->GetNext()) \>      { \>           if (tag->IsInstanceOf(Tpointselection)) \>                aa->Append(tag); \>      } \>      cnt =                         aa->GetCount(); \>      for (i = cnt-1L; i >= 0L; --i) \>      { \>           tag =     static_cast<BaseTag\*>(aa->GetIndex(i)); \>           doc->AddUndo(UNDO_CHANGE,     tag); \>           tag->Remove(); \>           baseObject->InsertTag(tag, ptag); \>      } \> }

      ETA: This is Cinema 4D R11.514 Demo. Have not yet had a chance to test in the non-demo version and no complaints (yet).

      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 10/09/2009 at 10:17, xxxxxxxx wrote:

        Six days? Nothing on this. Not my imagination here - just installed the full version and the same symptoms using either the R11 build or the R11.5 build plugins. So this is either a bug in the SDK or something has changed (nothing indicated in the SDK though). I'm going to rebuild using the full version API/SDK but that really shouldn't matter.

        I should note that baseObject->Message(MSG_UPDATE) and EventAdd() are done in the calling function.

        Thanks!

        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 10/09/2009 at 11:13, xxxxxxxx wrote:

          Used the full version API/SDK for the R11.5 build. Since the two functions being used are global, tried the code directly in the calling functions. No difference, same problem.

          No clue here.

          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 10/09/2009 at 15:11, xxxxxxxx wrote:

            I'll try to sort this out. Sorry but really busy with the 11.5er SDK docu.

            cheers,
            Matthias

            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 10/09/2009 at 15:33, xxxxxxxx wrote:

              Appreciated, Matthias. This speaks to having another support person. Samir and I do our best but we don't have that direct connection to the developers. 😉

              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 11/09/2009 at 00:55, xxxxxxxx wrote:

                Robert, do you have an idea at which point in your code the tags are disappearing?

                cheers,
                Matthias

                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 11/09/2009 at 08:58, xxxxxxxx wrote:

                  Where I have colored red:

                  // Sort Polygon/Point Selection tags on Figure/Prop
                  //*---------------------------------------------------------------------------*
                  void IPPSortSelections(BaseDocument* doc, BaseObject* baseObject, BaseTag* ptag)
                  //*---------------------------------------------------------------------------*
                  {
                       // Separate material and bodypart selections
                       AutoAlloc<AtomArray>     aa;
                       if (!aa)                    return;
                       BaseTag*     tag;
                       LONG          cnt, i;
                       // - Fill array with Material polygon selection tags
                       for (tag = baseObject->GetFirstTag(); tag; tag = tag->GetNext())
                       {
                            if (tag->IsInstanceOf(Tpolygonselection) && tag->GetName().FindLast(".mtl", &cnt;))
                                 aa->Append(tag);
                       }
                       cnt =                         aa->GetCount();
                       for (i = 0L; i != cnt; ++i)
                       {
                            tag =     static_cast<BaseTag*>(aa->GetIndex(i));
                            doc->AddUndo(UNDO_CHANGE,     tag);
                            tag->Remove();
                            tag->InsertBefore(ptag);
                       }
                       aa->Flush();
                       // - Fill array with Bodypart polygon selection tags
                       for (tag = baseObject->GetFirstTag(); tag; tag = tag->GetNext())
                       {
                            if (tag->IsInstanceOf(Tpolygonselection) && !tag->GetName().FindLast(".mtl", &cnt;))
                                 aa->Append(tag);
                       }
                       cnt =                         aa->GetCount();
                       for (i = cnt-1L; i >= 0L; --i)
                       {
                            tag =     static_cast<BaseTag*>(aa->GetIndex(i));
                            doc->AddUndo(UNDO_CHANGE,     tag);
                            tag->Remove();
                            baseObject->InsertTag(tag, ptag);
                       }
                       aa->Flush();
                       // - Fill array with Bodypart point selection tags
                       for (tag = baseObject->GetFirstTag(); tag; tag = tag->GetNext())
                       {
                            if (tag->IsInstanceOf(Tpointselection))
                                 aa->Append(tag);
                       }
                       cnt =                         aa->GetCount();
                       for (i = cnt-1L; i >= 0L; --i)
                       {
                            tag =     static_cast<BaseTag*>(aa->GetIndex(i));
                            doc->AddUndo(UNDO_CHANGE,     tag);
                            tag->Remove();
                            baseObject->InsertTag(tag, ptag);
                       }
                  }

                  When I changed all of those to simply baseObject->InsertTag(tag);, it worked (but, of course, no sorting). So, insertion works as long as there is no predecessor set or not using the InsertBefore(). The tags are disappearing since they are first removed and then the reinsertion is failing under these circumstances - R11.5 only.

                  ptag is a valid tag (a Phong tag added just before this is called using MakeTag() and checked) :

                  // Add Phong Tag
                  BaseTag* tag =     baseObject->MakeTag(Tphong);
                  if (!tag) return ErrorException::OOMThrow(EE_DIALOG, logging, GeLoadString(IPPERR_MEMORY_TEXT), "IPPLoader.ParseFigureResFile.tag(Tphong)");
                  if (storeUndoLoad) baseDocument->AddUndo(UNDO_NEW, tag);
                  baseObject->SetPhong(TRUE, TRUE, pi05); //pi);
                  IPPSortSelections(baseDocument, baseObject, tag);

                  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 12/09/2009 at 11:44, xxxxxxxx wrote:

                    Solved. I see that this has been done for a while but how it never impacted previous versions astounds me. Ya see, SetPhong() does something that I never knew about (between the asterisks) :

                    > Bool BaseObject::SetPhong(Bool on, Bool anglelimit, Real angle) \> { \> \*\*\*\* \>      KillTag(Tphong); \>      if (!on) return TRUE; \>      BaseTag \*tag=MakeTag(Tphong); \>      if (!tag) return FALSE; \> \*\*\*\* \>      BaseContainer bc; \>      bc.SetBool(PHONGTAG_PHONG_ANGLELIMIT,anglelimit); \>      bc.SetReal(PHONGTAG_PHONG_ANGLE,angle); \>      tag->SetData(bc,FALSE); \>      return TRUE; \> }

                    See there. It actually deletes the current tag and makes a new one. This *invalidates* my MakeTag(Tphong) tag pointer. Again, no idea how previous versions of my plugin work still (???). That seems like one of those 'need to know' type of things, ya know...

                    I see a full-spectrum update in my near future. 😉

                    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 12/09/2009 at 18:41, xxxxxxxx wrote:

                      Matthias,

                      Maybe an addition to the SDK documentation for R11.5 under SetPhong() :

                      Bool on
                      FALSE removes the phong tag from the object. TRUE deletes the current phong tag and adds a new one.

                      Can't wait to get the new docs!!! 🙂

                      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 14/09/2009 at 01:53, xxxxxxxx wrote:

                        Thanks for the heads-up Robert, glad you figured it out. I will add this information to the documentation.

                        cheers,
                        Matthias

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