public override void initializeBays(string pName) { if (parametricObject.isInitialized) { return; } parametricObject.isInitialized = true; RadialRepeaterTool gener = repeaterToolU as RadialRepeaterTool; switch (pName) { case "Node Shape": if (repeaterToolU != null) { gener.radius = 3.5f * nodeSrc_p.parametricObject.bounds.size.x; } break; case "Cell Shape": if (repeaterToolU != null) { gener.radius = 2.5f * cellSrc_p.parametricObject.bounds.size.x; } break; } }
public override void initializeBays(string pName) { //Debug.Log ("RADIAL REPEATER initializeBays"); if (parametricObject.isInitialized) { return; } parametricObject.isInitialized = true; RadialRepeaterTool gener = repeaterToolU as RadialRepeaterTool; //Debug.Log (pName); switch (pName) { case "Node Mesh": gener.radius = 3.5f * nodeSrc_p.parametricObject.bounds.size.x; break; case "SpanU Mesh": gener.radius = 2.5f * spanUSrc_p.parametricObject.bounds.size.x; break; } if (repeaterToolU != null) { gener.P_Radius.initiateRipple_setFloatValueFromGUIChange(gener.radius); } }
public override void connectionMadeWith(AXParameter to_p, AXParameter from_p) { if (from_p == null) // || from_p.DependsOn == null) { return; } if (repeaterToolU == null) { return; } AXParameter this_p = (to_p.parametricObject == parametricObject) ? to_p : from_p; AXParameter src_p = (to_p.parametricObject == parametricObject) ? from_p : to_p; switch (this_p.Name) { case "Node Shape": nodeSrc_p = src_p; if (!parametricObject.isInitialized) { initializeBays(this_p.Name); } break; case "Cell Shape": cellSrc_p = src_p; if (!parametricObject.isInitialized) { initializeBays(this_p.Name); } break; case "Jitter Translation": jitterTranslationTool = src_p.parametricObject.generator as JitterTool; break; case "Jitter Rotation": jitterRotationTool = src_p.parametricObject.generator as JitterTool; break; case "Jitter Scaling": jitterScaleTool = src_p.parametricObject.generator as JitterTool; break; case "RepeaterU": repeaterToolU = src_p.parametricObject.generator as RadialRepeaterTool; break; } }
public void setupRepeaters() { AXParameter input_pU = null; if (zAxis_p == null || !zAxis_p.boolval) { input_pU = P_RepeaterU; } if (input_pU != null) { repeaterToolU = (input_pU != null && input_pU.DependsOn != null) ? input_pU.DependsOn.parametricObject.generator as RadialRepeaterTool : null; } else { repeaterToolU = null; } }
public virtual Matrix4x4 localMatrixFromAddress(RepeaterItem ri, int i = 0, int j = 0) { if (repeaterToolU == null) { return(Matrix4x4.identity); } RadialRepeaterTool gener = repeaterToolU as RadialRepeaterTool; float perlinTranslation = 1; float perlinRot = 1; float perlinScale = 1; float actualSectorAngle = (repeaterToolU != null) ? repeaterToolU.actualBay : 0; float dang = (ri == RepeaterItem.Node) ? (i * actualSectorAngle) : (i * actualSectorAngle + actualSectorAngle / 2); // VALIDATION if (float.IsNaN(dang) || float.IsInfinity(dang)) { return(Matrix4x4.identity); } Matrix4x4 radialDispl = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, dang), Vector3.one) * Matrix4x4.TRS(new Vector3(gener.radius, 0, 0), Quaternion.Euler(0, 0, -90), Vector3.one); if (jitterTranslationTool != null) { perlinTranslation = Mathf.PerlinNoise((i * actualSectorAngle) * jitterTranslationTool.perlinScale, 0); } if (jitterRotationTool != null) { perlinRot = Mathf.PerlinNoise((i * actualSectorAngle) * jitterRotationTool.perlinScale, 0); } if (jitterScaleTool != null) { perlinScale = Mathf.PerlinNoise((i * actualSectorAngle) * jitterScaleTool.perlinScale, 0); } // TRANSLATION ********* Vector3 translate = new Vector3(0, 0, 0); if (jitterTranslationTool != null) { translate += new Vector3(perlinTranslation * jitterTranslationTool.x - jitterTranslationTool.x / 2, perlinTranslation * jitterTranslationTool.y - jitterTranslationTool.y / 2, 0); } // ROTATION ********* Quaternion rotation = Quaternion.Euler(0, 0, 0); if (jitterRotationTool != null) { rotation = Quaternion.Euler((perlinRot * jitterRotationTool.x - jitterRotationTool.x / 2) * 1.5f, (perlinRot * jitterRotationTool.y - jitterRotationTool.y / 2), (perlinRot * jitterRotationTool.z - jitterRotationTool.z / 2)) * rotation; } // SCALE ********** jitterScale = Vector3.zero; if (jitterScaleTool != null) { jitterScale = new Vector3(perlinScale * jitterScaleTool.x - jitterScaleTool.x / 2, perlinScale * jitterScaleTool.y - jitterScaleTool.y / 2, perlinScale * jitterScaleTool.z - jitterScaleTool.z / 2); } // ******** USE A FUNCTION HERE TO GET FOR HANDLES AS WELL Matrix4x4 dm = Matrix4x4.TRS(translate, rotation, Vector3.one + jitterScale) * radialDispl * Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, i * progressiveRotation), Vector3.one); return(dm); }
public override Matrix4x4 localMatrixFromAddress(RepeaterItem ri, int i = 0, int j = 0, int k = 0) { if (repeaterToolU == null) { return(Matrix4x4.identity); } RadialRepeaterTool gener = repeaterToolU as RadialRepeaterTool; float perlinTranslation = 1; float perlinRot = 1; float perlinScale = 1; float actualSectorAngle = (repeaterToolU != null) ? repeaterToolU.actualBay : 0; float dang = (ri == RepeaterItem.Node) ? (i * actualSectorAngle) : (i * actualSectorAngle + actualSectorAngle / 2); Matrix4x4 radialDispl = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, -dang, 0), Vector3.one) * Matrix4x4.TRS(new Vector3(gener.radius, 0, 0), Quaternion.Euler(0, -90, 0), Vector3.one); if (jitterTranslationTool != null) { perlinTranslation = Mathf.PerlinNoise((i * actualSectorAngle + jitterTranslationTool.offset) * jitterTranslationTool.perlinScale, 0); } if (jitterRotationTool != null) { perlinRot = Mathf.PerlinNoise((i * actualSectorAngle + jitterRotationTool.offset) * jitterRotationTool.perlinScale, 0); } if (jitterScaleTool != null) { perlinScale = Mathf.PerlinNoise((i * actualSectorAngle + jitterScaleTool.offset) * jitterScaleTool.perlinScale, 0); } // TRANSLATION ********* Vector3 translate = new Vector3(0, riser * i, 0); if (jitterTranslationTool != null) { translate += new Vector3(perlinTranslation * jitterTranslationTool.x - jitterTranslationTool.x / 2, perlinTranslation * jitterTranslationTool.y - jitterTranslationTool.y / 2, perlinTranslation * jitterTranslationTool.z - jitterTranslationTool.z / 2); } // ROTATION ********* Quaternion rotation = Quaternion.Euler(0, 0, 0); if (jitterRotationTool != null) { rotation = Quaternion.Euler((perlinRot * jitterRotationTool.x - jitterRotationTool.x / 2) * 1.5f, (perlinRot * jitterRotationTool.y - jitterRotationTool.y / 2), (perlinRot * jitterRotationTool.z - jitterRotationTool.z / 2)) * rotation; } // SCALE ********** jitterScale = Vector3.zero; if (jitterScaleTool != null) { jitterScale = new Vector3(perlinScale * jitterScaleTool.x - jitterScaleTool.x / 2, perlinScale * jitterScaleTool.y - jitterScaleTool.y / 2, perlinScale * jitterScaleTool.z - jitterScaleTool.z / 2); } // ******** USE A FUNCTION HERE TO GET FOR HANDLES AS WELL Matrix4x4 dm = Matrix4x4.TRS(translate, rotation, Vector3.one + jitterScale) * radialDispl * Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(i * progressiveRotationX, 90 + i * progressiveRotationY, i * progressiveRotationZ), Vector3.one); //Terrain terrain = Terrain.activeTerrain; //if (terrain != null) // dm.m13 = translate.y + terrain.SampleHeight(parametricObject.model.gameObject.transform.TransformPoint(parametricObject.getLocalMatrix().MultiplyPoint(AXUtilities.GetPosition(dm)))); return(dm); }