Пример #1
0
CGraphElement::CGraphElement()
{
    m_LineColor = m_PointColor = RGB(255, 255, 255);
    m_nType         = Solid;
    m_nLineWidth    = 0 ;
    m_nSymbol       = Nosym;
    m_bSolid        = VARIANT_TRUE;
    m_nPointSize    = 0 ;
    m_bShow         = VARIANT_TRUE;      // Added by A. Hofmann

    min = max = CElementPoint(0,0);

    InitializeCriticalSection(&m_CritSectionForPlot);
}
Пример #2
0
CGraphElement::CGraphElement(int id/*=0*/)
{
	bIsPlotAvailable = FALSE ;
	m_LineColor = m_PointColor = RGB(0,0,0);
	m_nType		= Solid;
	m_nWidth	= 0 ;
	m_nSymbol	= Nosym;
	m_bSolid	= TRUE;
	m_nSize		= 0 ;
	m_bShow		= TRUE;      // Added by A. Hofmann

	const int TXT_LEN = 128;
	OLECHAR szText[ TXT_LEN ];
	_snwprintf(szText, TXT_LEN, L"Element-%d",id);
	m_strName = szText;

	min = max = CElementPoint(0,0);		
}
Пример #3
0
STDMETHODIMP CGraphElement::Plot(VARIANT newXVals, VARIANT newYVals)
{
    LONG lXBound, uXBound, lYBound, uYBound;
    SAFEARRAY* psaXVals, *psaYVals;
    HRESULT hr;

    //usually from VBScript the arrays are coming packed in by ref variants
    hr = GetArrayFromVariant(&newXVals, &psaXVals);
    if(FAILED(hr))
    {
        return hr;
    }
    hr = GetArrayFromVariant(&newYVals, &psaYVals);
    if(FAILED(hr))
    {
        return hr;
    }

    hr = SafeArrayGetLBound(psaXVals, 1, &lXBound);
    if(FAILED(hr))
    {
        return hr;
    }
    hr = SafeArrayGetUBound(psaYVals, 1, &uXBound);
    if(FAILED(hr))
    {
        return hr;
    }
    hr = SafeArrayGetLBound(psaXVals, 1, &lYBound);
    if(FAILED(hr))
    {
        return hr;
    }
    hr = SafeArrayGetUBound(psaYVals, 1, &uYBound);
    if(FAILED(hr))
    {
        return hr;
    }
    if(uXBound - lXBound != uYBound - lYBound)
    {
        return AtlReportError(GUID_NULL, L"Array with same size expected", IID_NULL, E_INVALIDARG);
    }

    int i, nCount;

    min = max = CElementPoint(0,0);

    nCount = m_PointList.GetSize();

    EnterCriticalSection(&m_CritSectionForPlot);
    m_PointList.RemoveAll();
    LeaveCriticalSection(&m_CritSectionForPlot);

    if(m_pCtrl && nCount)
    {
        m_pCtrl->OnPlotDeleted();    //current element does not have any points anymore
    }

    nCount = uXBound - lXBound + 1;

    VARTYPE typeX, typeY;
    SafeArrayGetVartype(psaXVals, &typeX);
    SafeArrayGetVartype(psaYVals, &typeY);

    for(i=0; i< nCount; i++)
    {
        double x ,y;
        hr = GetDoubleElement(typeX, psaXVals, i, &x);
        if(FAILED(hr))
        {
            break;
        }
        hr = GetDoubleElement(typeY, psaYVals, i, &y);
        if(FAILED(hr))
        {
            break;
        }

        CElementPoint point(x, y);
        m_PointList.Add(point);

        if(min.x > point.x)
        {
            min.x = point.x ;
        }
        if(min.y > point.y)
        {
            min.y = point.y ;
        }
        if(max.x < point.x)
        {
            max.x = point.x ;
        }
        if(max.y < point.y)
        {
            max.y = point.y ;
        }

        if(m_pCtrl)
        {
            m_pCtrl->UpdateAutoRange(x, y,
                                     i == 0);    //TRUE only for first added point
        }
    }
    if(m_pCtrl) //redraw once for all added points
    {
        m_pCtrl->Refresh(FALSE);
    }

    return hr;
}