@@ -228,8 +228,8 @@ ConstDatabase::TopObjectIterator ConstDatabase::FirstTopObject(void) const {
228
228
229
229
void ConstDatabase::Get
230
230
(
231
- const char * objectName,
232
- ObjectCallback& callback
231
+ const char * objectName,
232
+ const ObjectCallback& callback
233
233
) const {
234
234
if (m_rtip != 0 ) {
235
235
if (!BU_SETJUMP) {
@@ -333,31 +333,11 @@ Object* ConstDatabase::Get
333
333
(
334
334
const char * objectName
335
335
) const {
336
- class ObjectCallbackIntern : public ObjectCallback {
337
- public:
338
- ObjectCallbackIntern (void ) : ConstDatabase::ObjectCallback(),
339
- m_object (0 ) {}
336
+ Object* ret = 0 ;
340
337
341
- virtual ~ObjectCallbackIntern ( void ) {}
338
+ Get (objectName, [&ret]( const Object& object){ try {ret = object. Clone ();} catch (std::bad_alloc&){}});
342
339
343
- virtual void operator ()(const Object& object) {
344
- try {
345
- m_object = object.Clone ();
346
- }
347
- catch (std::bad_alloc&) {}
348
- }
349
-
350
- Object* GetObject (void ) const {
351
- return m_object;
352
- }
353
-
354
- private:
355
- Object* m_object;
356
- } callbackIntern;
357
-
358
- Get (objectName, callbackIntern);
359
-
360
- return callbackIntern.GetObject ();
340
+ return ret;
361
341
}
362
342
363
343
@@ -707,8 +687,8 @@ static int HitDo
707
687
partition* partitionHead,
708
688
seg* UNUSED (segment)
709
689
) {
710
- ConstDatabase::HitCallback* callback = static_cast <ConstDatabase::HitCallback*>(ap->a_uptr );
711
- int & ret = ap->a_return ;
690
+ const ConstDatabase::HitCallback* callback = static_cast <const ConstDatabase::HitCallback*>(ap->a_uptr );
691
+ int & ret = ap->a_return ;
712
692
713
693
if (ret == 0 ) {
714
694
for (partition* part = partitionHead->pt_forw ;
@@ -727,8 +707,8 @@ static int HitDo
727
707
728
708
void ConstDatabase::ShootRay
729
709
(
730
- const Ray3D& ray,
731
- HitCallback& callback
710
+ const Ray3D& ray,
711
+ const HitCallback& callback
732
712
) const {
733
713
if (!SelectionIsEmpty ()) {
734
714
application ap;
@@ -743,7 +723,7 @@ void ConstDatabase::ShootRay
743
723
ap.a_onehit = 0 ; // all hits
744
724
ap.a_resource = m_resp;
745
725
ap.a_return = 0 ;
746
- ap.a_uptr = &callback;
726
+ ap.a_uptr = const_cast <HitCallback*>( &callback) ;
747
727
748
728
VMOVE (ap.a_ray .r_pt , ray.origin .coordinates );
749
729
VMOVE (ap.a_ray .r_dir , ray.direction .coordinates );
@@ -770,8 +750,8 @@ static void MultioverlapDo
770
750
bu_ptbl* regiontable,
771
751
partition* UNUSED (inputHdp)
772
752
) {
773
- ConstDatabase::HitCallback* callback = static_cast <ConstDatabase::HitCallback*>(ap->a_uptr );
774
- int & ret = ap->a_return ;
753
+ const ConstDatabase::HitCallback* callback = static_cast <const ConstDatabase::HitCallback*>(ap->a_uptr );
754
+ int & ret = ap->a_return ;
775
755
776
756
if (ret == 0 ) {
777
757
for (size_t i = 0 ; i < BU_PTBL_LEN (regiontable); ++i) {
@@ -795,9 +775,9 @@ static void MultioverlapDo
795
775
796
776
void ConstDatabase::ShootRay
797
777
(
798
- const Ray3D& ray,
799
- HitCallback& callback,
800
- int flags
778
+ const Ray3D& ray,
779
+ const HitCallback& callback,
780
+ int flags
801
781
) const {
802
782
if (!SelectionIsEmpty ()) {
803
783
application ap;
@@ -811,7 +791,7 @@ void ConstDatabase::ShootRay
811
791
ap.a_onehit = flags & StopAfterFirstHit;
812
792
ap.a_resource = m_resp;
813
793
ap.a_return = 0 ;
814
- ap.a_uptr = &callback;
794
+ ap.a_uptr = const_cast <HitCallback*>( &callback) ;
815
795
816
796
if (flags & WithOverlaps)
817
797
ap.a_multioverlap = MultioverlapDo;
0 commit comments