| | 1573 | void XYWnd::XY_LoadBackgroundImage(const char *name) |
|---|
| | 1574 | { |
|---|
| | 1575 | const char* relative = path_make_relative(name, GlobalFileSystem().findRoot(name)); |
|---|
| | 1576 | if (relative == name) |
|---|
| | 1577 | globalOutputStream() << "WARNING: could not extract the relative path, using full path instead\n"; |
|---|
| | 1578 | |
|---|
| | 1579 | char fileNameWithoutExt[512]; |
|---|
| | 1580 | strncpy(fileNameWithoutExt, relative, sizeof(fileNameWithoutExt) - 1); |
|---|
| | 1581 | fileNameWithoutExt[512 - 1] = '\0'; |
|---|
| | 1582 | fileNameWithoutExt[strlen(fileNameWithoutExt) - 4] = '\0'; |
|---|
| | 1583 | |
|---|
| | 1584 | Image *image = QERApp_LoadImage(0, fileNameWithoutExt); |
|---|
| | 1585 | if (!image) { |
|---|
| | 1586 | globalOutputStream() << "Could not load texture " << fileNameWithoutExt << "\n"; |
|---|
| | 1587 | return; |
|---|
| | 1588 | } |
|---|
| | 1589 | g_pParentWnd->ActiveXY()->m_tex = (qtexture_t*)malloc(sizeof(qtexture_t)); |
|---|
| | 1590 | LoadTextureRGBA(g_pParentWnd->ActiveXY()->XYWnd::m_tex, image->getRGBAPixels(), image->getWidth(), image->getHeight()); |
|---|
| | 1591 | globalOutputStream() << "Loaded background texture " << relative << "\n"; |
|---|
| | 1592 | g_pParentWnd->ActiveXY()->m_backgroundActivated = true; |
|---|
| | 1593 | |
|---|
| | 1594 | int m_ix, m_iy; |
|---|
| | 1595 | switch(g_pParentWnd->ActiveXY()->m_viewType) |
|---|
| | 1596 | { |
|---|
| | 1597 | case XY: |
|---|
| | 1598 | m_ix = 0; |
|---|
| | 1599 | m_iy = 1; |
|---|
| | 1600 | break; |
|---|
| | 1601 | case XZ: |
|---|
| | 1602 | m_ix = 0; |
|---|
| | 1603 | m_iy = 2; |
|---|
| | 1604 | break; |
|---|
| | 1605 | case YZ: |
|---|
| | 1606 | m_ix = 1; |
|---|
| | 1607 | m_iy = 2; |
|---|
| | 1608 | break; |
|---|
| | 1609 | } |
|---|
| | 1610 | |
|---|
| | 1611 | Vector3 min, max; |
|---|
| | 1612 | Select_GetBounds(min, max); |
|---|
| | 1613 | g_pParentWnd->ActiveXY()->m_xmin = min[m_ix]; |
|---|
| | 1614 | g_pParentWnd->ActiveXY()->m_ymin = min[m_iy]; |
|---|
| | 1615 | g_pParentWnd->ActiveXY()->m_xmax = max[m_ix]; |
|---|
| | 1616 | g_pParentWnd->ActiveXY()->m_ymax = max[m_iy]; |
|---|
| | 1617 | } |
|---|
| | 1618 | |
|---|
| | 1619 | void XYWnd::XY_DisableBackground (void) |
|---|
| | 1620 | { |
|---|
| | 1621 | g_pParentWnd->ActiveXY()->m_backgroundActivated = false; |
|---|
| | 1622 | if (g_pParentWnd->ActiveXY()->m_tex) |
|---|
| | 1623 | free(g_pParentWnd->ActiveXY()->m_tex); |
|---|
| | 1624 | g_pParentWnd->ActiveXY()->m_tex = NULL; |
|---|
| | 1625 | } |
|---|
| | 1626 | |
|---|
| | 1627 | void WXY_BackgroundSelect(void) |
|---|
| | 1628 | { |
|---|
| | 1629 | bool brushesSelected = Scene_countSelectedBrushes(GlobalSceneGraph()) != 0; |
|---|
| | 1630 | if (!brushesSelected) { |
|---|
| | 1631 | gtk_MessageBox(0, "You have to select some brushes to get the bounding box for.\n", |
|---|
| | 1632 | "No selection", eMB_OK, eMB_ICONERROR); |
|---|
| | 1633 | return; |
|---|
| | 1634 | } |
|---|
| | 1635 | |
|---|
| | 1636 | const char *filename = file_dialog(GTK_WIDGET(MainFrame_getWindow()), TRUE, "Background Image", NULL, NULL); |
|---|
| | 1637 | g_pParentWnd->ActiveXY()->XY_DisableBackground(); |
|---|
| | 1638 | if (filename) |
|---|
| | 1639 | g_pParentWnd->ActiveXY()->XY_LoadBackgroundImage(filename); |
|---|
| | 1640 | } |
|---|
| | 1641 | |
|---|
| 1578 | | void XYWnd::XY_DrawGrid() |
|---|
| 1579 | | { |
|---|
| 1580 | | float x, y, xb, xe, yb, ye; |
|---|
| 1581 | | float w, h; |
|---|
| 1582 | | char text[32]; |
|---|
| 1583 | | float step, minor_step, stepx, stepy; |
|---|
| 1584 | | step = minor_step = stepx = stepy = GetGridSize(); |
|---|
| 1585 | | |
|---|
| 1586 | | int minor_power = Grid_getPower(); |
|---|
| 1587 | | int mask; |
|---|
| 1588 | | |
|---|
| 1589 | | while((minor_step * m_fScale) <= 4.0f) // make sure minor grid spacing is at least 4 pixels on the screen |
|---|
| 1590 | | { |
|---|
| 1591 | | ++minor_power; |
|---|
| 1592 | | minor_step *= 2; |
|---|
| 1593 | | } |
|---|
| 1594 | | int power = minor_power; |
|---|
| 1595 | | while((power % 3) != 0 || (step * m_fScale) <= 32.0f) // make sure major grid spacing is at least 32 pixels on the screen |
|---|
| 1596 | | { |
|---|
| 1597 | | ++power; |
|---|
| 1598 | | step = float(two_to_the_power(power)); |
|---|
| 1599 | | } |
|---|
| 1600 | | mask = (1 << (power - minor_power)) - 1; |
|---|
| 1601 | | while ((stepx * m_fScale) <= 32.0f) // text step x must be at least 32 |
|---|
| 1602 | | stepx *= 2; |
|---|
| 1603 | | while ((stepy * m_fScale) <= 32.0f) // text step y must be at least 32 |
|---|
| 1604 | | stepy *= 2; |
|---|
| 1605 | | |
|---|
| 1606 | | |
|---|
| 1607 | | glDisable(GL_TEXTURE_2D); |
|---|
| 1608 | | glDisable(GL_TEXTURE_1D); |
|---|
| 1609 | | glDisable(GL_DEPTH_TEST); |
|---|
| 1610 | | glDisable(GL_BLEND); |
|---|
| 1611 | | glLineWidth(1); |
|---|
| 1612 | | |
|---|
| 1613 | | w = (m_nWidth / 2 / m_fScale); |
|---|
| 1614 | | h = (m_nHeight / 2 / m_fScale); |
|---|
| 1615 | | |
|---|
| 1616 | | int nDim1 = (m_viewType == YZ) ? 1 : 0; |
|---|
| 1617 | | int nDim2 = (m_viewType == XY) ? 1 : 2; |
|---|
| 1618 | | |
|---|
| 1619 | | xb = m_vOrigin[nDim1] - w; |
|---|
| 1620 | | if (xb < region_mins[nDim1]) |
|---|
| 1621 | | xb = region_mins[nDim1]; |
|---|
| 1622 | | xb = step * floor (xb/step); |
|---|
| 1623 | | |
|---|
| 1624 | | xe = m_vOrigin[nDim1] + w; |
|---|
| 1625 | | if (xe > region_maxs[nDim1]) |
|---|
| 1626 | | xe = region_maxs[nDim1]; |
|---|
| 1627 | | xe = step * ceil (xe/step); |
|---|
| 1628 | | |
|---|
| 1629 | | yb = m_vOrigin[nDim2] - h; |
|---|
| 1630 | | if (yb < region_mins[nDim2]) |
|---|
| 1631 | | yb = region_mins[nDim2]; |
|---|
| 1632 | | yb = step * floor (yb/step); |
|---|
| 1633 | | |
|---|
| 1634 | | ye = m_vOrigin[nDim2] + h; |
|---|
| 1635 | | if (ye > region_maxs[nDim2]) |
|---|
| 1636 | | ye = region_maxs[nDim2]; |
|---|
| 1637 | | ye = step * ceil (ye/step); |
|---|
| | 1661 | void XYWnd::XY_DrawAxis(void) |
|---|
| | 1662 | { |
|---|
| | 1663 | if ( g_xywindow_globals_private.show_axis) { |
|---|
| | 1664 | const char g_AxisName[3] = { 'X', 'Y', 'Z' }; |
|---|
| | 1665 | const int nDim1 = (m_viewType == YZ) ? 1 : 0; |
|---|
| | 1666 | const int nDim2 = (m_viewType == XY) ? 1 : 2; |
|---|
| | 1667 | const int w = (m_nWidth / 2 / m_fScale); |
|---|
| | 1668 | const int h = (m_nHeight / 2 / m_fScale); |
|---|
| | 1669 | |
|---|
| | 1670 | const Vector3& colourX = (m_viewType == YZ) ? g_xywindow_globals.AxisColorY : g_xywindow_globals.AxisColorX; |
|---|
| | 1671 | const Vector3& colourY = (m_viewType == XY) ? g_xywindow_globals.AxisColorY : g_xywindow_globals.AxisColorZ; |
|---|
| | 1672 | |
|---|
| | 1673 | // draw two lines with corresponding axis colors to highlight current view |
|---|
| | 1674 | // horizontal line: nDim1 color |
|---|
| | 1675 | glLineWidth(2); |
|---|
| | 1676 | glBegin( GL_LINES ); |
|---|
| | 1677 | glColor3fv (vector3_to_array(colourX)); |
|---|
| | 1678 | glVertex2f( m_vOrigin[nDim1] - w + 40 / m_fScale, m_vOrigin[nDim2] + h - 45 / m_fScale ); |
|---|
| | 1679 | glVertex2f( m_vOrigin[nDim1] - w + 65 / m_fScale, m_vOrigin[nDim2] + h - 45 / m_fScale ); |
|---|
| | 1680 | glVertex2f( 0, 0 ); |
|---|
| | 1681 | glVertex2f( 32 / m_fScale, 0 ); |
|---|
| | 1682 | glColor3fv (vector3_to_array(colourY)); |
|---|
| | 1683 | glVertex2f( m_vOrigin[nDim1] - w + 40 / m_fScale, m_vOrigin[nDim2] + h - 45 / m_fScale ); |
|---|
| | 1684 | glVertex2f( m_vOrigin[nDim1] - w + 40 / m_fScale, m_vOrigin[nDim2] + h - 20 / m_fScale ); |
|---|
| | 1685 | glVertex2f( 0, 0 ); |
|---|
| | 1686 | glVertex2f( 0, 32 / m_fScale ); |
|---|
| | 1687 | glEnd(); |
|---|
| | 1688 | glLineWidth(1); |
|---|
| | 1689 | // now print axis symbols |
|---|
| | 1690 | glColor3fv (vector3_to_array(colourX)); |
|---|
| | 1691 | glRasterPos2f ( m_vOrigin[nDim1] - w + 55 / m_fScale, m_vOrigin[nDim2] + h - 55 / m_fScale ); |
|---|
| | 1692 | GlobalOpenGL().drawChar(g_AxisName[nDim1]); |
|---|
| | 1693 | glRasterPos2f (28 / m_fScale, -10 / m_fScale ); |
|---|
| | 1694 | GlobalOpenGL().drawChar(g_AxisName[nDim1]); |
|---|
| | 1695 | glColor3fv (vector3_to_array(colourY)); |
|---|
| | 1696 | glRasterPos2f ( m_vOrigin[nDim1] - w + 25 / m_fScale, m_vOrigin[nDim2] + h - 30 / m_fScale ); |
|---|
| | 1697 | GlobalOpenGL().drawChar(g_AxisName[nDim2]); |
|---|
| | 1698 | glRasterPos2f ( -10 / m_fScale, 28 / m_fScale ); |
|---|
| | 1699 | GlobalOpenGL().drawChar(g_AxisName[nDim2]); |
|---|
| | 1700 | } |
|---|
| | 1701 | } |
|---|
| | 1702 | |
|---|
| | 1703 | void XYWnd::XY_DrawBackground(void) |
|---|
| | 1704 | { |
|---|
| | 1705 | glPushAttrib(GL_ALL_ATTRIB_BITS); |
|---|
| | 1706 | |
|---|
| | 1707 | glEnable(GL_TEXTURE_2D); |
|---|
| | 1708 | glEnable(GL_BLEND); |
|---|
| | 1709 | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
|---|
| | 1710 | glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); |
|---|
| | 1711 | glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); |
|---|
| | 1712 | glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); |
|---|
| | 1713 | |
|---|
| | 1714 | glPolygonMode(GL_FRONT, GL_FILL); |
|---|
| | 1715 | |
|---|
| | 1716 | glBindTexture(GL_TEXTURE_2D, m_tex->texture_number); |
|---|
| | 1717 | glBegin(GL_QUADS); |
|---|
| | 1718 | |
|---|
| | 1719 | glColor4f(1.0, 1.0, 1.0, m_alpha); |
|---|
| | 1720 | glTexCoord2f(0.0, 1.0); |
|---|
| | 1721 | glVertex2f(m_xmin, m_ymin); |
|---|
| | 1722 | |
|---|
| | 1723 | glTexCoord2f(1.0, 1.0); |
|---|
| | 1724 | glVertex2f(m_xmax, m_ymin); |
|---|
| | 1725 | |
|---|
| | 1726 | glTexCoord2f(1.0, 0.0); |
|---|
| | 1727 | glVertex2f(m_xmax, m_ymax); |
|---|
| | 1728 | |
|---|
| | 1729 | glTexCoord2f(0.0, 0.0); |
|---|
| | 1730 | glVertex2f(m_xmin, m_ymax); |
|---|
| | 1731 | |
|---|
| | 1732 | glEnd(); |
|---|
| | 1733 | glBindTexture(GL_TEXTURE_2D, 0); |
|---|
| | 1734 | |
|---|
| | 1735 | glPopAttrib(); |
|---|
| | 1736 | } |
|---|
| | 1737 | |
|---|
| | 1738 | void XYWnd::XY_DrawGrid(void) { |
|---|
| | 1739 | float x, y, xb, xe, yb, ye; |
|---|
| | 1740 | float w, h; |
|---|
| | 1741 | char text[32]; |
|---|
| | 1742 | float step, minor_step, stepx, stepy; |
|---|
| | 1743 | step = minor_step = stepx = stepy = GetGridSize(); |
|---|
| | 1744 | |
|---|
| | 1745 | int minor_power = Grid_getPower(); |
|---|
| | 1746 | int mask; |
|---|
| | 1747 | |
|---|
| | 1748 | while ((minor_step * m_fScale) <= 4.0f) { // make sure minor grid spacing is at least 4 pixels on the screen |
|---|
| | 1749 | ++minor_power; |
|---|
| | 1750 | minor_step *= 2; |
|---|
| | 1751 | } |
|---|
| | 1752 | int power = minor_power; |
|---|
| | 1753 | while ((power % 3) != 0 || (step * m_fScale) <= 32.0f) { // make sure major grid spacing is at least 32 pixels on the screen |
|---|
| | 1754 | ++power; |
|---|
| | 1755 | step = float(two_to_the_power(power)); |
|---|
| | 1756 | } |
|---|
| | 1757 | mask = (1 << (power - minor_power)) - 1; |
|---|
| | 1758 | while ((stepx * m_fScale) <= 32.0f) // text step x must be at least 32 |
|---|
| | 1759 | stepx *= 2; |
|---|
| | 1760 | while ((stepy * m_fScale) <= 32.0f) // text step y must be at least 32 |
|---|
| | 1761 | stepy *= 2; |
|---|
| | 1762 | |
|---|
| | 1763 | |
|---|
| | 1764 | glDisable(GL_TEXTURE_2D); |
|---|
| | 1765 | glDisable(GL_TEXTURE_1D); |
|---|
| | 1766 | glDisable(GL_DEPTH_TEST); |
|---|
| | 1767 | glDisable(GL_BLEND); |
|---|
| | 1768 | glLineWidth(1); |
|---|
| | 1769 | |
|---|
| | 1770 | w = (m_nWidth / 2 / m_fScale); |
|---|
| | 1771 | h = (m_nHeight / 2 / m_fScale); |
|---|
| | 1772 | |
|---|
| | 1773 | const int nDim1 = (m_viewType == YZ) ? 1 : 0; |
|---|
| | 1774 | const int nDim2 = (m_viewType == XY) ? 1 : 2; |
|---|
| | 1775 | |
|---|
| | 1776 | xb = m_vOrigin[nDim1] - w; |
|---|
| | 1777 | if (xb < region_mins[nDim1]) |
|---|
| | 1778 | xb = region_mins[nDim1]; |
|---|
| | 1779 | xb = step * floor (xb / step); |
|---|
| | 1780 | |
|---|
| | 1781 | xe = m_vOrigin[nDim1] + w; |
|---|
| | 1782 | if (xe > region_maxs[nDim1]) |
|---|
| | 1783 | xe = region_maxs[nDim1]; |
|---|
| | 1784 | xe = step * ceil (xe / step); |
|---|
| | 1785 | |
|---|
| | 1786 | yb = m_vOrigin[nDim2] - h; |
|---|
| | 1787 | if (yb < region_mins[nDim2]) |
|---|
| | 1788 | yb = region_mins[nDim2]; |
|---|
| | 1789 | yb = step * floor (yb / step); |
|---|
| | 1790 | |
|---|
| | 1791 | ye = m_vOrigin[nDim2] + h; |
|---|
| | 1792 | if (ye > region_maxs[nDim2]) |
|---|
| | 1793 | ye = region_maxs[nDim2]; |
|---|
| | 1794 | ye = step * ceil (ye / step); |
|---|
| 1644 | | // djbob |
|---|
| 1645 | | // draw minor blocks |
|---|
| 1646 | | if (g_xywindow_globals_private.d_showgrid) |
|---|
| 1647 | | { |
|---|
| 1648 | | if (COLORS_DIFFER(g_xywindow_globals.color_gridminor, g_xywindow_globals.color_gridback)) |
|---|
| 1649 | | { |
|---|
| 1650 | | glColor3fv(vector3_to_array(g_xywindow_globals.color_gridminor)); |
|---|
| 1651 | | |
|---|
| 1652 | | glBegin (GL_LINES); |
|---|
| 1653 | | int i = 0; |
|---|
| 1654 | | for (x = xb ; x < xe ; x += minor_step, ++i) |
|---|
| 1655 | | { |
|---|
| 1656 | | if((i & mask) != 0) |
|---|
| 1657 | | { |
|---|
| 1658 | | glVertex2f (x, yb); |
|---|
| 1659 | | glVertex2f (x, ye); |
|---|
| 1660 | | } |
|---|
| 1661 | | } |
|---|
| 1662 | | i = 0; |
|---|
| 1663 | | for (y = yb ; y < ye ; y += minor_step, ++i) |
|---|
| 1664 | | { |
|---|
| 1665 | | if((i & mask) != 0) |
|---|
| 1666 | | { |
|---|
| 1667 | | glVertex2f (xb, y); |
|---|
| 1668 | | glVertex2f (xe, y); |
|---|
| 1669 | | } |
|---|
| 1670 | | } |
|---|
| 1671 | | glEnd(); |
|---|
| 1672 | | } |
|---|
| 1673 | | |
|---|
| 1674 | | // draw major blocks |
|---|
| 1675 | | if (COLORS_DIFFER(g_xywindow_globals.color_gridmajor, g_xywindow_globals.color_gridback)) |
|---|
| 1676 | | { |
|---|
| 1677 | | glColor3fv(vector3_to_array(g_xywindow_globals.color_gridmajor)); |
|---|
| 1678 | | |
|---|
| 1679 | | glBegin (GL_LINES); |
|---|
| 1680 | | for (x=xb ; x<=xe ; x+=step) |
|---|
| 1681 | | { |
|---|
| 1682 | | glVertex2f (x, yb); |
|---|
| 1683 | | glVertex2f (x, ye); |
|---|
| 1684 | | } |
|---|
| 1685 | | for (y=yb ; y<=ye ; y+=step) |
|---|
| 1686 | | { |
|---|
| 1687 | | glVertex2f (xb, y); |
|---|
| 1688 | | glVertex2f (xe, y); |
|---|
| 1689 | | } |
|---|
| 1690 | | glEnd(); |
|---|
| 1691 | | } |
|---|
| 1692 | | } |
|---|
| 1693 | | |
|---|
| 1694 | | // draw coordinate text if needed |
|---|
| 1695 | | if ( g_xywindow_globals_private.show_coordinates) |
|---|
| 1696 | | { |
|---|
| 1697 | | glColor3fv(vector3_to_array(g_xywindow_globals.color_gridtext)); |
|---|
| | 1801 | // djbob |
|---|
| | 1802 | // draw minor blocks |
|---|
| | 1803 | if (g_xywindow_globals_private.d_showgrid) { |
|---|
| | 1804 | if (COLORS_DIFFER(g_xywindow_globals.color_gridminor, g_xywindow_globals.color_gridback)) { |
|---|
| | 1805 | glColor3fv(vector3_to_array(g_xywindow_globals.color_gridminor)); |
|---|
| | 1806 | |
|---|
| | 1807 | glBegin (GL_LINES); |
|---|
| | 1808 | int i = 0; |
|---|
| | 1809 | for (x = xb ; x < xe ; x += minor_step, ++i) { |
|---|
| | 1810 | if ((i & mask) != 0) { |
|---|
| | 1811 | glVertex2f (x, yb); |
|---|
| | 1812 | glVertex2f (x, ye); |
|---|
| | 1813 | } |
|---|
| | 1814 | } |
|---|
| | 1815 | i = 0; |
|---|
| | 1816 | for (y = yb ; y < ye ; y += minor_step, ++i) { |
|---|
| | 1817 | if ((i & mask) != 0) { |
|---|
| | 1818 | glVertex2f (xb, y); |
|---|
| | 1819 | glVertex2f (xe, y); |
|---|
| | 1820 | } |
|---|
| | 1821 | } |
|---|
| | 1822 | glEnd(); |
|---|
| | 1823 | } |
|---|
| | 1824 | |
|---|
| | 1825 | // draw major blocks |
|---|
| | 1826 | if (COLORS_DIFFER(g_xywindow_globals.color_gridmajor, g_xywindow_globals.color_gridback)) { |
|---|
| | 1827 | glColor3fv(vector3_to_array(g_xywindow_globals.color_gridmajor)); |
|---|
| | 1828 | |
|---|
| | 1829 | glBegin (GL_LINES); |
|---|
| | 1830 | for (x = xb ; x <= xe ; x += step) { |
|---|
| | 1831 | glVertex2f (x, yb); |
|---|
| | 1832 | glVertex2f (x, ye); |
|---|
| | 1833 | } |
|---|
| | 1834 | for (y = yb ; y <= ye ; y += step) { |
|---|
| | 1835 | glVertex2f (xb, y); |
|---|
| | 1836 | glVertex2f (xe, y); |
|---|
| | 1837 | } |
|---|
| | 1838 | glEnd(); |
|---|
| | 1839 | } |
|---|
| | 1840 | } |
|---|
| | 1841 | |
|---|
| | 1842 | // draw coordinate text if needed |
|---|
| | 1843 | if ( g_xywindow_globals_private.show_coordinates) { |
|---|
| | 1844 | glColor3fv(vector3_to_array(g_xywindow_globals.color_gridtext)); |
|---|
| 1712 | | if (Active()) |
|---|
| 1713 | | glColor3fv(vector3_to_array(g_xywindow_globals.color_viewname)); |
|---|
| 1714 | | |
|---|
| 1715 | | // we do this part (the old way) only if show_axis is disabled |
|---|
| 1716 | | if (!g_xywindow_globals_private.show_axis) |
|---|
| 1717 | | { |
|---|
| 1718 | | glRasterPos2f ( m_vOrigin[nDim1] - w + 35 / m_fScale, m_vOrigin[nDim2] + h - 20 / m_fScale ); |
|---|
| 1719 | | |
|---|
| 1720 | | GlobalOpenGL().drawString(ViewType_getTitle(m_viewType)); |
|---|
| 1721 | | } |
|---|
| 1722 | | } |
|---|
| 1723 | | |
|---|
| 1724 | | if ( g_xywindow_globals_private.show_axis) |
|---|
| 1725 | | { |
|---|
| 1726 | | const char g_AxisName[3] = { 'X', 'Y', 'Z' }; |
|---|
| 1727 | | |
|---|
| 1728 | | const Vector3& colourX = (m_viewType == YZ) ? g_xywindow_globals.AxisColorY : g_xywindow_globals.AxisColorX; |
|---|
| 1729 | | const Vector3& colourY = (m_viewType == XY) ? g_xywindow_globals.AxisColorY : g_xywindow_globals.AxisColorZ; |
|---|
| 1730 | | |
|---|
| 1731 | | // draw two lines with corresponding axis colors to highlight current view |
|---|
| 1732 | | // horizontal line: nDim1 color |
|---|
| 1733 | | glLineWidth(2); |
|---|
| 1734 | | glBegin( GL_LINES ); |
|---|
| 1735 | | glColor3fv (vector3_to_array(colourX)); |
|---|
| 1736 | | glVertex2f( m_vOrigin[nDim1] - w + 40 / m_fScale, m_vOrigin[nDim2] + h - 45 / m_fScale ); |
|---|
| 1737 | | glVertex2f( m_vOrigin[nDim1] - w + 65 / m_fScale, m_vOrigin[nDim2] + h - 45 / m_fScale ); |
|---|
| 1738 | | glVertex2f( 0, 0 ); |
|---|
| 1739 | | glVertex2f( 32 / m_fScale, 0 ); |
|---|
| 1740 | | glColor3fv (vector3_to_array(colourY)); |
|---|
| 1741 | | glVertex2f( m_vOrigin[nDim1] - w + 40 / m_fScale, m_vOrigin[nDim2] + h - 45 / m_fScale ); |
|---|
| 1742 | | glVertex2f( m_vOrigin[nDim1] - w + 40 / m_fScale, m_vOrigin[nDim2] + h - 20 / m_fScale ); |
|---|
| 1743 | | glVertex2f( 0, 0 ); |
|---|
| 1744 | | glVertex2f( 0, 32 / m_fScale ); |
|---|
| 1745 | | glEnd(); |
|---|
| 1746 | | glLineWidth(1); |
|---|
| 1747 | | // now print axis symbols |
|---|
| 1748 | | glColor3fv (vector3_to_array(colourX)); |
|---|
| 1749 | | glRasterPos2f ( m_vOrigin[nDim1] - w + 55 / m_fScale, m_vOrigin[nDim2] + h - 55 / m_fScale ); |
|---|
| 1750 | | GlobalOpenGL().drawChar(g_AxisName[nDim1]); |
|---|
| 1751 | | glRasterPos2f (28 / m_fScale, -10 / m_fScale ); |
|---|
| 1752 | | GlobalOpenGL().drawChar(g_AxisName[nDim1]); |
|---|
| 1753 | | glColor3fv (vector3_to_array(colourY)); |
|---|
| 1754 | | glRasterPos2f ( m_vOrigin[nDim1] - w + 25 / m_fScale, m_vOrigin[nDim2] + h - 30 / m_fScale ); |
|---|
| 1755 | | GlobalOpenGL().drawChar(g_AxisName[nDim2]); |
|---|
| 1756 | | glRasterPos2f ( -10 / m_fScale, 28 / m_fScale ); |
|---|
| 1757 | | GlobalOpenGL().drawChar(g_AxisName[nDim2]); |
|---|
| 1758 | | |
|---|
| 1759 | | } |
|---|
| 1760 | | |
|---|
| 1761 | | // show current work zone? |
|---|
| 1762 | | // the work zone is used to place dropped points and brushes |
|---|
| 1763 | | if (g_xywindow_globals_private.d_show_work) |
|---|
| 1764 | | { |
|---|
| 1765 | | glColor3f( 1.0f, 0.0f, 0.0f ); |
|---|
| 1766 | | glBegin( GL_LINES ); |
|---|
| 1767 | | glVertex2f( xb, Select_getWorkZone().d_work_min[nDim2] ); |
|---|
| 1768 | | glVertex2f( xe, Select_getWorkZone().d_work_min[nDim2] ); |
|---|
| 1769 | | glVertex2f( xb, Select_getWorkZone().d_work_max[nDim2] ); |
|---|
| 1770 | | glVertex2f( xe, Select_getWorkZone().d_work_max[nDim2] ); |
|---|
| 1771 | | glVertex2f( Select_getWorkZone().d_work_min[nDim1], yb ); |
|---|
| 1772 | | glVertex2f( Select_getWorkZone().d_work_min[nDim1], ye ); |
|---|
| 1773 | | glVertex2f( Select_getWorkZone().d_work_max[nDim1], yb ); |
|---|
| 1774 | | glVertex2f( Select_getWorkZone().d_work_max[nDim1], ye ); |
|---|
| 1775 | | glEnd(); |
|---|
| 1776 | | } |
|---|
| | 1857 | if (Active()) |
|---|
| | 1858 | glColor3fv(vector3_to_array(g_xywindow_globals.color_viewname)); |
|---|
| | 1859 | |
|---|
| | 1860 | // we do this part (the old way) only if show_axis is disabled |
|---|
| | 1861 | if (!g_xywindow_globals_private.show_axis) { |
|---|
| | 1862 | glRasterPos2f ( m_vOrigin[nDim1] - w + 35 / m_fScale, m_vOrigin[nDim2] + h - 20 / m_fScale ); |
|---|
| | 1863 | |
|---|
| | 1864 | GlobalOpenGL().drawString(ViewType_getTitle(m_viewType)); |
|---|
| | 1865 | } |
|---|
| | 1866 | } |
|---|
| | 1867 | |
|---|
| | 1868 | XYWnd::XY_DrawAxis(); |
|---|
| | 1869 | |
|---|
| | 1870 | // show current work zone? |
|---|
| | 1871 | // the work zone is used to place dropped points and brushes |
|---|
| | 1872 | if (g_xywindow_globals_private.d_show_work) { |
|---|
| | 1873 | glColor3f( 1.0f, 0.0f, 0.0f ); |
|---|
| | 1874 | glBegin( GL_LINES ); |
|---|
| | 1875 | glVertex2f( xb, Select_getWorkZone().d_work_min[nDim2] ); |
|---|
| | 1876 | glVertex2f( xe, Select_getWorkZone().d_work_min[nDim2] ); |
|---|
| | 1877 | glVertex2f( xb, Select_getWorkZone().d_work_max[nDim2] ); |
|---|
| | 1878 | glVertex2f( xe, Select_getWorkZone().d_work_max[nDim2] ); |
|---|
| | 1879 | glVertex2f( Select_getWorkZone().d_work_min[nDim1], yb ); |
|---|
| | 1880 | glVertex2f( Select_getWorkZone().d_work_min[nDim1], ye ); |
|---|
| | 1881 | glVertex2f( Select_getWorkZone().d_work_max[nDim1], yb ); |
|---|
| | 1882 | glVertex2f( Select_getWorkZone().d_work_max[nDim1], ye ); |
|---|
| | 1883 | glEnd(); |
|---|
| | 1884 | } |
|---|