[brlcad-commits] SF.net SVN: brlcad:[36102] brlcad/trunk/src/librt/primitives/bspline/ bspline.cpp
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <br...@us...> - 2009-09-30 06:26:22
|
Revision: 36102 http://brlcad.svn.sourceforge.net/brlcad/?rev=36102&view=rev Author: brlcad Date: 2009-09-30 06:26:13 +0000 (Wed, 30 Sep 2009) Log Message: ----------- initial conversion for ray-tracing purposes, add a compile-time switch to convert prep() to use brep prep() with stashage into the nurb_internal. Modified Paths: -------------- brlcad/trunk/src/librt/primitives/bspline/bspline.cpp Modified: brlcad/trunk/src/librt/primitives/bspline/bspline.cpp =================================================================== --- brlcad/trunk/src/librt/primitives/bspline/bspline.cpp 2009-09-30 06:23:54 UTC (rev 36101) +++ brlcad/trunk/src/librt/primitives/bspline/bspline.cpp 2009-09-30 06:26:13 UTC (rev 36102) @@ -26,6 +26,8 @@ */ /** @} */ +//#define CONVERT_TO_BREP 1 + #include "common.h" #include <stdlib.h> @@ -41,7 +43,15 @@ #include "nurb.h" /* before nmg.h */ #include "nmg.h" +#ifdef CONVERT_TO_BREP +# include "opennurbs.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + struct nurb_specific { struct nurb_specific *next; /* next surface in the the solid */ struct face_g_snurb *srf; /* Original surface description */ @@ -69,6 +79,11 @@ struct nurb_hit * hit, const struct bn_tol *tol)); +#ifdef CONVERT_TO_BREP + extern void rt_nurb_brep(ON_Brep **b, struct rt_db_internal *ip, const struct bn_tol *tol); + extern int rt_brep_prep(struct soltab *stp, struct rt_db_internal *ip, struct rt_i *rtip); +#endif + /** * R T _ N U R B _ P R E P * @@ -76,7 +91,6 @@ * matrix, determine if this is a valid NURB, and if so, prepare the * surface so the intersections will work. */ - int rt_nurb_prep(struct soltab *stp, struct rt_db_internal *ip, struct rt_i *rtip) { @@ -94,6 +108,21 @@ sip = (struct rt_nurb_internal *) ip->idb_ptr; RT_NURB_CK_MAGIC(sip); +#ifdef CONVERT_TO_BREP + ON_Brep *brep = ON_Brep::New(); + rt_nurb_brep(&brep, ip, tol); + sip->brep = brep; + + struct rt_db_internal nurb_i; + RT_INIT_DB_INTERNAL(&nurb_i); + + struct rt_brep_internal bi; + bi.magic = RT_BREP_INTERNAL_MAGIC; + bi.brep = brep; + nurb_i.idb_ptr = (genptr_t)&bi; + return rt_brep_prep(stp, &nurb_i, rtip); +#else + for (i = 0; i < sip->nsrf; i++) { struct face_g_snurb * s; struct nurb_specific * n; @@ -153,6 +182,7 @@ } return 0; +#endif } @@ -1007,7 +1037,7 @@ sip = (struct rt_nurb_internal *)ip->idb_ptr; sip->magic = RT_NURB_INTERNAL_MAGIC; - cp = ep->ext_buf; + cp = (unsigned char *)ep->ext_buf; sip->nsrf = bu_glong(cp); cp += SIZEOF_NETWORK_LONG; @@ -1125,7 +1155,7 @@ sip->magic = 0; sip->nsrf = 0; bu_free(sip->srfs, "nurb surfs[]"); - sip->srfs = GENPTR_NULL; + sip->srfs = (struct face_g_snurb**)GENPTR_NULL; bu_free(ip->idb_ptr, "sip ifree"); ip->idb_ptr = GENPTR_NULL; @@ -1379,6 +1409,9 @@ return(0); /* OK */ } +#ifdef __cplusplus +} +#endif /* * Local Variables: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |