ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/applications/nanoRodBuilder/GeometryBuilder.cpp
(Generate patch)

Comparing trunk/OOPSE-4/src/applications/nanoRodBuilder/GeometryBuilder.cpp (file contents):
Revision 2204 by gezelter, Fri Apr 15 22:04:00 2005 UTC vs.
Revision 2759 by tim, Wed May 17 21:51:42 2006 UTC

# Line 60 | Line 60
60   #include <CGAL/aff_transformation_tags.h>
61   #include <iostream>
62   #include <algorithm>
63 + #include <fstream>
64 + #include <math.h>
65  
66 + using namespace std;
67   using namespace oopse;
68  
69   //typedef CGAL::Homogeneous<int>              Kernel;
70 < typedef CGAL::Simple_cartesian<double>     Kernel;
70 > typedef CGAL::Simple_cartesian<RealType>     Kernel;
71   //typedef CGAL::Polyhedron_3<Kernel>         Polyhedron;
72  
73   typedef Kernel::Point_3                    Point_3;
# Line 80 | Line 83 | Polyhedron nanoRodPolyhedron;
83   typedef Polyhedron::Vertex_handle Vertex_handle;
84  
85   Polyhedron nanoRodPolyhedron;
86 + Polyhedron nanoRodTwinnedPolyhedron1;
87 + Polyhedron nanoRodTwinnedPolyhedron2;
88 + Polyhedron nanoRodTwinnedPolyhedron3;
89 + Polyhedron nanoRodTwinnedPolyhedron4;
90 + Polyhedron nanoRodTwinnedPolyhedron5;
91  
92  
93  
94  
87
88
89
95   //typedef CGAL::Scaling Scaling;
96   //typedef Aff_transformation_3<Kernel> A;( const Scaling,
97   //                                                                                                                              Kernel::RT s=RT(20),
98   //                                                                                                                              Kernel::RT hw = RT(1));
99  
100 +
101 +
102 +
103 +
104   // A modifier creating a triangle with the incremental builder.
105   template <class HDS>
106 < class Build_nanorod : public CGAL::Modifier_base<HDS> {
106 > class buildSingleCrystal : public CGAL::Modifier_base<HDS> {
107   public:
108    Vertex_handle end1;
109    Vertex_handle neight1;
110    Vertex_handle end2;
111    Vertex_handle neight2;
112 +  Vertex_handle neight3;
113    
114 <  Build_nanorod() {}
114 >  buildSingleCrystal() {}
115    void operator()( HDS& hds) {
116      // Postcondition: `hds' is a valid polyhedral surface.
117      CGAL::Polyhedron_incremental_builder_3<HDS> B( hds, true);
# Line 117 | Line 127 | class Build_nanorod : public CGAL::Modifier_base<HDS>
127      B.add_vertex( Point(-0.4874571845316,    0.4874571845315,  0.6709272557930));
128      B.add_vertex( Point(-0.7887222926324,   -0.4874571845315, -0.2562714077342)); //End vertex
129      end1 = B.add_vertex( Point( 0.0000000000000,    1.0000000000000,  0.0000000000000));
130 <    B.add_vertex( Point(-0.4874571845315,    -0.4874571845316,  0.6709272557930));
130 >    neight3 = B.add_vertex( Point(-0.4874571845315,    -0.4874571845316,  0.6709272557930));
131      neight1 = B.add_vertex( Point(-0.0000000000000,    0.4874571845316, -0.8293116961175));
132      B.add_vertex( Point( 0.0000000000000,    -0.4874571845316, -0.8293116961175));
133      B.add_vertex( Point( 0.4874571845315,    0.4874571845316,  0.6709272557930));
# Line 226 | Line 236 | class Build_nanorod : public CGAL::Modifier_base<HDS>
236    }
237   };
238  
239 +
240 +
241 + /* First Crystal*/
242 +
243 + template <class HDS>
244 + class buildtwinned1 : public CGAL::Modifier_base<HDS> {
245 + public:
246 +   Vertex_handle end1;
247 +   Vertex_handle neight1;
248 +   Vertex_handle end2;
249 +   Vertex_handle neight2;
250 +   Vertex_handle neight3;
251 +  
252 +   buildtwinned1() {}
253 +   void operator()( HDS& hds) {
254 +     // Postcondition: `hds' is a valid polyhedral surface.
255 +     CGAL::Polyhedron_incremental_builder_3<HDS> B( hds, true);
256 +     B.begin_surface( 12, 5, 6);
257 +     typedef typename HDS::Vertex   Vertex;
258 +     typedef typename Vertex::Point Point;
259 +    
260 +    
261 +    
262 +    
263 +    
264 +     B.add_vertex( Point(-0.7887222926324,    0.4874571845315, -0.2562714077342));
265 +     B.add_vertex( Point(-0.4874571845316,    0.4874571845315,  0.6709272557930));
266 +     B.add_vertex( Point(-0.7887222926324,   -0.4874571845315, -0.2562714077342)); //End vertex
267 +     end1 = B.add_vertex( Point( 0.0000000000000,    1.0000000000000,  0.0000000000000));
268 +     neight3 = B.add_vertex( Point(-0.4874571845315,    -0.4874571845316,  0.6709272557930));
269 +     neight1 = B.add_vertex( Point(-0.0000000000000,    0.4874571845316, -0.8293116961175));
270 +     B.add_vertex( Point( 0.0000000000000,    -0.4874571845316, -0.8293116961175));
271 +     B.add_vertex( Point( 0.4874571845315,    0.4874571845316,  0.6709272557930));
272 +     end2 = B.add_vertex( Point(-0.0000000000000,    -1.0000000000000,  0.0000000000000)); //End Vertex
273 +     B.add_vertex( Point( 0.7887222926324,    0.4874571845315, -0.2562714077342));
274 +     neight2 = B.add_vertex( Point( 0.4874571845316,    -0.4874571845315,  0.6709272557930));
275 +     B.add_vertex( Point( 0.7887222926324,    -0.4874571845315, -0.2562714077342));
276 +    
277 +     B.begin_facet();
278 +     B.add_vertex_to_facet( 8);
279 +     B.add_vertex_to_facet( 4);
280 +     B.add_vertex_to_facet( 1);
281 +     B.add_vertex_to_facet( 3);
282 +     B.end_facet();
283 +    
284 +     B.begin_facet();
285 +     B.add_vertex_to_facet( 3);
286 +     B.add_vertex_to_facet( 0);
287 +     B.add_vertex_to_facet( 2);
288 +     B.add_vertex_to_facet( 8);
289 +     B.end_facet();
290 +    
291 +     B.begin_facet();
292 +     B.add_vertex_to_facet( 0);
293 +     B.add_vertex_to_facet( 1);
294 +     B.add_vertex_to_facet( 4);
295 +     B.add_vertex_to_facet( 2);
296 +     B.end_facet();    
297 +    
298 +    
299 +     B.begin_facet();
300 +     B.add_vertex_to_facet( 3);
301 +     B.add_vertex_to_facet( 1);
302 +     B.add_vertex_to_facet( 0);
303 +     B.end_facet();
304 +    
305 +     B.begin_facet();
306 +     B.add_vertex_to_facet( 4);
307 +     B.add_vertex_to_facet( 8);
308 +     B.add_vertex_to_facet( 2);
309 +     B.end_facet();
310 +    
311 +     B.end_surface();
312 +   }
313 + };
314 +
315 +
316  
317  
318 + /*second crystal*/
319 + template <class HDS>
320 + class buildtwinned2 : public CGAL::Modifier_base<HDS> {
321 + public:
322 +   Vertex_handle end1;
323 +   Vertex_handle neight1;
324 +   Vertex_handle end2;
325 +   Vertex_handle neight2;
326 +   Vertex_handle neight3;
327 +  
328 +   buildtwinned2() {}
329 +   void operator()( HDS& hds) {
330 +     // Postcondition: `hds' is a valid polyhedral surface.
331 +     CGAL::Polyhedron_incremental_builder_3<HDS> B( hds, true);
332 +     B.begin_surface( 12, 5, 6);
333 +     typedef typename HDS::Vertex   Vertex;
334 +     typedef typename Vertex::Point Point;
335 +    
336 +    
337 +    
338 +    
339 +    
340 +     B.add_vertex( Point(-0.7887222926324,    0.4874571845315, -0.2562714077342));
341 +     B.add_vertex( Point(-0.4874571845316,    0.4874571845315,  0.6709272557930));
342 +     B.add_vertex( Point(-0.7887222926324,   -0.4874571845315, -0.2562714077342)); //End vertex
343 +     end1 = B.add_vertex( Point( 0.0000000000000,    1.0000000000000,  0.0000000000000));
344 +     neight3 = B.add_vertex( Point(-0.4874571845315,    -0.4874571845316,  0.6709272557930));
345 +     neight1 = B.add_vertex( Point(-0.0000000000000,    0.4874571845316, -0.8293116961175));
346 +     B.add_vertex( Point( 0.0000000000000,    -0.4874571845316, -0.8293116961175));
347 +     B.add_vertex( Point( 0.4874571845315,    0.4874571845316,  0.6709272557930));
348 +     end2 = B.add_vertex( Point(-0.0000000000000,    -1.0000000000000,  0.0000000000000)); //End Vertex
349 +     B.add_vertex( Point( 0.7887222926324,    0.4874571845315, -0.2562714077342));
350 +     neight2 = B.add_vertex( Point( 0.4874571845316,    -0.4874571845315,  0.6709272557930));
351 +     B.add_vertex( Point( 0.7887222926324,    -0.4874571845315, -0.2562714077342));
352 +    
353 +     B.begin_facet();
354 +     B.add_vertex_to_facet( 8);
355 +     B.add_vertex_to_facet( 2);
356 +     B.add_vertex_to_facet( 0);
357 +     B.add_vertex_to_facet( 3);
358 +     B.end_facet();
359 +    
360 +     B.begin_facet();
361 +     B.add_vertex_to_facet( 3);
362 +     B.add_vertex_to_facet( 5);
363 +     B.add_vertex_to_facet( 6);
364 +     B.add_vertex_to_facet( 8);
365 +     B.end_facet();
366 +    
367 +     B.begin_facet();
368 +     B.add_vertex_to_facet( 5);
369 +     B.add_vertex_to_facet( 0);
370 +     B.add_vertex_to_facet( 2);
371 +     B.add_vertex_to_facet( 6);
372 +     B.end_facet();    
373 +    
374 +    
375 +     B.begin_facet();
376 +     B.add_vertex_to_facet( 3);
377 +     B.add_vertex_to_facet( 0);
378 +     B.add_vertex_to_facet( 5);
379 +     B.end_facet();
380 +    
381 +     B.begin_facet();
382 +     B.add_vertex_to_facet( 8);
383 +     B.add_vertex_to_facet( 6);
384 +     B.add_vertex_to_facet( 2);
385 +     B.end_facet();
386 +    
387 +     B.end_surface();
388 +   }
389 + };
390 +
391 + /* Third Crystal*/
392 +
393 + template <class HDS>
394 + class buildtwinned3 : public CGAL::Modifier_base<HDS> {
395 + public:
396 +   Vertex_handle end1;
397 +   Vertex_handle neight1;
398 +   Vertex_handle end2;
399 +   Vertex_handle neight2;
400 +   Vertex_handle neight3;
401 +  
402 +   buildtwinned3() {}
403 +   void operator()( HDS& hds) {
404 +     // Postcondition: `hds' is a valid polyhedral surface.
405 +     CGAL::Polyhedron_incremental_builder_3<HDS> B( hds, true);
406 +     B.begin_surface( 12, 5, 6);
407 +     typedef typename HDS::Vertex   Vertex;
408 +     typedef typename Vertex::Point Point;
409 +    
410 +    
411 +    
412 +    
413 +    
414 +     B.add_vertex( Point(-0.7887222926324,    0.4874571845315, -0.2562714077342));
415 +     B.add_vertex( Point(-0.4874571845316,    0.4874571845315,  0.6709272557930));
416 +     B.add_vertex( Point(-0.7887222926324,   -0.4874571845315, -0.2562714077342)); //End vertex
417 +     end1 = B.add_vertex( Point( 0.0000000000000,    1.0000000000000,  0.0000000000000));
418 +     neight3 = B.add_vertex( Point(-0.4874571845315,    -0.4874571845316,  0.6709272557930));
419 +     neight1 = B.add_vertex( Point(-0.0000000000000,    0.4874571845316, -0.8293116961175));
420 +     B.add_vertex( Point( 0.0000000000000,    -0.4874571845316, -0.8293116961175));
421 +     B.add_vertex( Point( 0.4874571845315,    0.4874571845316,  0.6709272557930));
422 +     end2 = B.add_vertex( Point(-0.0000000000000,    -1.0000000000000,  0.0000000000000)); //End Vertex
423 +     B.add_vertex( Point( 0.7887222926324,    0.4874571845315, -0.2562714077342));
424 +     neight2 = B.add_vertex( Point( 0.4874571845316,    -0.4874571845315,  0.6709272557930));
425 +     B.add_vertex( Point( 0.7887222926324,    -0.4874571845315, -0.2562714077342));
426 +    
427 +     B.begin_facet();
428 +     B.add_vertex_to_facet( 8);
429 +     B.add_vertex_to_facet( 6);
430 +     B.add_vertex_to_facet( 5);
431 +     B.add_vertex_to_facet( 3);
432 +     B.end_facet();
433 +    
434 +     B.begin_facet();
435 +     B.add_vertex_to_facet( 3);
436 +     B.add_vertex_to_facet( 9);
437 +     B.add_vertex_to_facet( 11);
438 +     B.add_vertex_to_facet( 8);
439 +     B.end_facet();
440 +    
441 +     B.begin_facet();
442 +     B.add_vertex_to_facet( 9);
443 +     B.add_vertex_to_facet( 5);
444 +     B.add_vertex_to_facet( 6);
445 +     B.add_vertex_to_facet( 11);
446 +     B.end_facet();    
447 +    
448 +    
449 +     B.begin_facet();
450 +     B.add_vertex_to_facet( 3);
451 +     B.add_vertex_to_facet( 5);
452 +     B.add_vertex_to_facet( 9);
453 +     B.end_facet();
454 +    
455 +     B.begin_facet();
456 +     B.add_vertex_to_facet( 8);
457 +     B.add_vertex_to_facet( 11);
458 +     B.add_vertex_to_facet( 6);
459 +     B.end_facet();
460 +    
461 +     B.end_surface();
462 +   }
463 + };
464 +
465 + /*Fourth Segment*/
466 + template <class HDS>
467 + class buildtwinned4 : public CGAL::Modifier_base<HDS> {
468 + public:
469 +   Vertex_handle end1;
470 +   Vertex_handle neight1;
471 +   Vertex_handle end2;
472 +   Vertex_handle neight2;
473 +   Vertex_handle neight3;
474 +  
475 +   buildtwinned4() {}
476 +   void operator()( HDS& hds) {
477 +     // Postcondition: `hds' is a valid polyhedral surface.
478 +     CGAL::Polyhedron_incremental_builder_3<HDS> B( hds, true);
479 +     B.begin_surface( 12, 5, 6);
480 +     typedef typename HDS::Vertex   Vertex;
481 +     typedef typename Vertex::Point Point;
482 +    
483 +    
484 +    
485 +    
486 +    
487 +     B.add_vertex( Point(-0.7887222926324,    0.4874571845315, -0.2562714077342));
488 +     B.add_vertex( Point(-0.4874571845316,    0.4874571845315,  0.6709272557930));
489 +     B.add_vertex( Point(-0.7887222926324,   -0.4874571845315, -0.2562714077342)); //End vertex
490 +     end1 = B.add_vertex( Point( 0.0000000000000,    1.0000000000000,  0.0000000000000));
491 +     neight3 = B.add_vertex( Point(-0.4874571845315,    -0.4874571845316,  0.6709272557930));
492 +     neight1 = B.add_vertex( Point(-0.0000000000000,    0.4874571845316, -0.8293116961175));
493 +     B.add_vertex( Point( 0.0000000000000,    -0.4874571845316, -0.8293116961175));
494 +     B.add_vertex( Point( 0.4874571845315,    0.4874571845316,  0.6709272557930));
495 +     end2 = B.add_vertex( Point(-0.0000000000000,    -1.0000000000000,  0.0000000000000)); //End Vertex
496 +     B.add_vertex( Point( 0.7887222926324,    0.4874571845315, -0.2562714077342));
497 +     neight2 = B.add_vertex( Point( 0.4874571845316,    -0.4874571845315,  0.6709272557930));
498 +     B.add_vertex( Point( 0.7887222926324,    -0.4874571845315, -0.2562714077342));
499 +    
500 +     B.begin_facet();
501 +     B.add_vertex_to_facet( 8);
502 +     B.add_vertex_to_facet( 11);
503 +     B.add_vertex_to_facet( 9);
504 +     B.add_vertex_to_facet( 3);
505 +     B.end_facet();
506 +    
507 +     B.begin_facet();
508 +     B.add_vertex_to_facet( 3);
509 +     B.add_vertex_to_facet( 7);
510 +     B.add_vertex_to_facet( 10);
511 +     B.add_vertex_to_facet( 8);
512 +     B.end_facet();
513 +    
514 +     B.begin_facet();
515 +     B.add_vertex_to_facet( 7);
516 +     B.add_vertex_to_facet( 9);
517 +     B.add_vertex_to_facet( 11);
518 +     B.add_vertex_to_facet( 10);
519 +     B.end_facet();    
520 +    
521 +    
522 +     B.begin_facet();
523 +     B.add_vertex_to_facet( 3);
524 +     B.add_vertex_to_facet( 9);
525 +     B.add_vertex_to_facet( 7);
526 +     B.end_facet();
527 +    
528 +     B.begin_facet();
529 +     B.add_vertex_to_facet( 8);
530 +     B.add_vertex_to_facet( 10);
531 +     B.add_vertex_to_facet( 11);
532 +     B.end_facet();
533 +    
534 +     B.end_surface();
535 +   }
536 + };
537 +
538 +
539 + /*Fifth Segment*/
540 + template <class HDS>
541 + class buildtwinned5 : public CGAL::Modifier_base<HDS> {
542 + public:
543 +  Vertex_handle end1;
544 +  Vertex_handle neight1;
545 +  Vertex_handle end2;
546 +  Vertex_handle neight2;
547 +  Vertex_handle neight3;
548 +  
549 +  buildtwinned5() {}
550 +  void operator()( HDS& hds) {
551 +    // Postcondition: `hds' is a valid polyhedral surface.
552 +    CGAL::Polyhedron_incremental_builder_3<HDS> B( hds, true);
553 +    B.begin_surface( 12, 5, 6);
554 +    typedef typename HDS::Vertex   Vertex;
555 +    typedef typename Vertex::Point Point;
556 +    
557 +    
558 +    
559 +    
560 +    
561 +    B.add_vertex( Point(-0.7887222926324,    0.4874571845315, -0.2562714077342));
562 +    B.add_vertex( Point(-0.4874571845316,    0.4874571845315,  0.6709272557930));
563 +    B.add_vertex( Point(-0.7887222926324,   -0.4874571845315, -0.2562714077342)); //End vertex
564 +    end1 = B.add_vertex( Point( 0.0000000000000,    1.0000000000000,  0.0000000000000));
565 +    neight3 = B.add_vertex( Point(-0.4874571845315,    -0.4874571845316,  0.6709272557930));
566 +    neight1 = B.add_vertex( Point(-0.0000000000000,    0.4874571845316, -0.8293116961175));
567 +    B.add_vertex( Point( 0.0000000000000,    -0.4874571845316, -0.8293116961175));
568 +    B.add_vertex( Point( 0.4874571845315,    0.4874571845316,  0.6709272557930));
569 +    end2 = B.add_vertex( Point(-0.0000000000000,    -1.0000000000000,  0.0000000000000)); //End Vertex
570 +    B.add_vertex( Point( 0.7887222926324,    0.4874571845315, -0.2562714077342));
571 +    neight2 = B.add_vertex( Point( 0.4874571845316,    -0.4874571845315,  0.6709272557930));
572 +    B.add_vertex( Point( 0.7887222926324,    -0.4874571845315, -0.2562714077342));
573 +    
574 +    B.begin_facet();
575 +    B.add_vertex_to_facet( 8);
576 +    B.add_vertex_to_facet( 4);
577 +    B.add_vertex_to_facet( 1);
578 +    B.add_vertex_to_facet( 3);
579 +    B.end_facet();
580 +    
581 +    B.begin_facet();
582 +    B.add_vertex_to_facet( 3);
583 +    B.add_vertex_to_facet( 7);
584 +    B.add_vertex_to_facet( 10);
585 +    B.add_vertex_to_facet( 8);
586 +    B.end_facet();
587 +    
588 +    B.begin_facet();
589 +    B.add_vertex_to_facet( 7);
590 +    B.add_vertex_to_facet( 1);
591 +    B.add_vertex_to_facet( 4);
592 +    B.add_vertex_to_facet( 10);
593 +    B.end_facet();    
594 +    
595 +    
596 +    B.begin_facet();
597 +    B.add_vertex_to_facet( 1);
598 +    B.add_vertex_to_facet( 7);
599 +    B.add_vertex_to_facet( 3);
600 +    B.end_facet();
601 +    
602 +    B.begin_facet();
603 +    B.add_vertex_to_facet( 10);
604 +    B.add_vertex_to_facet( 4);
605 +    B.add_vertex_to_facet( 8);
606 +    B.end_facet();
607 +    
608 +    B.end_surface();
609 +  }
610 + };
611 +
612 +
613 +
614 +
615 +
616 +
617   struct Normal_vector {
618    template <class Facet>
619    typename Facet::Plane_3 operator()( Facet& f) {
# Line 241 | Line 627 | bool GeometryBuilder::isInsidePolyhedron(double x, dou
627   };
628  
629  
630 < bool GeometryBuilder::isInsidePolyhedron(double x, double y, double z) {
630 > bool GeometryBuilder::isInsidePolyhedron(RealType x, RealType y, RealType z) {
631          
632    Point_3 point(x,y,z);
633    Plane_iterator i;
# Line 251 | Line 637 | bool GeometryBuilder::isInsidePolyhedron(double x, dou
637      
638      Vector_3 newVector = point - k->vertex()->point();
639      Vector_3 normal = *i;              
640 <    double dot_product = newVector.x() * normal.x() + newVector.y() * normal.y() + newVector.z() * normal.z();
640 >    RealType dot_product = newVector.x() * normal.x() + newVector.y() * normal.y() + newVector.z() * normal.z();
641      
642      if (dot_product < 0) {
643        return false;    
# Line 262 | Line 648 | GeometryBuilder::GeometryBuilder(double length,double
648   }
649  
650  
651 < GeometryBuilder::GeometryBuilder(double length,double width) {
651 > GeometryBuilder::GeometryBuilder(RealType length,RealType width) {
652    // Create the geometry for nanorod
653 <  Build_nanorod<HalfedgeDS> nanorod;
653 > buildSingleCrystal<HalfedgeDS> singleCrystalNanorod;
654    
655 <  nanoRodPolyhedron.delegate( nanorod);
655 >  nanoRodPolyhedron.delegate( singleCrystalNanorod);
656    
657 <  double y1 = nanorod.end1->point().y() - nanorod.neight1->point().y();
658 <  double y2 = nanorod.end2->point().y() - nanorod.neight2->point().y();
659 <        
657 >  RealType y1 = singleCrystalNanorod.end1->point().y() - singleCrystalNanorod.neight1->point().y();
658 >  RealType y2 = singleCrystalNanorod.end2->point().y() - singleCrystalNanorod.neight2->point().y();
659 >  
660 >  RealType endDist = sqrt(pow(singleCrystalNanorod.neight2->point().x() - singleCrystalNanorod.neight3->point().x(),2)+
661 >                        pow(singleCrystalNanorod.neight2->point().y() - singleCrystalNanorod.neight3->point().y(),2)+
662 >                        pow(singleCrystalNanorod.neight2->point().z() - singleCrystalNanorod.neight3->point().z(),2));
663 >  
664 >  RealType endRatio1 = y1/endDist;
665 >  RealType endRatio2 = y2/endDist;
666 >  
667 >  std::cout << "End dist is " << endDist <<" ratio " << endRatio1 << std::endl;
668 >  
669    CGAL::Aff_transformation_3<Kernel> aff_tranformation( width,
670                                                          0.0,
671                                                          0.0,
# Line 285 | Line 680 | GeometryBuilder::GeometryBuilder(double length,double
680                                                          0.0);  
681    std::transform( nanoRodPolyhedron.points_begin(), nanoRodPolyhedron.points_end(), nanoRodPolyhedron.points_begin(), aff_tranformation);
682          
683 <  Point_3 point1(nanorod.end1->point().x(), y1 + nanorod.neight1->point().y(), nanorod.end1->point().z());
684 <  Point_3 point2(nanorod.end2->point().x(), y2+ nanorod.neight2->point().y(), nanorod.end2->point().z());
685 <  nanorod.end1->point() = point1;
686 <  nanorod.end2->point() = point2;
683 >  
684 >  RealType endDist2 = sqrt(pow(singleCrystalNanorod.neight2->point().x() -singleCrystalNanorod.neight3->point().x(),2)+
685 >                        pow(singleCrystalNanorod.neight2->point().y() - singleCrystalNanorod.neight3->point().y(),2)+
686 >                        pow(singleCrystalNanorod.neight2->point().z() - singleCrystalNanorod.neight3->point().z(),2));
687 >  
688 >  Point_3 point1(singleCrystalNanorod.end1->point().x(), endDist2*endRatio1 + singleCrystalNanorod.neight1->point().y(), singleCrystalNanorod.end1->point().z());
689 >  Point_3 point2(singleCrystalNanorod.end2->point().x(), endDist2*endRatio2 + singleCrystalNanorod.neight2->point().y(), singleCrystalNanorod.end2->point().z());
690 >  singleCrystalNanorod.end1->point() = point1;
691 >  singleCrystalNanorod.end2->point() = point2;
692          
693    // Construct normal vector for each face.
694    std::transform( nanoRodPolyhedron.facets_begin(), nanoRodPolyhedron.facets_end(), nanoRodPolyhedron.planes_begin(),
695                    Normal_vector());
696 <        
696 > }      
697 >
698 >
699 >
700 > GeometryBuilder::GeometryBuilder(RealType length,RealType width, bool twinned) {
701 >  // Create the geometry for nanorod
702    
703 +  buildtwinned1<HalfedgeDS> crystal1;  
704 +  buildtwinned2<HalfedgeDS> crystal2;  
705 +  buildtwinned3<HalfedgeDS> crystal3;  
706 +  buildtwinned4<HalfedgeDS> crystal4;  
707 +  buildtwinned5<HalfedgeDS> crystal5;  
708 +  
709 +  
710 +  nanoRodTwinnedPolyhedron1.delegate( crystal1);
711 +  nanoRodTwinnedPolyhedron2.delegate( crystal2);
712 +  nanoRodTwinnedPolyhedron3.delegate( crystal3);
713 +  nanoRodTwinnedPolyhedron4.delegate( crystal4);
714 +  nanoRodTwinnedPolyhedron5.delegate( crystal5);
715 +  
716 +  
717 +  
718 +  
719 +  
720 +  
721 +  RealType y1 = crystal1.end1->point().y() - crystal1.neight1->point().y();
722 +  RealType y2 = crystal1.end2->point().y() - crystal1.neight2->point().y();
723 +  
724 +  RealType endDist = sqrt(pow(crystal1.neight2->point().x() - crystal1.neight3->point().x(),2)+
725 +                        pow(crystal1.neight2->point().y() - crystal1.neight3->point().y(),2)+
726 +                        pow(crystal1.neight2->point().z() - crystal1.neight3->point().z(),2));
727 +  
728 +  RealType endRatio1 = y1/endDist;
729 +  RealType endRatio2 = y2/endDist;
730 +  
731 +  std::cout << "End dist is " << endDist <<" ratio " << endRatio1 << std::endl;
732 +  
733 +  CGAL::Aff_transformation_3<Kernel> aff_tranformation( width,
734 +                                                        0.0,
735 +                                                        0.0,
736 +                                                        0.0,
737 +                                                        0.0,
738 +                                                        length,
739 +                                                        0.0,
740 +                                                        0.0,
741 +                                                        0.0,
742 +                                                        0.0,
743 +                                                        width,
744 +                                                        0.0);  
745 +  std::transform(nanoRodTwinnedPolyhedron1.points_begin(), nanoRodTwinnedPolyhedron1.points_end(), nanoRodTwinnedPolyhedron1.points_begin(), aff_tranformation);
746          
747 < }
747 >  
748 >  RealType endDist2 = sqrt(pow(crystal1.neight2->point().x() - crystal1.neight3->point().x(),2)+
749 >                         pow(crystal1.neight2->point().y() - crystal1.neight3->point().y(),2)+
750 >                         pow(crystal1.neight2->point().z() - crystal1.neight3->point().z(),2));
751 >  
752 >  Point_3 point1(crystal1.end1->point().x(), endDist2*endRatio1 + crystal1.neight1->point().y(), crystal1.end1->point().z());
753 >  Point_3 point2(crystal1.end2->point().x(), endDist2*endRatio2 + crystal1.neight2->point().y(), crystal1.end2->point().z());
754 >  crystal1.end1->point() = point1;
755 >  crystal1.end2->point() = point2;
756 >        
757 >  // Construct normal vector for each face.
758 >  std::transform( nanoRodTwinnedPolyhedron1.facets_begin(), nanoRodTwinnedPolyhedron1.facets_end(), nanoRodTwinnedPolyhedron1.planes_begin(),
759 >                  Normal_vector());
760 > }      
761  
762 +
763 +
764 +
765 +
766 +
767 +
768 +
769 +
770 +  void GeometryBuilder::dumpGeometry(const std::string& geomFileName){
771 +    
772 +     std::ofstream newGeomFile;
773 +    
774 +     //create new .md file based on old .md file
775 +     newGeomFile.open(geomFileName.c_str());
776 +    
777 +     // Write polyhedron in Object File Format (OFF).
778 +     CGAL::set_ascii_mode( std::cout);
779 +     newGeomFile << "OFF" << std::endl << nanoRodPolyhedron.size_of_vertices() << ' '
780 +        << nanoRodPolyhedron.size_of_facets() << " 0" << std::endl;
781 +     std::copy( nanoRodPolyhedron.points_begin(), nanoRodPolyhedron.points_end(),
782 +                std::ostream_iterator<Point_3>( newGeomFile, "\n"));
783 +     for (  Facet_iterator i = nanoRodPolyhedron.facets_begin(); i != nanoRodPolyhedron.facets_end(); ++i) {
784 +        Halfedge_facet_circulator j = i->facet_begin();
785 +        // Facets in polyhedral surfaces are at least triangles.
786 +        CGAL_assertion( CGAL::circulator_size(j) >= 3);
787 +        newGeomFile << CGAL::circulator_size(j) << ' ';
788 +        do {
789 +           newGeomFile << ' ' << std::distance(nanoRodPolyhedron.vertices_begin(), j->vertex());
790 +        } while ( ++j != i->facet_begin());
791 +        newGeomFile << std::endl;
792 +     }
793 +    
794 +     newGeomFile.close();
795 +    
796 +    
797 +  
798 +        
799 +  }
800 +
801 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines