2014-05-23 23 views
21

Al momento sono impegnato nella creazione del componente aggiuntivo SolidWorks per l'esportazione di modelli 3D in formato OBJ.SolidWorks to OBJ export

OBJ è aperto e molto semplice formato

Googled e scoperto le seguenti informazioni sulle soluzioni esistenti: ci sono diversi plugin a pagamento e 1 libero, che si chiama "Free OBJ Exporter"

È stato preso come base. Ma non esporta le decalcomanie.

decalcomanie sono immagini disegnate sulla parte superiore della trama principale (se ci si allontana dal contesto di SolidWorks, in 3D la programmazione è come un segni di proiettili, gocce di sangue, ecc)

decalcomanie di esportazione sono un parte importante del progetto.

Ho riscritto tutto il codice VBA in C#.

E ora mi occupo del problema delle decalcomanie da esportazione. Documentazione API Solidworks piuttosto scarsa.

Dopo una settimana di lettura della documentazione e un paio di domande su LinkedIn ho trovato il seguente:

IDecal è classe inherided da IRendererMaterial. Perciò posso ottenere un elenco di tutte le decalcomanie e ottenere le seguenti informazioni:

  • Yposition
  • XPOSITION
  • Larghezza
  • Altezza

ho anche possibile ottenere un elenco di oggetti iFace2 e ottieni FaceDecalProperties. IFaceDecalProperties fornisce informazioni prossimo:

  • TextureTranslationU
  • TextureTranslationV
  • TextureTranslationX
  • TextureTranslationY
  • TextureUScale
  • TextureVScale

Che cos'è, che cosa significa e come usarlo, non lo so.

Il formato OBJ non supporta le decalcomanie direttamente.

Come posso utilizzare questi parametri per la trama concatenazione e l'etichetta in un file? Voglio farlo per mostrare la decalcomania sul viso e risolvere il problema dello Z-fighting, perché non ho il codice sorgente del renderer.

+1

Penso che questa pagina di testo ti dia l'idea di ciò che u, v, x e y rappresentano convenzionalmente in questa procedura. Non mi è familiare, anche se sono un po 'interessato a imparare. https://encrypted.google.com/books?id=4gBUz_IkkSsC&lpg=PA390&ots=mAxE7Fwop1&dq=uvxy%20texture&pg=PA390#v=onepage&q=uvxy%20texture&f=false – minopret

+1

Hai pensato di pubblicare il tuo codice su GitHub? Mi piacerebbe contribuire allo sviluppo di una macro o plugin C# per fare lo stesso lavoro. – sentenza

risposta

2

Non sono sicuro del significato di TextureTranslationX e TextureTranslationY in questo contesto, ma TextureTranslationU e TextureTranslationV si riferiscono quasi certamente alle coordinate della trama del modello.

In genere le coordinate di trama (U, V) sono specificate tra [0,1] e determinano il modo in cui un'immagine viene mappata su una superficie. (U, V) = (0,0) sarà in genere il pixel più in alto a sinistra dell'immagine della trama.

Quindi, se si dispone di un insieme di vertici come:

v 0 0 0 
v 1 0 0 
v 0 1 0 
v 1 1 0 

che definisce una piazza (X, Y, Z) spazio, e questi vertici sono le seguenti (U, V) coordina struttura:

Quindi una "trama", con cui intendiamo realmente l'immagine, verrà applicata al quadrato in modo tale che il suo pixel in alto a sinistra verrà applicato al vertice (0, 0, 0) del quadrato.

TectureUScale e TextureVScale si riferiscono probabilmente a parametri di ridimensionamento che consentono immagini di texture non rettangolari.

In termini di traduzione di questo in OBJ, consultare http://en.wikipedia.org/wiki/Wavefront_.obj_file. Il formato che ho usato sopra è coerente con le specifiche del formato del file.

Sarà inoltre necessario per salvare l'immagine di texture in un file .tga secondo la documentazione e quindi creare un file .mtl che assomiglia:

newmtl texture1 
Ka 1.000 1.000 1.000 # Only ambient to keep things simple 
Kd 0.000 0.000 0.000 # Disable diffuse component 
Ks 0.000 0.000 0.000 # Disable specular component 
illum 1    # Only color and ambient are enabled 
map_Ka texture.tga # Ambient texture map 

Il pezzo finale è quello di mettere:

usemtl [texture1] 

Prima delle definizioni di coordinate del vertice e della trama nel file .obj.

Vorrei iniziare con qualcosa di molto semplice come un quadrato strutturato con un motivo a scacchiera che ha la stessa larghezza e altezza.