Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/04/2009 at 08:06, xxxxxxxx wrote:
User Information: Cinema 4D Version: R11.026 Platform: Windows ; Mac OSX ; Language(s) : C++ ;
--------- Hello,
i want to visualize ngons with the GetVirtualObject-Method in my generatorobject after i already visualized normal polygons. In principle my "datatype" has the same information as the code from the documentation below.
> \> BaseObject \*ret = BaseObject::Alloc(Onull); \> \> AutoAlloc<PolygonObject> obj(0,0); //begin of example \> if (!obj) return FALSE; \> \> AutoAlloc<Modeling> mod; \> if (!mod || !mod->InitObject(obj)) return FALSE; \> \> LONG a = mod->AddPoint(obj, Vector(0,0,0)); \> LONG b = mod->AddPoint(obj, Vector(100,0,0)); \> LONG c = mod->AddPoint(obj, Vector(150,50,0)); \> LONG d = mod->AddPoint(obj, Vector(100,100,0)); \> LONG e = mod->AddPoint(obj, Vector(0,100,0)); \> if (!a || !b || !c || !d || !e) return FALSE; \> \> LONG padr[] = {a,b,c,d,e}; \> LONG cnt = sizeof(padr)/sizeof(padr[0]); \> \> LONG i = mod->CreateNgon(obj, padr, cnt); \> if (!i) return FALSE; \> \> if (!mod->Commit()) return FALSE; //end of example \> \> obj->InsertUnderLast(ret); \>
\> BaseObject \*ret = BaseObject::Alloc(Onull); \> \> AutoAlloc<PolygonObject> obj(0,0); //begin of example \> if (!obj) return FALSE; \> \> AutoAlloc<Modeling> mod; \> if (!mod || !mod->InitObject(obj)) return FALSE; \> \> LONG a = mod->AddPoint(obj, Vector(0,0,0)); \> LONG b = mod->AddPoint(obj, Vector(100,0,0)); \> LONG c = mod->AddPoint(obj, Vector(150,50,0)); \> LONG d = mod->AddPoint(obj, Vector(100,100,0)); \> LONG e = mod->AddPoint(obj, Vector(0,100,0)); \> if (!a || !b || !c || !d || !e) return FALSE; \> \> LONG padr[] = {a,b,c,d,e}; \> LONG cnt = sizeof(padr)/sizeof(padr[0]); \> \> LONG i = mod->CreateNgon(obj, padr, cnt); \> if (!i) return FALSE; \> \> if (!mod->Commit()) return FALSE; //end of example \> \> obj->InsertUnderLast(ret); \>
Did i forget something or did i overlook a fault?
Thanks for help
On 22/04/2009 at 09:09, xxxxxxxx wrote:
Did i missed a step between > mod->CreateNgon(obj, padr, cnt); and > obj->InsertUnderLast(ret) to "connect" the ngon-information with the PolygonObject so that thePolygonObject internally generates polygons out of the ngons or something like that? I don't find the missing link. I need a food for thought.
mod->CreateNgon(obj, padr, cnt);
obj->InsertUnderLast(ret)
cheers
Oli
On 22/04/2009 at 09:25, xxxxxxxx wrote:
This line looks wrong.
> AutoAlloc<PolygonObject> obj(0,0)
AutoAlloc<PolygonObject> obj(0,0)
With AutoAlloc allocated objects have only a scope-based lifetime. The polygon object will not be avaible anymore after GetVirtualObjects() has been processed. Use PolygonObject::Alloc(0,0) instead in this case.
cheers, Matthias
On 23/04/2009 at 01:22, xxxxxxxx wrote:
It works :-). What a stupid fault...oh my god.
Thanks a lot Matthias!
cheers,
On 29/04/2009 at 04:47, xxxxxxxx wrote:
Same Topic, other problem.
Now i want to visualize more than one ngon.
So i use a loop to allocate/free the memory of the PolygonObject and to insert them into the BaseObject. In principle it looks like this.
> <code>BaseObject *ret = BaseObject::Alloc(Onull); > > AutoAlloc<Modeling> mod; > > for(LONG ngonCount = 0; ngonCount < ngons; ngonCount++){ > > PolygonObject* obj = PolygonObject::Alloc(0,0); > > if (!obj) return FALSE; > > if (!mod || !mod->InitObject(obj)) return FALSE; > > LONG a = mod->AddPoint(obj, Vector(0,0,0)); > > LONG b = mod->AddPoint(obj, Vector((ngonCount+1)*100,0,0)); > > LONG c = mod->AddPoint(obj, Vector((ngonCount+1)*150,(ngonCount+1)*50,0)); > > LONG d = mod->AddPoint(obj, Vector((ngonCount+1)*100,(ngonCount+1)*100,0)); > > LONG e = mod->AddPoint(obj, Vector(0,(ngonCount+1)*100,0)); > > if (!a || !b || !c || !d || !e) return FALSE; > > LONG padr[] = {a,b,c,d,e}; > > LONG cnt = sizeof(padr)/sizeof(padr[0]); > > LONG i = mod->CreateNgon(obj, padr, cnt); > > if (!i) return FALSE; > > if (nognCount == ngons-1 && !mod->Commit()) return FALSE; > > obj->InsertUnderLast(ret); > } > </code>
I know the values of the points not reallymake sense :-).
My problem is, that this solution worked yesterday and today every time i get a Modeling Kernel Error: internal Error. I know i should not use Commit without arguments in a loop (->documentation), but i "commit" not before the last run.
And how i said, yesterday it worked.
If there was a magic dragon in my pc yesterday :-), has anybody an other idea to insert more than one ngon into the BaseObject or an idea why it works and than not.
On 29/04/2009 at 05:29, xxxxxxxx wrote:
This seems to work fine here. Maybe just exchange the call to Commit() with mod- >Commit(obj, MODELING_COMMIT_NONE, NULL).
On 29/04/2009 at 07:05, xxxxxxxx wrote:
Thanks for the fast reply Matthias. I have two things. 1.) If i exchange the call, i only see the last ngon i inserted, but it works :-).
2.) With your solution i was aible to isolate the fault. In the concrete case i wanted to create a cube with three ngons. So i copied the Cinema-Cube (position of points and the polygonpoints). Ngon 2 and 3 create the ground or rather the top. Ngon 1 should create the four sides of the cube. So i get these three arrays for the polygonpoints: Ngon 1: 0,1,3,2,2,3,5,4,4,5,7,6,6,7, 1 ,0 Ngon 2: 1,7,5,3 Ngon 3: 6,0,2,4
The marked "1" is the reason for the Modeling Kernel Error.
If i change the number to "3" for example it works. And if i change the call to Commit() again, i see all ngons :-).
So any idea why i get the error if there is a "1".
Thanks,
On 05/05/2009 at 07:41, xxxxxxxx wrote:
I solved the problem. The process flow direction of the polygon was wrong at this point :-).