/* * [MenuItem("GameObject/3D Object/Archimatix Nodes/Repeaters/Grid Repeater")] * static void Init() { * AXEditorUtilities.addNodeToCurrentModel("GridRepeater"); * } */ public override void drawBoundsHandles(Matrix4x4 consumerM, bool forceDraw = false) { base.drawBoundsHandles(generator.parametricObject.worldDisplayMatrix, forceDraw); RepeaterTool repeaterToolU = (parametricObject.generator as GridRepeater).repeaterToolU; RepeaterTool repeaterToolV = (parametricObject.generator as GridRepeater).repeaterToolV; if (repeaterToolU != null && repeaterToolV != null) { // DRAW GRID Handles.color = new Color(1, .5f, 0, .4f); Matrix4x4 prevHandleMatrix = Handles.matrix; Matrix4x4 context = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix; Handles.matrix = context; for (int i = 0; i <= repeaterToolU.cells; i++) { Handles.DrawLine(new Vector3(-repeaterToolU.size / 2 + i * repeaterToolU.actualBay, 0, -repeaterToolV.size / 2), new Vector3(-repeaterToolU.size / 2 + i * repeaterToolU.actualBay, 0, repeaterToolV.size / 2)); } for (int k = 0; k <= repeaterToolV.cells; k++) { Handles.DrawLine(new Vector3(-repeaterToolU.size / 2, 0, -repeaterToolV.size / 2 + k * repeaterToolV.actualBay), new Vector3(repeaterToolU.size / 2, 0, -repeaterToolV.size / 2 + k * repeaterToolV.actualBay)); } // ASK RepeaterTools to DRAW // - U TOOL GeneratorHandler gh = getGeneratorHandler(repeaterToolU.parametricObject); if (gh != null) { //Handles.matrix = context * Matrix4x4.TRS(new Vector3(0, 0, 1f*repeaterToolV.bay+repeaterToolV.size/2), Quaternion.Euler(-90, 0, 0), Vector3.one); Handles.matrix = context * Matrix4x4.TRS(new Vector3(0, 0, repeaterToolV.size / 2), Quaternion.Euler(-90, 0, 0), Vector3.one); gh.drawBoundsHandles(context, true); List <string> visited = new List <string>(); gh.drawControlHandles(ref visited, parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix * parametricObject.getAxisRotationMatrix() * parametricObject.getLocalAlignMatrix(), true); } // - V TOOL gh = getGeneratorHandler(repeaterToolV.parametricObject); if (gh != null) { Handles.matrix = context * Matrix4x4.TRS(new Vector3(repeaterToolU.size / 2, 0, 0), Quaternion.Euler(90, -90, 0), Vector3.one); gh.drawBoundsHandles(context, true); List <string> visited = new List <string>(); gh.drawControlHandles(ref visited, parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix * parametricObject.getAxisRotationMatrix() * parametricObject.getLocalAlignMatrix(), true); } Handles.matrix = prevHandleMatrix; } }
// SHAPE_REPEATER_2D :: DRAW_CONTROL_HANDLES_OF_INPUT_PARAMETRIC_OBJECTS public override void drawControlHandlesofInputParametricObjects(ref List <string> visited, Matrix4x4 consumerM) { GridRepeater2D gener2D = (generator as GridRepeater2D); // Draw the plan AND the section splines. // NODE if (gener2D.nodeSrc_po != null && gener2D.nodeSrc_po.generator != null) { GeneratorHandler gh = getGeneratorHandler(gener2D.nodeSrc_po); if (gh != null) { Matrix4x4 localPlanM = consumerM * generator.getLocalConsumerMatrixPerInputSocket(gener2D.nodeSrc_po); gh.drawTransformHandles(visited, localPlanM, true); gh.drawControlHandles(ref visited, localPlanM, true); } } // SECTION if (gener2D.cellSrc_po != null && gener2D.cellSrc_po.generator != null) { GeneratorHandler gh = getGeneratorHandler(gener2D.cellSrc_po); if (gh != null) { Matrix4x4 localSecM = consumerM * generator.getLocalConsumerMatrixPerInputSocket(gener2D.cellSrc_po); gh.drawTransformHandles(visited, localSecM, true); gh.drawControlHandles(ref visited, localSecM, true); } } }
/* * [MenuItem("GameObject/3D Object/Archimatix Nodes/Meshers/Polygon")] * static void Init() { * AXEditorUtilities.addNodeToCurrentModel("Polygon"); * } */ public override void drawControlHandlesofInputParametricObjects(ref List <string> visited, Matrix4x4 consumerM, bool beingDrawnFromConsumer) { Polygon gener = (generator as Polygon); // Draw the plan spline. if (gener != null && gener.planSrc_po != null) { GeneratorHandler gh = getGeneratorHandler(gener.planSrc_po); if (gh != null) { Matrix4x4 localSecM = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix * generator.getLocalConsumerMatrixPerInputSocket(gener.planSrc_po); localSecM *= parametricObject.getAxisRotationMatrix2D(Axis.Y); gh.drawControlHandles(ref visited, localSecM, true); if (gener.planSrc_po.is2D()) { gh.drawTransformHandles(visited, localSecM, true); } } } }
// L :: DRAW_CONTROL_HANDLES_OF_INPUT_PARAMETRIC_OBJECTS public override void drawControlHandlesofInputParametricObjects(ref List <string> visited, Matrix4x4 consumerM) { Lofter gener = (generator as Lofter); //if (alreadyVisited(ref visited, "LofterHandler")) // return; Matrix4x4 prevHandlesMatrix = Handles.matrix; foreach (AXParameter input in gener.inputs) { if (input.DependsOn != null) { GeneratorHandler gh = getGeneratorHandler(input.DependsOn.parametricObject); //Debug.Log(input.DependsOn.parametricObject.Name); Matrix4x4 context = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix * Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, 0), Vector3.one); if (gh != null) { Handles.matrix = context * Matrix4x4.TRS(new Vector3(0, 0, 0), Quaternion.Euler(0, 0, 0), Vector3.one); gh.drawBoundsHandles(context, true); //List<string> _visited = new List<string>(); gh.drawControlHandles(ref visited, consumerM, true); } } } }
//public override void drawControlHandlesofInputParametricObjects(ref List<string> visited, Matrix4x4 consumerM) public override void drawControlHandlesofInputParametricObjects(ref List <string> visited, Matrix4x4 consumerM) { List <AXParameter> inputPs = parametricObject.generator.AllInput_Ps; foreach (AXParameter input_p in inputPs) { if (input_p != null && input_p.DependsOn != null) { AXParametricObject src_po = input_p.DependsOn.parametricObject; GeneratorHandler gh = getGeneratorHandler(src_po); if (gh != null) { //Debug.Log(src_po.Name); //Debug.Log(src_po.generator.parametricObject.worldDisplayMatrix); gh.drawControlHandles(ref visited, consumerM, false); //gh.drawTransformHandles(visited, consumerM); } } } }
/* * [MenuItem("GameObject/3D Object/Archimatix Nodes/Repeaters/Radial Repeater")] * static void Init() { * AXEditorUtilities.addNodeToCurrentModel("RadialRepeater"); * } */ public override void drawBoundsHandles(Matrix4x4 consumerM, bool forceDraw = false) { base.drawBoundsHandles(consumerM, forceDraw); RadialRepeaterTool radialRepeaterTool = (generator as RadialRepeater).repeaterToolU as RadialRepeaterTool; Matrix4x4 prevHandleMatrix = Handles.matrix; float depth = .55f * HandleUtility.GetHandleSize(Vector3.zero); Matrix4x4 context = Matrix4x4.TRS(new Vector3(0, -depth, 0), Quaternion.identity, Vector3.one) * parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix; Handles.matrix = context; if (radialRepeaterTool != null) { // REPEATER TOOL HANDLER GeneratorHandler gh = getGeneratorHandler(radialRepeaterTool.parametricObject); if (gh != null) { //Handles.matrix *= Matrix4x4.TRS(new Vector3(parametricObject.bounds.extents.x, radialRepeaterTool.size/2, 0), Quaternion.Euler(0, 0, 90), Vector3.one); gh.drawBoundsHandles(consumerM * parametricObject.getAxisRotationMatrix() * parametricObject.getLocalAlignMatrix(), true); List <string> visited = new List <string>(); gh.drawControlHandles(ref visited, consumerM * parametricObject.getAxisRotationMatrix() * parametricObject.getLocalAlignMatrix(), true); } } Handles.matrix = prevHandleMatrix; }
public override void drawControlHandlesofInputParametricObjects(ref List <string> visited, Matrix4x4 consumerM) { GridRepeater gener = (generator as GridRepeater); // Draw the plan AND the section splines. // BOUNDING_SHAPE if (gener.boundingShapeSrc_po != null && gener.boundingShapeSrc_po.generator != null) { GeneratorHandler gh = getGeneratorHandler(gener.boundingShapeSrc_po); if (gh != null) { // don't pass consumerM anymore. // Draw functions now use wordDisplayMatrix precacled with calls to Generator.getLocalConsumerMatrixPerInputSocket Matrix4x4 localPlanM = Matrix4x4.identity; //gener.worldDisplayMatrix = localPlanM; gh.drawTransformHandles(visited, localPlanM, true); gh.drawControlHandles(ref visited, localPlanM, true); } } }
/* * [MenuItem("GameObject/3D Object/Archimatix Nodes/Repeaters/Linear Repeater")] * static void Init() { * AXEditorUtilities.addNodeToCurrentModel("FloorRepeater"); * } */ public override void drawBoundsHandles(Matrix4x4 consumerM, bool forceDraw = false) { base.drawBoundsHandles(consumerM, forceDraw); RepeaterTool repeaterTool = (parametricObject.generator as FloorRepeater).repeaterTool; Matrix4x4 context = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix; Handles.matrix = context; if (repeaterTool != null) { GeneratorHandler gh = getGeneratorHandler(repeaterTool.parametricObject); if (gh != null) { Handles.matrix *= Matrix4x4.TRS(new Vector3(parametricObject.bounds.extents.x, repeaterTool.size / 2, 0), Quaternion.Euler(0, 0, 90), Vector3.one); gh.drawBoundsHandles(consumerM * parametricObject.getAxisRotationMatrix() * parametricObject.getLocalAlignMatrix(), true); List <string> visited = new List <string>(); gh.drawControlHandles(ref visited, consumerM * parametricObject.getAxisRotationMatrix() * parametricObject.getLocalAlignMatrix(), true); } } }
/* * [MenuItem("GameObject/3D Object/Archimatix Nodes/Repeaters/Plan Repeater")] * static void Init() { * AXEditorUtilities.addNodeToCurrentModel("PlanRepeater"); * } */ public override void drawBoundsHandles(Matrix4x4 consumerM, bool forceDraw = false) { base.drawBoundsHandles(consumerM, forceDraw); RepeaterTool repeaterTool = (parametricObject.generator as PlanRepeater).repeaterTool; if (repeaterTool != null) { GeneratorHandler gh = getGeneratorHandler(repeaterTool.parametricObject); if (gh != null) { consumerM *= Matrix4x4.TRS(new Vector3(parametricObject.bounds.extents.x, repeaterTool.size / 2, 0), Quaternion.Euler(0, 0, 90), Vector3.one); gh.drawBoundsHandles(consumerM * parametricObject.getAxisRotationMatrix() * parametricObject.getLocalAlignMatrix(), true); List <string> visited = new List <string>(); gh.drawControlHandles(ref visited, consumerM * parametricObject.getAxisRotationMatrix() * parametricObject.getLocalAlignMatrix(), true); } } }
// PLAN_SWEEP :: DRAW_CONTROL_HANDLES_OF_INPUT_PARAMETRIC_OBJECTS public override void drawControlHandlesofInputParametricObjects(ref List <string> visited, Matrix4x4 consumerM) { PlanSweep gener = (generator as PlanSweep); // Draw the plan AND the section splines. // PLAN first, since the section needsplan information to position itself. if (gener.planSrc_po != null && gener.planSrc_po.generator != null) { // Get the input PO and draw GeneratorHandler gh = getGeneratorHandler(gener.planSrc_po); if (gh != null) { //Matrix4x4 localPlanM = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix * generator.getLocalConsumerMatrixPerInputSocket(gener.planSrc_po); Matrix4x4 localPlanM = Matrix4x4.identity; if (gener.planSrc_po.is2D()) { gh.drawTransformHandles(visited, localPlanM, true); } gh.drawControlHandles(ref visited, localPlanM, true); } } // SECTION if (gener.sectionSrc_po != null && gener.sectionSrc_po.generator != null) { GeneratorHandler gh = getGeneratorHandler(gener.sectionSrc_po); if (gh != null) { //Matrix4x4 localSecM = parametricObject.model.transform.localToWorldMatrix.inverse * generator.parametricObject.worldDisplayMatrix * generator.getLocalConsumerMatrixPerInputSocket(gener.sectionSrc_po); Matrix4x4 localSecM = Matrix4x4.identity; //Debug.Log("localSecM"); //Debug.Log(localSecM); gh.drawTransformHandles(visited, localSecM, true); gh.drawControlHandles(ref visited, localSecM, true); } } }
/* * [MenuItem("GameObject/3D Object/Archimatix Nodes/Repeaters/Linear Repeater")] * static void Init() { * AXEditorUtilities.addNodeToCurrentModel("LinearRepeater"); * } */ public override void drawBoundsHandles(Matrix4x4 consumerM, bool forceDraw = false) { base.drawBoundsHandles(consumerM, forceDraw); LinearRepeater repeater = (parametricObject.generator as LinearRepeater); RepeaterTool repeaterTool = repeater.repeaterToolU; if (repeater.zAxis) { repeaterTool = repeater.repeaterToolV; } Matrix4x4 prevHandleMatrix = Handles.matrix; Matrix4x4 context = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix; Handles.matrix = context; if (repeaterTool != null) { GeneratorHandler gh = getGeneratorHandler(repeaterTool.parametricObject); if (gh != null) { if (repeater.zAxis) { Handles.matrix *= Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 90, 0), Vector3.one); } gh.drawBoundsHandles(context, true); List <string> visited = new List <string>(); gh.drawControlHandles(ref visited, context, true); } } Handles.matrix = prevHandleMatrix; }
public override void drawControlHandlesofInputParametricObjects(ref List <string> visited, Matrix4x4 consumerM, bool beingDrawnFromConsumer) { AXShape inputShape = (parametricObject.generator as ShapeMerger).S_InputShape; if (inputShape == null) { return; } for (int i = 0; i < inputShape.inputs.Count; i++) { AXParameter src = inputShape.inputs[i].DependsOn; if (src == null) { continue; } AXParametricObject srcPO = src.Parent; GeneratorHandler src_gh = getGeneratorHandler(srcPO); if (src_gh != null) { if (srcPO.generator is ShapeMerger) { src_gh.drawControlHandlesofInputParametricObjects(ref visited, consumerM, true); } else { src_gh.drawTransformHandles(visited, consumerM, false); src_gh.drawControlHandles(ref visited, consumerM, false); } } //else // gh.drawTransformHandles(visited, consumerM, true); } }
// public override void drawBoundsHandles(Matrix4x4 consumerM, bool forceDraw=false) // { // base.drawBoundsHandles(consumerM, forceDraw); // // Replicator replicator = (parametricObject.generator as Replicator); // // if (replicator != null) // { // GeneratorHandler gh = getGeneratorHandler(replicator.parametricObject); // // if (gh != null) // { // consumerM *= Matrix4x4.TRS(new Vector3(parametricObject.bounds.extents.x, 0, 0), Quaternion.Euler(0, 0, 90), Vector3.one); // gh.drawBoundsHandles(consumerM * parametricObject.getAxisRotationMatrix() * parametricObject.getLocalAlignMatrix(), true); // List<string> visited = new List<string>(); // gh.drawControlHandles(ref visited, consumerM * parametricObject.getAxisRotationMatrix() * parametricObject.getLocalAlignMatrix(), true); // } // } // } public override void drawControlHandlesofInputParametricObjects(ref List <string> visited, Matrix4x4 consumerM) { Replicator gener = (generator as Replicator); // Draw the plan AND the section splines. // PLAN first, since the section needsplan information to position itself. if (gener.planSrc_po != null && gener.planSrc_po.generator != null) { GeneratorHandler gh = getGeneratorHandler(gener.planSrc_po); if (gh != null) { //Matrix4x4 localPlanM = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix * generator.getLocalConsumerMatrixPerInputSocket(gener.planSrc_po); Matrix4x4 localPlanM = Matrix4x4.identity; localPlanM = Matrix4x4.TRS(new Vector3(parametricObject.bounds.extents.x, 0, 0), Quaternion.Euler(0, 0, 90), Vector3.one); if (gener.planSrc_po.is2D()) { gh.drawTransformHandles(visited, localPlanM, true); } gh.drawControlHandles(ref visited, localPlanM, true); } } }
//public override void drawControlHandlesofInputParametricObjects(ref List<string> visited, Matrix4x4 consumerM) public override void drawControlHandlesofInputParametricObjects(ref List <string> visited, Matrix4x4 consumerM) { // only show the inputs for the current channel Channeler gener = (generator as Channeler); if (gener.inputs != null && gener.inputs.Count > gener.channel) { AXParameter src_p = gener.inputs[gener.channel].DependsOn; if (src_p != null) { AXParametricObject src_po = src_p.parametricObject; GeneratorHandler gh = getGeneratorHandler(src_po); if (gh != null) { gh.drawControlHandles(ref visited, consumerM, false); } } } }
public override void drawControlHandles(ref List <string> visited, Matrix4x4 consumerM, bool beingDrawnFromConsumer) { if (alreadyVisited(ref visited, "LinearRepeater2DHandler")) { return; } Matrix4x4 prevHandlesMatrix = Handles.matrix; base.drawControlHandles(ref visited, consumerM, beingDrawnFromConsumer); RepeaterTool repeaterToolU = (parametricObject.generator as LinearRepeater2D).repeaterToolU; if (repeaterToolU != null) { // DRAW GRID Handles.color = new Color(1, .5f, 0, .4f); if (!beingDrawnFromConsumer) { consumerM *= generator.parametricObject.getLocalMatrix().inverse; consumerM *= parametricObject.getAxisRotationMatrix(); } consumerM *= Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(-90, 0, 0), Vector3.one); //consumerM *= Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(90, 0, 0), Vector3.one); Matrix4x4 context = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix * Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(-90, 0, 0), Vector3.one); Handles.matrix = context; for (int i = 0; i <= repeaterToolU.cells; i++) { Handles.DrawLine(new Vector3(-repeaterToolU.size / 2 + i * repeaterToolU.actualBay, 0, 0), new Vector3(-repeaterToolU.size / 2 + i * repeaterToolU.actualBay, 0, 0)); } // ASK RepeaterTools to DRAW GeneratorHandler gh = getGeneratorHandler(repeaterToolU.parametricObject); if (gh != null) { Handles.matrix = context * Matrix4x4.TRS(new Vector3(0, 0, 0), Quaternion.Euler(90, 0, 0), Vector3.one); gh.drawBoundsHandles(context, true); //List<string> _visited = new List<string>(); gh.drawControlHandles(ref visited, consumerM, true); } } // MATRIX drawControlHandlesofInputParametricObjects(ref visited, consumerM * Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(-90, 0, 0), Vector3.one), true); Handles.matrix = prevHandlesMatrix; }
public override void drawControlHandles(ref List <string> visited, Matrix4x4 consumerM, bool beingDrawnFromConsumer) { if (alreadyVisited(ref visited, "GridRepeater2DHandler")) { return; } Matrix4x4 prevHandlesMatrix = Handles.matrix; base.drawControlHandles(ref visited, consumerM, beingDrawnFromConsumer); RepeaterTool repeaterToolU = (parametricObject.generator as GridRepeater2D).repeaterToolU; RepeaterTool repeaterToolV = (parametricObject.generator as GridRepeater2D).repeaterToolV; if (repeaterToolU != null && repeaterToolV != null) { // DRAW GRID Handles.color = new Color(1, .5f, 0, .4f); if (!beingDrawnFromConsumer) { consumerM *= generator.parametricObject.getLocalMatrix().inverse; consumerM *= parametricObject.getAxisRotationMatrix(); } consumerM *= Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(-90, 0, 0), Vector3.one); //consumerM *= Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(90, 0, 0), Vector3.one); Matrix4x4 context = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix * Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(-90, 0, 0), Vector3.one); Handles.matrix = context; for (int i = 0; i <= repeaterToolU.cells; i++) { Handles.DrawLine(new Vector3(-repeaterToolU.size / 2 + i * repeaterToolU.actualBay, 0, -repeaterToolV.size / 2), new Vector3(-repeaterToolU.size / 2 + i * repeaterToolU.actualBay, 0, repeaterToolV.size / 2)); } for (int k = 0; k <= repeaterToolV.cells; k++) { Handles.DrawLine(new Vector3(-repeaterToolU.size / 2, 0, -repeaterToolV.size / 2 + k * repeaterToolV.actualBay), new Vector3(repeaterToolU.size / 2, 0, -repeaterToolV.size / 2 + k * repeaterToolV.actualBay)); } // ASK RepeaterTools to DRAW GeneratorHandler gh = getGeneratorHandler(repeaterToolU.parametricObject); if (gh != null) { Handles.matrix = context * Matrix4x4.TRS(new Vector3(0, 0, -1.3f * repeaterToolV.size / 2), Quaternion.Euler(90, 0, 0), Vector3.one); gh.drawBoundsHandles(context, true); gh.drawControlHandles(ref visited, consumerM, true); } gh = getGeneratorHandler(repeaterToolV.parametricObject); if (gh != null) { Handles.matrix = context * Matrix4x4.TRS(new Vector3(1.3f * repeaterToolU.size / 2, 0, 0), Quaternion.Euler(90, -90, 0), Vector3.one); gh.drawBoundsHandles(context, true); gh.drawControlHandles(ref visited, consumerM, true); } } // MATRIX //Matrix4x4 inputsM = consumerM; //if (beingDrawnFromConsumer) // inputsM *= generator.parametricObject.getLocalMatrix(); drawControlHandlesofInputParametricObjects(ref visited, consumerM * Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(90, 0, 0), Vector3.one), true); /* * // DRAW THE FINAL MERGED SHAPE * * if (! beingDrawnFromConsumer) * consumerM *= generator.parametricObject.getLocalMatrix().inverse; * * AXShape inputShape = (parametricObject.generator as ShapeMerger).InputShape; * AXParameter out_p = inputShape.getSelectedOutputParameter(); * * * if(! inputShape.hasOutputConnected()) * consumerM *= generator.parametricObject.getAxisRotationMatrix(); * * Handles.matrix = generator.parametricObject.worldDisplayMatrix;; * * Color mergeShapeColor = Color.cyan; * mergeShapeColor.a *= .75f; * Handles.color = mergeShapeColor; * * drawPaths(out_p); */ Handles.matrix = prevHandlesMatrix; }
/* * [MenuItem("GameObject/3D Object/Archimatix Nodes/Meshers/Lathe")] * static void Init() { * AXEditorUtilities.addNodeToCurrentModel("Lathe"); * } */ public override void drawControlHandlesofInputParametricObjects(ref List <string> visited, Matrix4x4 consumerM) { Lathe gener = (generator as Lathe); //if (visited.Contains ("c_"+parametricObject.Guid)) // return; //visited.Add ("c_"+parametricObject.Guid); // SECTION if (gener.sectionSrc_po != null && gener.sectionSrc_po.generator != null) { GeneratorHandler gh = getGeneratorHandler(gener.sectionSrc_po); if (gh != null) { Matrix4x4 localSecM = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix; // * generator.getLocalConsumerMatrixPerInputSocket(gener.sectionSrc_po); if (gener.sectionSrc_po.is2D()) { gh.drawTransformHandles(visited, localSecM, true); } gh.drawControlHandles(ref visited, localSecM, true); } } // PLAN Matrix4x4 prevHandlesMatrix = Handles.matrix; float y = .5f * HandleUtility.GetHandleSize(Vector3.zero); float yd = 0.5f * HandleUtility.GetHandleSize(Vector3.zero) + .2f * parametricObject.bounds.extents.y; float handleSizer = .15f * HandleUtility.GetHandleSize(Vector3.zero); Handles.matrix *= Matrix4x4.TRS(new Vector3(0, -yd, 0), Quaternion.identity, Vector3.one); Vector3 pos; Color lightLineColor = new Color(1, .8f, .6f, .7f); Color brightOrange = new Color(1, .8f, 0, .9f); // RADIUS // Handles.color = brightOrange; //Handles.DrawLine(new Vector3(gener.radius, y, 0), new Vector3(gener.radius, -y, 0)); Handles.DrawLine(new Vector3(0, 0, 0), new Vector3(0, -y, 0)); //Handles.DrawLine(new Vector3(0, -y*.66f, 0), new Vector3(gener.radius, -y*.66f, 0)); // RADIUS LABEL GUIStyle labelStyle = new GUIStyle(); labelStyle.alignment = TextAnchor.MiddleCenter; labelStyle.normal.textColor = Color.white; Handles.Label(new Vector3(gener.radius + handleSizer, -y / 4, 0), "rad=" + System.Math.Round(gener.radius, 2), labelStyle); // RADIUS HANDLE pos = new Vector3(gener.radius, 0, 0); EditorGUI.BeginChangeCheck(); pos = Handles.FreeMoveHandle( pos, Quaternion.identity, .15f * HandleUtility.GetHandleSize(pos), Vector3.zero, (controlID, positione, rotation, size) => { if (GUIUtility.hotControl > 0 && controlID == GUIUtility.hotControl) { ArchimatixEngine.mouseDownOnSceneViewHandle(); } Handles.SphereCap(controlID, positione, rotation, size); }); if (EditorGUI.EndChangeCheck()) { Undo.RegisterCompleteObjectUndo(parametricObject.model, "Radius"); //.parametricObject.setAltered(); gener.P_Radius.initiateRipple_setFloatValueFromGUIChange(pos.x); gener.radius = pos.x; gener.parametricObject.model.isAltered(23); for (int i = 0; i < generator.P_Output.Dependents.Count; i++) { generator.P_Output.Dependents [i].parametricObject.generator.adjustWorldMatrices(); } generator.adjustWorldMatrices(); } Handles.color = new Color(1, .8f, .6f, .05f); Handles.DrawSolidArc(Vector3.zero, Vector3.up, Vector2.right, -gener.sweepAngle, gener.radius + .2f); Handles.color = lightLineColor; Handles.DrawLine(new Vector3(0, 0, 0), new Vector3(gener.radius, 0, 0)); // TOTAL ANGLE SWEEP Handles.color = new Color(1, .5f, 0f, .3f); Quaternion rot = Quaternion.Euler(0, 360 - gener.sweepAngle, 0); EditorGUI.BeginChangeCheck(); rot = Handles.Disc(rot, Vector3.zero, Vector3.up, gener.radius, false, 1); if (EditorGUI.EndChangeCheck()) { Undo.RegisterCompleteObjectUndo(parametricObject.model, "RadialRepeat Total Angle"); gener.P_SweepAngle.initiateRipple_setFloatValueFromGUIChange(360 - rot.eulerAngles.y); gener.parametricObject.model.isAltered(23); for (int i = 0; i < generator.P_Output.Dependents.Count; i++) { generator.P_Output.Dependents [i].parametricObject.generator.adjustWorldMatrices(); } } Handles.color = new Color(1, .5f, 0f, 1f); Handles.DrawWireArc(Vector3.zero, Vector3.up, Vector3.right, (-gener.sweepAngle), gener.radius); Handles.matrix *= Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 360 - gener.sweepAngle, 0), Vector3.one); // SEGMENT CLICKERS // (-) /* * Handles.color = new Color(.7f, .7f, 1, .9f); * pos = new Vector3(gener.radius, 0, -handleSizer*2); * if(Handles.Button(pos, Quaternion.Euler(0,180,0), handleSizer, handleSizer, Handles.ConeCap)) * { * Undo.RegisterCompleteObjectUndo (parametricObject.model, "Segs"); * * gener.P_Segs.intiateRipple_setIntValueFromGUIChange(gener.segs-1); * * gener.parametricObject.model.autobuild(); * for (int i = 0; i < generator.P_Output.Dependents.Count; i++) * generator.P_Output.Dependents [i].parametricObject.generator.adjustWorldMatrices (); * } * * // [+] * Handles.color = new Color(.7f, 1f, .7f, .9f); * pos = new Vector3(gener.radius, 0, handleSizer*2); * if(Handles.Button(pos, Quaternion.Euler(0,0,0), handleSizer, handleSizer, Handles.ConeCap)) * { * Undo.RegisterCompleteObjectUndo (parametricObject.model, "Segs"); * * gener.P_Segs.intiateRipple_setIntValueFromGUIChange(gener.segs+1); * * gener.parametricObject.model.autobuild(); * for (int i = 0; i < generator.P_Output.Dependents.Count; i++) * generator.P_Output.Dependents [i].parametricObject.generator.adjustWorldMatrices (); * } * * Handles.Label(new Vector3(gener.radius, -y/4, -handleSizer*4), ""+(gener.segs) + " segs", labelStyle); */ // ANGLESWEEP KNOB /* * Handles.color = brightOrange; * Handles.SphereCap(0, * new Vector3(gener.radius, 0, 0), * Quaternion.identity, * .15f*HandleUtility.GetHandleSize(pos)); */ Handles.Label(new Vector3(0, -y, 0), "" + System.Math.Round(gener.snappedSweepAngle, 0) + " degs", labelStyle); Handles.matrix = prevHandlesMatrix; }
// public override int customNodeGUIZone_2(int cur_y, AXNodeGraphEditorWindow editor, AXParametricObject po) // { // // int gap = ArchimatixUtils.gap; // int lineHgt = ArchimatixUtils.lineHgt; // float winMargin = ArchimatixUtils.indent; // float innerWidth = po.rect.width - 2*winMargin; // // Rect pRect = new Rect(winMargin, cur_y, innerWidth, lineHgt); // EditorGUI.TextField(pRect, "YUBBA"); // //GUI.Button(pRect, "HALLO"); // // cur_y += lineHgt; // // return cur_y; // } public override void drawControlHandlesofInputParametricObjects(ref List <string> visited, Matrix4x4 consumerM, bool beingDrawnFromConsumer) { Extrude gener = (generator as Extrude); if (gener.P_Plan == null || gener.planSrc_p == null) { return; } if (gener.parametricObject == null || !gener.parametricObject.isActive) { return; } GeneratorHandler gh = getGeneratorHandler(gener.planSrc_po); if (gh != null) { Matrix4x4 localSecM = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix * generator.getLocalConsumerMatrixPerInputSocket(gener.planSrc_po); gh.drawControlHandles(ref visited, localSecM, true); if (gener.planSrc_po != null && gener.planSrc_po.is2D() || gener.planSrc_po.generator is Grouper) { gh.drawTransformHandles(visited, localSecM, true); } // BEVEL HANDLE Matrix4x4 prevHM = Handles.matrix; Color prevColor = Handles.color; Handles.matrix = parametricObject.model.transform.localToWorldMatrix * generator.parametricObject.worldDisplayMatrix * AXGeometryTools.Utilities.getFirstSegmentHandleMatrix(gener.P_Plan.getPaths()); float handlesMatrixScaleAdjuster = AXEditorUtilities.getHandlesMatrixScaleAdjuster(); if (!gener.bevelOut) { //float bevelMax = (gener.bevelTop > gener.bevelBottom) ? gener.bevelTop : gener.bevelBottom; //Handles.matrix *= Matrix4x4.TRS(new Vector3(-bevelMax, 0, 0), Quaternion.identity, Vector3.one); } float x = 0; //(gener.bevelOut) ? gener.bevelTop : 0; x += gener.P_Plan.thickness + gener.P_Plan.offset; Handles.matrix *= Matrix4x4.TRS(new Vector3(0, 0, 0), Quaternion.Euler(90, 0, 0), Vector3.one); Vector3 posR1 = new Vector3((gener.bevelBottom > gener.bevelTop)? 0 :gener.bevelTop - gener.bevelBottom, gener.bevelBottom, 0); posR1.x += gener.P_Plan.offset; float r2X = (gener.bevelBottom > gener.bevelTop) ? (gener.bevelBottom - gener.bevelTop - gener.taper) : -gener.taper; Vector3 posR2 = new Vector3(r2X, (gener.extrude - gener.bevelTop), 0); posR2.x += gener.P_Plan.offset; // WIRE DISCS Handles.color = Color.red; Handles.DrawWireDisc(posR1, Vector3.forward, gener.bevelBottom); Handles.DrawWireDisc(posR2, Vector3.forward, gener.bevelTop); Handles.color = Color.green; // BEVEL RADIUS 1 // R1 EditorGUI.BeginChangeCheck(); posR1 = Handles.FreeMoveHandle( posR1, Quaternion.identity, .1f * HandleUtility.GetHandleSize(posR1), Vector3.zero, (controlID, positione, rotation, size) => { if (GUIUtility.hotControl > 0 && controlID == GUIUtility.hotControl) { ArchimatixEngine.mouseDownOnSceneViewHandle(); } Handles.SphereCap(controlID, positione, rotation, size); }); if (EditorGUI.EndChangeCheck()) { parametricObject.initiateRipple_setFloatValueFromGUIChange("Bevel Bottom", posR1.y); if (Event.current.alt && gener.bevelsUnified) { gener.P_Bevels_Unified.boolval = false; } // OFFSET float ox = posR1.x; if (gener.bevelBottom < gener.bevelTop) { ox -= (gener.bevelTop - gener.bevelBottom); } gener.P_Plan.offset = (Math.Abs(ox) < (.08f) * HandleUtility.GetHandleSize(posR1)) ? 0 : ox; parametricObject.model.isAltered(32); } // R2 & TAPER EditorGUI.BeginChangeCheck(); posR2 = Handles.FreeMoveHandle( posR2, Quaternion.identity, .1f * HandleUtility.GetHandleSize(posR2), Vector3.zero, (controlID, positione, rotation, size) => { if (GUIUtility.hotControl > 0 && controlID == GUIUtility.hotControl) { ArchimatixEngine.mouseDownOnSceneViewHandle(); } Handles.SphereCap(controlID, positione, rotation, size); }); if (EditorGUI.EndChangeCheck()) { Undo.RegisterCompleteObjectUndo(parametricObject.model, "Bevel Radius Changed"); if (Event.current.alt) { parametricObject.initiateRipple_setFloatValueFromGUIChange("Extrude", "Height", (gener.bevelTop + posR2.y)); gener.taper = (gener.bevelBottom > gener.bevelTop) ? gener.bevelBottom - gener.bevelTop - posR2.x : -posR2.x; gener.taper = (Math.Abs(gener.taper) < (.08f) * HandleUtility.GetHandleSize(posR2) * handlesMatrixScaleAdjuster) ? 0 : gener.taper; parametricObject.initiateRipple_setFloatValueFromGUIChange("Taper", gener.taper + gener.P_Plan.offset); } else { parametricObject.initiateRipple_setFloatValueFromGUIChange("Bevel Top", (gener.extrude - posR2.y)); } //parametricObject.model.latestEditedParameter = gener.P_Taper; parametricObject.model.isAltered(32); } /* * EditorGUI.BeginChangeCheck(); * pos1 = Handles.Slider(pos1, Vector3.down, .6f*HandleUtility.GetHandleSize(pos1), Handles.ArrowCap, 0); * * if(EditorGUI.EndChangeCheck()) * { * parametricObject.intiateRipple_setFloatValueFromGUIChange("Bevel Radius Bottom", pos1.y); * parametricObject.model.isAltered(32); * } */ Handles.color = Color.cyan; /* * // TAPER * EditorGUI.BeginChangeCheck(); * //Vector3 taperV = Handles.Slider(new Vector3(-gener.taper, gener.extrude-gener.bevelTop, 0), Vector3.right, .6f*HandleUtility.GetHandleSize(pos1), Handles.ArrowCap, 0); * * Vector3 taperV = Handles.Slider(new Vector3(gener.P_Plan.offset, gener.extrude-gener.bevelTop, 0), Vector3.right, .6f*HandleUtility.GetHandleSize(pos1), Handles.ArrowCap, 0); * if(EditorGUI.EndChangeCheck()) * { * * * // TAPER * //float px = (Math.Abs(taperV.x) < (.08f)*HandleUtility.GetHandleSize(posR2)) ? 0 : -taperV.x; * * Undo.RegisterCompleteObjectUndo (parametricObject.model, "Offset parameter changed"); * * float px = (Math.Abs(taperV.x) < (.08f)*HandleUtility.GetHandleSize(posR2)) ? 0 : taperV.x; * //parametricObject.intiateRipple_setFloatValueFromGUIChange("Taper", px); * //parametricObject.intiateRipple_setFloatValueFromGUIChange("Taper", px); * gener.P_Plan.offset = px; * * parametricObject.model.isAltered(32); * * * } */ /* * // BEVEL_RADIUS_1 ANGLED * float c45 = .70710678f; * EditorGUI.BeginChangeCheck(); * Vector3 bevel2V = Handles.Slider(new Vector3(-gener.taper - (gener.bevelTop*c45), gener.extrude-gener.bevelTop - (gener.bevelTop*c45), 0), new Vector3(-1, -1, 0), .6f*HandleUtility.GetHandleSize(pos1), Handles.ArrowCap, 0); * if(EditorGUI.EndChangeCheck()) * { * * float px = (-bevel2V.x - gener.taper)/c45; * parametricObject.intiateRipple_setFloatValueFromGUIChange("Bevel Radius Top", px); * parametricObject.model.isAltered(32); * } */ /* * * // BEVEL TOP RADIUS * EditorGUI.BeginChangeCheck(); * GUI.SetNextControlName("Bevel Top Radius"); * Vector3 r2V = Handles.Slider(new Vector3(-gener.taper, gener.extrude-gener.bevelTop, 0), Vector3.up, .6f*HandleUtility.GetHandleSize(pos1), Handles.ArrowCap, 0); * //Vector3 r2V = Handles.Slider(new Vector3(-gener.taper, gener.extrude-gener.bevelTop, 0), Vector3.up); * if(EditorGUI.EndChangeCheck()) * { * // TAPER * parametricObject.intiateRipple_setFloatValueFromGUIChange("Bevel Radius Top", gener.extrude-r2V.y); * parametricObject.model.isAltered(32); * * * } * */ // BEVEL SEGS if (gener.bevelTop > 0) { float handleSize = .55f * HandleUtility.GetHandleSize(posR1) * handlesMatrixScaleAdjuster; float adjustedSegs = (gener.bevelHardEdge && gener.bevelSegs == 1) ? 0 : gener.bevelSegs; //Vector3 posSegs = new Vector3(-gener.taper, gener.extrude - gener.bevelTop +handleSize + (.025f*HandleUtility.GetHandleSize(posR1)* gener.bevelSegs), 0); Vector3 posSegs = new Vector3(-gener.taper + handleSize + (.04f * HandleUtility.GetHandleSize(posR1) * adjustedSegs * handlesMatrixScaleAdjuster), gener.extrude - gener.bevelTop, 0); Handles.DrawLine(posR2, posSegs); EditorGUI.BeginChangeCheck(); posSegs = Handles.FreeMoveHandle( posSegs, Quaternion.identity, .1f * HandleUtility.GetHandleSize(posSegs), Vector3.zero, (controlID, positione, rotation, size) => { if (GUIUtility.hotControl > 0 && controlID == GUIUtility.hotControl) { ArchimatixEngine.mouseDownOnSceneViewHandle(); } Handles.SphereCap(controlID, positione, rotation, size); }); if (EditorGUI.EndChangeCheck()) { // BEVEL_TOP_RADIUS //int conv = Mathf.CeilToInt( (posSegs.y + gener.bevelTop - gener.extrude - handleSize) / (.025f*HandleUtility.GetHandleSize(posR1))); Undo.RegisterCompleteObjectUndo(parametricObject.model, "Bevel Segs Changed"); int conv = Mathf.CeilToInt((posSegs.x + gener.taper - handleSize) / (.04f * HandleUtility.GetHandleSize(posR2))); if (conv <= 0) { conv = 1; gener.bevelHardEdge = true; gener.P_BevelHardEdge.boolval = true; } else { gener.bevelHardEdge = false; gener.P_BevelHardEdge.boolval = false; } if (gener.bevelTop == 0) { parametricObject.initiateRipple_setFloatValueFromGUIChange("Bevel Segs", .02f); } parametricObject.initiateRipple_setIntValueFromGUIChange("Bevel Segs", conv); parametricObject.model.isAltered(32); } } /* * * // LIP_TOP * Handles.color = Color.magenta; * * EditorGUI.BeginChangeCheck(); * Vector3 lipTopV = Handles.Slider(new Vector3(-gener.taper-gener.lipTop, gener.extrude, 0), Vector3.left, .6f*HandleUtility.GetHandleSize(posR2), Handles.ArrowCap, 0); * if(EditorGUI.EndChangeCheck()) * { * parametricObject.intiateRipple_setFloatValueFromGUIChange("Lip Top", -lipTopV.x-gener.taper); * parametricObject.model.isAltered(32); * } * * // LIP_EDGE * EditorGUI.BeginChangeCheck(); * lipTopV = Handles.Slider(new Vector3(-gener.taper-gener.lipTop, gener.extrude-gener.lipEdge, 0), Vector3.down, .6f*HandleUtility.GetHandleSize(posR2), Handles.ArrowCap, 0); * if(EditorGUI.EndChangeCheck()) * { * parametricObject.intiateRipple_setFloatValueFromGUIChange("Lip Edge", -lipTopV.y+gener.extrude); * parametricObject.model.isAltered(32); * } * */ //drawBevelHandle(parametricObject, "Bevel Radius Top", gener.bevelTop, "Taper", gener.taper, .06f); Handles.matrix = prevHM; Handles.color = prevColor; } }