##############################################################################
# ThanCad 0.0.9 "DoesSomething": 2dimensional CAD with raster support for engineers.
#
# Copyright (c) 2001-2009 Thanasis Stamos, August 23, 2009
# URL: http://thancad.sourceforge.net
# e-mail: cyberthanasis@excite.com
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details (www.gnu.org/licenses/gpl.html).
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
"""\
ThanCad 0.0.9 "DoesSomething": 2dimensional CAD with raster support for engineers.
Package which processes commands entered by the user.
This module processes commands for educational purposes.
"""
from math import fabs
import thandr, thancomsel
from thanvar import Canc
from thantkdia import ThanElemtext
from thantrans import T
from thancommod import thanModCanc,thanModEnd
from thansupport import thanToplayerCurrent
from selutil import thanSel2lines,thanSel2linesOrder,thanSelMultlinesOrder
from thancomfile import thanCofopen
def thanEduRect(proj):
"Draws a closed line in the shape of a rectangle associates with text."
c1 = proj[2].thanGudGetPoint(T["First point: "])
if c1 == Canc: return # Rectangle cancelled
c2 = proj[2].thanGudGetRect(c1, T["Second point: "])
if c2 == Canc: return # Rectangle cancelled
x1, y1 = c1[:2]
x2, y2 = c2[:2]
if x2 > x1: x1, x2 = x2, x1
if y2 > y1: y1, y2 = y2, y1
c1[:2] = x1, y1
c2 = list(c1); c2[:2] = x2, y1
c3 = list(c1); c3[:2] = x2, y2
c4 = list(c1); c4[:2] = x1, y2
elem = thandr.ThanLine()
elem.thanSet([c1, c2, c3, c4, c1])
elem.thanTags = ("e0", )
elem.thanTkDraw(proj[2].than)
win = ThanElemtext(proj[2], [None, ""], cargo=proj)
proj[2].thanTkSetFocus()
if win.result == None:
proj[2].thanCanvas.delete("e0")
return proj[2].thanGudCommandCan()
try: elem.thanCargo
except: elem.thanCargo = {}
elem.thanCargo["edu"] = win.result[1]
proj[2].thanCanvas.delete("e0")
proj[1].thanElementAdd(elem)
elem.thanTkDraw(proj[2].than)
proj[1].thanEdus[elem] = True
proj[2].thanGudCommandEnd()
def thanEduEdit(proj):
"Edit the associated text with a ThanCad element."
proj[2].thanSelems.clear()
proj[2].thanSelems.update(proj[1].thanEdus.keys())
elem = proj[2].thanGudGetSnapElem(T["Choose site to edit: "])
proj[2].thanSelems.clear()
if elem == Canc: return proj[2].thanGudCommandCan()
t = elem.thanCargo["edu"]
win = ThanElemtext(proj[2], [None, t], cargo=proj)
proj[2].thanTkSetFocus()
if win.result == None: return proj[2].thanGudCommandCan()
elem.thanCargo["edu"] = win.result[1]
proj[2].thanGudCommandEnd()
def thanEduPointProject(proj):
"Transforms points with a computed transformation/projection."
L = thanCofopen(proj)
if L == Canc: return thanModCanc(proj) # Transform was cancelled
proj[2].thanCom.thanAppend(T["Select points to transform:\n"], "info1")
res = thancomsel.thanSelectGen(proj, standalone=False, filter=lambda e: isinstance(e, thandr.ThanPoint))
if res == Canc: return thanModCanc(proj) # Transform was cancelled
for e in proj[2].thanSelall:
cp = L.project(e.cp)
en = thandr.ThanPoint()
en.thanSet(cp)
proj[1].thanElementAdd(e)
en.thanTkDraw(proj[2].than)
thanModEnd(proj)
|