1 / 16

Integrazione di un linguaggio accademico in un ambiente CAD industriale

Integrazione di un linguaggio accademico in un ambiente CAD industriale. Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi. Indice. Scheme e Open Cascade. Soluzioni per l’integrazione dei linguaggi. La Foreign Function Interface come soluzione per l’integrazione.

gerodi
Download Presentation

Integrazione di un linguaggio accademico in un ambiente CAD industriale

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Integrazione di un linguaggio accademico in un ambiente CAD industriale Laureando: Giorgio Scorzelli Relatore: Prof. Paoluzzi

  2. Indice • Scheme e Open Cascade. • Soluzioni per l’integrazione dei linguaggi. • La Foreign Function Interface come soluzione per l’integrazione. • Il linguaggio C++. Logica statica e logica dinamica di invocazione. • Generazione di alcuni modelli geometrici. • Conclusioni.

  3. Un ambiente funzionale: Scheme • Storia: • 1975 Scheme come dialetto Lisp • 1978 “Revised Report on SCHEME. A Dialect of LISP” (Guy Lewis Steele Jr. and Gerald Jay Sussman) • 1982 Corsi universitari (MIT, Yale, Indiana University) • 1998 “The revised (5) report on the algorithmic language Scheme” • Semplicità • Implementazione MzScheme (PLT, Rice University) • Integrated Development Environment (IDE): DrScheme • Multipiattaforma (wxWindows come libreria GUI)

  4. Un ambiente di progettazione assistita: Open Cascade • Storia • 1980 Matra Datavision: Euclid • 1990 Cas.CADE (CASE + CAD) dal progetto Eureka • 1999 società servizi software: open source • Servizi geometrici: • Foundation Classes • Modeling Data • Modeling Algorithms • Visualization • Data Exchange Processor • Servizi non geometrici • Component Definition Language (CDL) • Workshop Organization Kit (WOK)

  5. Cooperazione tra linguaggi. Linguaggi imperativi e linguaggi funzionali. Piattaforme distribuite: CORBA e DCOM • Infrastruttura per la comunicazione. • Oggetti software indipendenti: client e server. • Interface Repository (IR) per l’accesso ai servizi. Integrazione locale: Foreign Function Interfaces • Condivisione della memoria, stesso processo. • Stesse strutture dati: problema della “traduzione”. • Componente di interfaccia tra linguaggi.

  6. Foreign Function Interface (FFI) • Storia Prima apparizione in Lisp: funzioni C come call out functions o foreign functions • Definizione: collaborazione tra codice che viene eseguito in uno spazio degli indirizzi condiviso. • Problemi: • Tecniche gestione memoria (reference counting, gc etc) • Conversione tra inside ed outside types • Fenomeno del Side effect • Differenti Error Handler • Funzioni come first class objects • Le azioni di una FFI: • Library Loading. Accesso alle librerie secondo due approcci: statico e dinamico. • Address Binding. Recupero dell’indirizzo della funzione (risoluzione dei cross references). • Input Parameters. Caricamento e conversione nello stack. Modalità di passaggio dei valori. • Output Parameters. Restituzione del valore di uscita packed per la shell.

  7. Ciclo di produzione software C/C++. Logica statica. • Scrittura codice sorgente: header files e files dell’implementazione. Compiti del compilatore: • Allocazione regioni di memoria • Controllo correttezza argomenti. • Risoluzione collisioni. • Generazione degli object files. • Link degli object files.

  8. Funzioni C++ in ambiente interpretato. Logica dinamica. “Compilatore” dinamico: • Conversioni implicite dinamiche • Overloading solver dinamico Files di interfaccia come strumenti per la conoscenza: • Header files C++ • Sintassi semplificata: • CORBA Interface Definition Language IDL • Component Definition LanguageCDL di Open Cascade

  9. Soluzioni per l’integrazione Strutture Sorgenti Cpp: CPP Sorgenti CDL Front dinamiche CPP Extractor file hxx e cxx Extractor CDL del package MS Sviluppo dell' implementazione Scheme CPP Extractor Extractor Interprete Generatore del codice CPP Extractor Scheme della FFI Modalità di invocazione delle funzioni C++

  10. Meccanismi d’uso Prototipo CDL Create(dx,dy,dz:Real) returns MakeBox from BRepPrimApi Prototipo C++ generato dal programma Cpp Extractor BRepPrimAPI_MakeBox( const Standard_Real dx, const Standard_Real dy, const Standard_Real dz); Wrapper Scheme (define (make-box x y z) (make-object BRepPrimApi_MakeBox% x y z)) Uso interattivo della make-box (make-box 1 2 3)

  11. Esempi: Modello toroidale • Oggetti toroidali appoggiati su sfera. (define (radius z) (sqrt (- 1 (* z z)))) (define (torus-on-sphere the-list) (composite (map (lambda (z) (translate (torus (radius z) 0.05) 0.0 0.0 z)) the-list))) (torus-on-sphere (list -0.93 -0.75 -0.5 -0.25 0 0.25 0.5 0.75 +0.93)

  12. Esempi: animazione

  13. Esempi: funzione “sombrero” • Funzione da visualizzare: (define domain (mult (make-list -1.0 1.0 20) (make-list -1.0 1.0 20))) (define codomain (apply-f myfun domain)) (define spheres (make-list-of-sphere (length codomain))) (define spheres-in-space (map translate spheres codomain))

  14. Esempi: generazione automatica di labirinti (define (maze-builder dim filename) (let* ((v (make-list 0 (- dim 1))) (array (make-multiply v v)) (maze (make-object SchemeTest_Maze% dim dim)) (make-iter-cell (lambda (coord) (let ((x (car coord)) (y (car (cdr coord)))) (move-cell (make-single-cell (send maze Left x y) (send maze Up x y) (send maze Right x y) (send maze Down x y)) x y)))) (lis (map make-iter-cellarray)) (ret (composite lis))) (print-brep ret filename)))

  15. Risultati e conclusioni • Integrazione su base locale del linguaggio funzionale Scheme con il linguaggio imperativo C++ • Automaticamente disponibili da Scheme circa 10.000 classi di Open Cascade • Possibilità di sviluppo interattivo di applicazioni CAD • Sito Web www.dia.uniroma3.it/~scorzell

  16. Ocas Core Team

More Related