2016-08-15 7 views
0

В настоящее время я работаю над номографом, и мне удалось создать 2 слайдера, связанных с линией, но есть ли способ, чтобы линия считывала средние числа вроде как в примере ниже ,Flash AS3 drawline отображает текст

Мне нужна строка для отображения нескольких номеров «Расстояние».

Также возможно иметь дисплей слайдера несколько номеров в разных единицах измерения, как метры/футы

ВАРИАНТ 2

Можно ли иметь line.graphic играть мувиклип или кнопку преувеличивать каждый раз, когда он проходит через него?

На данный момент я собираюсь использовать тип вражеского класса, поэтому всякий раз, когда через него проходит линия.graphic, он отображает число (число).

example nomograph

вот что я до сих пор ... для слайдеров я поместил MovieClip "imageholder1" поверх другого MovieClip "прямоугольник"

var imgWidth:Number = imageHolder1.width; 
var imgHeight:Number = imageHolder1.height; 
var rectWidth:Number = rect.width; 
var rectHeight:Number = rect.height; 
var rectX:Number = rect.x; 
var rectY:Number = rect.y; 
var img1Width:Number = imageHolder2.width; 
var img1Height:Number = imageHolder2.height; 
var rect1Width:Number = rect1.width; 
var rect1Height:Number = rect1.height; 
var rect1X:Number = rect1.x; 
var rect1Y:Number = rect1.y; 
// Do math to correctly make the drag bounds using values attained above 
var boundWidth = rectWidth - imgWidth; 
var boundHeight = rectHeight - imgHeight; 
var bound1Width = rect1Width - img1Width; 
var bound1Height = rect1Height - img1Height; 

var line:MovieClip = new MovieClip(); 
addChild(line); 

draw(null); 

imageHolder1.width = txtout.width 
imageHolder1.minimum = 0; 
imageHolder1.maximum = 100; 
imageHolder1.value = 100; 
imageHolder1.snapInterval = 2; 

var sliderValues:uint = imageHolder1.y; 
imageHolder1.addEventListener(Event.CHANGE, sliderChanged); 
function sliderChanged(evt:Event):void { 
sliderValues = imageHolder1.value/100; 
txtout.text = (imageHolder1.value/100).toFixed(2); 
} 
// Now apply the variable numbers with the math we want as bounds 
var boundsRect:Rectangle = new Rectangle(rectX, rectY, 
boundWidth, boundHeight); 
    // Enable drag 
    imageHolder1.addEventListener(MouseEvent.MOUSE_DOWN, DragImage1); 
    function DragImage1(event:MouseEvent) { 
// Here you see we apply the boundsRect when they drag 
imageHolder1.startDrag(false, boundsRect); 
stage.addEventListener(Event.ENTER_FRAME, draw); 
} 
// Stop drag 
imageHolder1.addEventListener(MouseEvent.MOUSE_UP, DropImage1); 
function DropImage1(event:MouseEvent) { 
imageHolder1.stopDrag(); 
stage.addEventListener(Event.ENTER_FRAME, draw); 
} 

var bounds1Rect:Rectangle = new Rectangle(rect1X, rect1Y, 
bound1Width, bound1Height); 
    // Enable drag 
    imageHolder2.addEventListener(MouseEvent.MOUSE_DOWN, DragImage2); 
    function DragImage2(event:MouseEvent) { 
    // Here you see we apply the boundsRect when they drag 
imageHolder2.startDrag(false, bounds1Rect); 
    stage.addEventListener(Event.ENTER_FRAME, draw); 
} 
// Stop drag 
imageHolder2.addEventListener(MouseEvent.MOUSE_UP, DropImage2); 
function DropImage2(event:MouseEvent) { 
    imageHolder2.stopDrag(); 
    stage.addEventListener(Event.ENTER_FRAME, draw); 
} 

function draw(event:Event):void{ 
    line.graphics.clear(); 
    line.graphics.lineStyle(1,1); 
    line.graphics.moveTo(imageHolder1.x,imageHolder1.y); 
    line.graphics.lineTo(imageHolder2.x,imageHolder2.y); 
} 

var sliderValue:uint = imageHolder2.y; 
addEventListener(Event.ENTER_FRAME, onEnterFrame); 
function onEnterFrame(event:Event):void { 
    sliderValue = imageHolder2.y; 
    status_txt.text = "Slider position is: "+sliderValue; 
} 

обновления

Так получилось, что я редактирую в соответствии с моими потребностями, и я смог проследить всю информацию во флэш-памяти и узнать больше о xml для флэш-памяти.

Но теперь мой вопрос заключается в том, как реализовать все это на стадии вспышки?

<?xml version="1.0" encoding="utf-8"?> 

<flow> 
    <axis name="diameter" type="parallel" 
    scaleFunction="log(t)"> 
    <range>0.01,02, ,50</range> 
    <xposition>0.0</xposition> 
    <crop>0.032,0.977</crop> 
    <title>Diameter [in.]</title> 
    </axis> 
    <axis name="weightFlow" type="parallel" 
    scaleFunction="log(t)"> 
    <range>0.001,100000</range> 
    <xposition>0.16</xposition> 
    <crop>0.127,0.941</crop> 
    <title>Weight Flow [1000 
    lb./hr.]</title> 
    </axis> 
    <axis name="massVelocity" 
    type="parallel" scaleFunction="log(t)"> 
    <range>1.0,10000</range> 
    <xposition>0.325</xposition> 
    <crop>0.091,0.91</crop> 
    <title>Mass Velocity 
    [lb./(hr.)(sq.ft.)]</title> 
    </axis> 
    <axis name="turning" type="turning"> 
    <xposition>0.48</xposition> 
    </axis> 
    <axis name="pressureDrop" 
    type="parallel" scaleFunction="log(t)"> 
    <range>0.000001,100</range> 
    <xposition>0.713</xposition> 
    <crop>0.175,0.902</crop> 
    <title>Pressure Drop 
    [lb./sq.in./ft.pipe]</title> 
    </axis> 
    <axis name="pressure" type="parallel" 
    scaleFunction="log(t)" layout="left"> 
    <range>0.001,100</range> 
    <xposition>1.0</xposition> 
    <title>Centipoises^0.16/(lb./cu.ft. 
    at 1 atm)</title> 
    </axis> 
</flow> 
+0

Что не так с их показанной формулой «Speed ​​x Time = Distance»? Это ** [ссылка] (http://mathforum.org/library/drmath/view/63338.html) ** показывает, как рассчитать среднее значение. Также это ** [ссылка] (http://lalashan.mcmaster.ca/theobio/math/index.php/Nomogram) ** может дать ключ к расчетному коду. У вас есть образ ** вашей точной номограммы **? Я имею в виду твои шкалы точно так же, как эта картина? –

+0

Либо вы искусно вычисляете логарифмический масштаб, либо помещаете значения надреза в запрашиваемую базу данных. Это означает, что возможно создание 2 массивов. 'Array-1' для высоты пикселей пикселей и' Array-2' для значения метки/масштаба на этой высоте (Y pos). Затем вы проверяете, где ваша связанная линия пересекает линию шкалы расстояний. Это Y-pos - это то, что вы проверяете в 'Array-1', и когда вы найдете ближайший массивный слот с этим номером, его индекс используется в' Array-2' для получения значения масштаба. –

+0

по причинам работы я не могу показать свою номограмму ... но могу сказать, что первая строка слева - Imp. Gal, литры и галлоны США Тогда в середине имеют мм и дюймы и справа метров и ноги –

ответ

0

Этот код покажет вам, как вычислить «размер Bore» (среднее значение) из указанных номеров «Rate» и «Скорость». Вы можете изменить inputNum_Rate и inputNum_Velo. Например, в этой номограмме image вы можете видеть, что скорость потока составляет от 100 литров/мин и скорость 4,5 м/с. Среднее значение должно быть около 22 мм (или от 0,85 до 0,89 дюйма?). Попробуйте обе формулы, чтобы решить, что вы считаете более точным для своего проекта.

В промышленности стандарт формула это просто:

D = Q/V (где D = диаметр, Q = скорость потока и V = скорость) ,

Однако, чтобы точно соответствовать вашей Номограмма изображения, кажется, это другая формула работает лучше:

Q = input_FlowRate х offset_of_Rate;
V = input_Velocity x offset_of_Velocity;
результат = Q/ V;
результат = Math.sqrt (4 * результат/Math.PI);
* = 10; // # умножить на 10 миллиметров для

Demo - Тестирование номера по коду:
Начните новый проект и вставьте код в Actions панель и нажмите Ctrl + войти отлаживать ,
Результаты показаны в отладчике (если вы не видите текст/обратную связь/вывод, попробуйте нажать F2).

В секции кода «TEST APP» ... Перейти к шагу (2) и изменить inputNum_Rate = 100; и inputNum_Velo = 4.5; к тому, что единицы вы хотите (как указано на вашем номограммы).

//# for: Define INPUT unit 
var inputNum_Rate : Number = 0;  
var inputNum_Velo : Number = 0; 

//# for: Define INPUT unit type (format) 
var format_Rate : String = "ltr_pMin"; //set: "ltr_pMin" (Litres)or "gal_pMin" (Gallons) 
var format_Diam : String = "mm"; //set: "mm" or "inches" 
var format_Velo : String = "m_pSec"; //set: "m_pSec" (meters) or "ft_pSec" (feet) 

var offset_Rate : Number = 16.66666666666666666; //Litres per Min 
var offset_Velo : Number = 100.0; //Metres per Sec 

var nvel : Number = 0; var svel : Number = 0; 
var nflow : Number = 0; var sflow : Number = 0; 

var s : Number = 0; 
var resultNum : Number = 0; // holds the result 

////////////// TEST APP ///////////////// 

//# 1) setup INPUT TYPE 
format_Rate = "ltr_pMin"; //# Rate //set: "ltr_pMin" (Litres)or "gal_pMin" (Gallons) 
format_Diam = "mm"; //# Diameter //set: "mm" or "inches" 
format_Velo = "m_pSec"; //# Velocity //set: "m_pSec" (meters) or "ft_pSec" (feet) 

//# 2) setup INPUT values ("Rate" & "Velocity" to get middle "Diameter"); 
inputNum_Rate = 100; inputNum_Velo = 4.5; //# These should be from input textbox 

//# 3) calculate Diameter based on inputs of Rate & Velocity 
resultNum = calculate_Diameter(inputNum_Rate, inputNum_Velo); 
trace ("final :: resultNum : " + resultNum); 

function calculate_Diameter(myRate:Number, myVelo:Number) : Number 
{ 
    //# RESET 
    svel = nvel = nflow = sflow = s = resultNum = 0; //reset 

    sflow = myRate * offset_Rate; 
    svel = myVelo * offset_Velo; 
    s = sflow/svel; //get Area 
    s = Math.sqrt(4 * s/Math.PI); 

    //# CONVERT 
    s = s * 10;  s = Number(s.toPrecision(5)); 

    //# CHECK RESULTS IN DEBUGGER.... 
    trace("==========================================="); 
    trace("\n FLOW RATE : "); 
    //convert Litres and US gallons :: US-Gallons = (litres/3.79) || Litres = (3.79 * US-Gallons) 
    trace("litres p/sec : " + (myRate)); 
    trace("gallon p/sec : " + (myRate/3.79)); 

    trace("\n BORE SIZE : "); 
    //convert Mm and Inches :: (1 mm = 0.0393701 inch || 1 inch = 25.4 mm) 
    trace("millms : " + (s)); 
    trace("inches : " + (s * 0.0393701)); 

    trace("\n VELOCITY : "); 
    //convert Metres and Feet :: (1 metre= 3.28084 foot || 1 foot= 0.3048 metres) 
    trace("m/sec : " + (myVelo)); 
    trace("ft/sec : " + (myVelo * 3.28084)); 
    trace("==========================================="); 


    //# RETURN result of this function 
    return resultNum; 

} 
+0

Ах, спасибо, да, это все соус и картофельное пюре, я нашел более длинный и утомительный .... путем дублирования и переименования одних и тех же кнопок снова и снова ... доволен этим, но он выполняет свою работу, но я буду определенно играйте с этим ... посмотрите, смогу ли я превратить его в полностью функционирующую монографию. Спасибо за помощь, серьезно, я бы купил вам торт или что-то, если бы мог. –

 Смежные вопросы

  • Нет связанных вопросов^_^