.:: Jasa Membuat Aplikasi Website,Desktop,Android Order Now..!! | | Order Now..!! Jasa Membuat Project Arduino,Robotic,Print 3D ::.

Export from blender3d to alternativa3d python 3.3 way

0 komentar


بِسْــــــــــــــــمِ اﷲِالرَّحْمَنِ اارَّحِيم
bismillaahirrahmaanirrahiim

السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ
Assalamu'alaikum warahmatullahi wabarakatuh


How to export mesh from blender3d 2.66 to alternativa3d python way.

Youtube video how-to export mesh from blender3d to alternativa3d.
Very useful python tutorial Tessfaces doc with info best practice blender3d 2.66.

And python script blender3d to alternativa 3d



It's the python script you can made run python script in blender3d.



from decimal import Decimal as D
from mathutils import Vector
import bpy

myObject = bpy.data.objects["Cube"]
exportPathStr = 'D:\\FLEX\\alternativa\\blenderExport\\blender3d\\myBlenderMesh.txt';
mesh = myObject.data;
for v in mesh.vertices:
print(str(v.co.x));

myStr = '';
#ob = bpy.context.active_object
me = mesh
me.calc_tessface()

def verticesToStr(vertice):
outStr = ''
outStr+='%.5f' % vertice.co.x+','
outStr+='%.5f' % vertice.co.y+','
outStr+='%.5f' % vertice.co.z
return outStr

def uvToStr(uv):
outStr = ''
outStr+='%.5f' % uv.x+','
outStr+='%.5f' % uv.y
return outStr

def dellLastSim(myStr):
return myStr[0:len(myStr)-1];

print('START\nSTART\nSTART');
meVerticesStr = ''
for v in me.vertices:
meVerticesStr+=verticesToStr(v)+','
meVerticesStr = meVerticesStr[0:len(meVerticesStr)-1];
#print('meVertices= ['+meVerticesStr+']');

indexStr = '';
uvStr = '';

for f in me.tessfaces:
if len(f.vertices) == 3:
#print("f012", f.vertices[0], f.vertices[1], f.vertices[2])
indexStr+="%i"%f.vertices[0]+",%i"%f.vertices[1]+",%i"%f.vertices[2]+',';

#print(f.index)
fIndx = f.index
uv1 = mesh.tessface_uv_textures.active.data[f.index].uv1
uv2 = mesh.tessface_uv_textures.active.data[f.index].uv2
uv3 = mesh.tessface_uv_textures.active.data[f.index].uv3
uvStr+=uvToStr(uv1)+','+uvToStr(uv2)+','+uvToStr(uv3)+',';
#print(uv1,uv2,uv3)
else:
#print("f012", f.vertices[0], f.vertices[1], f.vertices[2])
indexStr+="%i"%f.vertices[0]+",%i"%f.vertices[1]+",%i"%f.vertices[2]+',';

uv1 = mesh.tessface_uv_textures.active.data[f.index].uv1
uv2 = mesh.tessface_uv_textures.active.data[f.index].uv2
uv3 = mesh.tessface_uv_textures.active.data[f.index].uv3

uvStr+=uvToStr(uv1)+','+uvToStr(uv2)+','+uvToStr(uv3)+',';
#print(uv1,uv2,uv3)
#print("f023", f.vertices[0], f.vertices[2], f.vertices[3])
indexStr+="%i"%f.vertices[0]+",%i"%f.vertices[2]+",%i"%f.vertices[3]+',';

uv1 = mesh.tessface_uv_textures.active.data[f.index].uv1
uv2 = mesh.tessface_uv_textures.active.data[f.index].uv3
uv3 = mesh.tessface_uv_textures.active.data[f.index].uv4
uvStr+=uvToStr(uv1)+','+uvToStr(uv2)+','+uvToStr(uv3)+',';
#print(uv1,uv2,uv3)

indexStr = dellLastSim(indexStr);
uvStr = dellLastSim(uvStr);
#print('meIndex=['+indexStr+'];');
#print('meUvStr=['+uvStr'];');

outFile = open(exportPathStr, 'w');
outFile.write('var meVertices:Array = ['+meVerticesStr+'];\n');
outFile.write('var meIndex:Array = ['+indexStr+'];\n');
outFile.write('var meUv:Array = ['+uvStr+'];\n');
print('PROGRAM EXPORT - OK');
outFile.close();

If your scena has a cube (object mode and you made a texture cube) and you ran this python script, you can see in file D:\\FLEX\\alternativa\\blenderExport\\blender3d\\myBlenderMesh.txt

var meVertices:Array = [1.00000,1.00000,-1.00000,1.00000,-1.00000,-1.00000,-1.00000,-1.00000,-1.00000,-1.00000,1.00000,-1.00000,1.00000,1.00000,1.00000,1.00000,-1.00000,1.00000,-1.00000,-1.00000,1.00000,-1.00000,1.00000,1.00000];
var meIndex:Array = [0,1,2,0,2,3,4,7,6,4,6,5,0,4,5,0,5,1,1,5,6,1,6,2,2,6,7,2,7,3,4,0,3,4,3,7];
var meUv:Array = [0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000,0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000,0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000,0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000,0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000,0.00000,0.00000,1.00000,0.00000,1.00000,1.00000,0.00000,0.00000,1.00000,1.00000,0.00000,1.00000];

It's a cube data with reset uv coordinates, and you can use this with altanativa 3d like this

package
{
import alternativa.engine3d.controllers.*;import alternativa.engine3d.core.*;
import alternativa.engine3d.lights.*;import alternativa.engine3d.materials.*;
import alternativa.engine3d.primitives.*;import alternativa.engine3d.resources.*;
import alternativa.engine3d.shadows.*;import alternativa.engine3d.loaders.*;
import alternativa.engine3d.objects.*;import alternativa.engine3d.core.*;
import alternativa.protocol.codec.primitive.*;
import flash.concurrent.Mutex;
import flash.filters.GlowFilter;

import flash.display.*; import flash.events.*; import flash.system.*;
import flash.ui.*; import flash.utils.*; import flash.sampler.*;
import flash.media.*; import flash.net.*; import flash.external.*;
import flash.text.*; import flash.geom.*;

import flash.utils.*;
import mx.graphics.codec.*;
/**
* ...
* @author Lexcuk
*/
public class Blender3DMesh
{

public function Blender3DMesh()
{

}


public static function makeMeshFromBlender(blenderVertices:Array, blenderIndex:Array, blenderUv:Array, sx:Number = 100, sy:Number = 100, sz:Number = 100, shadow:DirectionalLightShadow = null, blaMaterial:VertexLightTextureMaterial = null, stage3D:Stage3D = null, rotationMatrix:Matrix3D = null):Mesh {

var mesh:Mesh = new Mesh();
var attributes:Array = [
VertexAttributes.POSITION,
VertexAttributes.POSITION,
VertexAttributes.POSITION,
VertexAttributes.TEXCOORDS[0],
VertexAttributes.TEXCOORDS[0],
VertexAttributes.NORMAL,
VertexAttributes.NORMAL,
VertexAttributes.NORMAL,
VertexAttributes.TANGENT4,
VertexAttributes.TANGENT4,
VertexAttributes.TANGENT4,
VertexAttributes.TANGENT4
];


var meVertices:Array = blenderVertices;// [ -0.19641, -0.00000, 0.00000, 0.19641, -0.00000, 0.00000, -0.19641, 1.00000, 0.00000, 0.19641, 1.00000, 0.00000, -0.19641, 0.92388, -0.38268, 0.19641, 0.92388, -0.38268, -0.19641, 0.70711, -0.70711, 0.19641, 0.70711, -0.70711, -0.19641, 0.38268, -0.92388, 0.19641, 0.38268, -0.92388, -0.19641, -0.00000, -1.00000, 0.19641, -0.00000, -1.00000, -0.19641, -0.38268, -0.92388, 0.19641, -0.38268, -0.92388, -0.19641, -0.70711, -0.70711, 0.19641, -0.70711, -0.70711, -0.19641, -0.92388, -0.38268, 0.19641, -0.92388, -0.38268, -0.19641, -1.00000, -0.00000, 0.19641, -1.00000, -0.00000, -0.19641, -0.92388, 0.38268, 0.19641, -0.92388, 0.38268, -0.19641, -0.70711, 0.70711, 0.19641, -0.70711, 0.70711, -0.19641, -0.38268, 0.92388, 0.19641, -0.38268, 0.92388, -0.19641, 0.00000, 1.00000, 0.19641, 0.00000, 1.00000, -0.19641, 0.38268, 0.92388, 0.19641, 0.38268, 0.92388, -0.19641, 0.70711, 0.70711, 0.19641, 0.70711, 0.70711, -0.19641, 0.92388, 0.38268, 0.19641, 0.92388, 0.38268, -0.19641, 1.00000, 0.00000, 0.19641, 1.00000, 0.00000, -0.19641, 0.92388, -0.38268, 0.19641, 0.92388, -0.38268, -0.19641, 0.70711, -0.70711, 0.19641, 0.70711, -0.70711, -0.19641, 0.38268, -0.92388, 0.19641, 0.38268, -0.92388, -0.19641, -0.00000, -1.00000, 0.19641, -0.00000, -1.00000, -0.19641, -0.38268, -0.92388, 0.19641, -0.38268, -0.92388, -0.19641, -0.70711, -0.70711, 0.19641, -0.70711, -0.70711, -0.19641, -0.92388, -0.38268, 0.19641, -0.92388, -0.38268, -0.19641, -1.00000, -0.00000, 0.19641, -1.00000, -0.00000, -0.19641, -0.92388, 0.38268, 0.19641, -0.92388, 0.38268, -0.19641, -0.70711, 0.70711, 0.19641, -0.70711, 0.70711, -0.19641, -0.38268, 0.92388, 0.19641, -0.38268, 0.92388, -0.19641, 0.00000, 1.00000, 0.19641, 0.00000, 1.00000, -0.19641, 0.38268, 0.92388, 0.19641, 0.38268, 0.92388, -0.19641, 0.70711, 0.70711, 0.19641, 0.70711, 0.70711, -0.19641, 0.92388, 0.38268, 0.19641, 0.92388, 0.38268];
var meIndex:Array = blenderIndex;// [0, 2, 4, 1, 5, 3, 0, 4, 6, 1, 7, 5, 0, 6, 8, 1, 9, 7, 0, 8, 10, 1, 11, 9, 0, 10, 12, 1, 13, 11, 0, 12, 14, 1, 15, 13, 0, 14, 16, 1, 17, 15, 0, 16, 18, 1, 19, 17, 0, 18, 20, 1, 21, 19, 0, 20, 22, 1, 23, 21, 0, 22, 24, 1, 25, 23, 0, 24, 26, 1, 27, 25, 0, 26, 28, 1, 29, 27, 0, 28, 30, 1, 31, 29, 0, 30, 32, 1, 33, 31, 0, 32, 2, 1, 3, 33, 34, 35, 37, 34, 37, 36, 36, 37, 39, 36, 39, 38, 38, 39, 41, 38, 41, 40, 40, 41, 43, 40, 43, 42, 42, 43, 45, 42, 45, 44, 44, 45, 47, 44, 47, 46, 46, 47, 49, 46, 49, 48, 48, 49, 51, 48, 51, 50, 50, 51, 53, 50, 53, 52, 52, 53, 55, 52, 55, 54, 54, 55, 57, 54, 57, 56, 56, 57, 59, 56, 59, 58, 58, 59, 61, 58, 61, 60, 60, 61, 63, 60, 63, 62, 62, 63, 65, 62, 65, 64, 64, 65, 35, 64, 35, 34];
var meUv:Array = blenderUv;// [0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.181198046, 0.844001532, 0.232292399, 0.276565462, 0.051094260, 0.275207728, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.096786246, 0.332901329, 0.407120079, 0.022567511, 0.407120079];



meUvFix(meUv);
meshZswapY(meVertices);
meshFixer(meVertices);
if (rotationMatrix != null) rotateByMatrix(meVertices,rotationMatrix);

var mv:Array = [];
var mUv:Array = [];
var i:int;
for (i = 0; i < meIndex.length; i++) {
//mUv.push(meUv[meIndex[i] * 2 + 0], meUv[meIndex[i] * 2 + 1]);
mUv.push(meUv[i * 2 + 0], meUv[i * 2 + 1]);
mv.push(meVertices[meIndex[i] * 3 + 0], meVertices[meIndex[i] * 3 + 1], meVertices[meIndex[i] * 3 + 2]);
}

for (i = 0; i < mv.length; i+=3) {
mv[i + 0] *= sx/2;
mv[i + 1] *= sy/2;
mv[i + 2] *= sz/2;
}

var indexData:Vector.<uint> = new Vector.<uint>();
for (i = 0; i < meIndex.length; i += 3) {
if (sx < 0) {
indexData.push(i + 2);
indexData.push(i + 1);
indexData.push(i + 0);
}
if (sx > 0) {
indexData.push(i + 0);
indexData.push(i + 1);
indexData.push(i + 2);
}
}

var vertices:Vector.<Number> = Vector.<Number>(mv);
var indexes:Vector.<uint> = indexData;
var uvs:Vector.<Number> = Vector.<Number>(mUv);


//trace(vertices.length + " " + segments * 3)
mesh.geometry = new Geometry();
mesh.geometry.numVertices = vertices.length/3;
mesh.geometry.indices = indexes;
mesh.geometry.addVertexStream(attributes);
mesh.geometry.setAttributeValues(VertexAttributes.POSITION, vertices);
mesh.geometry.setAttributeValues(VertexAttributes.TEXCOORDS[0], uvs);
//mesh.geometry.setAttributeValues(VertexAttributes.TANGENT4, tangent);
//mesh.geometry.setAttributeValues(VertexAttributes.NORMAL, normals);
mesh.geometry.calculateTangents(0);
mesh.geometry.calculateNormals();

mesh.addSurface(blaMaterial, 0, indexes.length / 3);

mesh.geometry.upload(stage3D.context3D);


mesh.calculateBoundBox();
//mesh.setMaterialToAllSurfaces(material);
//stage3D.context3D.setCulling(Context3DTriangleFace.FRONT_AND_BACK);
//cameraContainer.rotationZ = -Math.PI/2;

shadow.addCaster(mesh);
mesh.setMaterialToAllSurfaces(blaMaterial);
return mesh;
}

private static function meUvFix(uvar:Array):void {
var i:int;
var leng:int = uvar.length;

for (i = 0; i < leng; i+=2) {
uvar[i + 1] *= -1;
}
}

private static function meshMin(vert:Array, p:int=0):Number {
var i:int;
var leng:int = vert.length;
var min:Number = Number.MAX_VALUE;
for (i = 0; i < leng; i+=3) {
if (min > vert[i + p]) min = vert[i + p];
}
return min;
}

private static function rotateByMatrix(vert:Array,rMatrix:Matrix3D):void {
var i:int;
var leng:int = vert.length;
for (i = 0; i < leng; i+=3) {
var v:Vector3D = new Vector3D(vert[i], vert[i + 1], vert[i + 2]);
v = rMatrix.transformVector(v);
vert[i + 0] = v.x;
vert[i + 1] = v.y;
vert[i + 2] = v.z;
}
}

private static function meshZswapY(vert:Array):void {
var i:int;
var leng:int = vert.length;
var z:Number;
var y:Number;
for (i = 0; i < leng; i+=3) {
z = vert[i + 2];
y = vert[i + 1];

vert[i + 2] = -y;
vert[i + 1] = z;
}
}

private static function meshMax(vert:Array, p:int=0):Number {
var i:int;
var leng:int = vert.length;
var max:Number = Number.MIN_VALUE;
for (i = 0; i < leng; i+=3) {
if (max < vert[i + p]) max = vert[i + p];
}
return max;
}

private static function meshPos(vert:Array, p:int=0, pos:Number = 0):void {
var i:int;
var leng:int = vert.length;
for (i = 0; i < leng; i+=3) {
vert[i + p] = vert[i + p] + pos;
}

}


private static function meshScale(vert:Array, p:int=0, scale:Number = 0):void {
var i:int;
var leng:int = vert.length;
for (i = 0; i < leng; i+=3) {
vert[i + p] = vert[i + p] * scale;
}

}

private static function meshFixer(vert:Array):void {
var minX:Number = meshMin(vert, 0);
var maxX:Number = meshMax(vert, 0);
meshPos(vert, 0, -minX);
meshScale(vert, 0, 2 / (maxX - minX));
meshPos(vert, 0, -1);
//meshMerge(vert, 0, 0.7);

var minY:Number = meshMin(vert, 1);
var maxY:Number = meshMax(vert, 1);
meshPos(vert, 1, -minY);
meshScale(vert, 1, 2 / (maxY - minY));
meshPos(vert, 1, -1);

var minZ:Number = meshMin(vert, 2);
var maxZ:Number = meshMax(vert, 2);
meshPos(vert, 2, -minZ);
meshScale(vert, 2, 2 / (maxZ - minZ));
meshPos(vert, 2, -1);
}

}

}

And in your code

private function setupCarBody(sx:Number,sy:Number,sz:Number) : Mesh
{
include '\\blender3d\\myBlenderMesh.txt'


return Blender3DMesh.makeMeshFromBlender(
meVertices,
meIndex,
meUv,
sx, sy, sz, shadow, carMaterial, stage3D);


}


I made an example with car racing, it the previous version alternativa3d cube car and jiglib physics.
Zip contains blend file with car and wheel and FlashDevelop project with export to alternativa 3d.
Update Contact :
No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email : Fajarudinsidik@gmail.com
NB :: Bila Sobat tertarik Ingin membuat software, membeli software, membeli source code, membeli hardware elektronika untuk kepentingan Perusahaan maupun Tugas Akhir (TA/SKRIPSI), Insyaallah Saya siap membantu, untuk Respon Cepat dapat menghubungi kami, melalui :

No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email: Fajarudinsidik@gmail.com


atau Kirimkan Private messanger melalui email dengan klik tombol order dibawah ini :

ٱلْحَمْدُ لِلَّهِ رَبِّ ٱلْعَٰلَمِين
Alhamdulilah hirobil alamin

وَ السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ
wassalamualaikum warahmatullahi wabarakatuh


Artikel Export from blender3d to alternativa3d python 3.3 way, Diterbitkan oleh scodeaplikasi pada Senin, 27 Mei 2013. Semoga artikel ini dapat menambah wawasan Anda. Website ini dipost dari beberapa sumber, bisa cek disini sumber, Sobat diperbolehkan mengcopy paste / menyebar luaskan artikel ini, karena segala yang dipost di public adalah milik public. Bila Sobat tertarik Ingin membuat software, membeli software, membeli source code ,Dengan Cara menghubungi saya Ke Email: Fajarudinsidik@gmail.com, atau No Hp/WA : (fajar) : 085369237896, (puat) : 085267792168.

Tawk.to