Integrazione di un linguaggio accademico in un ambiente CAD industriale

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

description

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. - PowerPoint PPT Presentation

Transcript of Integrazione di un linguaggio accademico in un ambiente CAD industriale

Page 1: 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

Page 2: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

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.

Page 3: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

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)

Page 4: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

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)

Page 5: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

Cooperazione tra linguaggi. Linguaggi imperativi e linguaggi funzionali.

Piattaforme distribuite:

CORBA e DCOM

Integrazione locale:

Foreign Function Interfaces

Infrastruttura per la comunicazione.

Oggetti software indipendenti: client e server.

Interface Repository (IR) per l’accesso ai servizi.

Condivisione della memoria, stesso processo.

Stesse strutture dati: problema della “traduzione”.

Componente di interfaccia tra linguaggi.

Page 6: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

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:1. Library Loading. Accesso alle librerie secondo due approcci: statico e

dinamico.2. Address Binding. Recupero dell’indirizzo della funzione (risoluzione dei cross

references).3. Input Parameters. Caricamento e conversione nello stack. Modalità di

passaggio dei valori.4. Output Parameters. Restituzione del valore di uscita packed per la shell.

Page 7: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

Ciclo di produzione software C/C++. Logica statica.

1. Scrittura codice sorgente: header files e files dell’implementazione. Compiti del compilatore: Allocazione regioni di memoria Controllo correttezza argomenti. Risoluzione collisioni.

2. Generazione degli object files.3. Link degli object files.

Page 8: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

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 IDLComponent Definition Language CDL di Open Cascade

Page 9: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

Soluzioni per l’integrazione

Sorgenti CDL

Strutture dinamiche

del package MS

Sorgenti Cpp:file hxx e cxxCDL Front CPP Extractor

CPP Extractor

Sviluppo dell'implementazione

CPP ExtractorSchemeExtractor

CPP ExtractorInterpreteScheme

Generatore del codicedella FFI

invocazioneda shell

operazione dimapping

esecuzione funzionelibreria

operazione diunm apping

controllo alla shell

Modalità di invocazione delle funzioni C++

Page 10: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

Meccanismi d’uso

Prototipo CDLCreate(dx,dy,dz:Real) returns MakeBox from BRepPrimApi

Prototipo C++ generato dal programma Cpp ExtractorBRepPrimAPI_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)

Page 11: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

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)

Page 12: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

Esempi: animazione

Page 13: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

Esempi: funzione “sombrero”

• Funzione da visualizzare:

)sin( 22 yx

(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))

Page 14: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

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-cell array))

(ret (composite lis)))

(print-brep ret filename)))

Page 15: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

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

Page 16: Integrazione di un linguaggio accademico  in un ambiente CAD industriale

Ocas Core Team