-
.
Una richiesta per Alessandro Dragone. Ho letto che è possibile interfacciarsi coi database di un modello Enexsys mediante comandi VBScript.
Ho verificato che Enexsys pubblica due librerie che possono essere caricate in un modulo di Excel.
Non conoscendo l'elenco dei comandi/funzioni messe a disposizione non saprei come interagire.
Tu ne sai qualcosa?. -
.Il VBA è un esperimento di un bel po' di anni fa che è poi stato rapidamente superato dal CScript.
Forse Excel vede qualche interfaccia di automazione (COM), ma bisognerebbe verificare quali e cosa è possibile ottenere.
PeccatoDiscorso molto più ampio per il CScript.
WinStrand permette di accedere a tutta una serie di funzioni del software tramite una interfaccia in linguaggio C.
Gli script possono essere composti con qualsiasi texteditor (io uso NotePad++) e per agevolare l'input dei dati si può utilizzare un dialogo html (la shell stile dos ai più giovani non entusiasma).
Le funzioni esposte sono raccolte e commentate negli header file *.h che periodicamente aggiorniamo (se qualche funzione cambia) ed estendiamo e rendiamo disponibili su InForma.
COme posso entrare in possesso degli headers dei vari file o, in alternativa, della lista delle funzioni messe a disposizione da Enexsys?
Se poi ci fosse un documento che illustra come usare le funzioni e quali sono i parametri da inserire, sarebbe cosa interessante.
Considera che non tutti aggiornano l'abbonamento al servizio "Informa", pur essendo in possesso di una regolare licenza del software.E' possibile anche utilizzare gli script per lanciare un comando qualsiasi presente sul menù (b4ro è innamorato di un mio CScript che genera una porzione descrittiva del modello da inserire in relazione ciclando su alcuni comandi).Per renderti evidente la versatilità di questa interfaccia faccio un esempio che ci riguarda: approfittando di un periodo di scarso lavoro, mi sfidai a implementare l'analisi dei serbatoi come da tuo foglio excel.
Premesso che non ho mai progettato un serbatoio e sono un programmatore autodidatta, ....
A chi lo dici? Diciamo pure che in questi anni qui al forum, ci siamo "autodidattati" a vicenda.
La faccenda si fa sempre più interessante.. -
.COme posso entrare in possesso degli headers dei vari file o, in alternativa, della lista delle funzioni messe a disposizione da Enexsys?
Se poi ci fosse un documento che illustra come usare le funzioni e quali sono i parametri da inserire, sarebbe cosa interessante.
Considera che non tutti aggiornano l'abbonamento al servizio "Informa", pur essendo in possesso di una regolare licenza del software.
Nello zip ci sono gli header più recenti. I file contengono dei commenti descrittivi delle funzioni.
La descrizione delle strutture dati e delle funzioni messe a disposizione dei CScript si trovano nei files EnScript.h, EnTypes.h.
Le funzionalità 'C' supportate sono definite nelfile StdFn.h.
Ho inserito anche dei piccoli esempi per tastare l'utilizzo:
-la creazione di una trave con vincolamento e numerazione nodi prefissata
-una ricerca su nodi a video tramite interfaccia html e relativa stampa di alcune proprietà
-la creazione di una vasca rettangolare con elementi a 4 nodi
Gli header e gli script devono essere contenuti nella stessa cartella.
Attenzione a quando è previsto un percorso nel codice, occorre adattarlo alla propria macchina (ad esempio riga 49 dello script Export_Nodi_html_1.0.c).File AllegatoCSCript.zip
(Number of downloads: 12)
. -
.Nello zip ci sono gli header più recenti. I file contengono dei commenti descrittivi delle funzioni.
La descrizione delle strutture dati e delle funzioni messe a disposizione dei CScript si trovano nei files EnScript.h, EnTypes.h.
Le funzionalità 'C' supportate sono definite nelfile StdFn.h.
Ho inserito anche dei piccoli esempi per tastare l'utilizzo:
-la creazione di una trave con vincolamento e numerazione nodi prefissata
-una ricerca su nodi a video tramite interfaccia html e relativa stampa di alcune proprietà
-la creazione di una vasca rettangolare con elementi a 4 nodi
Gli header e gli script devono essere contenuti nella stessa cartella.
Attenzione a quando è previsto un percorso nel codice, occorre adattarlo alla propria macchina (ad esempio riga 49 dello script Export_Nodi_html_1.0.c).
Alessandro, ti ringrazio per i documenti che mi hai passato.
Peccato non avere la possibilità di interazione con VBScript.
Ho iniziato a dare una occhiata agli headers, soffermandomi su alcune funzioni. In particolare il file EnFunctionsMath.h.
Vedo che hai impostato le funzioni per il calcolo dei vari coefficienti da EC8 relativi ai serbatoi cilindrici cosi come li avevo impostati io in VBA.CODICEdouble Cc_EC8(double csi, double zita,double gamma){
//
double C;
double i;
double psi;
int count;
//
double lambda[4];
lambda[0] = 1.841;
lambda[1] = 5.331;
lambda[2] = 8.536;
lambda[3] = 11.706;
//
C = 0.0;
for(count = 0; count<1; count++){
psi = 2 / ((pow(lambda[count],2) - 1) * BESSJ(lambda[count], 1) * cosh(lambda[count] * gamma));
//printf("psi = %12.2f\n", psi);
C = C + psi * cosh(lambda[count] * gamma * zita) * BESSJ(lambda[count]*csi, 1);
}
//
return C;
}CODICEdouble Ci_EC8(double csi, double zita,double gamma){
//
double C;
double ni;
double a;
int count;
//
C = 0.0;
for(count = 0; count<51; count++){
ni = (2 * count + 1) * 0.5 * PI;
a = ni / gamma;
C = C + 2 * pow(-1, count) * cos(ni * zita) * BESSI(a, 1) / ((BESSI(a, 0) - BESSI(a, 1) / a) * pow(ni, 2));
}
//
return C;
}
Complimenti.
DOmani li provo nella mia postazione Enexsys.. -
.Ho iniziato a dare una occhiata agli headers, soffermandomi su alcune funzioni. In particolare il file EnFunctionsMath.h.
Vedo che hai impostato le funzioni per il calcolo dei vari coefficienti da EC8 relativi ai serbatoi cilindrici cosi come li avevo impostati io in VBA.
EnFunctionsMath.h, EnFunctions.h e EnBoltFunctions.h sono mie aggiunte agli header file canonici.
Dentro EnFunctions.h ci sono le funzioni di Bessel (se ricordo bene avevo segnalato anche qui al bar un sito dove era presente quel codice sia in C che in VB).. -
.EnFunctionsMath.h, EnFunctions.h e EnBoltFunctions.h sono mie aggiunte agli header file canonici.
Dentro EnFunctions.h ci sono le funzioni di Bessel (se ricordo bene avevo segnalato anche qui al bar un sito dove era presente quel codice sia in C che in VB).
Ricordo.
Alcune domande.
- perche il VBScript non ha avuto seguito?
- considerato che compare ancora la voce "VBScript" nei menu di Enexsys, è possibile poter usare qualche procedura in VB?
- se la funzione VBScript è ancora attiva e funzionante in ENexsys, è possibile avere l'elenco delle funzioni messe a disposizione?. -
.Ricordo.
Alcune domande.
- perche il VBScript non ha avuto seguito?
- considerato che compare ancora la voce "VBScript" nei menu di Enexsys, è possibile poter usare qualche procedura in VB?
- se la funzione VBScript è ancora attiva e funzionante in ENexsys, è possibile avere l'elenco delle funzioni messe a disposizione?
I software EnExSys sono scritti in C++ con utilizzo delle librerie MFC.
Esporre quindi delle funzioni in C è decisamente più agevole.
Considera che gli utilizzatori di questa possibilità di estensione tramite script si possono contare sulle dita di una mano.
Poiché costa tempo è fatica mantenere il codice allineato, si è costretti a lasciare indietro qualche idea.
Allo stesso tempo, nell'ipotesi che qualcuno intanto abbia sviluppato qualcosina in proprio, non sarebbe bello togliere la possibilità di utilizzarlo, quindi la voce di menù e il comando restano funzionanti.
Nei prossimi giorni cerco di recuperare quello che esiste ancora di documentazione e/o esempi, ma credo che non ci sia molto. Personalmente ricordo solo di aver fatto un esempio sulla generazione di sezioni e armature nel modulo Preflex (un solutore autonomo di sezioni qualsiasi a pressoflessione deviata).. -
.I software EnExSys sono scritti in C++ con utilizzo delle librerie MFC.
Esporre quindi delle funzioni in C è decisamente più agevole.
Considera che gli utilizzatori di questa possibilità di estensione tramite script si possono contare sulle dita di una mano.
Poiché costa tempo è fatica mantenere il codice allineato, si è costretti a lasciare indietro qualche idea.
Allo stesso tempo, nell'ipotesi che qualcuno intanto abbia sviluppato qualcosina in proprio, non sarebbe bello togliere la possibilità di utilizzarlo, quindi la voce di menù e il comando restano funzionanti.
Nei prossimi giorni cerco di recuperare quello che esiste ancora di documentazione e/o esempi, ma credo che non ci sia molto. Personalmente ricordo solo di aver fatto un esempio sulla generazione di sezioni e armature nel modulo Preflex (un solutore autonomo di sezioni qualsiasi a pressoflessione deviata).
Stamani ha provato a far girare il tuo script relativo alla creazione del solo modello geometrico di una vasca rettangolare.
Funziona a meraviglia.
Ho modificato il codice specificando le unità di misura dell'input.
Immagino che sempre da codice sarebbe possibile assegnare sia i materiali e sia le sezioni, ed infine anche i carichi.CODICE#include "stdfn.h"
#include "entypes.h"
#include "enscript.h"
//
////////////////////////////
//
//Genera una vasca rettangolare con elementi a 4 nodi
//è possibile differenziare la sezione alla base dalle pareti laterali
//
////////////////////////////
//
BOOL CreaLastra(ENPROJECT* prj,NODO *pNodoI,NODO *pNodoJ,NODO *pNodoK,NODO *pNodoL,int nX,int nY,int nSez);
NODO* CercaCreaNodi(ENPROJECT* prj,NODO *pNodiBordo[],float t,float s);
//
int main(int argc,char *argv[])
{
int nNodiB,nNodiH,nNodiP,nSezBase,nSezPareti;
float B,H,P;
ENPROJECT* prj;
NODO* pBottomNode[4];
NODO* pTopNode[4];
//
prj=ENScript_GetProject();
//
printf("Larghezza in direzione x [m] : "); scanf("%f",&B);
printf("Larghezza in direzione y [m] : "); scanf("%f",&H);
printf("Altezza [m] : "); scanf("%f",&P);
printf("N. di elementi lungo la base : "); scanf("%d",&nNodiB );
printf("N. di elementi lungo l'altezza : "); scanf("%d",&nNodiH );
printf("N. di elementi nell Profondita': "); scanf("%d",&nNodiP );
printf("Sezione elementi del fondo : "); scanf("%d",&nSezBase );
printf("Sezione elementi delle pareti : "); scanf("%d",&nSezPareti);
//
////////// Crea gli 8 nodi di bordo principali
//
pBottomNode[0] =ENScript_CreaNodo(prj, -0.5 * B, -0.5 * H, 0.0);
pBottomNode[1] =ENScript_CreaNodo(prj, 0.5 * B , -0.5 * H, 0.0);
pBottomNode[2] =ENScript_CreaNodo(prj, 0.5 * B , 0.5 * H , 0.0);
pBottomNode[3] =ENScript_CreaNodo(prj, -0.5 * B, 0.5 * H , 0.0);
//
pTopNode[0] =ENScript_CreaNodo(prj, -0.5 * B, -0.5 * H, P);
pTopNode[1] =ENScript_CreaNodo(prj, 0.5 * B , -0.5 * H, P);
pTopNode[2] =ENScript_CreaNodo(prj, 0.5 * B , 0.5 * H , P);
pTopNode[3] =ENScript_CreaNodo(prj, -0.5 * B, 0.5 * H , P);
//
////////// Crea le pareti
//
// Base
//
CreaLastra(prj, pBottomNode[0], pBottomNode[1] , pBottomNode[2] , pBottomNode[3] , nNodiB , nNodiH , nSezBase );
//
// Pareti X-Z
//
CreaLastra(prj, pBottomNode[0], pBottomNode[1] , pTopNode[1] , pTopNode[0] , nNodiB , nNodiP ,nSezPareti);
CreaLastra(prj, pBottomNode[2], pBottomNode[3] , pTopNode[3] , pTopNode[2] , nNodiB , nNodiP ,nSezPareti);
//
// Pareti Y-Z
//
CreaLastra(prj, pBottomNode[3], pBottomNode[0] , pTopNode[0] , pTopNode[3] , nNodiH , nNodiP ,nSezPareti);
CreaLastra(prj, pBottomNode[1], pBottomNode[2] , pTopNode[2] , pTopNode[1] , nNodiH , nNodiP ,nSezPareti);
//
return 0;
}
//
NODO* CercaCreaNodi(ENPROJECT* prj,NODO *pNodiBordo[],float t,float s)
{
int i,j;
float xyz[3],blend;
float Csi[4]={ -1.0, 1.0, 1.0, -1.0 };
float Eta[4]={ -1.0, -1.0, 1.0, 1.0 };
NODO* pNodo;
//
// calcola le coordinate del punto
//
xyz[0]=xyz[1]=xyz[2]=0.0f;
for( i=0 ; i < 4 ; i++ ){
blend = ( 1.0 + t * Csi[i] ) * ( 1.0 + s * Eta[i] ) * 0.25;
for( j=0 ; j < 3 ; j++ )
xyz[j]+= blend * pNodiBordo[i]->xyz[j];
}
if( (pNodo=ENScript_CercaNodoCoordinateTrappola(prj,xyz[0],xyz[1],xyz[2],0.001)) == NULL )
pNodo = ENScript_CreaNodo(prj,xyz[0],xyz[1],xyz[2]);
//
return pNodo;
}
BOOL CreaLastra(ENPROJECT* prj,NODO *pNodoI,NODO *pNodoJ,NODO *pNodoK,NODO *pNodoL,int nX,int nY,int nSez)
{
int i,j;
float t,dt,s,ds;
NODO* pNodiBordo[4];
NODO* pNodi[4];
ELEMENT* pElement;
//
dt = 2.0 / nX;
ds = 2.0 / nY;
//
pNodiBordo[0] = pNodoI;
pNodiBordo[1] = pNodoJ;
pNodiBordo[2] = pNodoK;
pNodiBordo[3] = pNodoL;
//
s = -1.0;
for( j=0 ; j < nY ; j++ ){
t = -1.0;
for( i=0 ; i < nX ; i++ ){
if( (pNodi[0]=CercaCreaNodi(prj,pNodiBordo,t ,s )) != NULL &&
(pNodi[1]=CercaCreaNodi(prj,pNodiBordo,t+dt,s )) != NULL &&
(pNodi[2]=CercaCreaNodi(prj,pNodiBordo,t+dt,s+ds)) != NULL &&
(pNodi[3]=CercaCreaNodi(prj,pNodiBordo,t ,s+ds)) != NULL ){
//
// Crea l'elemento
//
if( (pElement=ENScript_CreaElementoNodi(prj,EQUIVALENZA,nSez,pNodi)) == NULL ){
printf("Fallita costruzione elemento a 4 nodi!\n");
return FALSE;
}
}else{
printf("Fallita costruzione nodi di bordo !\n");
return FALSE;
}
t +=dt;
}
s += ds;
}
return TRUE;
}Attached Image. -
.
ecco le librerie pubblicate in VBA.
Non avendo un esempio d'uso, non saprei nemmeno come utilizzarleAttached Image. -
.ecco le librerie pubblicate in VBA.
Non avendo un esempio d'uso, non saprei nemmeno come utilizzarle
Quelle librerie visibili in excel non espongono nulla di utile, ma solo alcune info sulla versione, funzioni per l'export verso autocad e verso il visualizzatore html.
Ho verificato che l'unica funzione era ed è ancora la sezione parametrica nel modulo Preflex.. -
.Immagino che sempre da codice sarebbe possibile assegnare sia i materiali e sia le sezioni, ed infine anche i carichi.
Per generare un materiale ti allego un microesempio.
Per generare una sezione di una specifica tipologia occorre guardare la specifica funzione ddentro EnScript.h.
SEZIONE* ENScript_NewSezMeshIso(CNTSECTIONS* lpCntSez,int wTypeElem,int wSezNumber,int wMat, float s, char* szName,char* szComment);
Nel caso di elementi piani a 3 nodi ad esempio:
ENScript_NewSezMeshIso(lpCntSez,TRIANGOLARE,101,matInfo.numero,0.1*tCop,szName,szComment);
Nel caso di elementi piani a 4 nodi ad esempio:
ENScript_NewSezMeshIso(lpCntSez,EQUIVALENZA,101,matInfo.numero,0.1*tCop,szName,szComment);File AllegatoTryAddMaterials_1.0.c
(Number of downloads: 2)
. -
.Non avendo un esempio d'uso, non saprei nemmeno come utilizzarle
Semi-OT: così si possono vedere i prototipi delle funzioni presenti negli oggetti COM caricati:
Lo riporto perchè sono sicuro che prima o poi mi dimenticherò e cercherò il modo di trovare queste info :-). -
.
Hai qualche esempio d'uso per VBScript?
Se prima erano in cinque a trattare gli script in Enexsys, adesso puo darsi che saremo in sei, ma solo se Enexisys mi mette nelle condizioni di poterlo fare.
Domanda, oltre ai quesiti e risposte presenti su INFORMA, esiste qualche altro luogo in cui si discute degli script e di particolari interfacce esterne realizzate dagli utenti?. -
.
Non sono riuscito a rintracciare nulla sul mio PC.
Comunque sono abbastanza certo di aver fatto qualcosa solo sul modulo Preflex, quindi non dentro al modulo principale, basato sull'esempio allegato alla nota di InForma del 23 Agosto 2002 NT: Sezioni parametriche e generiche.CITAZIONESe prima erano in cinque a trattare gli script in Enexsys, adesso puo darsi che saremo in sei, ma solo se Enexisys mi mette nelle condizioni di poterlo fare.
Domanda, oltre ai quesiti e risposte presenti su INFORMA, esiste qualche altro luogo in cui si discute degli script e di particolari interfacce esterne realizzate dagli utenti?
Non credo esistano altri luoghi in cui si parli di WinStrand o nello specifico degli script.
Su InForma sono l'unico che ogni tanto condivide script più o meno utili..