Merge branch 'master' into cmake

This commit is contained in:
Sam Edwards 2018-08-14 21:59:45 -06:00
commit 2ab77d9a27
1505 changed files with 11589 additions and 6452 deletions

1
.gitignore vendored
View File

@ -59,3 +59,4 @@ __pycache__/
# Test tool cache directories
.tox/
.cache/
.pytest_cache/

View File

@ -72,4 +72,4 @@ notifications:
on_success: change
on_failure: always
use_notice: true
skip_join: true
skip_join: false

View File

@ -13,6 +13,10 @@
#include "aiBehaviors.h"
using std::cout;
using std::endl;
using std::string;
static const float _PI = 3.14;
AIBehaviors::AIBehaviors() {

View File

@ -13,7 +13,7 @@
#include "aiCharacter.h"
AICharacter::AICharacter(string model_name, NodePath model_np, double mass, double movt_force, double max_force) {
AICharacter::AICharacter(std::string model_name, NodePath model_np, double mass, double movt_force, double max_force) {
_name = model_name;
_ai_char_np = model_np;

View File

@ -74,7 +74,7 @@ void PathFinder::generate_path() {
add_to_clist(nxt_node);
}
}
cout<<"DESTINATION NOT REACHABLE MATE!"<<endl;
std::cout << "DESTINATION NOT REACHABLE MATE!" << std::endl;
_closed_list.clear();
}

View File

@ -14,7 +14,7 @@
#include "aiWorld.h"
AIWorld::AIWorld(NodePath render) {
_render = move(render);
_render = std::move(render);
}
AIWorld::~AIWorld() {
@ -26,7 +26,7 @@ void AIWorld::add_ai_char(AICharacter *ai_char) {
ai_char->_world = this;
}
void AIWorld::remove_ai_char(string name) {
void AIWorld::remove_ai_char(std::string name) {
AICharPool::iterator it;
for (it = _ai_char_pool.begin(); it != _ai_char_pool.end(); ++it) {
AICharacter *ai_char = *it;
@ -38,10 +38,10 @@ void AIWorld::remove_ai_char(string name) {
}
}
remove_ai_char_from_flock(move(name));
remove_ai_char_from_flock(std::move(name));
}
void AIWorld::remove_ai_char_from_flock(string name) {
void AIWorld::remove_ai_char_from_flock(std::string name) {
for (AICharacter *ai_char : _ai_char_pool) {
for (Flock *flock : _flock_pool) {
if (ai_char->_ai_char_flock_id == flock->get_id()) {
@ -62,7 +62,7 @@ void AIWorld::remove_ai_char_from_flock(string name) {
*/
void AIWorld::print_list() {
for (AICharacter *ai_char : _ai_char_pool) {
cout << ai_char->_name << endl;
std::cout << ai_char->_name << std::endl;
}
}

View File

@ -77,7 +77,7 @@ LVecBase3 Arrival::do_arrival() {
return(desired_force);
}
cout<<"Arrival works only with seek and pursue"<<endl;
std::cout << "Arrival works only with seek and pursue" << std::endl;
return(LVecBase3(0.0, 0.0, 0.0));
}

View File

@ -13,6 +13,10 @@
#include "pathFind.h"
using std::cout;
using std::endl;
using std::string;
PathFind::PathFind(AICharacter *ai_ch) {
_ai_char = ai_ch;
@ -68,7 +72,7 @@ void PathFind::create_nav_mesh(const char* navmesh_filename) {
// Begin reading data from the file.
while(!nav_mesh_file.eof()) {
getline(nav_mesh_file, line);
stringstream linestream (line);
std::stringstream linestream (line);
// Stores all the data members in the line to the array. Data
// structure:
@ -125,7 +129,7 @@ void PathFind::assign_neighbor_nodes(const char* navmesh_filename){
while(!nav_mesh_file.eof()) {
getline(nav_mesh_file, ln); // Gets main node data only. No neighbor nodes.
stringstream linestream (ln);
std::stringstream linestream (ln);
for(int i = 0; i < 10; ++i) {
getline(linestream, fields[i], ',');
}
@ -135,7 +139,7 @@ void PathFind::assign_neighbor_nodes(const char* navmesh_filename){
gd_y = atoi(fields[3].c_str());
for(int i = 0; i < 8; ++i) {
getline(nav_mesh_file, ln); // Gets neighbor node data only. No main nodes.
stringstream linestream_n (ln);
std::stringstream linestream_n (ln);
for(int j = 0; j < 10; ++j) {
getline(linestream_n, fields_n[j], ',');
}

View File

@ -23,7 +23,7 @@ void PathFollow::add_to_path(LVecBase3 pos) {
/**
* This function initiates the path follow behavior.
*/
void PathFollow::start(string type) {
void PathFollow::start(std::string type) {
_type = type;
_start = true;
if(_path.size() > 0) {

View File

@ -57,13 +57,13 @@ GPUCommand::GPUCommand(CommandType command_type) {
* in mind that integers might be shown in their binary float representation,
* depending on the setting in the GPUCommand::convert_int_to_float method.
*/
void GPUCommand::write(ostream &out) const {
out << "GPUCommand(type=" << _command_type << ", size=" << _current_index << ", data = {" << endl;
void GPUCommand::write(std::ostream &out) const {
out << "GPUCommand(type=" << _command_type << ", size=" << _current_index << ", data = {" << std::endl;
for (size_t k = 0; k < GPU_COMMAND_ENTRIES; ++k) {
out << std::setw(12) << std::fixed << std::setprecision(5) << _data[k] << " ";
if (k % 6 == 5 || k == GPU_COMMAND_ENTRIES - 1) out << endl;
if (k % 6 == 5 || k == GPU_COMMAND_ENTRIES - 1) out << std::endl;
}
out << "})" << endl;
out << "})" << std::endl;
}
/**

View File

@ -141,7 +141,7 @@ float IESDataset::get_candela_value(float vertical_angle, float horizontal_angle
iesdataset_cat.error() << "Invalid horizontal lerp: " << lerp
<< ", requested angle was " << horizontal_angle
<< ", prev = " << prev_angle << ", cur = " << curr_angle
<< endl;
<< std::endl;
}
return curr_value * lerp + prev_value * (1-lerp);
@ -192,7 +192,7 @@ float IESDataset::get_vertical_candela_value(size_t horizontal_angle_idx, float
iesdataset_cat.error() << "ERROR: Invalid vertical lerp: " << lerp
<< ", requested angle was " << vertical_angle
<< ", prev = " << prev_angle << ", cur = " << curr_angle
<< endl;
<< std::endl;
}
return curr_value * lerp + prev_value * (1-lerp);

View File

@ -29,6 +29,8 @@
#include <algorithm>
using std::endl;
NotifyCategoryDef(lightmgr, "");
@ -133,7 +135,7 @@ void InternalLightManager::setup_shadows(RPLight* light) {
}
// Init all sources
for (int i = 0; i < num_sources; ++i) {
for (size_t i = 0; i < num_sources; ++i) {
ShadowSource* source = light->get_shadow_source(i);
// Set the source as dirty, so it gets updated in the beginning
@ -355,7 +357,7 @@ bool InternalLightManager::compare_shadow_sources(const ShadowSource* a, const S
void InternalLightManager::update_shadow_sources() {
// Find all dirty shadow sources and make a list of them
vector<ShadowSource*> sources_to_update;
std::vector<ShadowSource*> sources_to_update;
for (auto iter = _shadow_sources.begin(); iter != _shadow_sources.end(); ++iter) {
ShadowSource* source = *iter;
if (source) {
@ -393,7 +395,7 @@ void InternalLightManager::update_shadow_sources() {
// Free the regions of all sources which will get updated. We have to take into
// account that only a limited amount of sources can get updated per frame.
size_t update_slots = min(sources_to_update.size(),
size_t update_slots = std::min(sources_to_update.size(),
_shadow_manager->get_num_update_slots_left());
for(size_t i = 0; i < update_slots; ++i) {
if (sources_to_update[i]->has_region()) {

View File

@ -170,7 +170,7 @@ public:
_num_entries--;
// Update maximum index
if (slot == _max_index) {
if ((int)slot == _max_index) {
while (_max_index >= 0 && !_data[_max_index--]);
}
}

View File

@ -33,7 +33,7 @@
*
* @return Amount of shadow sources
*/
inline int RPLight::get_num_shadow_sources() const {
inline size_t RPLight::get_num_shadow_sources() const {
return _shadow_sources.size();
}

View File

@ -57,7 +57,7 @@ public:
virtual void update_shadow_sources() = 0;
virtual void write_to_command(GPUCommand &cmd);
inline int get_num_shadow_sources() const;
inline size_t get_num_shadow_sources() const;
inline ShadowSource* get_shadow_source(size_t index) const;
inline void clear_shadow_sources();

View File

@ -131,13 +131,13 @@ LVecBase4i ShadowAtlas::find_and_reserve_region(size_t tile_width, size_t tile_h
// Check for empty region
if (tile_width < 1 || tile_height < 1) {
shadowatlas_cat.error() << "Called find_and_reserve_region with null-region!" << endl;
shadowatlas_cat.error() << "Called find_and_reserve_region with null-region!" << std::endl;
return LVecBase4i(-1);
}
// Check for region bigger than the shadow atlas
if (tile_width > _num_tiles || tile_height > _num_tiles) {
shadowatlas_cat.error() << "Requested region exceeds shadow atlas size!" << endl;
shadowatlas_cat.error() << "Requested region exceeds shadow atlas size!" << std::endl;
return LVecBase4i(-1);
}
@ -155,7 +155,7 @@ LVecBase4i ShadowAtlas::find_and_reserve_region(size_t tile_width, size_t tile_h
// When we reached this part, we couldn't find a free region, so the atlas
// seems to be full.
shadowatlas_cat.error() << "Failed to find a free region of size " << tile_width
<< " x " << tile_height << "!" << endl;
<< " x " << tile_height << "!" << std::endl;
return LVecBase4i(-1);
}
@ -173,12 +173,12 @@ LVecBase4i ShadowAtlas::find_and_reserve_region(size_t tile_width, size_t tile_h
void ShadowAtlas::free_region(const LVecBase4i& region) {
// Out of bounds check, can't hurt
nassertv(region.get_x() >= 0 && region.get_y() >= 0);
nassertv(region.get_x() + region.get_z() <= _num_tiles && region.get_y() + region.get_w() <= _num_tiles);
nassertv(region.get_x() + region.get_z() <= (int)_num_tiles && region.get_y() + region.get_w() <= (int)_num_tiles);
_num_used_tiles -= region.get_z() * region.get_w();
for (size_t x = 0; x < region.get_z(); ++x) {
for (size_t y = 0; y < region.get_w(); ++y) {
for (int x = 0; x < region.get_z(); ++x) {
for (int y = 0; y < region.get_w(); ++y) {
// Could do an assert here, that the tile should have been used (=true) before
set_tile(region.get_x() + x, region.get_y() + y, false);
}

View File

@ -27,6 +27,8 @@
#include "tagStateManager.h"
using std::endl;
NotifyCategoryDef(tagstatemgr, "");
@ -77,7 +79,7 @@ TagStateManager::
*/
void TagStateManager::
apply_state(StateContainer& container, NodePath np, Shader* shader,
const string &name, int sort) {
const std::string &name, int sort) {
if (tagstatemgr_cat.is_spam()) {
tagstatemgr_cat.spam() << "Constructing new state " << name
<< " with shader " << shader << endl;

View File

@ -36,7 +36,7 @@ class MetadataPanel(AppShell,Pmw.MegaWidget):
def appInit(self):
print "Metadata Panel"
print("Metadata Panel")
def createInterface(self):
interior = self.interior()

View File

@ -6,8 +6,16 @@ from direct.tkwidgets.AppShell import AppShell
from direct.tkwidgets.VectorWidgets import ColorEntry
from direct.showbase.TkGlobal import spawnTkLoop
import seSceneGraphExplorer
from Tkinter import Frame, IntVar, Checkbutton, Toplevel
import Pmw, Tkinter
import Pmw, sys
if sys.version_info >= (3, 0):
from tkinter import Frame, IntVar, Checkbutton, Toplevel
import tkinter
else:
from Tkinter import Frame, IntVar, Checkbutton, Toplevel
import Tkinter as tkinter
class sideWindow(AppShell):
#################################################################
@ -65,7 +73,7 @@ class sideWindow(AppShell):
self.parent.resizable(False,False) ## Disable the ability to resize for this Window.
def appInit(self):
print '----SideWindow is Initialized!!'
print('----SideWindow is Initialized!!')
def createInterface(self):
# The interior of the toplevel panel
@ -73,7 +81,7 @@ class sideWindow(AppShell):
mainFrame = Frame(interior)
## Creat NoteBook
self.notebookFrame = Pmw.NoteBook(mainFrame)
self.notebookFrame.pack(fill=Tkinter.BOTH,expand=1)
self.notebookFrame.pack(fill=tkinter.BOTH,expand=1)
sgePage = self.notebookFrame.add('Tree Graph')
envPage = self.notebookFrame.add('World Setting')
self.notebookFrame['raisecommand'] = self.updateInfo
@ -83,7 +91,7 @@ class sideWindow(AppShell):
sgePage, nodePath = render,
scrolledCanvas_hull_width = 270,
scrolledCanvas_hull_height = 570)
self.SGE.pack(fill = Tkinter.BOTH, expand = 0)
self.SGE.pack(fill = tkinter.BOTH, expand = 0)
## World Setting Page
envPage = Frame(envPage)
@ -95,8 +103,8 @@ class sideWindow(AppShell):
text = 'Enable Lighting',
variable = self.LightingVar,
command = self.toggleLights)
self.LightingButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.LightingButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.CollisionVar = IntVar()
@ -106,8 +114,8 @@ class sideWindow(AppShell):
text = 'Show Collision Object',
variable = self.CollisionVar,
command = self.showCollision)
self.CollisionButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.CollisionButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.ParticleVar = IntVar()
@ -117,8 +125,8 @@ class sideWindow(AppShell):
text = 'Show Particle Dummy',
variable = self.ParticleVar,
command = self.enableParticle)
self.ParticleButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.ParticleButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.baseUseDriveVar = IntVar()
@ -128,8 +136,8 @@ class sideWindow(AppShell):
text = 'Enable base.usedrive',
variable = self.baseUseDriveVar,
command = self.enablebaseUseDrive)
self.baseUseDriveButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.baseUseDriveButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.backfaceVar = IntVar()
@ -139,8 +147,8 @@ class sideWindow(AppShell):
text = 'Enable BackFace',
variable = self.backfaceVar,
command = self.toggleBackface)
self.backfaceButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.backfaceButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.textureVar = IntVar()
@ -150,8 +158,8 @@ class sideWindow(AppShell):
text = 'Enable Texture',
variable = self.textureVar,
command = self.toggleTexture)
self.textureButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.textureButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.wireframeVar = IntVar()
@ -161,8 +169,8 @@ class sideWindow(AppShell):
text = 'Enable Wireframe',
variable = self.wireframeVar,
command = self.toggleWireframe)
self.wireframeButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.wireframeButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.gridVar = IntVar()
@ -172,8 +180,8 @@ class sideWindow(AppShell):
text = 'Enable Grid',
variable = self.gridVar,
command = self.toggleGrid)
self.gridButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.gridButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.widgetVisVar = IntVar()
@ -183,8 +191,8 @@ class sideWindow(AppShell):
text = 'Enable WidgetVisible',
variable = self.widgetVisVar,
command = self.togglewidgetVis)
self.widgetVisButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.widgetVisButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.enableAutoCameraVar = IntVar()
@ -194,17 +202,17 @@ class sideWindow(AppShell):
text = 'Enable Auto Camera Movement for Loading Objects',
variable = self.enableAutoCameraVar,
command = self.toggleAutoCamera)
self.enableAutoCameraButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.enableAutoCameraButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.backgroundColor = ColorEntry(
pageFrame, text = 'BG Color', value=self.worldColor)
self.backgroundColor['command'] = self.setBackgroundColorVec
self.backgroundColor['resetValue'] = [0,0,0,0]
self.backgroundColor.pack(side=Tkinter.LEFT, expand=False)
self.backgroundColor.pack(side=tkinter.LEFT, expand=False)
self.bind(self.backgroundColor, 'Set background color')
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
envPage.pack(expand=False)
@ -320,11 +328,11 @@ class sideWindow(AppShell):
#
#################################################################
if self.enableBaseUseDrive==0:
print 'Enabled'
print('Enabled')
base.useDrive()
self.enableBaseUseDrive = 1
else:
print 'disabled'
print('disabled')
#base.useTrackball()
base.disableMouse()
self.enableBaseUseDrive = 0

View File

@ -9,9 +9,8 @@ from seColorEntry import *
from direct.tkwidgets import VectorWidgets
from direct.tkwidgets import Floater
from direct.tkwidgets import Slider
from Tkinter import *
import string, math, types
from pandac.PandaModules import *
from panda3d.core import *
class collisionWindow(AppShell):
@ -195,7 +194,7 @@ class collisionWindow(AppShell):
# put the object into a CollisionNode and attach it to the target nodePath
#################################################################
collisionObject = None
print self.objType
print(self.objType)
if self.objType=='collisionPolygon':
pointA = Point3(float(self.widgetDict['PolygonPoint A'][0]._entry.get()),
float(self.widgetDict['PolygonPoint A'][1]._entry.get()),
@ -236,7 +235,7 @@ class collisionWindow(AppShell):
float(self.widgetDict['RayDirection'][1]._entry.get()),
float(self.widgetDict['RayDirection'][2]._entry.get()))
print vector, point
print(vector, point)
collisionObject = CollisionRay()
collisionObject.setOrigin(point)

View File

@ -4,8 +4,14 @@
#################################################################
from direct.tkwidgets.AppShell import AppShell
from Tkinter import Frame, Label, Button
import string, Pmw, Tkinter
import sys, Pmw
if sys.version_info >= (3, 0):
from tkinter import Frame, Label, Button
import tkinter
else:
from Tkinter import Frame, Label, Button
import Tkinter as tkinter
# Define the Category
KEYBOARD = 'Keyboard-'
@ -75,11 +81,11 @@ class controllerWindow(AppShell):
self.cotrollerTypeEntry = self.createcomponent(
'Controller Type', (), None,
Pmw.ComboBox, (frame,),
labelpos = Tkinter.W, label_text='Controller Type:', entry_width = 20,entry_state = Tkinter.DISABLED,
labelpos = tkinter.W, label_text='Controller Type:', entry_width = 20,entry_state = tkinter.DISABLED,
selectioncommand = self.setControllerType,
scrolledlist_items = self.controllerList)
self.cotrollerTypeEntry.pack(side=Tkinter.LEFT)
frame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=False, pady = 3)
self.cotrollerTypeEntry.pack(side=tkinter.LEFT)
frame.pack(side=tkinter.TOP, fill=tkinter.X, expand=False, pady = 3)
self.cotrollerTypeEntry.selectitem('Keyboard', setentry=True)
self.inputZone = Pmw.Group(mainFrame, tag_pyclass = None)
@ -102,7 +108,7 @@ class controllerWindow(AppShell):
keyboardPage = self.objNotebook.add('Keyboard')
tarckerPage = self.objNotebook.add('Tracker')
self.objNotebook.selectpage('Keyboard')
self.objNotebook.pack(side = Tkinter.TOP, fill='both',expand=False)
self.objNotebook.pack(side = tkinter.TOP, fill='both',expand=False)
# Put this here so it isn't called right away
self.objNotebook['raisecommand'] = self.updateControlInfo
@ -113,11 +119,11 @@ class controllerWindow(AppShell):
widget = self.createcomponent(
'Target Type', (), None,
Pmw.ComboBox, (Interior,),
labelpos = Tkinter.W, label_text='Target Object:', entry_width = 20, entry_state = Tkinter.DISABLED,
labelpos = tkinter.W, label_text='Target Object:', entry_width = 20, entry_state = tkinter.DISABLED,
selectioncommand = self.setTargetObj,
scrolledlist_items = self.listOfObj)
widget.pack(side=Tkinter.LEFT, padx=3)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 5)
widget.pack(side=tkinter.LEFT, padx=3)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 5)
widget.selectitem(self.nameOfNode, setentry=True)
self.widgetsDict[KEYBOARD+'ObjList'] = widget
@ -126,411 +132,411 @@ class controllerWindow(AppShell):
settingFrame = inputZone.interior()
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Assign a Key For:').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True,pady = 6 )
widget = Label(Interior, text = 'Assign a Key For:').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True,pady = 6 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Forward :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Forward :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Forward key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyForward'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyForward'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Forward Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedForward'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedForward'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Backward :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Backward :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Backward key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyBackward'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyBackward'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Backward Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedBackward'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedBackward'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Right :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Right :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Right key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyRight'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyRight'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Right Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedRight'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedRight'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Left :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Left :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Left key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyLeft'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyLeft'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Left Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedLeft'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedLeft'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Up :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Up :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Up key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Up Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Down :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Down :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Down Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Turn Right:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Turn Right:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Right key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyTurnRight'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyTurnRight'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Right Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedTurnRight'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedTurnRight'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Turn Left :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Turn Left :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Left key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyTurnLeft'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyTurnLeft'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Left Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedTurnLeft'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedTurnLeft'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Turn UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Turn UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn UP key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyTurnUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyTurnUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn UP Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedTurnUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedTurnUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Turn Down :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Turn Down :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyTurnDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyTurnDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Down Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedTurnDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedTurnDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Roll Right:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Roll Right:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Roll Right key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyRollRight'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyRollRight'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Roll Right Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedRollRight'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedRollRight'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Roll Left :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Roll Left :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Roll Left key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyRollLeft'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyRollLeft'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Roll Left Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedRollLeft'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedRollLeft'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale UP key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale UP Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Down Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale X UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale X UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale X UP key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleXUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleXUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale X UP Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleXUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleXUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale X Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale X Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale X Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleXDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleXDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Down X Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleXDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleXDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale Y UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale Y UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Y UP key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleYUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleYUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Y UP Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleYUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleYUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale Y Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale Y Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Y Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleYDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleYDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Down XY Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleYDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleYDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale Z UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale Z UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Z UP key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleZUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleZUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Z UP Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleZUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleZUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale Z Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale Z Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Z Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleZDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleZDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Down Z Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleZDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleZDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
assignFrame.pack(side=Tkinter.TOP, expand=True, fill = Tkinter.X)
keyboardPage.pack(side=Tkinter.TOP, expand=True, fill = Tkinter.X)
assignFrame.pack(side=tkinter.TOP, expand=True, fill = tkinter.X)
keyboardPage.pack(side=tkinter.TOP, expand=True, fill = tkinter.X)
####################################################################
####################################################################
@ -539,12 +545,12 @@ class controllerWindow(AppShell):
####################################################################
# Pack the mainFrame
frame = Frame(mainFrame)
widget = Button(frame, text='OK', width = 13, command=self.ok_press).pack(side=Tkinter.RIGHT)
widget = Button(frame, text='Enable Control', width = 13, command=self.enableControl).pack(side=Tkinter.LEFT)
widget = Button(frame, text='Disable Control', width = 13, command=self.disableControl).pack(side=Tkinter.LEFT)
widget = Button(frame, text='Save & Keep', width = 13, command=self.saveKeepControl).pack(side=Tkinter.LEFT)
frame.pack(side = Tkinter.BOTTOM, expand=1, fill = Tkinter.X)
mainFrame.pack(expand=1, fill = Tkinter.BOTH)
widget = Button(frame, text='OK', width = 13, command=self.ok_press).pack(side=tkinter.RIGHT)
widget = Button(frame, text='Enable Control', width = 13, command=self.enableControl).pack(side=tkinter.LEFT)
widget = Button(frame, text='Disable Control', width = 13, command=self.disableControl).pack(side=tkinter.LEFT)
widget = Button(frame, text='Save & Keep', width = 13, command=self.saveKeepControl).pack(side=tkinter.LEFT)
frame.pack(side = tkinter.BOTTOM, expand=1, fill = tkinter.X)
mainFrame.pack(expand=1, fill = tkinter.BOTH)
def onDestroy(self, event):
# Check if user wish to keep the control after the window closed.
@ -688,7 +694,7 @@ class controllerWindow(AppShell):
self.keyboardMapDict[index] = self.widgetsDict['Keyboard-'+index].getvalue()
for index in self.keyboardSpeedDict:
self.keyboardSpeedDict[index] = float(self.widgetsDict['Keyboard-'+index].getvalue())
print self.nodePath
print(self.nodePath)
messenger.send('ControlW_saveSetting', ['Keyboard', [self.nodePath, self.keyboardMapDict, self.keyboardSpeedDict]])
return

View File

@ -2,13 +2,15 @@
# TK and PMW INTERFACE MODULES#
###############################
from direct.showbase.TkGlobal import*
from tkFileDialog import *
import Pmw
import tkFileDialog
import tkMessageBox
from direct.tkwidgets import Dial
from direct.tkwidgets import Floater
if sys.version_info >= (3, 0):
from tkinter.filedialog import askopenfilename
else:
from tkFileDialog import askopenfilename
#############################
# Scene Editor Python Files #
@ -154,7 +156,7 @@ class dataHolder:
self.ActorNum=0
self.theScene=None
messenger.send('SGE_Update Explorer',[render])
print 'Scene should be cleaned up!'
print('Scene should be cleaned up!')
def removeObj(self, nodePath):
#################################################################
@ -169,7 +171,7 @@ class dataHolder:
childrenList = nodePath.getChildren()
if self.ModelDic.has_key(name):
if name in self.ModelDic:
del self.ModelDic[name]
del self.ModelRefDic[name]
if len(childrenList) != 0:
@ -178,7 +180,7 @@ class dataHolder:
nodePath.removeNode()
self.ModelNum -= 1
pass
elif self.ActorDic.has_key(name):
elif name in self.ActorDic:
del self.ActorDic[name]
del self.ActorRefDic[name]
if len(childrenList) != 0:
@ -187,14 +189,14 @@ class dataHolder:
nodePath.removeNode()
self.ActorNum -= 1
pass
elif self.collisionDict.has_key(name):
elif name in self.collisionDict:
del self.collisionDict[name]
if len(childrenList) != 0:
for node in childrenList:
self.removeObj(node)
nodePath.removeNode()
pass
elif self.dummyDict.has_key(name):
elif name in self.dummyDict:
del self.dummyDict[name]
if len(childrenList) != 0:
for node in childrenList:
@ -207,12 +209,12 @@ class dataHolder:
self.removeObj(node)
list = self.lightManager.delete(name)
return list
elif self.particleNodes.has_key(name):
elif name in self.particleNodes:
self.particleNodes[name].removeNode()
del self.particleNodes[name]
del self.particleDict[name]
else:
print 'You cannot remove this NodePath'
print('You cannot remove this NodePath')
return
messenger.send('SGE_Update Explorer',[render])
@ -237,15 +239,15 @@ class dataHolder:
cHpr = hpr
cScale = scale
parent = nodePath.getParent()
if self.ActorDic.has_key(name):
if name in self.ActorDic:
holder = self.ActorDic
holderRef = self.ActorRefDic
isModel = False
elif self.ModelDic.has_key(name):
elif name in self.ModelDic:
holder = self.ModelDic
holderRef = self.ModelRefDic
else:
print '---- DataHolder: Target Obj is not a legal object could be duplicate!'
print('---- DataHolder: Target Obj is not a legal object could be duplicate!')
return
FilePath = holderRef[name]
@ -356,7 +358,7 @@ class dataHolder:
# This funciton will return True if there is an Actor in the scene named "name"
# and will return False if not.
###########################################################################
return self.ActorDic.has_key(name)
return name in self.ActorDic
def getActor(self, name):
###########################################################################
@ -366,7 +368,7 @@ class dataHolder:
if self.isActor(name):
return self.ActorDic[name]
else:
print '----No Actor named: ', name
print('----No Actor named: ', name)
return None
def getModel(self, name):
@ -377,7 +379,7 @@ class dataHolder:
if self.isModel(name):
return self.ModelDic[name]
else:
print '----No Model named: ', name
print('----No Model named: ', name)
return None
def isModel(self, name):
@ -386,7 +388,7 @@ class dataHolder:
# This funciton will return True if there is a Model in the scene named "name"
# and will return False if not.
###########################################################################
return self.ModelDic.has_key(name)
return name in self.ModelDic
def loadAnimation(self,name, Dic):
###########################################################################
@ -406,7 +408,7 @@ class dataHolder:
messenger.send('DataH_loadFinish'+name)
return
else:
print '------ Error when loading animation for Actor: ', name
print('------ Error when loading animation for Actor: ', name)
def removeAnimation(self, name, anim):
###########################################################################
@ -527,7 +529,7 @@ class dataHolder:
self.ActorDic[nName]= self.ActorDic[oName]
self.ActorRefDic[nName]= self.ActorRefDic[oName]
self.ActorDic[nName].setName(nName)
if self.blendAnimDict.has_key(oName):
if oName in self.blendAnimDict:
self.blendAnimDict[nName] = self.blendAnimDict[oName]
del self.blendAnimDict[oName]
del self.ActorDic[oName]
@ -540,16 +542,16 @@ class dataHolder:
del self.ModelRefDic[oName]
elif self.lightManager.isLight(oName):
list, lightNode = self.lightManager.rename(oName, nName)
elif self.dummyDict.has_key(oName):
elif oName in self.dummyDict:
self.dummyDict[nName]= self.dummyDict[oName]
self.dummyDict[nName].setName(nName)
del self.dummyDict[oName]
elif self.collisionDict.has_key(oName):
elif oName in self.collisionDict:
self.collisionDict[nName]= self.collisionDict[oName]
self.collisionDict[nName].setName(nName)
del self.collisionDict[oName]
elif self.particleNodes.has_key(oName):
elif oName in self.particleNodes:
self.particleNodes[nName]= self.particleNodes[oName]
self.particleDict[nName]= self.particleDict[oName]
self.particleDict[nName].setName(nName)
@ -557,9 +559,9 @@ class dataHolder:
del self.particleNodes[oName]
del self.particleDict[oName]
else:
print '----Error: This Object is not allowed to this function!'
print('----Error: This Object is not allowed to this function!')
if self.curveDict.has_key(oName):
if oName in self.curveDict:
self.curveDict[nName] = self.curveDict[oName]
del self.curveDict[oName]
@ -578,11 +580,11 @@ class dataHolder:
return True
elif self.lightManager.isLight(name):
return True
elif self.dummyDict.has_key(name):
elif name in self.dummyDict:
return True
elif self.collisionDict.has_key(name):
elif name in self.collisionDict:
return True
elif self.particleNodes.has_key(name):
elif name in self.particleNodes:
return True
elif (name == 'render')or(name == 'SEditor')or(name == 'Lights')or(name == 'camera'):
return True
@ -596,7 +598,7 @@ class dataHolder:
# using the node name as a reference to assosiate a list which contains all curves related to that node.
###########################################################################
name = node.getName()
if self.curveDict.has_key(name):
if name in self.curveDict:
self.curveDict[name].append(curveCollection)
return
else:
@ -612,7 +614,7 @@ class dataHolder:
# If the input node has not been bindedwith any curve, it will return None.
###########################################################################
name = nodePath.getName()
if self.curveDict.has_key(name):
if name in self.curveDict:
return self.curveDict[name]
else:
return None
@ -626,7 +628,7 @@ class dataHolder:
# This message will be caught by Property Window for this node.
###########################################################################
name =nodePath.getName()
if self.curveDict.has_key(name):
if name in self.curveDict:
index = None
for curve in self.curveDict[name]:
if curve.getCurve(0).getName() == curveName:
@ -677,12 +679,12 @@ class dataHolder:
elif self.isLight(name):
type = 'Light'
info['lightNode'] = self.lightManager.getLightNode(name)
elif self.dummyDict.has_key(name):
elif name in self.dummyDict:
type = 'dummy'
elif self.collisionDict.has_key(name):
elif name in self.collisionDict:
type = 'collisionNode'
info['collisionNode'] = self.collisionDict[name]
if self.curveDict.has_key(name):
if name in self.curveDict:
info['curveList'] = self.getCurveList(nodePath)
return type, info
@ -794,7 +796,7 @@ class dataHolder:
# The formate of thsi dictionary is
# {"name of Blend Animation" : ["Animation A, Animation B, Effect(Float, 0~1)"]}
###########################################################################
if self.blendAnimDict.has_key(name):
if name in self.blendAnimDict:
return self.blendAnimDict[name]
else:
return {}
@ -808,8 +810,8 @@ class dataHolder:
# Also, if this blend is the first blend animation that the target actor has,
# this function will add a "Blending" tag on this actor which is "True".
###########################################################################
if self.blendAnimDict.has_key(actorName):
if self.blendAnimDict[actorName].has_key(blendName):
if actorName in self.blendAnimDict:
if blendName in self.blendAnimDict[actorName]:
### replace the original setting
self.blendAnimDict[actorName][blendName][0] = animNameA
self.blendAnimDict[actorName][blendName][1] = animNameB
@ -832,7 +834,7 @@ class dataHolder:
# it will also rewrite the data to the newest one.
###########################################################################
self.removeBlendAnim(actorName,oName)
print self.blendAnimDict
print(self.blendAnimDict)
return self.saveBlendAnim(actorName, nName, animNameA, animNameB, effect)
def removeBlendAnim(self, actorName, blendName):
@ -844,8 +846,8 @@ class dataHolder:
# Also, it will check that there is any blended animation remained for this actor,
# If none, this function will clear the "Blending" tag of this object.
###########################################################################
if self.blendAnimDict.has_key(actorName):
if self.blendAnimDict[actorName].has_key(blendName):
if actorName in self.blendAnimDict:
if blendName in self.blendAnimDict[actorName]:
### replace the original setting
del self.blendAnimDict[actorName][blendName]
if len(self.blendAnimDict[actorName])==0:
@ -876,15 +878,15 @@ class dataHolder:
###########################################################################
if name == 'camera':
return camera
elif self.ModelDic.has_key(name):
elif name in self.ModelDic:
return self.ModelDic[name]
elif self.ActorDic.has_key(name):
elif name in self.ActorDic:
return self.ActorDic[name]
elif self.collisionDict.has_key(name):
elif name in self.collisionDict:
return self.collisionDict[name]
elif self.dummyDict.has_key(name):
elif name in self.dummyDict:
return self.dummyDict[name]
elif self.particleNodes.has_key(name):
elif name in self.particleNodes:
return self.particleNodes[name]
elif self.lightManager.isLight(name):
return self.lightManager.getLightNode(name)
@ -935,13 +937,13 @@ class dataHolder:
###########################################################################
### Ask for a filename
OpenFilename = tkFileDialog.askopenfilename(filetypes = [("PY","py")],title = "Load Scene")
OpenFilename = askopenfilename(filetypes = [("PY","py")],title = "Load Scene")
if(not OpenFilename):
return None
f=Filename.fromOsSpecific(OpenFilename)
fileName=f.getBasenameWoExtension()
dirName=f.getFullpathWoExtension()
print "DATAHOLDER::" + dirName
print("DATAHOLDER::" + dirName)
############################################################################
# Append the path to this file to our sys path where python looks for modules
# We do this so that we can use "import" on our saved scene code and execute it
@ -976,7 +978,7 @@ class dataHolder:
self.ActorDic[actor]=self.Scene.ActorDic[actor]
#self.ActorRefDic[actor]=self.Scene.ActorRefDic[actor] # Old way of doing absolute paths
self.ActorRefDic[actor]=Filename(dirName + "/" + self.Scene.ActorRefDic[actor]) # Relative Paths
if(self.Scene.blendAnimDict.has_key(str(actor))):
if(str(actor) in self.Scene.blendAnimDict):
self.blendAnimDict[actor]=self.Scene.blendAnimDict[actor]
self.ActorNum=self.ActorNum+1
@ -1006,7 +1008,7 @@ class dataHolder:
atten=alight.getAttenuation()
self.lightManager.create('spot',alight.getColor(),alight.getSpecularColor(),thenode.getPos(),thenode.getHpr(),atten.getX(),atten.getY(),atten.getZ(),alight.getExponent(),name=alight.getName(),tag=thenode.getTag("Metadata"))
else:
print 'Invalid light type'
print('Invalid light type')
############################################################################
# Populate Dummy related Dictionaries

View File

@ -45,7 +45,7 @@ class duplicateWindow(AppShell):
self.parent.resizable(False,False) ## Disable the ability to resize for this Window.
def appInit(self):
print '----SideWindow is Initialized!!'
print('----SideWindow is Initialized!!')
def createInterface(self):
# The interior of the toplevel panel
@ -122,7 +122,7 @@ class duplicateWindow(AppShell):
# This message will be caught by sceneEditor.
#################################################################
if not self.allEntryValid():
print '---- Duplication Window: Invalid value!!'
print('---- Duplication Window: Invalid value!!')
return
x = self.move_x.getvalue()
y = self.move_y.getvalue()

View File

@ -7,9 +7,16 @@ from direct.tkwidgets.AppShell import AppShell
from seColorEntry import *
from direct.tkwidgets.VectorWidgets import Vector3Entry
from direct.tkwidgets.Slider import Slider
from Tkinter import Frame, Button, Menubutton, Menu
import string, math, types, Pmw, Tkinter
from pandac.PandaModules import *
import sys, math, types, Pmw
from panda3d.core import *
if sys.version_info >= (3, 0):
from tkinter import Frame, Button, Menubutton, Menu
import tkinter
else:
from Tkinter import Frame, Button, Menubutton, Menu
import Tkinter as tkinter
class lightingPanel(AppShell):
#################################################################
@ -51,25 +58,25 @@ class lightingPanel(AppShell):
mainFrame = Frame(interior)
self.listZone = Pmw.Group(mainFrame,tag_pyclass = None)
self.listZone.pack(expand=0, fill=Tkinter.X,padx=3,pady=3)
self.listZone.pack(expand=0, fill=tkinter.X,padx=3,pady=3)
listFrame = self.listZone.interior()
self.lightEntry = self.createcomponent(
'Lights List', (), None,
Pmw.ComboBox, (listFrame,),label_text='Light :',
labelpos = Tkinter.W, entry_width = 25, selectioncommand = self.selectLight,
labelpos = tkinter.W, entry_width = 25, selectioncommand = self.selectLight,
scrolledlist_items = self.lightList)
self.lightEntry.pack(side=Tkinter.LEFT)
self.lightEntry.pack(side=tkinter.LEFT)
self.renameButton = self.createcomponent(
'Rename Light', (), None,
Button, (listFrame,),
text = ' Rename ',
command = self.renameLight)
self.renameButton.pack(side=Tkinter.LEFT)
self.renameButton.pack(side=tkinter.LEFT)
self.addLighZone = Pmw.Group(listFrame,tag_pyclass = None)
self.addLighZone.pack(side=Tkinter.LEFT)
self.addLighZone.pack(side=tkinter.LEFT)
insideFrame = self.addLighZone.interior()
self.lightsButton = Menubutton(insideFrame, text = 'Add light',borderwidth = 3,
activebackground = '#909090')
@ -91,13 +98,13 @@ class lightingPanel(AppShell):
Button, (listFrame,),
text = ' Delete ',
command = self.deleteLight)
self.deleteButton.pack(side=Tkinter.LEFT)
self.deleteButton.pack(side=tkinter.LEFT)
self.lightColor = seColorEntry(
mainFrame, text = 'Light Color', value=self.lightColor)
self.lightColor['command'] = self.setLightingColorVec
self.lightColor['resetValue'] = [0.3*255,0.3*255,0.3*255,0]
self.lightColor.pack(fill=Tkinter.X,expand=0)
self.lightColor.pack(fill=tkinter.X,expand=0)
self.bind(self.lightColor, 'Set light color')
# Notebook pages for light specific controls
@ -114,27 +121,27 @@ class lightingPanel(AppShell):
self.dSpecularColor = seColorEntry(
directionalPage, text = 'Specular Color')
self.dSpecularColor['command'] = self.setSpecularColor
self.dSpecularColor.pack(fill = Tkinter.X, expand = 0)
self.dSpecularColor.pack(fill = tkinter.X, expand = 0)
self.bind(self.dSpecularColor,
'Set directional light specular color')
self.dPosition = Vector3Entry(
directionalPage, text = 'Position')
self.dPosition['command'] = self.setPosition
self.dPosition['resetValue'] = [0,0,0,0]
self.dPosition.pack(fill = Tkinter.X, expand = 0)
self.dPosition.pack(fill = tkinter.X, expand = 0)
self.bind(self.dPosition, 'Set directional light position')
self.dOrientation = Vector3Entry(
directionalPage, text = 'Orientation')
self.dOrientation['command'] = self.setOrientation
self.dOrientation['resetValue'] = [0,0,0,0]
self.dOrientation.pack(fill = Tkinter.X, expand = 0)
self.dOrientation.pack(fill = tkinter.X, expand = 0)
self.bind(self.dOrientation, 'Set directional light orientation')
# Point light controls
self.pSpecularColor = seColorEntry(
pointPage, text = 'Specular Color')
self.pSpecularColor['command'] = self.setSpecularColor
self.pSpecularColor.pack(fill = Tkinter.X, expand = 0)
self.pSpecularColor.pack(fill = tkinter.X, expand = 0)
self.bind(self.pSpecularColor,
'Set point light specular color')
@ -142,7 +149,7 @@ class lightingPanel(AppShell):
pointPage, text = 'Position')
self.pPosition['command'] = self.setPosition
self.pPosition['resetValue'] = [0,0,0,0]
self.pPosition.pack(fill = Tkinter.X, expand = 0)
self.pPosition.pack(fill = tkinter.X, expand = 0)
self.bind(self.pPosition, 'Set point light position')
self.pConstantAttenuation = Slider(
@ -152,7 +159,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 1.0)
self.pConstantAttenuation['command'] = self.setConstantAttenuation
self.pConstantAttenuation.pack(fill = Tkinter.X, expand = 0)
self.pConstantAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.pConstantAttenuation,
'Set point light constant attenuation')
@ -163,7 +170,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 0.0)
self.pLinearAttenuation['command'] = self.setLinearAttenuation
self.pLinearAttenuation.pack(fill = Tkinter.X, expand = 0)
self.pLinearAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.pLinearAttenuation,
'Set point light linear attenuation')
@ -174,7 +181,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 0.0)
self.pQuadraticAttenuation['command'] = self.setQuadraticAttenuation
self.pQuadraticAttenuation.pack(fill = Tkinter.X, expand = 0)
self.pQuadraticAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.pQuadraticAttenuation,
'Set point light quadratic attenuation')
@ -182,7 +189,7 @@ class lightingPanel(AppShell):
self.sSpecularColor = seColorEntry(
spotPage, text = 'Specular Color')
self.sSpecularColor['command'] = self.setSpecularColor
self.sSpecularColor.pack(fill = Tkinter.X, expand = 0)
self.sSpecularColor.pack(fill = tkinter.X, expand = 0)
self.bind(self.sSpecularColor,
'Set spot light specular color')
@ -193,7 +200,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 1.0)
self.sConstantAttenuation['command'] = self.setConstantAttenuation
self.sConstantAttenuation.pack(fill = Tkinter.X, expand = 0)
self.sConstantAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.sConstantAttenuation,
'Set spot light constant attenuation')
@ -204,7 +211,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 0.0)
self.sLinearAttenuation['command'] = self.setLinearAttenuation
self.sLinearAttenuation.pack(fill = Tkinter.X, expand = 0)
self.sLinearAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.sLinearAttenuation,
'Set spot light linear attenuation')
@ -215,7 +222,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 0.0)
self.sQuadraticAttenuation['command'] = self.setQuadraticAttenuation
self.sQuadraticAttenuation.pack(fill = Tkinter.X, expand = 0)
self.sQuadraticAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.sQuadraticAttenuation,
'Set spot light quadratic attenuation')
@ -226,16 +233,16 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 0.0)
self.sExponent['command'] = self.setExponent
self.sExponent.pack(fill = Tkinter.X, expand = 0)
self.sExponent.pack(fill = tkinter.X, expand = 0)
self.bind(self.sExponent,
'Set spot light exponent')
# MRM: Add frustum controls
self.lightNotebook.setnaturalsize()
self.lightNotebook.pack(expand = 1, fill = Tkinter.BOTH)
self.lightNotebook.pack(expand = 1, fill = tkinter.BOTH)
mainFrame.pack(expand=1, fill = Tkinter.BOTH)
mainFrame.pack(expand=1, fill = tkinter.BOTH)
def onDestroy(self, event):
messenger.send('LP_close')

View File

@ -11,8 +11,7 @@ from direct.tkwidgets import Floater
from direct.tkwidgets import Dial
from direct.tkwidgets import Slider
from direct.tkwidgets import VectorWidgets
from pandac.PandaModules import *
from Tkinter import *
from panda3d.core import *
import Pmw
class propertyWindow(AppShell,Pmw.MegaWidget):
@ -108,7 +107,7 @@ class propertyWindow(AppShell,Pmw.MegaWidget):
self.curveFrame = None
#### If nodePath has been binded with any curves
if self.info.has_key('curveList'):
if 'curveList' in self.info:
self.createCurveFrame(self.contentFrame)
## Set all stuff done
@ -271,7 +270,7 @@ class propertyWindow(AppShell,Pmw.MegaWidget):
# And, it will set the call back function to setNodeColorVec()
#################################################################
color = self.nodePath.getColor()
print color
print(color)
self.nodeColor = VectorWidgets.ColorEntry(
contentFrame, text = 'Node Color', value=[color.getX()*255,
color.getY()*255,
@ -725,7 +724,7 @@ class propertyWindow(AppShell,Pmw.MegaWidget):
# But, not directly removed be this function.
# This function will send out a message to notice dataHolder to remove this animation
#################################################################
print anim
print(anim)
widget = self.widgetsDict[anim]
self.accept('animRemovedFromNode',self.redrawAnimProperty)
messenger.send('PW_removeAnimFromNode',[self.name, anim])

View File

@ -9,10 +9,8 @@
from direct.showbase.ShowBaseGlobal import *
from direct.interval.IntervalGlobal import *
from direct.showbase.DirectObject import DirectObject
from pandac.PandaModules import *
from panda3d.core import *
import math
#Manakel 2/12/2005: replace from pandac import by from pandac.PandaModules import
from pandac.PandaModules import MouseWatcher
class ViewPort:
@ -506,7 +504,7 @@ class QuadView(DirectObject):
ansY=-1.0+y2
self.xy=[ansX,ansY]
print "Sent X:%f Sent Y:%f"%(ansX,ansY)
print("Sent X:%f Sent Y:%f"%(ansX,ansY))
#SEditor.iRay.pick(render,self.xy)
SEditor.manipulationControl.manipulationStop(self.xy)
#print "MouseX " + str(base.mouseWatcherNode.getMouseX()) + "MouseY " + str(base.mouseWatcherNode.getMouseY()) + "\n"
@ -550,28 +548,28 @@ class QuadView(DirectObject):
dr.setDimensions(0.5,1,0,0.5)
def setLeft(self):
print "LEFT"
print("LEFT")
self.CurrentQuad=3
self.ChangeBaseDR()
self.Left.setCam()
#self.Left.setDR(self.mouseWatcherNode)
def setTop(self):
print "TOP"
print("TOP")
self.CurrentQuad=2
self.ChangeBaseDR()
self.Top.setCam()
#self.Top.setDR(self.mouseWatcherNode)
def setPerspective(self):
print "PERSPECTIVE"
print("PERSPECTIVE")
self.CurrentQuad=4
self.ChangeBaseDR()
self.Perspective.setCam()
#self.Perspective.setDR(self.mouseWatcherNode)
def setFront(self):
print "FRONT"
print("FRONT")
self.CurrentQuad=1
self.ChangeBaseDR()
self.Front.setCam()

View File

@ -3,11 +3,19 @@ import sys
try: import _tkinter
except: sys.exit("Please install python module 'Tkinter'")
import direct
from direct.directbase.DirectStart import*
from direct.showbase.ShowBase import ShowBase
ShowBase()
from direct.showbase.TkGlobal import spawnTkLoop
from Tkinter import *
from tkFileDialog import *
if sys.version_info >= (3, 0):
from tkinter import *
from tkinter.filedialog import *
else:
from Tkinter import *
from tkFileDialog import *
from direct.directtools.DirectGlobals import *
from direct.tkwidgets.AppShell import*
@ -251,7 +259,10 @@ class myLevelEditor(AppShell):
for event in self.actionEvents:
self.accept(event[0], event[1], extraArgs = event[2:])
camera.toggleVis()
if camera.is_hidden():
camera.show()
else:
camera.hide()
self.selectNode(base.camera) ## Initially, we select camera as the first node...
def appInit(self):
@ -386,31 +397,31 @@ class myLevelEditor(AppShell):
self.showAbout()
return
elif buttonIndex==12:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==13:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==14:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==15:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==16:
print "Your scene will be eliminated within five seconds, Save your world!!!, Number %d."%buttonIndex
print("Your scene will be eliminated within five seconds, Save your world!!!, Number %d."%buttonIndex)
return
elif buttonIndex==17:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==18:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==19:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==20:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
return
@ -666,17 +677,17 @@ class myLevelEditor(AppShell):
#################################################################
type, info = AllScene.getInfoOfThisNode(nodePath)
name = nodePath.getName()
if not self.propertyWindow.has_key(name):
if name not in self.propertyWindow:
self.propertyWindow[name] = propertyWindow(nodePath, type,info )
pass
def closePropertyWindow(self, name):
if self.propertyWindow.has_key(name):
if name in self.propertyWindow:
del self.propertyWindow[name]
return
def openMetadataPanel(self,nodePath=None):
print nodePath
print(nodePath)
self.MetadataPanel=MetadataPanel(nodePath)
pass
@ -685,7 +696,7 @@ class myLevelEditor(AppShell):
# duplicate(self, nodePath = None)
# This function will be called when user try to open the duplication window
#################################################################
print '----Duplication!!'
print('----Duplication!!')
if nodePath != None:
self.duplicateWindow = duplicateWindow(nodePath = nodePath)
pass
@ -791,8 +802,8 @@ class myLevelEditor(AppShell):
#################################################################
name = nodePath.getName()
if AllScene.isActor(name):
if self.animPanel.has_key(name):
print '---- You already have an animation panel for this Actor!'
if name in self.animPanel:
print('---- You already have an animation panel for this Actor!')
return
else:
Actor = AllScene.getActor(name)
@ -842,9 +853,9 @@ class myLevelEditor(AppShell):
# Let us actually remove the scene from sys modules... this is done because every scene is loaded as a module
# And if we reload a scene python wont reload since its already in sys.modules... and hence we delete it
# If there is ever a garbage colleciton bug..this might be a point to look at
if sys.modules.has_key(currentModName):
if currentModName in sys.modules:
del sys.modules[currentModName]
print sys.getrefcount(AllScene.theScene)
print(sys.getrefcount(AllScene.theScene))
del AllScene.theScene
else:
AllScene.resetAll()
@ -872,9 +883,9 @@ class myLevelEditor(AppShell):
# Let us actually remove the scene from sys modules... this is done because every scene is loaded as a module
# And if we reload a scene python wont reload since its already in sys.modules... and hence we delete it
# If there is ever a garbage colleciton bug..this might be a point to look at
if sys.modules.has_key(currentModName):
if currentModName in sys.modules:
del sys.modules[currentModName]
print sys.getrefcount(AllScene.theScene)
print(sys.getrefcount(AllScene.theScene))
del AllScene.theScene
else:
AllScene.resetAll()
@ -886,7 +897,7 @@ class myLevelEditor(AppShell):
thefile=Filename(self.CurrentFileName)
thedir=thefile.getFullpathWoExtension()
print "SCENE EDITOR::" + thedir
print("SCENE EDITOR::" + thedir)
self.CurrentDirName=thedir
if self.CurrentFileName != None:
self.parent.title('Scene Editor - '+ Filename.fromOsSpecific(self.CurrentFileName).getBasenameWoExtension())
@ -934,7 +945,7 @@ class myLevelEditor(AppShell):
theScene.writeBamFile(fileName)
else:
render.writeBamFile(fileName+".bad")
print " Scenegraph saved as :" +str(fileName)
print(" Scenegraph saved as :" +str(fileName))
def loadFromBam(self):
fileName = tkFileDialog.askopenfilename(filetypes = [("BAM",".bam")],title = "Load Scenegraph from Bam file")
@ -959,7 +970,7 @@ class myLevelEditor(AppShell):
###############################################################################
# !!!!! See if a module exists by this name... if it does you cannot use this filename !!!!!
###############################################################################
if(sys.modules.has_key(fCheck.getBasenameWoExtension())):
if(fCheck.getBasenameWoExtension() in sys.modules):
tkMessageBox.showwarning(
"Save file",
"Cannot save with this name because there is a system module with the same name. Please resave as something else."
@ -993,7 +1004,7 @@ class myLevelEditor(AppShell):
if modelFilename:
self.makeDirty()
if not AllScene.loadModel(modelFilename, Filename.fromOsSpecific(modelFilename)):
print '----Error! No Such Model File!'
print('----Error! No Such Model File!')
pass
def loadActor(self):
@ -1016,12 +1027,12 @@ class myLevelEditor(AppShell):
if ActorFilename:
self.makeDirty()
if not AllScene.loadActor(ActorFilename, Filename.fromOsSpecific(ActorFilename)):
print '----Error! No Such Model File!'
print('----Error! No Such Model File!')
pass
def importScene(self):
self.makeDirty()
print '----God bless you Please Import!'
print('----God bless you Please Import!')
pass
@ -1495,7 +1506,7 @@ class myLevelEditor(AppShell):
return
def animPanelClose(self, name):
if self.animPanel.has_key(name):
if name in self.animPanel:
del self.animPanel[name]
return
@ -1508,8 +1519,8 @@ class myLevelEditor(AppShell):
################################################################
name = nodePath.getName()
if AllScene.isActor(name):
if self.animBlendPanel.has_key(name):
print '---- You already have an Blend Animation Panel for this Actor!'
if name in self.animBlendPanel:
print('---- You already have an Blend Animation Panel for this Actor!')
return
else:
Actor = AllScene.getActor(name)
@ -1554,7 +1565,7 @@ class myLevelEditor(AppShell):
# This function will be called when Blend panel has been closed.
# Here we will reset the reference dictionary so it can be open again.
################################################################
if self.animBlendPanel.has_key(name):
if name in self.animBlendPanel:
del self.animBlendPanel[name]
return
@ -1613,7 +1624,7 @@ class myLevelEditor(AppShell):
def openAlignPanel(self, nodePath=None):
name = nodePath.getName()
if not self.alignPanelDict.has_key(name):
if name not in self.alignPanelDict:
list = AllScene.getAllObjNameAsList()
if name in list:
list.remove(name)
@ -1623,7 +1634,7 @@ class myLevelEditor(AppShell):
return
def closeAlignPanel(self, name=None):
if self.alignPanelDict.has_key(name):
if name in self.alignPanelDict:
del self.alignPanelDict[name]
def alignObject(self, nodePath, name, list):
@ -1705,4 +1716,4 @@ class myLevelEditor(AppShell):
editor = myLevelEditor(parent = base.tkRoot)
run()
base.run()

View File

@ -5,12 +5,16 @@
# Import Tkinter, Pmw, and the floater code from this directory tree.
from direct.tkwidgets.AppShell import *
from direct.showbase.TkGlobal import *
from tkSimpleDialog import askfloat
import string
import math
import types
from direct.task import Task
if sys.version_info >= (3, 0):
from tkinter.simpledialog import askfloat
else:
from tkSimpleDialog import askfloat
FRAMES = 0
SECONDS = 1
@ -112,7 +116,7 @@ class AnimPanel(AppShell):
self.playRateEntry.selectitem('1.0')
### Loop checkbox
Label(actorFrame, text= "Loop:", font=('MSSansSerif', 12)).place(x=420,y=05,anchor=NW)
Label(actorFrame, text= "Loop:", font=('MSSansSerif', 12)).place(x=420,y=5,anchor=NW)
self.loopVar = IntVar()
self.loopVar.set(0)
@ -250,7 +254,7 @@ class AnimPanel(AppShell):
self['animList'] = self['actor'].getAnimNames()
animL = self['actor'].getAnimNames()
self.AnimEntry.setlist(animL)
print '-----',animL
print('-----',animL)
return
def loadAnimation(self):
@ -278,7 +282,7 @@ class AnimPanel(AppShell):
taskMgr.add(self.playTask, self.id + '_UpdateTask')
self.stopButton.config(state=NORMAL)
else:
print '----Illegal Animaion name!!', self.animName
print('----Illegal Animaion name!!', self.animName)
return
def playTask(self, task):
@ -591,7 +595,7 @@ class LoadAnimPanel(AppShell):
else:
self.animList.append(name)
self.AnimName_1.setlist(self.animList)
print self.animDic
print(self.animDic)
return
def ok_press(self):

View File

@ -5,12 +5,16 @@
# Import Tkinter, Pmw, and the floater code from this directory tree.
from direct.tkwidgets.AppShell import *
from direct.showbase.TkGlobal import *
from tkSimpleDialog import askfloat
import string
import math
import types
from direct.task import Task
if sys.version_info >= (3, 0):
from tkinter.simpledialog import askfloat
else:
from tkSimpleDialog import askfloat
FRAMES = 0
SECONDS = 1
@ -304,7 +308,7 @@ class BlendAnimPanel(AppShell):
taskMgr.add(self.playTask, self.id + '_UpdateTask')
self.stopButton.config(state=NORMAL)
else:
print '----Illegal Animaion name!!', self.animNameA + ', '+ self.animNameB
print('----Illegal Animaion name!!', self.animNameA + ', '+ self.animNameB)
return
def playTask(self, task):
@ -348,7 +352,7 @@ class BlendAnimPanel(AppShell):
# setAnimation(self, animation, AB = 'a')
# see play(self)
#################################################################
print 'OK!!!'
print('OK!!!')
if AB == 'a':
if self.animNameA != None:
self['actor'].setControlEffect(self.animNameA, 1.0, 'modelRoot','lodRoot')
@ -519,7 +523,7 @@ class BlendAnimPanel(AppShell):
# then this function will set Animation A to "a" and animation B
# to "b" and set the ratio slider to "c" position.
#################################################################
if self.blendDict.has_key(name):
if name in self.blendDict:
self.currentBlendName = name
animA = self.blendDict[name][0]
animB = self.blendDict[name][1]
@ -544,7 +548,7 @@ class BlendAnimPanel(AppShell):
self.blendDict.clear()
del self.blendDict
self.blendDict = dict.copy()
print self.blendDict
print(self.blendDict)
if len(self.blendDict)>0:
self.blendList = self.blendDict.keys()
else:

View File

@ -55,14 +55,14 @@ class DirectCameraControl(DirectObject):
['n', self.pickNextCOA],
['u', self.orbitUprightCam],
['shift-u', self.uprightCam],
[`1`, self.spawnMoveToView, 1],
[`2`, self.spawnMoveToView, 2],
[`3`, self.spawnMoveToView, 3],
[`4`, self.spawnMoveToView, 4],
[`5`, self.spawnMoveToView, 5],
[`6`, self.spawnMoveToView, 6],
[`7`, self.spawnMoveToView, 7],
[`8`, self.spawnMoveToView, 8],
['1', self.spawnMoveToView, 1],
['2', self.spawnMoveToView, 2],
['3', self.spawnMoveToView, 3],
['4', self.spawnMoveToView, 4],
['5', self.spawnMoveToView, 5],
['6', self.spawnMoveToView, 6],
['7', self.spawnMoveToView, 7],
['8', self.spawnMoveToView, 8],
['9', self.swingCamAboutWidget, -90.0, t],
['0', self.swingCamAboutWidget, 90.0, t],
['`', self.removeManipulateCameraTask],
@ -351,7 +351,7 @@ class DirectCameraControl(DirectObject):
# MRM: Would be nice to be able to control this
# At least display it
dist = pow(10.0, self.nullHitPointCount)
SEditor.message('COA Distance: ' + `dist`)
SEditor.message('COA Distance: ' + repr(dist))
coa.set(0,dist,0)
# Compute COA Dist
coaDist = Vec3(coa - ZERO_POINT).length()
@ -392,8 +392,7 @@ class DirectCameraControl(DirectObject):
sf = 0.1
self.coaMarker.setScale(sf)
# Lerp color to fade out
self.coaMarker.lerpColor(VBase4(1,0,0,1), VBase4(1,0,0,0), 3.0,
task = 'fadeAway')
self.coaMarker.colorInterval(3.0, VBase4(1, 0, 0, 0), name='fadeAway').start()
def homeCam(self):
# Record undo point

View File

@ -12,9 +12,15 @@
from direct.tkwidgets import Valuator
from direct.tkwidgets import Floater
from direct.tkwidgets import Slider
import string, Pmw, Tkinter, tkColorChooser
import sys, Pmw
from direct.tkwidgets.VectorWidgets import VectorEntry
if sys.version_info >= (3, 0):
from tkinter.colorchooser import askcolor
else:
from tkColorChooser import askcolor
class seColorEntry(VectorEntry):
def __init__(self, parent = None, **kw):
# Initialize options for the class (overriding some superclass options)
@ -41,7 +47,7 @@ class seColorEntry(VectorEntry):
def popupColorPicker(self):
# Can pass in current color with: color = (255, 0, 0)
color = tkColorChooser.askcolor(
color = askcolor(
parent = self.interior(),
# Initialize it to current color
initialcolor = tuple(self.get()[:3]))[0]

View File

@ -3,7 +3,7 @@
# This code saves the scene out as python code... the scene is stored in the various dictionaries in "dataHolder.py" ...the class "AllScene"
#
####################################################################################################################################################
from pandac.PandaModules import *
from panda3d.core import *
from direct.showbase.ShowBaseGlobal import *
import os
@ -42,7 +42,7 @@ class FileSaver:
i1=" " # indentation
i2=i1+i1 # double indentation
out_file = open(filename,"w")
print "dirname:" + dirname
print("dirname:" + dirname)
if( not os.path.isdir(dirname)):
os.mkdir(dirname)
savepathname=Filename(filename)
@ -176,7 +176,7 @@ class FileSaver:
newtexpathF=Filename(newtexpath)
newtexpathSpecific=newtexpathF.toOsSpecific()
print "TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific
print("TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific)
if(oldtexpath != newtexpathSpecific):
shutil.copyfile(oldtexpath,newtexpathSpecific)
@ -187,7 +187,7 @@ class FileSaver:
# Copy the file over to the relative directory
oldModelpath=AllScene.ModelRefDic[model].toOsSpecific()
print "FILESAVER:: copying from " + AllScene.ModelRefDic[model].toOsSpecific() + "to" + newpathSpecific
print("FILESAVER:: copying from " + AllScene.ModelRefDic[model].toOsSpecific() + "to" + newpathSpecific)
if(oldModelpath!=newpathSpecific):
shutil.copyfile(oldModelpath,newpathSpecific)
@ -197,7 +197,7 @@ class FileSaver:
etc=EggTextureCollection()
etc.extractTextures(e)
for index in range(len(fnamelist)):
print fnamelist[index]
print(fnamelist[index])
tex=etc.findFilename(Filename(fnamelist[index]))
fn=Filename(tex.getFilename())
fn.setDirname("")
@ -305,14 +305,14 @@ class FileSaver:
newtexpath=dirname + "/" + texfilename.getBasename()
newtexpathF=Filename(newtexpath)
newtexpathSpecific=newtexpathF.toOsSpecific()
print "TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific
print("TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific)
if(oldtexpath != newtexpathSpecific):
shutil.copyfile(oldtexpath,newtexpathSpecific)
# Copy the file over to the relative directory
oldActorpath=AllScene.ActorRefDic[actor].toOsSpecific()
print "FILESAVER:: copying from " + AllScene.ActorRefDic[actor].toOsSpecific() + "to" + newpathSpecific
print("FILESAVER:: copying from " + AllScene.ActorRefDic[actor].toOsSpecific() + "to" + newpathSpecific)
if(oldActorpath!=newpathSpecific):
shutil.copyfile(oldActorpath,newpathSpecific)
@ -322,7 +322,7 @@ class FileSaver:
etc=EggTextureCollection()
etc.extractTextures(e)
for index in range(len(actorfnamelist)):
print actorfnamelist[index]
print(actorfnamelist[index])
tex=etc.findFilename(Filename(actorfnamelist[index]))
fn=Filename(tex.getFilename())
fn.setDirname("")
@ -362,12 +362,12 @@ class FileSaver:
#out_file.write(i2+ "self."+ actorS + ".loadAnims(" + str(ActorAnimations) +")\n") # Old way with absolute paths
#Manakel 2/12/2004: solve the not empty but not defined animation case
if not animation is None:
print "ACTOR ANIMATIONS:" + ActorAnimations[animation]
print("ACTOR ANIMATIONS:" + ActorAnimations[animation])
oldAnimPath=Filename(ActorAnimations[animation])
oldAnim=oldAnimPath.toOsSpecific()
dirOS=Filename(dirname)
newAnim=dirOS.toOsSpecific() + "\\" + oldAnimPath.getBasename()
print "ACTOR ANIM SAVER:: Comparing" + oldAnim +"and" + newAnim
print("ACTOR ANIM SAVER:: Comparing" + oldAnim +"and" + newAnim)
if(oldAnim!=newAnim):
shutil.copyfile(oldAnim,newAnim)
newAnimF=Filename.fromOsSpecific(newAnim)
@ -379,16 +379,16 @@ class FileSaver:
out_file.write(i2+ i1+"self."+ actorS + ".loadAnims(" + str(ActorAnimations) +")\n") # Now with new relative paths
out_file.write(i2+"else:\n")
theloadAnimString=str(ActorAnimationsInvoke)# We hack the "self.executionpath" part into the dictionary as a variable using string replace
print "LOAD ANIM STRING BEFORE" + theloadAnimString
print("LOAD ANIM STRING BEFORE" + theloadAnimString)
theloadAnimString=theloadAnimString.replace('\'self.executionpath +','self.executionpath + \'')
print "LOAD ANIM STRING AFTER" + theloadAnimString
print("LOAD ANIM STRING AFTER" + theloadAnimString)
out_file.write(i2+ i1+"self."+ actorS + ".loadAnims(" + theloadAnimString +")\n") # Now with new relative paths based on editor invocation
out_file.write(i2+ "self.ActorDic[\'" + actorS + "\']=self." + AllScene.ActorDic[actor].getName()+"\n")
#out_file.write(i2+ "self.ActorRefDic[\'" + actorS + "\']=Filename(\'"+AllScene.ActorRefDic[actor].getFullpath() +"\')\n") # Old way with absolute paths
out_file.write(i2+ "self.ActorRefDic[\'" + actorS + "\']=\'"+ AllScene.ActorRefDic[actor].getBasename() +"\'\n")# Relative paths
out_file.write(i2+ "self.ActorDic[\'"+ actorS + "\'].setName(\'"+ actorS +"\')\n")
if(AllScene.blendAnimDict.has_key(actor)): # Check if a dictionary of blended animations exists
if(actor in AllScene.blendAnimDict): # Check if a dictionary of blended animations exists
out_file.write(i2+ "self.blendAnimDict[\"" + actorS +"\"]=" + str(AllScene.blendAnimDict[actor]) + "\n")
@ -458,7 +458,7 @@ class FileSaver:
pass
else:
print "Invalid Collision Node: " + nodetype
print("Invalid Collision Node: " + nodetype)
out_file.write("\n")
@ -653,7 +653,7 @@ class FileSaver:
if(parent=="render" or parent=="camera"):
out_file.write(i2+ "self."+ modelS + ".reparentTo(" + parent + ")\n")
else:
if(AllScene.particleDict.has_key(parent)):
if(parent in AllScene.particleDict):
out_file.write(i2+ "self."+ modelS + ".reparentTo(self." + parent + ".getEffect())\n")
else:
out_file.write(i2+ "self."+ modelS + ".reparentTo(self." + parent + ")\n")
@ -666,7 +666,7 @@ class FileSaver:
if(parent=="render" or parent=="camera"):
out_file.write(i2+ "self."+ dummyS + ".reparentTo(" + parent + ")\n")
else:
if(AllScene.particleDict.has_key(parent)):
if(parent in AllScene.particleDict):
out_file.write(i2+ "self."+ dummyS + ".reparentTo(self." + parent + ".getEffect())\n")
else:
out_file.write(i2+ "self."+ dummyS + ".reparentTo(self." + parent + ")\n")
@ -680,7 +680,7 @@ class FileSaver:
if(parent=="render" or parent=="camera"):
out_file.write(i2+ "self."+ actorS + ".reparentTo(" + parent + ")\n")
else:
if(AllScene.particleDict.has_key(parent)):
if(parent in AllScene.particleDict):
out_file.write(i2+ "self."+ actorS + ".reparentTo(self." + parent + ".getEffect())\n")
else:
out_file.write(i2+ "self."+ actorS + ".reparentTo(self." + parent + ")\n")
@ -698,7 +698,7 @@ class FileSaver:
out_file.write(i2+"self.collisionDict[\"" + collnodeS + "\"]="+ parentname + ".attachNewNode(self." + collnodeS + "_Node)\n")
else:
#Manakel 2/12/2005: parent replaced by parent Name but why Parent name in partice and parent for other objects?
if(AllScene.particleDict.has_key(parentname)):
if(parentname in AllScene.particleDict):
out_file.write(i2+"self.collisionDict[\"" + collnodeS + "\"]=self."+ parentname + "getEffect().attachNewNode(self." + collnodeS + "_Node)\n")
else:
out_file.write(i2+"self.collisionDict[\"" + collnodeS + "\"]=self."+ parentname + ".attachNewNode(self." + collnodeS + "_Node)\n")

View File

@ -1,8 +1,6 @@
from pandac.PandaModules import *
from panda3d.core import *
from direct.showbase.DirectObject import DirectObject
from direct.showbase.PhysicsManagerGlobal import *
#Manakel 2/12/2005: replace from pandac import by from pandac.PandaModules import
from pandac.PandaModules import ForceNode
from direct.directnotify import DirectNotifyGlobal
import sys

View File

@ -12,7 +12,7 @@
#
#################################################################
from pandac.PandaModules import *
from panda3d.core import *
from direct.directtools.DirectGlobals import *
from direct.directtools.DirectUtil import *
import math
@ -41,10 +41,10 @@ class LineNodePath(NodePath):
ls.setColor(colorVec)
def moveTo( self, *_args ):
apply( self.lineSegs.moveTo, _args )
self.lineSegs.moveTo(*_args)
def drawTo( self, *_args ):
apply( self.lineSegs.drawTo, _args )
self.lineSegs.drawTo(*_args)
def create( self, frameAccurate = 0 ):
self.lineSegs.create( self.lineNode, frameAccurate )
@ -60,13 +60,13 @@ class LineNodePath(NodePath):
self.lineSegs.setThickness( thickness )
def setColor( self, *_args ):
apply( self.lineSegs.setColor, _args )
self.lineSegs.setColor(*_args)
def setVertex( self, *_args):
apply( self.lineSegs.setVertex, _args )
self.lineSegs.setVertex(*_args)
def setVertexColor( self, vertex, *_args ):
apply( self.lineSegs.setVertexColor, (vertex,) + _args )
self.lineSegs.setVertexColor(*(vertex,) + _args)
def getCurrentPosition( self ):
return self.lineSegs.getCurrentPosition()
@ -132,9 +132,9 @@ class LineNodePath(NodePath):
Given a list of lists of points, draw a separate line for each list
"""
for pointList in lineList:
apply(self.moveTo, pointList[0])
self.moveTo(*pointList[0])
for point in pointList[1:]:
apply(self.drawTo, point)
self.drawTo(*point)
##
## Given a point in space, and a direction, find the point of intersection

View File

@ -3,9 +3,8 @@
# Written by Yi-Hong Lin, yihhongl@andrew.cmu.edu, 2004
#################################################################
from direct.showbase.DirectObject import *
from string import lower
from direct.directtools import DirectUtil
from pandac.PandaModules import *
from panda3d.core import *
import string
@ -341,7 +340,7 @@ class seLightManager(NodePath):
if type == 'ambient':
self.ambientCount += 1
if(name=='DEFAULT_NAME'):
light = AmbientLight('ambient_' + `self.ambientCount`)
light = AmbientLight('ambient_' + repr(self.ambientCount))
else:
light = AmbientLight(name)
@ -350,7 +349,7 @@ class seLightManager(NodePath):
elif type == 'directional':
self.directionalCount += 1
if(name=='DEFAULT_NAME'):
light = DirectionalLight('directional_' + `self.directionalCount`)
light = DirectionalLight('directional_' + repr(self.directionalCount))
else:
light = DirectionalLight(name)
@ -360,7 +359,7 @@ class seLightManager(NodePath):
elif type == 'point':
self.pointCount += 1
if(name=='DEFAULT_NAME'):
light = PointLight('point_' + `self.pointCount`)
light = PointLight('point_' + repr(self.pointCount))
else:
light = PointLight(name)
@ -371,7 +370,7 @@ class seLightManager(NodePath):
elif type == 'spot':
self.spotCount += 1
if(name=='DEFAULT_NAME'):
light = Spotlight('spot_' + `self.spotCount`)
light = Spotlight('spot_' + repr(self.spotCount))
else:
light = Spotlight(name)
@ -382,7 +381,7 @@ class seLightManager(NodePath):
light.setAttenuation(Vec3(constant, linear, quadratic))
light.setExponent(exponent)
else:
print 'Invalid light type'
print('Invalid light type')
return None
# Create the seLight objects and put the light object we just created into it.
@ -411,7 +410,7 @@ class seLightManager(NodePath):
# Attention!!
# only Spotlight obj nneds to be specified a lens node first. i.e. setLens() first!
#################################################################
type = lower(light.getType().getName())
type = light.getType().getName().lower()
specularColor = VBase4(1)
position = Point3(0,0,0)
@ -451,7 +450,7 @@ class seLightManager(NodePath):
quadratic = Attenuation.getZ()
exponent = light.getExponent()
else:
print 'Invalid light type'
print('Invalid light type')
return None
lightNode = seLight(light,self,type,
@ -508,7 +507,7 @@ class seLightManager(NodePath):
# isLight(self.name)
# Use a string as a index to check if there existing a light named "name"
#################################################################
return self.lightDict.has_key(name)
return name in self.lightDict
def rename(self,oName,nName):
#################################################################
@ -523,7 +522,7 @@ class seLightManager(NodePath):
del self.lightDict[oName]
return self.lightDict.keys(),lightNode
else:
print '----Light Mnager: No such Light!'
print('----Light Mnager: No such Light!')
def getLightNodeList(self):
#################################################################

View File

@ -520,7 +520,7 @@ class ObjectHandles(NodePath,DirectObject):
# To avoid recreating a vec every frame
self.hitPt = Vec3(0)
# Get a handle on the components
self.xHandles = self.find('**/X')
self.xHandles = self.find('**/ohScalingNode')
self.xPostGroup = self.xHandles.find('**/x-post-group')
self.xPostCollision = self.xHandles.find('**/x-post')
self.xRingGroup = self.xHandles.find('**/x-ring-group')

View File

@ -25,10 +25,17 @@ from direct.tkwidgets.Slider import Slider
from direct.tkwidgets.EntryScale import EntryScale
from direct.tkwidgets.VectorWidgets import Vector2Entry, Vector3Entry
from direct.tkwidgets.VectorWidgets import ColorEntry
from Tkinter import Button, Frame, Radiobutton, Checkbutton, Label
from Tkinter import StringVar, BooleanVar, Entry, Scale
import os, string, Tkinter, Pmw
import __builtin__
import os, string, sys, Pmw
if sys.version_info >= (3, 0):
from tkinter import Button, Frame, Radiobutton, Checkbutton, Label
from tkinter import StringVar, BooleanVar, Entry, Scale
import tkinter
else:
from Tkinter import Button, Frame, Radiobutton, Checkbutton, Label
from Tkinter import StringVar, BooleanVar, Entry, Scale
import Tkinter as tkinter
PRF_UTILITIES = [
'lambda: camera.lookAt(render)',
@ -123,7 +130,7 @@ class MopathRecorder(AppShell, DirectObject):
self.postPoints = []
self.pointSetDict = {}
self.pointSetCount = 0
self.pointSetName = self.name + '-ps-' + `self.pointSetCount`
self.pointSetName = self.name + '-ps-' + repr(self.pointSetCount)
# User callback to call before recording point
self.samplingMode = 'Continuous'
self.preRecordFunc = None
@ -233,7 +240,7 @@ class MopathRecorder(AppShell, DirectObject):
self.undoButton['state'] = 'normal'
else:
self.undoButton['state'] = 'disabled'
self.undoButton.pack(side = Tkinter.LEFT, expand = 0)
self.undoButton.pack(side = tkinter.LEFT, expand = 0)
self.bind(self.undoButton, 'Undo last operation')
self.redoButton = Button(self.menuFrame, text = 'Redo',
@ -242,19 +249,19 @@ class MopathRecorder(AppShell, DirectObject):
self.redoButton['state'] = 'normal'
else:
self.redoButton['state'] = 'disabled'
self.redoButton.pack(side = Tkinter.LEFT, expand = 0)
self.redoButton.pack(side = tkinter.LEFT, expand = 0)
self.bind(self.redoButton, 'Redo last operation')
# Record button
mainFrame = Frame(interior, relief = Tkinter.SUNKEN, borderwidth = 2)
mainFrame = Frame(interior, relief = tkinter.SUNKEN, borderwidth = 2)
frame = Frame(mainFrame)
# Active node path
# Button to select active node path
widget = self.createButton(frame, 'Recording', 'Node Path:',
'Select Active Mopath Node Path',
lambda s = self: SEditor.select(s.nodePath),
side = Tkinter.LEFT, expand = 0)
widget['relief'] = Tkinter.FLAT
side = tkinter.LEFT, expand = 0)
widget['relief'] = tkinter.FLAT
self.nodePathMenu = Pmw.ComboBox(
frame, entry_width = 20,
selectioncommand = self.selectNodePathNamed,
@ -264,7 +271,7 @@ class MopathRecorder(AppShell, DirectObject):
self.nodePathMenu.component('entryfield_entry'))
self.nodePathMenuBG = (
self.nodePathMenuEntry.configure('background')[3])
self.nodePathMenu.pack(side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
self.nodePathMenu.pack(side = tkinter.LEFT, fill = tkinter.X, expand = 1)
self.bind(self.nodePathMenu,
'Select active node path used for recording and playback')
# Recording type
@ -285,81 +292,81 @@ class MopathRecorder(AppShell, DirectObject):
'Recording', 'Extend',
('Next record session extends existing path'),
self.recordingType, 'Extend', expand = 0)
frame.pack(fill = Tkinter.X, expand = 1)
frame.pack(fill = tkinter.X, expand = 1)
frame = Frame(mainFrame)
widget = self.createCheckbutton(
frame, 'Recording', 'Record',
'On: path is being recorded', self.toggleRecord, 0,
side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 1)
widget.configure(foreground = 'Red', relief = Tkinter.RAISED, borderwidth = 2,
anchor = Tkinter.CENTER, width = 16)
side = tkinter.LEFT, fill = tkinter.BOTH, expand = 1)
widget.configure(foreground = 'Red', relief = tkinter.RAISED, borderwidth = 2,
anchor = tkinter.CENTER, width = 16)
widget = self.createButton(frame, 'Recording', 'Add Keyframe',
'Add Keyframe To Current Path',
self.addKeyframe,
side = Tkinter.LEFT, expand = 1)
side = tkinter.LEFT, expand = 1)
widget = self.createButton(frame, 'Recording', 'Bind Path to Node',
'Bind Motion Path to selected Object',
self.bindMotionPathToNode,
side = Tkinter.LEFT, expand = 1)
side = tkinter.LEFT, expand = 1)
frame.pack(fill = Tkinter.X, expand = 1)
frame.pack(fill = tkinter.X, expand = 1)
mainFrame.pack(expand = 1, fill = Tkinter.X, pady = 3)
mainFrame.pack(expand = 1, fill = tkinter.X, pady = 3)
# Playback controls
playbackFrame = Frame(interior, relief = Tkinter.SUNKEN,
playbackFrame = Frame(interior, relief = tkinter.SUNKEN,
borderwidth = 2)
Label(playbackFrame, text = 'PLAYBACK CONTROLS',
font=('MSSansSerif', 12, 'bold')).pack(fill = Tkinter.X)
font=('MSSansSerif', 12, 'bold')).pack(fill = tkinter.X)
# Main playback control slider
widget = self.createEntryScale(
playbackFrame, 'Playback', 'Time', 'Set current playback time',
resolution = 0.01, command = self.playbackGoTo, side = Tkinter.TOP)
widget.component('hull')['relief'] = Tkinter.RIDGE
resolution = 0.01, command = self.playbackGoTo, side = tkinter.TOP)
widget.component('hull')['relief'] = tkinter.RIDGE
# Kill playback task if drag slider
widget['preCallback'] = self.stopPlayback
# Jam duration entry into entry scale
self.createLabeledEntry(widget.labelFrame, 'Resample', 'Path Duration',
'Set total curve duration',
command = self.setPathDuration,
side = Tkinter.LEFT, expand = 0)
side = tkinter.LEFT, expand = 0)
# Start stop buttons
frame = Frame(playbackFrame)
widget = self.createButton(frame, 'Playback', '<<',
'Jump to start of playback',
self.jumpToStartOfPlayback,
side = Tkinter.LEFT, expand = 1)
side = tkinter.LEFT, expand = 1)
widget['font'] = (('MSSansSerif', 12, 'bold'))
widget = self.createCheckbutton(frame, 'Playback', 'Play',
'Start/Stop playback',
self.startStopPlayback, 0,
side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 1)
side = tkinter.LEFT, fill = tkinter.BOTH, expand = 1)
widget.configure(anchor = 'center', justify = 'center',
relief = Tkinter.RAISED, font = ('MSSansSerif', 12, 'bold'))
relief = tkinter.RAISED, font = ('MSSansSerif', 12, 'bold'))
widget = self.createButton(frame, 'Playback', '>>',
'Jump to end of playback',
self.jumpToEndOfPlayback,
side = Tkinter.LEFT, expand = 1)
side = tkinter.LEFT, expand = 1)
widget['font'] = (('MSSansSerif', 12, 'bold'))
self.createCheckbutton(frame, 'Playback', 'Loop',
'On: loop playback',
self.setLoopPlayback, self.loopPlayback,
side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 0)
frame.pack(fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.BOTH, expand = 0)
frame.pack(fill = tkinter.X, expand = 1)
# Speed control
frame = Frame(playbackFrame)
widget = Button(frame, text = 'PB Speed Vernier', relief = Tkinter.FLAT,
widget = Button(frame, text = 'PB Speed Vernier', relief = tkinter.FLAT,
command = lambda s = self: s.setSpeedScale(1.0))
widget.pack(side = Tkinter.LEFT, expand = 0)
widget.pack(side = tkinter.LEFT, expand = 0)
self.speedScale = Scale(frame, from_ = -1, to = 1,
resolution = 0.01, showvalue = 0,
width = 10, orient = 'horizontal',
command = self.setPlaybackSF)
self.speedScale.pack(side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
self.speedScale.pack(side = tkinter.LEFT, fill = tkinter.X, expand = 1)
self.speedVar = StringVar()
self.speedVar.set("0.00")
self.speedEntry = Entry(frame, textvariable = self.speedVar,
@ -368,14 +375,14 @@ class MopathRecorder(AppShell, DirectObject):
'<Return>',
lambda e = None, s = self: s.setSpeedScale(
string.atof(s.speedVar.get())))
self.speedEntry.pack(side = Tkinter.LEFT, expand = 0)
frame.pack(fill = Tkinter.X, expand = 1)
self.speedEntry.pack(side = tkinter.LEFT, expand = 0)
frame.pack(fill = tkinter.X, expand = 1)
playbackFrame.pack(fill = Tkinter.X, pady = 2)
playbackFrame.pack(fill = tkinter.X, pady = 2)
# Create notebook pages
self.mainNotebook = Pmw.NoteBook(interior)
self.mainNotebook.pack(fill = Tkinter.BOTH, expand = 1)
self.mainNotebook.pack(fill = tkinter.BOTH, expand = 1)
self.resamplePage = self.mainNotebook.add('Resample')
self.refinePage = self.mainNotebook.add('Refine')
self.extendPage = self.mainNotebook.add('Extend')
@ -386,35 +393,35 @@ class MopathRecorder(AppShell, DirectObject):
## RESAMPLE PAGE
label = Label(self.resamplePage, text = 'RESAMPLE CURVE',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
# Resample
resampleFrame = Frame(
self.resamplePage, relief = Tkinter.SUNKEN, borderwidth = 2)
self.resamplePage, relief = tkinter.SUNKEN, borderwidth = 2)
label = Label(resampleFrame, text = 'RESAMPLE CURVE',
font=('MSSansSerif', 12, 'bold')).pack()
widget = self.createSlider(
resampleFrame, 'Resample', 'Num. Samples',
'Number of samples in resampled curve',
resolution = 1, min = 2, max = 1000, command = self.setNumSamples)
widget.component('hull')['relief'] = Tkinter.RIDGE
widget.component('hull')['relief'] = tkinter.RIDGE
widget['postCallback'] = self.sampleCurve
frame = Frame(resampleFrame)
self.createButton(
frame, 'Resample', 'Make Even',
'Apply timewarp so resulting path has constant velocity',
self.makeEven, side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
self.makeEven, side = tkinter.LEFT, fill = tkinter.X, expand = 1)
self.createButton(
frame, 'Resample', 'Face Forward',
'Compute HPR so resulting hpr curve faces along xyz tangent',
self.faceForward, side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
frame.pack(fill = Tkinter.X, expand = 0)
resampleFrame.pack(fill = Tkinter.X, expand = 0, pady = 2)
self.faceForward, side = tkinter.LEFT, fill = tkinter.X, expand = 1)
frame.pack(fill = tkinter.X, expand = 0)
resampleFrame.pack(fill = tkinter.X, expand = 0, pady = 2)
# Desample
desampleFrame = Frame(
self.resamplePage, relief = Tkinter.SUNKEN, borderwidth = 2)
self.resamplePage, relief = tkinter.SUNKEN, borderwidth = 2)
Label(desampleFrame, text = 'DESAMPLE CURVE',
font=('MSSansSerif', 12, 'bold')).pack()
widget = self.createSlider(
@ -422,16 +429,16 @@ class MopathRecorder(AppShell, DirectObject):
'Specify number of points to skip between samples',
min = 1, max = 100, resolution = 1,
command = self.setDesampleFrequency)
widget.component('hull')['relief'] = Tkinter.RIDGE
widget.component('hull')['relief'] = tkinter.RIDGE
widget['postCallback'] = self.desampleCurve
desampleFrame.pack(fill = Tkinter.X, expand = 0, pady = 2)
desampleFrame.pack(fill = tkinter.X, expand = 0, pady = 2)
## REFINE PAGE ##
refineFrame = Frame(self.refinePage, relief = Tkinter.SUNKEN,
refineFrame = Frame(self.refinePage, relief = tkinter.SUNKEN,
borderwidth = 2)
label = Label(refineFrame, text = 'REFINE CURVE',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
widget = self.createSlider(refineFrame,
'Refine Page', 'Refine From',
@ -460,14 +467,14 @@ class MopathRecorder(AppShell, DirectObject):
command = self.setRefineStop)
widget['preCallback'] = self.setRefineMode
widget['postCallback'] = self.getPostPoints
refineFrame.pack(fill = Tkinter.X)
refineFrame.pack(fill = tkinter.X)
## EXTEND PAGE ##
extendFrame = Frame(self.extendPage, relief = Tkinter.SUNKEN,
extendFrame = Frame(self.extendPage, relief = tkinter.SUNKEN,
borderwidth = 2)
label = Label(extendFrame, text = 'EXTEND CURVE',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
widget = self.createSlider(extendFrame,
'Extend Page', 'Extend From',
@ -483,14 +490,14 @@ class MopathRecorder(AppShell, DirectObject):
resolution = 0.01,
command = self.setControlStart)
widget['preCallback'] = self.setExtendMode
extendFrame.pack(fill = Tkinter.X)
extendFrame.pack(fill = tkinter.X)
## CROP PAGE ##
cropFrame = Frame(self.cropPage, relief = Tkinter.SUNKEN,
cropFrame = Frame(self.cropPage, relief = tkinter.SUNKEN,
borderwidth = 2)
label = Label(cropFrame, text = 'CROP CURVE',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
widget = self.createSlider(
cropFrame,
@ -508,11 +515,11 @@ class MopathRecorder(AppShell, DirectObject):
self.createButton(cropFrame, 'Crop Page', 'Crop Curve',
'Crop curve to specified from to times',
self.cropCurve, fill = Tkinter.NONE)
cropFrame.pack(fill = Tkinter.X)
self.cropCurve, fill = tkinter.NONE)
cropFrame.pack(fill = tkinter.X)
## DRAW PAGE ##
drawFrame = Frame(self.drawPage, relief = Tkinter.SUNKEN,
drawFrame = Frame(self.drawPage, relief = tkinter.SUNKEN,
borderwidth = 2)
self.sf = Pmw.ScrolledFrame(self.drawPage, horizflex = 'elastic')
@ -521,57 +528,57 @@ class MopathRecorder(AppShell, DirectObject):
label = Label(sfFrame, text = 'CURVE RENDERING STYLE',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
frame = Frame(sfFrame)
Label(frame, text = 'SHOW:').pack(side = Tkinter.LEFT, expand = 0)
Label(frame, text = 'SHOW:').pack(side = tkinter.LEFT, expand = 0)
widget = self.createCheckbutton(
frame, 'Style', 'Path',
'On: path is visible', self.setPathVis, 1,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
widget = self.createCheckbutton(
frame, 'Style', 'Knots',
'On: path knots are visible', self.setKnotVis, 1,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
widget = self.createCheckbutton(
frame, 'Style', 'CVs',
'On: path CVs are visible', self.setCvVis, 0,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
widget = self.createCheckbutton(
frame, 'Style', 'Hull',
'On: path hull is visible', self.setHullVis, 0,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
widget = self.createCheckbutton(
frame, 'Style', 'Trace',
'On: record is visible', self.setTraceVis, 0,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
widget = self.createCheckbutton(
frame, 'Style', 'Marker',
'On: playback marker is visible', self.setMarkerVis, 0,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
frame.pack(fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
frame.pack(fill = tkinter.X, expand = 1)
# Sliders
widget = self.createSlider(
sfFrame, 'Style', 'Num Segs',
'Set number of segments used to approximate each parametric unit',
min = 1.0, max = 400, resolution = 1.0,
value = 40,
command = self.setNumSegs, side = Tkinter.TOP)
widget.component('hull')['relief'] = Tkinter.RIDGE
command = self.setNumSegs, side = tkinter.TOP)
widget.component('hull')['relief'] = tkinter.RIDGE
widget = self.createSlider(
sfFrame, 'Style', 'Num Ticks',
'Set number of tick marks drawn for each unit of time',
min = 0.0, max = 10.0, resolution = 1.0,
value = 0.0,
command = self.setNumTicks, side = Tkinter.TOP)
widget.component('hull')['relief'] = Tkinter.RIDGE
command = self.setNumTicks, side = tkinter.TOP)
widget.component('hull')['relief'] = tkinter.RIDGE
widget = self.createSlider(
sfFrame, 'Style', 'Tick Scale',
'Set visible size of time tick marks',
min = 0.01, max = 100.0, resolution = 0.01,
value = 5.0,
command = self.setTickScale, side = Tkinter.TOP)
widget.component('hull')['relief'] = Tkinter.RIDGE
command = self.setTickScale, side = tkinter.TOP)
widget.component('hull')['relief'] = tkinter.RIDGE
self.createColorEntry(
sfFrame, 'Style', 'Path Color',
'Color of curve',
@ -598,14 +605,14 @@ class MopathRecorder(AppShell, DirectObject):
command = self.setHullColor,
value = [255.0,128.0,128.0,255.0])
#drawFrame.pack(fill = Tkinter.X)
#drawFrame.pack(fill = tkinter.X)
## OPTIONS PAGE ##
optionsFrame = Frame(self.optionsPage, relief = Tkinter.SUNKEN,
optionsFrame = Frame(self.optionsPage, relief = tkinter.SUNKEN,
borderwidth = 2)
label = Label(optionsFrame, text = 'RECORDING OPTIONS',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
# Hooks
frame = Frame(optionsFrame)
widget = self.createLabeledEntry(
@ -614,7 +621,7 @@ class MopathRecorder(AppShell, DirectObject):
value = self.startStopHook,
command = self.setStartStopHook)[0]
label = self.getWidget('Recording', 'Record Hook-Label')
label.configure(width = 16, anchor = Tkinter.W)
label.configure(width = 16, anchor = tkinter.W)
self.setStartStopHook()
widget = self.createLabeledEntry(
frame, 'Recording', 'Keyframe Hook',
@ -622,9 +629,9 @@ class MopathRecorder(AppShell, DirectObject):
value = self.keyframeHook,
command = self.setKeyframeHook)[0]
label = self.getWidget('Recording', 'Keyframe Hook-Label')
label.configure(width = 16, anchor = Tkinter.W)
label.configure(width = 16, anchor = tkinter.W)
self.setKeyframeHook()
frame.pack(expand = 1, fill = Tkinter.X)
frame.pack(expand = 1, fill = tkinter.X)
# PreRecordFunc
frame = Frame(optionsFrame)
widget = self.createComboBox(
@ -632,17 +639,17 @@ class MopathRecorder(AppShell, DirectObject):
'Function called before sampling each point',
PRF_UTILITIES, self.setPreRecordFunc,
history = 1, expand = 1)
widget.configure(label_width = 16, label_anchor = Tkinter.W)
widget.configure(label_width = 16, label_anchor = tkinter.W)
widget.configure(entryfield_entry_state = 'normal')
# Initialize preRecordFunc
self.preRecordFunc = eval(PRF_UTILITIES[0])
self.createCheckbutton(frame, 'Recording', 'PRF Active',
'On: Pre Record Func enabled',
None, 0,
side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 0)
frame.pack(expand = 1, fill = Tkinter.X)
side = tkinter.LEFT, fill = tkinter.BOTH, expand = 0)
frame.pack(expand = 1, fill = tkinter.X)
# Pack record frame
optionsFrame.pack(fill = Tkinter.X, pady = 2)
optionsFrame.pack(fill = tkinter.X, pady = 2)
self.mainNotebook.setnaturalsize()
@ -682,16 +689,16 @@ class MopathRecorder(AppShell, DirectObject):
marker if subnode selected
"""
taskMgr.remove(self.name + '-curveEditTask')
print nodePath.id()
if nodePath.id() in self.playbackMarkerIds:
print(nodePath.get_key())
if nodePath.get_key() in self.playbackMarkerIds:
SEditor.select(self.playbackMarker)
elif nodePath.id() in self.tangentMarkerIds:
elif nodePath.get_key() in self.tangentMarkerIds:
SEditor.select(self.tangentMarker)
elif nodePath.id() == self.playbackMarker.id():
elif nodePath.get_key() == self.playbackMarker.get_key():
self.tangentGroup.show()
taskMgr.add(self.curveEditTask,
self.name + '-curveEditTask')
elif nodePath.id() == self.tangentMarker.id():
elif nodePath.get_key() == self.tangentMarker.get_key():
self.tangentGroup.show()
taskMgr.add(self.curveEditTask,
self.name + '-curveEditTask')
@ -699,7 +706,7 @@ class MopathRecorder(AppShell, DirectObject):
self.tangentGroup.hide()
def getChildIds(self, nodePath):
ids = [nodePath.id()]
ids = [nodePath.get_key()]
kids = nodePath.getChildren()
for kid in kids:
ids += self.getChildIds(kid)
@ -710,14 +717,14 @@ class MopathRecorder(AppShell, DirectObject):
Hook called upon deselection of a node path used to select playback
marker if subnode selected
"""
if ((nodePath.id() == self.playbackMarker.id()) or
(nodePath.id() == self.tangentMarker.id())):
if ((nodePath.get_key() == self.playbackMarker.get_key()) or
(nodePath.get_key() == self.tangentMarker.get_key())):
self.tangentGroup.hide()
def curveEditTask(self,state):
if self.curveCollection != None:
# Update curve position
if self.manipulandumId == self.playbackMarker.id():
if self.manipulandumId == self.playbackMarker.get_key():
# Show playback marker
self.playbackMarker.getChild(0).show()
pos = Point3(0)
@ -731,7 +738,7 @@ class MopathRecorder(AppShell, DirectObject):
# Note: this calls recompute on the curves
self.nurbsCurveDrawer.draw()
# Update tangent
if self.manipulandumId == self.tangentMarker.id():
if self.manipulandumId == self.tangentMarker.get_key():
# If manipulating marker, update tangent
# Hide playback marker
self.playbackMarker.getChild(0).hide()
@ -766,10 +773,10 @@ class MopathRecorder(AppShell, DirectObject):
def manipulateObjectStartHook(self):
self.manipulandumId = None
if SEditor.selected.last:
if SEditor.selected.last.id() == self.playbackMarker.id():
self.manipulandumId = self.playbackMarker.id()
elif SEditor.selected.last.id() == self.tangentMarker.id():
self.manipulandumId = self.tangentMarker.id()
if SEditor.selected.last.get_key() == self.playbackMarker.get_key():
self.manipulandumId = self.playbackMarker.get_key()
elif SEditor.selected.last.get_key() == self.tangentMarker.get_key():
self.manipulandumId = self.tangentMarker.get_key()
def manipulateObjectCleanupHook(self):
# Clear flag
@ -799,7 +806,7 @@ class MopathRecorder(AppShell, DirectObject):
def createNewPointSet(self, curveName = None):
if curveName == None:
self.pointSetName = self.name + '-ps-' + `self.pointSetCount`
self.pointSetName = self.name + '-ps-' + repr(self.pointSetCount)
else:
self.pointSetName = curveName
# Update dictionary and record pointer to new point set
@ -1137,7 +1144,7 @@ class MopathRecorder(AppShell, DirectObject):
def computeCurves(self):
# Check to make sure curve fitters have points
if (self.curveFitter.getNumSamples() == 0):
print 'MopathRecorder.computeCurves: Must define curve first'
print('MopathRecorder.computeCurves: Must define curve first')
return
# Create curves
# XYZ
@ -1282,8 +1289,8 @@ class MopathRecorder(AppShell, DirectObject):
dictName = name
else:
# Generate a unique name for the dict
dictName = name # + '-' + `nodePath.id()`
if not dict.has_key(dictName):
dictName = name # + '-' + repr(nodePath.get_key())
if dictName not in dict:
# Update combo box to include new item
names.append(dictName)
listbox = menu.component('scrolledlist')
@ -1386,7 +1393,7 @@ class MopathRecorder(AppShell, DirectObject):
def desampleCurve(self):
if (self.curveFitter.getNumSamples() == 0):
print 'MopathRecorder.desampleCurve: Must define curve first'
print('MopathRecorder.desampleCurve: Must define curve first')
return
# NOTE: This is destructive, points will be deleted from curve fitter
self.curveFitter.desample(self.desampleFrequency)
@ -1400,7 +1407,7 @@ class MopathRecorder(AppShell, DirectObject):
def sampleCurve(self, fCompute = 1, curveName = None):
if self.curveCollection == None:
print 'MopathRecorder.sampleCurve: Must define curve first'
print('MopathRecorder.sampleCurve: Must define curve first')
return
# Reset curve fitters
self.curveFitter.reset()
@ -1617,7 +1624,7 @@ class MopathRecorder(AppShell, DirectObject):
def cropCurve(self):
if self.pointSet == None:
print 'Empty Point Set'
print('Empty Point Set')
return
# Keep handle on old points
oldPoints = self.pointSet
@ -1653,15 +1660,15 @@ class MopathRecorder(AppShell, DirectObject):
# Use first directory in model path
mPath = getModelPath()
if mPath.getNumDirectories() > 0:
if `mPath.getDirectory(0)` == '.':
if repr(mPath.getDirectory(0)) == '.':
path = '.'
else:
path = mPath.getDirectory(0).toOsSpecific()
else:
path = '.'
if not os.path.isdir(path):
print 'MopathRecorder Info: Empty Model Path!'
print 'Using current directory'
print('MopathRecorder Info: Empty Model Path!')
print('Using current directory')
path = '.'
mopathFilename = askopenfilename(
defaultextension = '.egg',
@ -1692,15 +1699,15 @@ class MopathRecorder(AppShell, DirectObject):
# Use first directory in model path
mPath = getModelPath()
if mPath.getNumDirectories() > 0:
if `mPath.getDirectory(0)` == '.':
if repr(mPath.getDirectory(0)) == '.':
path = '.'
else:
path = mPath.getDirectory(0).toOsSpecific()
else:
path = '.'
if not os.path.isdir(path):
print 'MopathRecorder Info: Empty Model Path!'
print 'Using current directory'
print('MopathRecorder Info: Empty Model Path!')
print('Using current directory')
path = '.'
mopathFilename = asksaveasfilename(
defaultextension = '.egg',
@ -1734,28 +1741,28 @@ class MopathRecorder(AppShell, DirectObject):
def createLabeledEntry(self, parent, category, text, balloonHelp,
value = '', command = None,
relief = 'sunken', side = Tkinter.LEFT,
relief = 'sunken', side = tkinter.LEFT,
expand = 1, width = 12):
frame = Frame(parent)
variable = StringVar()
variable.set(value)
label = Label(frame, text = text)
label.pack(side = Tkinter.LEFT, fill = Tkinter.X)
label.pack(side = tkinter.LEFT, fill = tkinter.X)
self.bind(label, balloonHelp)
self.widgetDict[category + '-' + text + '-Label'] = label
entry = Entry(frame, width = width, relief = relief,
textvariable = variable)
entry.pack(side = Tkinter.LEFT, fill = Tkinter.X, expand = expand)
entry.pack(side = tkinter.LEFT, fill = tkinter.X, expand = expand)
self.bind(entry, balloonHelp)
self.widgetDict[category + '-' + text] = entry
self.variableDict[category + '-' + text] = variable
if command:
entry.bind('<Return>', command)
frame.pack(side = side, fill = Tkinter.X, expand = expand)
frame.pack(side = side, fill = tkinter.X, expand = expand)
return (frame, label, entry)
def createButton(self, parent, category, text, balloonHelp, command,
side = 'top', expand = 0, fill = Tkinter.X):
side = 'top', expand = 0, fill = tkinter.X):
widget = Button(parent, text = text)
# Do this after the widget so command isn't called on creation
widget['command'] = command
@ -1766,10 +1773,10 @@ class MopathRecorder(AppShell, DirectObject):
def createCheckbutton(self, parent, category, text,
balloonHelp, command, initialState,
side = 'top', fill = Tkinter.X, expand = 0):
side = 'top', fill = tkinter.X, expand = 0):
bool = BooleanVar()
bool.set(initialState)
widget = Checkbutton(parent, text = text, anchor = Tkinter.W,
widget = Checkbutton(parent, text = text, anchor = tkinter.W,
variable = bool)
# Do this after the widget so command isn't called on creation
widget['command'] = command
@ -1781,8 +1788,8 @@ class MopathRecorder(AppShell, DirectObject):
def createRadiobutton(self, parent, side, category, text,
balloonHelp, variable, value,
command = None, fill = Tkinter.X, expand = 0):
widget = Radiobutton(parent, text = text, anchor = Tkinter.W,
command = None, fill = tkinter.X, expand = 0):
widget = Radiobutton(parent, text = text, anchor = tkinter.W,
variable = variable, value = value)
# Do this after the widget so command isn't called on creation
widget['command'] = command
@ -1798,10 +1805,10 @@ class MopathRecorder(AppShell, DirectObject):
kw['min'] = min
kw['maxVelocity'] = maxVelocity
kw['resolution'] = resolution
widget = apply(Floater, (parent,), kw)
widget = Floater(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget, balloonHelp)
self.widgetDict[category + '-' + text] = widget
return widget
@ -1809,10 +1816,10 @@ class MopathRecorder(AppShell, DirectObject):
def createAngleDial(self, parent, category, text, balloonHelp,
command = None, **kw):
kw['text'] = text
widget = apply(AngleDial,(parent,), kw)
widget = AngleDial(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget, balloonHelp)
self.widgetDict[category + '-' + text] = widget
return widget
@ -1820,13 +1827,13 @@ class MopathRecorder(AppShell, DirectObject):
def createSlider(self, parent, category, text, balloonHelp,
command = None, min = 0.0, max = 1.0,
resolution = None,
side = Tkinter.TOP, fill = Tkinter.X, expand = 1, **kw):
side = tkinter.TOP, fill = tkinter.X, expand = 1, **kw):
kw['text'] = text
kw['min'] = min
kw['max'] = max
kw['resolution'] = resolution
#widget = apply(EntryScale, (parent,), kw)
widget = apply(Slider, (parent,), kw)
widget = Slider(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(side = side, fill = fill, expand = expand)
@ -1837,12 +1844,12 @@ class MopathRecorder(AppShell, DirectObject):
def createEntryScale(self, parent, category, text, balloonHelp,
command = None, min = 0.0, max = 1.0,
resolution = None,
side = Tkinter.TOP, fill = Tkinter.X, expand = 1, **kw):
side = tkinter.TOP, fill = tkinter.X, expand = 1, **kw):
kw['text'] = text
kw['min'] = min
kw['max'] = max
kw['resolution'] = resolution
widget = apply(EntryScale, (parent,), kw)
widget = EntryScale(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(side = side, fill = fill, expand = expand)
@ -1854,10 +1861,10 @@ class MopathRecorder(AppShell, DirectObject):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(Vector2Entry, (parent,), kw)
widget = Vector2Entry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget, balloonHelp)
self.widgetDict[category + '-' + text] = widget
return widget
@ -1866,10 +1873,10 @@ class MopathRecorder(AppShell, DirectObject):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(Vector3Entry, (parent,), kw)
widget = Vector3Entry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget, balloonHelp)
self.widgetDict[category + '-' + text] = widget
return widget
@ -1878,10 +1885,10 @@ class MopathRecorder(AppShell, DirectObject):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(ColorEntry, (parent,) ,kw)
widget = ColorEntry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget, balloonHelp)
self.widgetDict[category + '-' + text] = widget
return widget
@ -1891,13 +1898,13 @@ class MopathRecorder(AppShell, DirectObject):
optionVar = StringVar()
if len(items) > 0:
optionVar.set(items[0])
widget = Pmw.OptionMenu(parent, labelpos = Tkinter.W, label_text = text,
widget = Pmw.OptionMenu(parent, labelpos = tkinter.W, label_text = text,
label_width = 12, menu_tearoff = 1,
menubutton_textvariable = optionVar,
items = items)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget.component('menubutton'), balloonHelp)
self.widgetDict[category + '-' + text] = widget
self.variableDict[category + '-' + text] = optionVar
@ -1905,9 +1912,9 @@ class MopathRecorder(AppShell, DirectObject):
def createComboBox(self, parent, category, text, balloonHelp,
items, command, history = 0,
side = Tkinter.LEFT, expand = 0, fill = Tkinter.X):
side = tkinter.LEFT, expand = 0, fill = tkinter.X):
widget = Pmw.ComboBox(parent,
labelpos = Tkinter.W,
labelpos = tkinter.W,
label_text = text,
label_anchor = 'e',
label_width = 12,
@ -1959,14 +1966,14 @@ class MopathRecorder(AppShell, DirectObject):
def bindMotionPathToNode(self):
if self.curveCollection == None:
print '----Error: you need to select or create a curve first!'
print('----Error: you need to select or create a curve first!')
return
self.accept('MP_checkName', self.bindMotionPath)
self.askName = namePathPanel(MopathRecorder.count)
return
def bindMotionPath(self,name=None,test=None):
print test
print(test)
self.ignore('MP_checkName')
del self.askName
self.curveCollection.getCurve(0).setName(name)
@ -1993,7 +2000,7 @@ class MopathRecorder(AppShell, DirectObject):
If the list is not None, it will put the vurve back into the curve list.
else, do nothing.
'''
print curveList
print(curveList)
self.ignore('curveListFor'+self.name)
if curveList != None:
for collection in curveList:
@ -2037,8 +2044,8 @@ class namePathPanel(AppShell):
dataFrame = Frame(mainFrame)
label = Label(dataFrame, text='This name will be used as a reference for this Path.',font=('MSSansSerif', 10))
label.pack(side = Tkinter.TOP, expand = 0, fill = Tkinter.X)
dataFrame.pack(side = Tkinter.TOP, expand = 0, fill = Tkinter.X, padx=5, pady=10)
label.pack(side = tkinter.TOP, expand = 0, fill = tkinter.X)
dataFrame.pack(side = tkinter.TOP, expand = 0, fill = tkinter.X, padx=5, pady=10)
dataFrame = Frame(mainFrame)
self.inputZone = Pmw.EntryField(dataFrame, labelpos='w', label_text = 'Name Selected Path: ',
@ -2046,14 +2053,14 @@ class namePathPanel(AppShell):
label_font=('MSSansSerif', 10),
validate = None,
entry_width = 20)
self.inputZone.pack(side = Tkinter.LEFT, fill=Tkinter.X,expand=0)
self.inputZone.pack(side = tkinter.LEFT, fill=tkinter.X,expand=0)
self.button_ok = Button(dataFrame, text="OK", command=self.ok_press,width=10)
self.button_ok.pack(fill=Tkinter.X,expand=0,side=Tkinter.LEFT, padx = 3)
self.button_ok.pack(fill=tkinter.X,expand=0,side=tkinter.LEFT, padx = 3)
dataFrame.pack(side = Tkinter.TOP, expand = 0, fill = Tkinter.X, padx=10, pady=10)
dataFrame.pack(side = tkinter.TOP, expand = 0, fill = tkinter.X, padx=10, pady=10)
mainFrame.pack(expand = 1, fill = Tkinter.BOTH)
mainFrame.pack(expand = 1, fill = tkinter.BOTH)

View File

@ -1,4 +1,4 @@
from pandac.PandaModules import *
from panda3d.core import *
import seParticles
import seForceGroup
from direct.directnotify import DirectNotifyGlobal
@ -209,9 +209,9 @@ class ParticleEffect(NodePath):
"""loadConfig(filename)"""
#try:
# if vfs:
print vfs.readFile(filename)
exec vfs.readFile(filename)
print "Particle Effect Reading using VFS"
print(vfs.readFile(filename))
exec(vfs.readFile(filename))
print("Particle Effect Reading using VFS")
# else:
# execfile(filename.toOsSpecific())
# print "Shouldnt be wrong"

View File

@ -2,9 +2,7 @@
# Import Tkinter, Pmw, and the floater code from this directory tree.
from direct.tkwidgets.AppShell import AppShell
from tkFileDialog import *
from tkSimpleDialog import askstring
import os, Pmw, Tkinter
import os, Pmw, sys
from direct.tkwidgets.Dial import AngleDial
from direct.tkwidgets.Floater import Floater
from direct.tkwidgets.Slider import Slider
@ -15,6 +13,15 @@ import seForceGroup
import seParticles
import seParticleEffect
if sys.version_info >= (3, 0):
from tkinter.filedialog import *
from tkinter.simpledialog import askstring
else:
from tkFileDialog import *
from tkSimpleDialog import askstring
class ParticlePanel(AppShell):
# Override class variables
appname = 'Particle Panel'
@ -774,7 +781,7 @@ class ParticlePanel(AppShell):
kw['min'] = min
kw['resolution'] = resolution
kw['numDigits'] = numDigits
widget = apply(Floater, (parent,), kw)
widget = Floater(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -786,7 +793,7 @@ class ParticlePanel(AppShell):
command = None, **kw):
kw['text'] = text
kw['style'] = 'mini'
widget = apply(AngleDial,(parent,), kw)
widget = AngleDial(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -801,7 +808,7 @@ class ParticlePanel(AppShell):
kw['min'] = min
kw['max'] = max
kw['resolution'] = resolution
widget = apply(Slider, (parent,), kw)
widget = Slider(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -813,7 +820,7 @@ class ParticlePanel(AppShell):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(Vector2Entry, (parent,), kw)
widget = Vector2Entry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -825,7 +832,7 @@ class ParticlePanel(AppShell):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(Vector3Entry, (parent,), kw)
widget = Vector3Entry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -837,7 +844,7 @@ class ParticlePanel(AppShell):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(ColorEntry, (parent,) ,kw)
widget = ColorEntry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -992,7 +999,7 @@ class ParticlePanel(AppShell):
self.mainNotebook.selectpage('System')
self.updateInfo('System')
else:
print 'ParticlePanel: No effect named ' + name
print('ParticlePanel: No effect named ' + name)
def toggleEffect(self, effect, var):
if var.get():
@ -1041,15 +1048,15 @@ class ParticlePanel(AppShell):
# Find path to particle directory
pPath = getParticlePath()
if pPath.getNumDirectories() > 0:
if `pPath.getDirectory(0)` == '.':
if repr(pPath.getDirectory(0)) == '.':
path = '.'
else:
path = pPath.getDirectory(0).toOsSpecific()
else:
path = '.'
if not os.path.isdir(path):
print 'ParticlePanel Warning: Invalid default DNA directory!'
print 'Using current directory'
print('ParticlePanel Warning: Invalid default DNA directory!')
print('Using current directory')
path = '.'
particleFilename = askopenfilename(
defaultextension = '.ptf',
@ -1070,15 +1077,15 @@ class ParticlePanel(AppShell):
# Find path to particle directory
pPath = getParticlePath()
if pPath.getNumDirectories() > 0:
if `pPath.getDirectory(0)` == '.':
if repr(pPath.getDirectory(0)) == '.':
path = '.'
else:
path = pPath.getDirectory(0).toOsSpecific()
else:
path = '.'
if not os.path.isdir(path):
print 'ParticlePanel Warning: Invalid default DNA directory!'
print 'Using current directory'
print('ParticlePanel Warning: Invalid default DNA directory!')
print('Using current directory')
path = '.'
particleFilename = asksaveasfilename(
defaultextension = '.ptf',
@ -1654,7 +1661,7 @@ class ParticlePanel(AppShell):
def setRendererSpriteNonAnimatedTheta(self, theta):
self.particles.renderer.setNonanimatedTheta(theta)
def setRendererSpriteBlendMethod(self, blendMethod):
print blendMethod
print(blendMethod)
if blendMethod == 'PP_NO_BLEND':
bMethod = BaseParticleRenderer.PPNOBLEND
elif blendMethod == 'PP_BLEND_LINEAR':
@ -1863,7 +1870,7 @@ class ParticlePanel(AppShell):
count, force):
def setVec(vec, f = force):
f.setVector(vec[0], vec[1], vec[2])
forceName = 'Vector Force-' + `count`
forceName = 'Vector Force-' + repr(count)
frame = self.createForceFrame(forcePage, forceName, force)
self.createLinearForceWidgets(frame, pageName, forceName, force)
vec = force.getLocalVector()
@ -1875,7 +1882,7 @@ class ParticlePanel(AppShell):
def createLinearRandomForceWidget(self, forcePage, pageName, count,
force, type):
forceName = type + ' Force-' + `count`
forceName = type + ' Force-' + repr(count)
frame = self.createForceFrame(forcePage, forceName, force)
self.createLinearForceWidgets(frame, pageName, forceName, force)
self.createForceActiveWidget(frame, pageName, forceName, force)
@ -1884,7 +1891,7 @@ class ParticlePanel(AppShell):
count, force):
def setCoef(coef, f = force):
f.setCoef(coef)
forceName = 'Friction Force-' + `count`
forceName = 'Friction Force-' + repr(count)
frame = self.createForceFrame(forcePage, forceName, force)
self.createLinearForceWidgets(frame, pageName, forceName, force)
self.createFloater(frame, pageName, forceName + ' Coef',
@ -1895,7 +1902,7 @@ class ParticlePanel(AppShell):
def createLinearCylinderVortexForceWidget(self, forcePage, pageName,
count, force):
forceName = 'Vortex Force-' + `count`
forceName = 'Vortex Force-' + repr(count)
def setCoef(coef, f = force):
f.setCoef(coef)
def setLength(length, f = force):
@ -1934,7 +1941,7 @@ class ParticlePanel(AppShell):
f.setForceCenter(Point3(vec[0], vec[1], vec[2]))
def setRadius(radius, f = force):
f.setRadius(radius)
forceName = type + ' Force-' + `count`
forceName = type + ' Force-' + repr(count)
frame = self.createForceFrame(forcePage, forceName, force)
self.createLinearForceWidgets(frame, pageName, forceName, force)
var = self.createOptionMenu(

View File

@ -1,28 +1,8 @@
from pandac.PandaModules import *
from panda3d.core import *
from panda3d.physics import *
from direct.particles.ParticleManagerGlobal import *
from direct.showbase.PhysicsManagerGlobal import *
#Manakel 2/12/2005: replace from pandac import by from pandac.PandaModules import
from pandac.PandaModules import ParticleSystem
from pandac.PandaModules import BaseParticleFactory
from pandac.PandaModules import PointParticleFactory
from pandac.PandaModules import ZSpinParticleFactory
#import OrientedParticleFactory
from pandac.PandaModules import BaseParticleRenderer
from pandac.PandaModules import PointParticleRenderer
from pandac.PandaModules import LineParticleRenderer
from pandac.PandaModules import GeomParticleRenderer
from pandac.PandaModules import SparkleParticleRenderer
from pandac.PandaModules import SpriteParticleRenderer
from pandac.PandaModules import BaseParticleEmitter
from pandac.PandaModules import BoxEmitter
from pandac.PandaModules import DiscEmitter
from pandac.PandaModules import LineEmitter
from pandac.PandaModules import PointEmitter
from pandac.PandaModules import RectangleEmitter
from pandac.PandaModules import RingEmitter
from pandac.PandaModules import SphereSurfaceEmitter
from pandac.PandaModules import SphereVolumeEmitter
from pandac.PandaModules import TangentRingEmitter
import string
import os
from direct.directnotify import DirectNotifyGlobal
@ -113,7 +93,7 @@ class Particles(ParticleSystem):
elif (type == "OrientedParticleFactory"):
self.factory = OrientedParticleFactory.OrientedParticleFactory()
else:
print "unknown factory type: %s" % type
print("unknown factory type: %s" % type)
return None
self.factory.setLifespanBase(0.5)
ParticleSystem.ParticleSystem.setFactory(self, self.factory)
@ -152,7 +132,7 @@ class Particles(ParticleSystem):
# See sourceFileName and sourceNodeName in SpriteParticleRenderer-extensions.py
self.renderer.setTextureFromNode()
else:
print "unknown renderer type: %s" % type
print("unknown renderer type: %s" % type)
return None
ParticleSystem.ParticleSystem.setRenderer(self, self.renderer)
@ -183,7 +163,7 @@ class Particles(ParticleSystem):
elif (type == "TangentRingEmitter"):
self.emitter = TangentRingEmitter.TangentRingEmitter()
else:
print "unknown emitter type: %s" % type
print("unknown emitter type: %s" % type)
return None
ParticleSystem.ParticleSystem.setEmitter(self, self.emitter)

View File

@ -5,9 +5,16 @@ from direct.directtools.DirectGlobals import *
from direct.tkwidgets.AppShell import AppShell
from direct.tkwidgets.Dial import AngleDial
from direct.tkwidgets.Floater import Floater
from Tkinter import Button, Menubutton, Menu, StringVar
from pandac.PandaModules import *
import Tkinter, Pmw
from panda3d.core import *
import sys, Pmw
if sys.version_info >= (3, 0):
from tkinter import Button, Menubutton, Menu, StringVar
import tkinter
else:
from Tkinter import Button, Menubutton, Menu, StringVar
import Tkinter as tkinter
"""
TODO:
Task to monitor pose
@ -84,7 +91,7 @@ class Placer(AppShell):
def createInterface(self):
# The interior of the toplevel panel
interior = self.interior()
interior['relief'] = Tkinter.FLAT
interior['relief'] = tkinter.FLAT
# Add placer commands to menubar
self.menuBar.addmenu('Placer', 'Placer Panel Operations')
self.menuBar.addmenuitem('Placer', 'command',
@ -113,7 +120,7 @@ class Placer(AppShell):
# Get a handle to the menu frame
menuFrame = self.menuFrame
self.nodePathMenu = Pmw.ComboBox(
menuFrame, labelpos = Tkinter.W, label_text = 'Node Path:',
menuFrame, labelpos = tkinter.W, label_text = 'Node Path:',
entry_width = 20,
selectioncommand = self.selectNodePathNamed,
scrolledlist_items = self.nodePathNames)
@ -168,7 +175,7 @@ class Placer(AppShell):
tag_text = 'Position',
tag_font=('MSSansSerif', 14),
tag_activebackground = '#909090',
ring_relief = Tkinter.RIDGE)
ring_relief = tkinter.RIDGE)
posMenubutton = posGroup.component('tag')
self.bind(posMenubutton, 'Position menu operations')
posMenu = Menu(posMenubutton, tearoff = 0)
@ -182,7 +189,7 @@ class Placer(AppShell):
# Create the dials
self.posX = self.createcomponent('posX', (), None,
Floater, (posInterior,),
text = 'X', relief = Tkinter.FLAT,
text = 'X', relief = tkinter.FLAT,
value = 0.0,
label_foreground = 'Red')
self.posX['commandData'] = ['x']
@ -193,7 +200,7 @@ class Placer(AppShell):
self.posY = self.createcomponent('posY', (), None,
Floater, (posInterior,),
text = 'Y', relief = Tkinter.FLAT,
text = 'Y', relief = tkinter.FLAT,
value = 0.0,
label_foreground = '#00A000')
self.posY['commandData'] = ['y']
@ -204,7 +211,7 @@ class Placer(AppShell):
self.posZ = self.createcomponent('posZ', (), None,
Floater, (posInterior,),
text = 'Z', relief = Tkinter.FLAT,
text = 'Z', relief = tkinter.FLAT,
value = 0.0,
label_foreground = 'Blue')
self.posZ['commandData'] = ['z']
@ -219,7 +226,7 @@ class Placer(AppShell):
tag_text = 'Orientation',
tag_font=('MSSansSerif', 14),
tag_activebackground = '#909090',
ring_relief = Tkinter.RIDGE)
ring_relief = tkinter.RIDGE)
hprMenubutton = hprGroup.component('tag')
self.bind(hprMenubutton, 'Orientation menu operations')
hprMenu = Menu(hprMenubutton, tearoff = 0)
@ -234,7 +241,7 @@ class Placer(AppShell):
AngleDial, (hprInterior,),
style = 'mini',
text = 'H', value = 0.0,
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
label_foreground = 'blue')
self.hprH['commandData'] = ['h']
self.hprH['preCallback'] = self.xformStart
@ -246,7 +253,7 @@ class Placer(AppShell):
AngleDial, (hprInterior,),
style = 'mini',
text = 'P', value = 0.0,
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
label_foreground = 'red')
self.hprP['commandData'] = ['p']
self.hprP['preCallback'] = self.xformStart
@ -258,7 +265,7 @@ class Placer(AppShell):
AngleDial, (hprInterior,),
style = 'mini',
text = 'R', value = 0.0,
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
label_foreground = '#00A000')
self.hprR['commandData'] = ['r']
self.hprR['preCallback'] = self.xformStart
@ -276,7 +283,7 @@ class Placer(AppShell):
tag_pyclass = Menubutton,
tag_font=('MSSansSerif', 14),
tag_activebackground = '#909090',
ring_relief = Tkinter.RIDGE)
ring_relief = tkinter.RIDGE)
self.scaleMenubutton = scaleGroup.component('tag')
self.bind(self.scaleMenubutton, 'Scale menu operations')
self.scaleMenubutton['textvariable'] = self.scalingMode
@ -302,7 +309,7 @@ class Placer(AppShell):
self.scaleX = self.createcomponent('scaleX', (), None,
Floater, (scaleInterior,),
text = 'X Scale',
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
min = 0.0001, value = 1.0,
resetValue = 1.0,
label_foreground = 'Red')
@ -315,7 +322,7 @@ class Placer(AppShell):
self.scaleY = self.createcomponent('scaleY', (), None,
Floater, (scaleInterior,),
text = 'Y Scale',
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
min = 0.0001, value = 1.0,
resetValue = 1.0,
label_foreground = '#00A000')
@ -328,7 +335,7 @@ class Placer(AppShell):
self.scaleZ = self.createcomponent('scaleZ', (), None,
Floater, (scaleInterior,),
text = 'Z Scale',
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
min = 0.0001, value = 1.0,
resetValue = 1.0,
label_foreground = 'Blue')
@ -428,7 +435,7 @@ class Placer(AppShell):
background = self.nodePathMenuBG)
# Check to see if node path and ref node path are the same
if ((self.refCS != None) and
(self.refCS.id() == self['nodePath'].id())):
(self.refCS.get_key() == self['nodePath'].get_key())):
# Yes they are, use temp CS as ref
# This calls updatePlacer
self.setReferenceNodePath(self.tempCS)
@ -473,7 +480,7 @@ class Placer(AppShell):
listbox = self.refNodePathMenu.component('scrolledlist')
listbox.setlist(self.refNodePathNames)
# Check to see if node path and ref node path are the same
if (nodePath != None) and (nodePath.id() == self['nodePath'].id()):
if (nodePath != None) and (nodePath.get_key() == self['nodePath'].get_key()):
# Yes they are, use temp CS and update listbox accordingly
nodePath = self.tempCS
self.refNodePathMenu.selectitem('parent')
@ -508,8 +515,8 @@ class Placer(AppShell):
dictName = name
else:
# Generate a unique name for the dict
dictName = name + '-' + `nodePath.id()`
if not dict.has_key(dictName):
dictName = name + '-' + repr(nodePath.get_key())
if dictName not in dict:
# Update combo box to include new item
names.append(dictName)
listbox = menu.component('scrolledlist')
@ -769,12 +776,12 @@ class Placer(AppShell):
posString = '%.2f, %.2f, %.2f' % (pos[0], pos[1], pos[2])
hprString = '%.2f, %.2f, %.2f' % (hpr[0], hpr[1], hpr[2])
scaleString = '%.2f, %.2f, %.2f' % (scale[0], scale[1], scale[2])
print 'NodePath: %s' % name
print 'Pos: %s' % posString
print 'Hpr: %s' % hprString
print 'Scale: %s' % scaleString
print ('%s.setPosHprScale(%s, %s, %s)' %
(name, posString, hprString, scaleString))
print('NodePath: %s' % name)
print('Pos: %s' % posString)
print('Hpr: %s' % hprString)
print('Scale: %s' % scaleString)
print(('%s.setPosHprScale(%s, %s, %s)' %
(name, posString, hprString, scaleString)))
def onDestroy(self, event):
# Remove hooks

View File

@ -9,9 +9,16 @@
#
#################################################################
from direct.showbase.DirectObject import DirectObject
from Tkinter import IntVar, Frame, Label
from seTree import TreeNode, TreeItem
import Pmw, Tkinter
import Pmw, sys
if sys.version_info >= (3, 0):
from tkinter import IntVar, Frame, Label
import tkinter
else:
from Tkinter import IntVar, Frame, Label
import Tkinter as tkinter
# changing these strings requires changing sceneEditor.py SGE_ strs too!
# This list of items will be showed on the pop out window when user right click on
@ -57,7 +64,7 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject):
# Setup up container
interior = self.interior()
interior.configure(relief = Tkinter.GROOVE, borderwidth = 2)
interior.configure(relief = tkinter.GROOVE, borderwidth = 2)
# Create a label and an entry
self._scrolledCanvas = self.createcomponent(
@ -69,7 +76,7 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject):
self._canvas = self._scrolledCanvas.component('canvas')
self._canvas['scrollregion'] = ('0i', '0i', '2i', '4i')
self._scrolledCanvas.resizescrollregion()
self._scrolledCanvas.pack(padx = 3, pady = 3, expand=1, fill = Tkinter.BOTH)
self._scrolledCanvas.pack(padx = 3, pady = 3, expand=1, fill = tkinter.BOTH)
self._canvas.bind('<ButtonPress-2>', self.mouse2Down)
self._canvas.bind('<B2-Motion>', self.mouse2Motion)
@ -91,8 +98,8 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject):
(), None,
Label, (interior,),
text = 'Active Reparent Target: ',
anchor = Tkinter.W, justify = Tkinter.LEFT)
self._label.pack(fill = Tkinter.X)
anchor = tkinter.W, justify = tkinter.LEFT)
self._label.pack(fill = tkinter.X)
# Add update parent label
def updateLabel(nodePath = None, s = self):
@ -141,11 +148,11 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject):
self._node.deselecttree()
def selectNodePath(self,nodePath, callBack=True):
item = self._node.find(nodePath.id())
item = self._node.find(nodePath.get_key())
if item!= None:
item.select(callBack)
else:
print '----SGE: Error Selection'
print('----SGE: Error Selection')
class SceneGraphExplorerItem(TreeItem):
@ -164,7 +171,7 @@ class SceneGraphExplorerItem(TreeItem):
return name
def GetKey(self):
return self.nodePath.id()
return self.nodePath.get_key()
def IsEditable(self):
# All nodes' names can be edited nowadays.

View File

@ -11,7 +11,7 @@
# (If we do change original directools, it will force user has to install the latest version of OUR Panda)
#
#################################################################
from pandac.PandaModules import GeomNode
from panda3d.core import GeomNode
from direct.directtools.DirectGlobals import *
from direct.directtools.DirectUtil import *
from seGeometry import *
@ -70,7 +70,7 @@ class SelectedNodePaths(DirectObject):
""" Select the specified node path. Multiselect as required """
# Do nothing if nothing selected
if not nodePath:
print 'Nothing selected!!'
print('Nothing selected!!')
return None
# Reset selected objects and highlight if multiSelect is false
@ -78,7 +78,7 @@ class SelectedNodePaths(DirectObject):
self.deselectAll()
# Get this pointer
id = nodePath.id()
id = nodePath.get_key()
# First see if its already in the selected dictionary
dnp = self.getSelectedDict(id)
# If so, we're done
@ -96,7 +96,7 @@ class SelectedNodePaths(DirectObject):
# Show its bounding box
dnp.highlight()
# Add it to the selected dictionary
self.selectedDict[dnp.id()] = dnp
self.selectedDict[dnp.get_key()] = dnp
# And update last
__builtins__["last"] = self.last = dnp
return dnp
@ -104,7 +104,7 @@ class SelectedNodePaths(DirectObject):
def deselect(self, nodePath):
""" Deselect the specified node path """
# Get this pointer
id = nodePath.id()
id = nodePath.get_key()
# See if it is in the selected dictionary
dnp = self.getSelectedDict(id)
if dnp:
@ -124,7 +124,7 @@ class SelectedNodePaths(DirectObject):
Return a list of all selected node paths. No verification of
connectivity is performed on the members of the list
"""
return self.selectedDict.values()[:]
return list(self.selectedDict.values())
def __getitem__(self,index):
return self.getSelectedAsList()[index]
@ -141,7 +141,7 @@ class SelectedNodePaths(DirectObject):
return None
def getDeselectedAsList(self):
return self.deselectedDict.values()[:]
return list(self.deselectedDict.values())
def getDeselectedDict(self, id):
"""
@ -204,15 +204,24 @@ class SelectedNodePaths(DirectObject):
# Remove all selected nodePaths from the Scene Graph
self.forEachSelectedNodePathDo(NodePath.remove)
def toggleVis(self, nodePath):
if nodePath.is_hidden():
nodePath.show()
else:
nodePath.hide()
def toggleVisSelected(self):
selected = self.last
# Toggle visibility of selected node paths
if selected:
selected.toggleVis()
if selected.is_hidden():
selected.show()
else:
selected.hide()
def toggleVisAll(self):
# Toggle viz for all selected node paths
self.forEachSelectedNodePathDo(NodePath.toggleVis)
self.forEachSelectedNodePathDo(self.toggleVis)
def isolateSelected(self):
selected = self.last
@ -221,7 +230,7 @@ class SelectedNodePaths(DirectObject):
def getDirectNodePath(self, nodePath):
# Get this pointer
id = nodePath.id()
id = nodePath.get_key()
# First check selected dict
dnp = self.getSelectedDict(id)
if dnp:
@ -376,7 +385,7 @@ class DirectBoundingBox:
return '%.2f %.2f %.2f' % (vec[0], vec[1], vec[2])
def __repr__(self):
return (`self.__class__` +
return (repr(self.__class__) +
'\nNodePath:\t%s\n' % self.nodePath.getName() +
'Min:\t\t%s\n' % self.vecAsString(self.min) +
'Max:\t\t%s\n' % self.vecAsString(self.max) +

View File

@ -388,7 +388,7 @@ class SeSession(DirectObject): ### Customized DirectSession
messenger.send('DIRECT_preSelectNodePath', [dnp])
if fResetAncestry:
# Update ancestry
self.ancestry = dnp.getAncestors()
self.ancestry = list(dnp.getAncestors())
self.ancestry.reverse()
self.ancestryIndex = 0
# Update the selectedNPReadout
@ -479,8 +479,8 @@ class SeSession(DirectObject): ### Customized DirectSession
def isNotCycle(self, nodePath, parent):
if nodePath.id() == parent.id():
print 'DIRECT.reparent: Invalid parent'
if nodePath.get_key() == parent.get_key():
print('DIRECT.reparent: Invalid parent')
return 0
elif parent.hasParent():
return self.isNotCycle(nodePath, parent.getParent())
@ -520,7 +520,10 @@ class SeSession(DirectObject): ### Customized DirectSession
nodePath = self.selected.last
if nodePath:
# Now toggle node path's visibility state
nodePath.toggleVis()
if nodePath.is_hidden():
nodePath.show()
else:
nodePath.hide()
def removeNodePath(self, nodePath = 'None Given'):
if nodePath == 'None Given':
@ -732,8 +735,8 @@ class SeSession(DirectObject): ### Customized DirectSession
hprB = base.camera.getHpr()
posE = Point3((radius*-1.41)+center.getX(), (radius*-1.41)+center.getY(), (radius*1.41)+center.getZ())
hprE = Point3(-45, -38, 0)
print posB, hprB
print posE, hprE
print(posB, hprB)
print(posE, hprE)
posInterval1 = base.camera.posInterval(time, posE, bakeInStart = 1)
posInterval2 = base.camera.posInterval(time, posB, bakeInStart = 1)

View File

@ -12,15 +12,21 @@
#
#################################################################
import os, sys, string, Pmw, Tkinter
import os, sys, string, Pmw
from direct.showbase.DirectObject import DirectObject
from Tkinter import IntVar, Menu, PhotoImage, Label, Frame, Entry
from pandac.PandaModules import *
from panda3d.core import *
if sys.version_info >= (3, 0):
import tkinter
from tkinter import IntVar, Menu, PhotoImage, Label, Frame, Entry
else:
import Tkinter as tkinter
from Tkinter import IntVar, Menu, PhotoImage, Label, Frame, Entry
# Initialize icon directory
ICONDIR = getModelPath().findFile(Filename('icons')).toOsSpecific()
if not os.path.isdir(ICONDIR):
raise RuntimeError, "can't find DIRECT icon directory (%s)" % `ICONDIR`
raise RuntimeError("can't find DIRECT icon directory (%r)" % ICONDIR)
class TreeNode:
@ -187,9 +193,9 @@ class TreeNode:
oldcursor = self.canvas['cursor']
self.canvas['cursor'] = "watch"
self.canvas.update()
self.canvas.delete(Tkinter.ALL) # XXX could be more subtle
self.canvas.delete(tkinter.ALL) # XXX could be more subtle
self.draw(7, 2)
x0, y0, x1, y1 = self.canvas.bbox(Tkinter.ALL)
x0, y0, x1, y1 = self.canvas.bbox(tkinter.ALL)
self.canvas.configure(scrollregion=(0, 0, x1, y1))
self.canvas['cursor'] = oldcursor
@ -208,7 +214,7 @@ class TreeNode:
self.kidKeys = []
for item in sublist:
key = item.GetKey()
if self.children.has_key(key):
if key in self.children:
child = self.children[key]
else:
child = TreeNode(self.canvas, self, item, self.menuList)
@ -309,7 +315,7 @@ class TreeNode:
def edit(self, event=None):
self.entry = Entry(self.label, bd=0, highlightthickness=1, width=0)
self.entry.insert(0, self.label['text'])
self.entry.selection_range(0, Tkinter.END)
self.entry.selection_range(0, tkinter.END)
self.entry.pack(ipadx=5)
self.entry.focus_set()
self.entry.bind("<Return>", self.edit_finish)
@ -344,7 +350,7 @@ class TreeNode:
for item in sublist:
key = item.GetKey()
# Use existing child or create new TreeNode if none exists
if self.children.has_key(key):
if key in self.children:
child = self.children[key]
else:
child = TreeNode(self.canvas, self, item, self.menuList)

View File

@ -19,6 +19,9 @@
#include "indent.h"
#include "panda_getopt.h"
using std::cerr;
using std::cout;
void
usage() {
cerr <<

View File

@ -16,6 +16,8 @@
#include "dcClassParameter.h"
#include "hashGenerator.h"
using std::string;
/**
*
*/
@ -201,13 +203,13 @@ validate_num_nested_fields(int num_nested_fields) const {
* identifier.
*/
void DCArrayParameter::
output_instance(ostream &out, bool brief, const string &prename,
output_instance(std::ostream &out, bool brief, const string &prename,
const string &name, const string &postname) const {
if (get_typedef() != nullptr) {
output_typedef_name(out, brief, prename, name, postname);
} else {
ostringstream strm;
std::ostringstream strm;
strm << "[";
_array_size_range.output(strm);

View File

@ -19,6 +19,8 @@
#include <math.h>
using std::string;
/**
*
*/
@ -151,7 +153,7 @@ get_element_divisor(int n) const {
*
*/
void DCAtomicField::
output(ostream &out, bool brief) const {
output(std::ostream &out, bool brief) const {
out << _name << "(";
if (!_elements.empty()) {
@ -174,7 +176,7 @@ output(ostream &out, bool brief) const {
* stream.
*/
void DCAtomicField::
write(ostream &out, bool brief, int indent_level) const {
write(std::ostream &out, bool brief, int indent_level) const {
indent(out, indent_level);
output(out, brief);
out << ";";
@ -270,7 +272,7 @@ do_check_match_atomic_field(const DCAtomicField *other) const {
*
*/
void DCAtomicField::
output_element(ostream &out, bool brief, DCParameter *element) const {
output_element(std::ostream &out, bool brief, DCParameter *element) const {
element->output(out, brief);
if (!brief && element->has_default_value()) {

View File

@ -25,6 +25,10 @@
#include "py_panda.h"
#endif
using std::ostream;
using std::ostringstream;
using std::string;
#ifdef WITHIN_PANDA
#include "pStatTimer.h"
@ -177,9 +181,9 @@ DCField *DCClass::
get_field(int n) const {
#ifndef NDEBUG //[
if (n < 0 || n >= (int)_fields.size()) {
cerr << *this << " "
std::cerr << *this << " "
<< "n:" << n << " _fields.size():"
<< (int)_fields.size() << endl;
<< (int)_fields.size() << std::endl;
// __asm { int 3 }
}
#endif //]
@ -749,7 +753,7 @@ pack_required_field(DCPacker &packer, PyObject *distobj,
if (result == nullptr) {
// We don't set this as an exception, since presumably the Python method
// itself has already triggered a Python exception.
cerr << "Error when calling " << getter_name << "\n";
std::cerr << "Error when calling " << getter_name << "\n";
return false;
}

View File

@ -128,8 +128,8 @@ get_nested_field(int n) const {
* identifier.
*/
void DCClassParameter::
output_instance(ostream &out, bool brief, const string &prename,
const string &name, const string &postname) const {
output_instance(std::ostream &out, bool brief, const std::string &prename,
const std::string &name, const std::string &postname) const {
if (get_typedef() != nullptr) {
output_typedef_name(out, brief, prename, name, postname);

View File

@ -57,7 +57,7 @@ as_switch() const {
* Write a string representation of this instance to <out>.
*/
void DCDeclaration::
output(ostream &out) const {
output(std::ostream &out) const {
output(out, true);
}
@ -65,6 +65,6 @@ output(ostream &out) const {
* Write a string representation of this instance to <out>.
*/
void DCDeclaration::
write(ostream &out, int indent_level) const {
write(std::ostream &out, int indent_level) const {
write(out, false, indent_level);
}

View File

@ -26,6 +26,8 @@
#include "pStatTimer.h"
#endif
using std::string;
/**
*
*/
@ -232,7 +234,7 @@ pack_args(DCPacker &packer, PyObject *sequence) const {
}
if (!Notify::ptr()->has_assert_failed()) {
ostringstream strm;
std::ostringstream strm;
PyObject *exc_type = PyExc_Exception;
if (as_parameter() != nullptr) {
@ -303,7 +305,7 @@ unpack_args(DCPacker &packer) const {
}
if (!Notify::ptr()->has_assert_failed()) {
ostringstream strm;
std::ostringstream strm;
PyObject *exc_type = PyExc_Exception;
if (packer.had_pack_error()) {
@ -315,7 +317,7 @@ unpack_args(DCPacker &packer) const {
dg.dump_hex(strm);
size_t error_byte = packer.get_num_unpacked_bytes() - start_byte;
strm << "Error detected on byte " << error_byte
<< " (" << hex << error_byte << dec << " hex)";
<< " (" << std::hex << error_byte << std::dec << " hex)";
exc_type = PyExc_RuntimeError;
} else {
@ -562,7 +564,7 @@ refresh_default_value() {
packer.begin_pack(this);
packer.pack_default_value();
if (!packer.end_pack()) {
cerr << "Error while packing default value for " << get_name() << "\n";
std::cerr << "Error while packing default value for " << get_name() << "\n";
} else {
_default_value.assign(packer.get_data(), packer.get_length());
}

View File

@ -28,6 +28,9 @@
#include "configVariableList.h"
#endif
using std::cerr;
using std::string;
/**
*
@ -122,7 +125,7 @@ read(Filename filename) {
#ifdef WITHIN_PANDA
filename.set_text();
VirtualFileSystem *vfs = VirtualFileSystem::get_global_ptr();
istream *in = vfs->open_read_file(filename, true);
std::istream *in = vfs->open_read_file(filename, true);
if (in == nullptr) {
cerr << "Cannot open " << filename << " for reading.\n";
return false;
@ -163,7 +166,7 @@ read(Filename filename) {
* (in which case the file might have been partially read).
*/
bool DCFile::
read(istream &in, const string &filename) {
read(std::istream &in, const string &filename) {
cerr << "DCFile::read of " << filename << "\n";
dc_init_parser(in, filename, *this);
dcyyparse();
@ -203,7 +206,7 @@ write(Filename filename, bool brief) const {
* Returns true if the description is successfully written, false otherwise.
*/
bool DCFile::
write(ostream &out, bool brief) const {
write(std::ostream &out, bool brief) const {
if (!_imports.empty()) {
Imports::const_iterator ii;
for (ii = _imports.begin(); ii != _imports.end(); ++ii) {

View File

@ -19,7 +19,7 @@
*
*/
DCKeyword::
DCKeyword(const string &name, int historical_flag) :
DCKeyword(const std::string &name, int historical_flag) :
_name(name),
_historical_flag(historical_flag)
{
@ -35,7 +35,7 @@ DCKeyword::
/**
* Returns the name of this keyword.
*/
const string &DCKeyword::
const std::string &DCKeyword::
get_name() const {
return _name;
}
@ -64,7 +64,7 @@ clear_historical_flag() {
* Write a string representation of this instance to <out>.
*/
void DCKeyword::
output(ostream &out, bool brief) const {
output(std::ostream &out, bool brief) const {
out << "keyword " << _name;
}
@ -72,7 +72,7 @@ output(ostream &out, bool brief) const {
*
*/
void DCKeyword::
write(ostream &out, bool, int indent_level) const {
write(std::ostream &out, bool, int indent_level) const {
indent(out, indent_level)
<< "keyword " << _name << ";\n";
}

View File

@ -57,7 +57,7 @@ DCKeywordList::
* Returns true if this list includes the indicated keyword, false otherwise.
*/
bool DCKeywordList::
has_keyword(const string &name) const {
has_keyword(const std::string &name) const {
return (_keywords_by_name.find(name) != _keywords_by_name.end());
}
@ -92,7 +92,7 @@ get_keyword(int n) const {
* is no keyword in the list with that name.
*/
const DCKeyword *DCKeywordList::
get_keyword_by_name(const string &name) const {
get_keyword_by_name(const std::string &name) const {
KeywordsByName::const_iterator ni;
ni = _keywords_by_name.find(name);
if (ni != _keywords_by_name.end()) {
@ -148,7 +148,7 @@ clear_keywords() {
*
*/
void DCKeywordList::
output_keywords(ostream &out) const {
output_keywords(std::ostream &out) const {
Keywords::const_iterator ki;
for (ki = _keywords.begin(); ki != _keywords.end(); ++ki) {
out << " " << (*ki)->get_name();

View File

@ -610,11 +610,11 @@ static int error_count = 0;
static int warning_count = 0;
// This is the pointer to the current input stream.
static istream *input_p = NULL;
static std::istream *input_p = nullptr;
// This is the name of the dc file we're parsing. We keep it so we
// can print it out for error messages.
static string dc_filename;
static std::string dc_filename;
// This is the initial token state returned by the lexer. It allows
// the yacc grammar to start from initial points.
@ -626,7 +626,7 @@ static int initial_token;
////////////////////////////////////////////////////////////////////
void
dc_init_lexer(istream &in, const string &filename) {
dc_init_lexer(std::istream &in, const std::string &filename) {
input_p = &in;
dc_filename = filename;
line_number = 0;
@ -671,7 +671,9 @@ dcyywrap(void) {
}
void
dcyyerror(const string &msg) {
dcyyerror(const std::string &msg) {
using std::cerr;
cerr << "\nError";
if (!dc_filename.empty()) {
cerr << " in " << dc_filename;
@ -686,7 +688,9 @@ dcyyerror(const string &msg) {
}
void
dcyywarning(const string &msg) {
dcyywarning(const std::string &msg) {
using std::cerr;
cerr << "\nWarning";
if (!dc_filename.empty()) {
cerr << " in " << dc_filename;
@ -740,7 +744,7 @@ input_chars(char *buffer, int &result, int max_size) {
// Define this macro carefully, since different flex versions call it
// with a different type for result.
#define YY_INPUT(buffer, result, max_size) { \
int int_result; \
int int_result = 0; \
input_chars((buffer), int_result, (max_size)); \
(result) = int_result; \
}
@ -762,9 +766,9 @@ read_char(int &line, int &col) {
// scan_quoted_string reads a string delimited by quotation marks and
// returns it.
static string
static std::string
scan_quoted_string(char quote_mark) {
string result;
std::string result;
// We don't touch the current line number and column number during
// scanning, so that if we detect an error while scanning the string
@ -884,9 +888,9 @@ scan_quoted_string(char quote_mark) {
// scan_hex_string reads a string of hexadecimal digits delimited by
// angle brackets and returns the representative string.
static string
static std::string
scan_hex_string() {
string result;
std::string result;
// We don't touch the current line number and column number during
// scanning, so that if we detect an error while scanning the string
@ -916,7 +920,7 @@ scan_hex_string() {
line_number = line;
col_number = col;
dcyyerror("Invalid hex digit.");
return string();
return std::string();
}
odd = !odd;
@ -930,10 +934,10 @@ scan_hex_string() {
if (c == EOF) {
dcyyerror("This hex string is unterminated.");
return string();
return std::string();
} else if (odd) {
dcyyerror("Odd number of hex digits.");
return string();
return std::string();
}
line_number = line;

View File

@ -35,11 +35,11 @@ static int error_count = 0;
static int warning_count = 0;
// This is the pointer to the current input stream.
static istream *input_p = nullptr;
static std::istream *input_p = nullptr;
// This is the name of the dc file we're parsing. We keep it so we
// can print it out for error messages.
static string dc_filename;
static std::string dc_filename;
// This is the initial token state returned by the lexer. It allows
// the yacc grammar to start from initial points.
@ -51,7 +51,7 @@ static int initial_token;
////////////////////////////////////////////////////////////////////
void
dc_init_lexer(istream &in, const string &filename) {
dc_init_lexer(std::istream &in, const std::string &filename) {
input_p = &in;
dc_filename = filename;
line_number = 0;
@ -96,7 +96,9 @@ dcyywrap(void) {
}
void
dcyyerror(const string &msg) {
dcyyerror(const std::string &msg) {
using std::cerr;
cerr << "\nError";
if (!dc_filename.empty()) {
cerr << " in " << dc_filename;
@ -111,7 +113,9 @@ dcyyerror(const string &msg) {
}
void
dcyywarning(const string &msg) {
dcyywarning(const std::string &msg) {
using std::cerr;
cerr << "\nWarning";
if (!dc_filename.empty()) {
cerr << " in " << dc_filename;
@ -165,7 +169,7 @@ input_chars(char *buffer, int &result, int max_size) {
// Define this macro carefully, since different flex versions call it
// with a different type for result.
#define YY_INPUT(buffer, result, max_size) { \
int int_result; \
int int_result = 0; \
input_chars((buffer), int_result, (max_size)); \
(result) = int_result; \
}
@ -187,9 +191,9 @@ read_char(int &line, int &col) {
// scan_quoted_string reads a string delimited by quotation marks and
// returns it.
static string
static std::string
scan_quoted_string(char quote_mark) {
string result;
std::string result;
// We don't touch the current line number and column number during
// scanning, so that if we detect an error while scanning the string
@ -309,9 +313,9 @@ scan_quoted_string(char quote_mark) {
// scan_hex_string reads a string of hexadecimal digits delimited by
// angle brackets and returns the representative string.
static string
static std::string
scan_hex_string() {
string result;
std::string result;
// We don't touch the current line number and column number during
// scanning, so that if we detect an error while scanning the string
@ -341,7 +345,7 @@ scan_hex_string() {
line_number = line;
col_number = col;
dcyyerror("Invalid hex digit.");
return string();
return std::string();
}
odd = !odd;
@ -355,10 +359,10 @@ scan_hex_string() {
if (c == EOF) {
dcyyerror("This hex string is unterminated.");
return string();
return std::string();
} else if (odd) {
dcyyerror("Odd number of hex digits.");
return string();
return std::string();
}
line_number = line;

View File

@ -22,7 +22,7 @@
*
*/
DCMolecularField::
DCMolecularField(const string &name, DCClass *dclass) : DCField(name, dclass) {
DCMolecularField(const std::string &name, DCClass *dclass) : DCField(name, dclass) {
_got_keywords = false;
}
@ -109,7 +109,7 @@ add_atomic(DCAtomicField *atomic) {
*
*/
void DCMolecularField::
output(ostream &out, bool brief) const {
output(std::ostream &out, bool brief) const {
out << _name;
if (!_fields.empty()) {
@ -130,7 +130,7 @@ output(ostream &out, bool brief) const {
* stream.
*/
void DCMolecularField::
write(ostream &out, bool brief, int indent_level) const {
write(std::ostream &out, bool brief, int indent_level) const {
indent(out, indent_level);
output(out, brief);
if (!brief) {

View File

@ -23,6 +23,12 @@
#include "py_panda.h"
#endif
using std::istream;
using std::istringstream;
using std::ostream;
using std::ostringstream;
using std::string;
DCPacker::StackElement *DCPacker::StackElement::_deleted_chain = nullptr;
int DCPacker::StackElement::_num_ever_allocated = 0;
@ -786,7 +792,7 @@ pack_object(PyObject *object) {
pack_object(element);
Py_DECREF(element);
} else {
cerr << "Unable to extract item " << i << " from sequence.\n";
std::cerr << "Unable to extract item " << i << " from sequence.\n";
}
}
pop();
@ -903,7 +909,7 @@ unpack_object() {
// constructor, create the class object instead of just a tuple.
object = unpack_class_object(dclass);
if (object == nullptr) {
cerr << "Unable to construct object of class "
std::cerr << "Unable to construct object of class "
<< dclass->get_name() << "\n";
} else {
break;

View File

@ -16,6 +16,8 @@
#include "dcPacker.h"
#include "dcSwitchParameter.h"
using std::string;
/**
* The catalog is created only by DCPackerInterface::get_catalog().
*/

View File

@ -17,6 +17,8 @@
#include "dcParserDefs.h"
#include "dcLexerDefs.h"
using std::string;
/**
*
*/
@ -139,7 +141,7 @@ bool DCPackerInterface::
check_match(const string &description, DCFile *dcfile) const {
bool match = false;
istringstream strm(description);
std::istringstream strm(description);
dc_init_parser_parameter_description(strm, "check_match", dcfile);
dcyyparse();
dc_cleanup_parser();

View File

@ -17,6 +17,9 @@
#include "dcindent.h"
#include "dcTypedef.h"
using std::ostream;
using std::string;
/**
*
*/

View File

@ -101,6 +101,10 @@
#define YYINITDEPTH 1000
#define YYMAXDEPTH 1000
using std::istream;
using std::ostringstream;
using std::string;
DCFile *dc_file = (DCFile *)NULL;
static DCClass *current_class = (DCClass *)NULL;
static DCSwitch *current_switch = (DCSwitch *)NULL;

View File

@ -29,6 +29,10 @@
#define YYINITDEPTH 1000
#define YYMAXDEPTH 1000
using std::istream;
using std::ostringstream;
using std::string;
DCFile *dc_file = nullptr;
static DCClass *current_class = nullptr;
static DCSwitch *current_switch = nullptr;

View File

@ -20,6 +20,8 @@
#include "hashGenerator.h"
#include <math.h>
using std::string;
DCSimpleParameter::NestedFieldMap DCSimpleParameter::_nested_field_map;
DCClassParameter *DCSimpleParameter::_uint32uint8_type = nullptr;
@ -2171,7 +2173,7 @@ unpack_skip(const char *data, size_t length, size_t &p,
* identifier.
*/
void DCSimpleParameter::
output_instance(ostream &out, bool brief, const string &prename,
output_instance(std::ostream &out, bool brief, const string &prename,
const string &name, const string &postname) const {
if (get_typedef() != nullptr) {
output_typedef_name(out, brief, prename, name, postname);

View File

@ -13,8 +13,8 @@
#include "dcSubatomicType.h"
ostream &
operator << (ostream &out, DCSubatomicType type) {
std::ostream &
operator << (std::ostream &out, DCSubatomicType type) {
switch (type) {
case ST_int8:
return out << "int8";

View File

@ -18,6 +18,9 @@
#include "dcindent.h"
#include "dcPacker.h"
using std::ostream;
using std::string;
/**
* The key_parameter must be recently allocated via new; it will be deleted
* via delete when the switch destructs.

View File

@ -15,6 +15,8 @@
#include "dcSwitch.h"
#include "hashGenerator.h"
using std::string;
/**
*
*/
@ -153,7 +155,7 @@ apply_switch(const char *value_data, size_t length) const {
* identifier.
*/
void DCSwitchParameter::
output_instance(ostream &out, bool brief, const string &prename,
output_instance(std::ostream &out, bool brief, const string &prename,
const string &name, const string &postname) const {
if (get_typedef() != nullptr) {
output_typedef_name(out, brief, prename, name, postname);
@ -168,7 +170,7 @@ output_instance(ostream &out, bool brief, const string &prename,
* identifier.
*/
void DCSwitchParameter::
write_instance(ostream &out, bool brief, int indent_level,
write_instance(std::ostream &out, bool brief, int indent_level,
const string &prename, const string &name,
const string &postname) const {
if (get_typedef() != nullptr) {

View File

@ -16,6 +16,8 @@
#include "dcSimpleParameter.h"
#include "dcindent.h"
using std::string;
/**
* The DCTypedef object becomes the owner of the supplied parameter pointer
* and will delete it upon destruction.
@ -72,7 +74,7 @@ get_name() const {
*/
string DCTypedef::
get_description() const {
ostringstream strm;
std::ostringstream strm;
_parameter->output(strm, true);
return strm.str();
}
@ -122,7 +124,7 @@ set_number(int number) {
* Write a string representation of this instance to <out>.
*/
void DCTypedef::
output(ostream &out, bool brief) const {
output(std::ostream &out, bool brief) const {
out << "typedef ";
_parameter->output(out, false);
}
@ -131,7 +133,7 @@ output(ostream &out, bool brief) const {
*
*/
void DCTypedef::
write(ostream &out, bool brief, int indent_level) const {
write(std::ostream &out, bool brief, int indent_level) const {
indent(out, indent_level)
<< "typedef ";

View File

@ -18,8 +18,8 @@
/**
*
*/
ostream &
indent(ostream &out, int indent_level) {
std::ostream &
indent(std::ostream &out, int indent_level) {
for (int i = 0; i < indent_level; i++) {
out << ' ';
}

View File

@ -48,9 +48,9 @@ add_int(int num) {
* Adds a string to the hash, by breaking it down into a sequence of integers.
*/
void HashGenerator::
add_string(const string &str) {
add_string(const std::string &str) {
add_int(str.length());
string::const_iterator si;
std::string::const_iterator si;
for (si = str.begin(); si != str.end(); ++si) {
add_int(*si);
}

View File

@ -95,7 +95,7 @@ mark_position() {
LVector3 pos_delta = _sample._pos - _smooth_pos;
LVecBase3 hpr_delta = _sample._hpr - _smooth_hpr;
double age = timestamp - _smooth_timestamp;
age = min(age, _max_position_age);
age = std::min(age, _max_position_age);
set_smooth_pos(_sample._pos, _sample._hpr, timestamp);
if (age != 0.0) {
@ -272,13 +272,13 @@ compute_smooth_position(double timestamp) {
// Find the newest of the points before the indicated time. Assume that
// this will be no older than _last_point_before.
i = max(0, _last_point_before);
i = std::max(0, _last_point_before);
while (i < num_points && _points[i]._timestamp < timestamp) {
point_before = i;
timestamp_before = _points[i]._timestamp;
++i;
}
point_way_before = max(point_before - 1, -1);
point_way_before = std::max(point_before - 1, -1);
// Now the next point is presumably the oldest point after the indicated
// time.
@ -527,7 +527,7 @@ get_latest_position() {
*
*/
void SmoothMover::
output(ostream &out) const {
output(std::ostream &out) const {
out << "SmoothMover, " << _points.size() << " sample points.";
}
@ -535,7 +535,7 @@ output(ostream &out) const {
*
*/
void SmoothMover::
write(ostream &out) const {
write(std::ostream &out) const {
out << "SmoothMover, " << _points.size() << " sample points:\n";
int num_points = _points.size();
for (int i = 0; i < num_points; i++) {

View File

@ -34,6 +34,11 @@
#error Buildsystem error: BUILDING_DIRECT_DIRECTD not defined
#endif
using std::cerr;
using std::cout;
using std::endl;
using std::string;
namespace {
// ...This section is part of the old stuff from the original
// implementation. The new stuff that uses job objects doesn't need this
@ -148,7 +153,7 @@ DirectD::~DirectD() {
int
DirectD::client_ready(const string& server_host, int port,
const string& cmd) {
stringstream ss;
std::stringstream ss;
ss<<"!"<<cmd;
send_one_message(server_host, port, ss.str());
return 0;

View File

@ -13,6 +13,12 @@
#include "directdClient.h"
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
using std::string;
DirectDClient::DirectDClient() {
}

View File

@ -13,6 +13,10 @@
#include "directdServer.h"
using std::cerr;
using std::endl;
using std::string;
DirectDServer::DirectDServer() {
}
@ -61,8 +65,8 @@ void
DirectDServer::read_command(string& cmd) {
try {
pifstream f;
f.open("directdCommand", ios::in | ios::binary);
stringstream ss;
f.open("directdCommand", std::ios::in | std::ios::binary);
std::stringstream ss;
const int buf_size=512;
char buf[buf_size];
f.getline(buf, buf_size);

View File

@ -28,6 +28,9 @@
#include "py_panda.h"
#endif
using std::endl;
using std::string;
const string CConnectionRepository::_overflow_event_name = "CRDatagramOverflow";
#ifndef CPPPARSER
@ -406,7 +409,7 @@ send_datagram(const Datagram &dg) {
bool result = _bdc.SendMessage(dg);
if (!result && _bdc.IsConnected()) {
#ifdef HAVE_PYTHON
ostringstream s;
std::ostringstream s;
#if PY_VERSION_HEX >= 0x03030000
PyObject *exc_type = PyExc_ConnectionError;
@ -884,7 +887,7 @@ handle_update_field_owner() {
* description on the indicated output stream.
*/
void CConnectionRepository::
describe_message(ostream &out, const string &prefix,
describe_message(std::ostream &out, const string &prefix,
const Datagram &dg) const {
DCPacker packer;

View File

@ -268,7 +268,7 @@ broadcast_pos_hpr_xy() {
* indicated field name, up until the arguments.
*/
void CDistributedSmoothNodeBase::
begin_send_update(DCPacker &packer, const string &field_name) {
begin_send_update(DCPacker &packer, const std::string &field_name) {
DCField *field = _dclass->get_field_by_name(field_name);
nassertv(field != nullptr);
@ -325,14 +325,14 @@ finish_send_update(DCPacker &packer) {
} else {
#ifndef NDEBUG
if (packer.had_range_error()) {
ostringstream error;
std::ostringstream error;
error << "Node position out of range for DC file: "
<< _node_path << " pos = " << _store_xyz
<< " hpr = " << _store_hpr
<< " zoneId = " << _currL[0];
#ifdef HAVE_PYTHON
string message = error.str();
std::string message = error.str();
distributed_cat.warning()
<< message << "\n";
PyErr_SetString(PyExc_ValueError, message.c_str());
@ -364,5 +364,5 @@ set_curr_l(uint64_t l) {
void CDistributedSmoothNodeBase::
print_curr_l() {
cout << "printCurrL: sent l: " << _currL[1] << " last set l: " << _currL[0] << "\n";
std::cout << "printCurrL: sent l: " << _currL[1] << " last set l: " << _currL[0] << "\n";
}

View File

@ -573,7 +573,23 @@ class MetaInterval(CMetaInterval):
out = ostream
CMetaInterval.timeline(self, out)
add_sequence = addSequence
add_parallel = addParallel
add_parallel_end_together = addParallelEndTogether
add_track = addTrack
add_interval = addInterval
set_manager = setManager
get_manager = getManager
set_t = setT
resume_until = resumeUntil
clear_to_initial = clearToInitial
clear_intervals = clearIntervals
set_play_rate = setPlayRate
priv_do_event = privDoEvent
priv_post_event = privPostEvent
set_interval_start_time = setIntervalStartTime
get_interval_start_time = getIntervalStartTime
get_duration = getDuration
class Sequence(MetaInterval):

View File

@ -26,7 +26,7 @@ TypeHandle CConstrainHprInterval::_type_handle;
* node's local orientation will be copied unaltered.
*/
CConstrainHprInterval::
CConstrainHprInterval(const string &name, double duration,
CConstrainHprInterval(const std::string &name, double duration,
const NodePath &node, const NodePath &target,
bool wrt, const LVecBase3 hprOffset) :
CConstraintInterval(name, duration),
@ -69,7 +69,7 @@ priv_step(double t) {
*
*/
void CConstrainHprInterval::
output(ostream &out) const {
output(std::ostream &out) const {
out << get_name() << ":";
out << " dur " << get_duration();
}

View File

@ -27,7 +27,7 @@ TypeHandle CConstrainPosHprInterval::_type_handle;
* unaltered.
*/
CConstrainPosHprInterval::
CConstrainPosHprInterval(const string &name, double duration,
CConstrainPosHprInterval(const std::string &name, double duration,
const NodePath &node, const NodePath &target,
bool wrt, const LVecBase3 posOffset,
const LVecBase3 hprOffset) :
@ -72,7 +72,7 @@ priv_step(double t) {
*
*/
void CConstrainPosHprInterval::
output(ostream &out) const {
output(std::ostream &out) const {
out << get_name() << ":";
out << " dur " << get_duration();
}

View File

@ -26,7 +26,7 @@ TypeHandle CConstrainPosInterval::_type_handle;
* node's local position will be copied unaltered.
*/
CConstrainPosInterval::
CConstrainPosInterval(const string &name, double duration,
CConstrainPosInterval(const std::string &name, double duration,
const NodePath &node, const NodePath &target,
bool wrt, const LVecBase3 posOffset) :
CConstraintInterval(name, duration),
@ -73,7 +73,7 @@ priv_step(double t) {
*
*/
void CConstrainPosInterval::
output(ostream &out) const {
output(std::ostream &out) const {
out << get_name() << ":";
out << " dur " << get_duration();
}

View File

@ -27,7 +27,7 @@ TypeHandle CConstrainTransformInterval::_type_handle;
* local transform will be copied unaltered.
*/
CConstrainTransformInterval::
CConstrainTransformInterval(const string &name, double duration,
CConstrainTransformInterval(const std::string &name, double duration,
const NodePath &node, const NodePath &target,
bool wrt) :
CConstraintInterval(name, duration),
@ -72,7 +72,7 @@ priv_step(double t) {
*
*/
void CConstrainTransformInterval::
output(ostream &out) const {
output(std::ostream &out) const {
out << get_name() << ":";
out << " dur " << get_duration();
}

View File

@ -19,7 +19,7 @@ TypeHandle CConstraintInterval::_type_handle;
*
*/
CConstraintInterval::
CConstraintInterval(const string &name, double duration) :
CConstraintInterval(const std::string &name, double duration) :
CInterval(name, duration, true)
{
}

View File

@ -19,6 +19,9 @@
#include "eventQueue.h"
#include "pStatTimer.h"
using std::ostream;
using std::string;
PStatCollector CInterval::_root_pcollector("App:Show code:ivalLoop");
TypeHandle CInterval::_type_handle;
@ -41,7 +44,7 @@ CInterval(const string &name, double duration, bool open_ended) :
_curr_t(0.0),
_name(name),
_pname(get_pstats_name(name)),
_duration(max(duration, 0.0)),
_duration(std::max(duration, 0.0)),
_open_ended(open_ended),
_dirty(false),
_ival_pcollector(_root_pcollector, _pname)

View File

@ -108,7 +108,7 @@ add_c_interval(CInterval *interval, bool external) {
* interval, or -1 if there is not.
*/
int CIntervalManager::
find_c_interval(const string &name) const {
find_c_interval(const std::string &name) const {
MutexHolder holder(_lock);
NameIndex::const_iterator ni = _name_index.find(name);
@ -351,7 +351,7 @@ get_next_removal() {
*
*/
void CIntervalManager::
output(ostream &out) const {
output(std::ostream &out) const {
MutexHolder holder(_lock);
out << "CIntervalManager, " << (int)_name_index.size() << " intervals.";
@ -361,7 +361,7 @@ output(ostream &out) const {
*
*/
void CIntervalManager::
write(ostream &out) const {
write(std::ostream &out) const {
MutexHolder holder(_lock);
// We need to write this line so that it's clear what's going on when there

View File

@ -43,7 +43,7 @@ priv_step(double t) {
*
*/
void CLerpAnimEffectInterval::
output(ostream &out) const {
output(std::ostream &out) const {
out << get_name() << ": ";
if (_controls.empty()) {

View File

@ -21,7 +21,7 @@ TypeHandle CLerpInterval::_type_handle;
* string, or BT_invalid if the string doesn't match anything.
*/
CLerpInterval::BlendType CLerpInterval::
string_blend_type(const string &blend_type) {
string_blend_type(const std::string &blend_type) {
if (blend_type == "easeIn") {
return BT_ease_in;
} else if (blend_type == "easeOut") {
@ -49,7 +49,7 @@ compute_delta(double t) const {
return 1.0;
}
t /= duration;
t = min(max(t, 0.0), 1.0);
t = std::min(std::max(t, 0.0), 1.0);
switch (_blend_type) {
case BT_ease_in:

View File

@ -47,7 +47,7 @@ TypeHandle CLerpNodePathInterval::_type_handle;
* otherwise, it is reset.
*/
CLerpNodePathInterval::
CLerpNodePathInterval(const string &name, double duration,
CLerpNodePathInterval(const std::string &name, double duration,
CLerpInterval::BlendType blend_type,
bool bake_in_start, bool fluid,
const NodePath &node, const NodePath &other) :
@ -544,7 +544,7 @@ priv_reverse_instant() {
*
*/
void CLerpNodePathInterval::
output(ostream &out) const {
output(std::ostream &out) const {
out << get_name() << ":";
if ((_flags & F_end_pos) != 0) {

View File

@ -21,6 +21,8 @@
#include <math.h> // for log10()
#include <stdio.h> // for sprintf()
using std::string;
TypeHandle CMetaInterval::_type_handle;
/**
@ -669,7 +671,7 @@ pop_event() {
*
*/
void CMetaInterval::
write(ostream &out, int indent_level) const {
write(std::ostream &out, int indent_level) const {
recompute();
// How many digits of precision should we output for time?
@ -677,7 +679,7 @@ write(ostream &out, int indent_level) const {
int total_digits = num_decimals + 4;
static const int max_digits = 32; // totally arbitrary
nassertv(total_digits <= max_digits);
char format_str[12];
char format_str[16];
sprintf(format_str, "%%%d.%df", total_digits, num_decimals);
indent(out, indent_level) << get_name() << ":\n";
@ -698,7 +700,7 @@ write(ostream &out, int indent_level) const {
* Outputs a list of all events in the order in which they occur.
*/
void CMetaInterval::
timeline(ostream &out) const {
timeline(std::ostream &out) const {
recompute();
// How many digits of precision should we output for time?
@ -706,7 +708,7 @@ timeline(ostream &out) const {
int total_digits = num_decimals + 4;
static const int max_digits = 32; // totally arbitrary
nassertv(total_digits <= max_digits);
char format_str[12];
char format_str[16];
sprintf(format_str, "%%%d.%df", total_digits, num_decimals);
int extra_indent_level = 0;
@ -1124,7 +1126,7 @@ recompute_level(int n, int level_begin, int &level_end) {
previous_begin = begin_time;
previous_end = end_time;
level_end = max(level_end, end_time);
level_end = std::max(level_end, end_time);
n++;
}
@ -1169,7 +1171,7 @@ get_begin_time(const CMetaInterval::IntervalDef &def, int level_begin,
* Formats an event for output, for write() or timeline().
*/
void CMetaInterval::
write_event_desc(ostream &out, const CMetaInterval::IntervalDef &def,
write_event_desc(std::ostream &out, const CMetaInterval::IntervalDef &def,
int &extra_indent_level) const {
switch (def._type) {
case DT_c_interval:

View File

@ -20,13 +20,13 @@ TypeHandle HideInterval::_type_handle;
*
*/
HideInterval::
HideInterval(const NodePath &node, const string &name) :
HideInterval(const NodePath &node, const std::string &name) :
CInterval(name, 0.0, true),
_node(node)
{
nassertv(!node.is_empty());
if (_name.empty()) {
ostringstream name_strm;
std::ostringstream name_strm;
name_strm
<< "HideInterval-" << node.node()->get_name() << "-" << ++_unique_index;
_name = name_strm.str();

View File

@ -20,13 +20,13 @@ TypeHandle ShowInterval::_type_handle;
*
*/
ShowInterval::
ShowInterval(const NodePath &node, const string &name) :
ShowInterval(const NodePath &node, const std::string &name) :
CInterval(name, 0.0, true),
_node(node)
{
nassertv(!node.is_empty());
if (_name.empty()) {
ostringstream name_strm;
std::ostringstream name_strm;
name_strm
<< "ShowInterval-" << node.node()->get_name() << "-" << ++_unique_index;
_name = name_strm.str();

View File

@ -15,6 +15,11 @@
#include "p3d_lock.h"
#include <sstream>
using std::istream;
using std::ostream;
using std::ostringstream;
using std::string;
static const bool debug_xml_output = false;
static LOCK xml_lock;

View File

@ -18,8 +18,6 @@
#include "handleStream.h"
#include <iostream>
using namespace std;
// A pair of functions to input and output the TinyXml constructs on the
// indicated streams. We could, of course, use the TinyXml output operators,
// but this is a smidge more efficient and gives us more control.

View File

@ -33,6 +33,11 @@
#endif
using std::istream;
using std::ostream;
using std::string;
using std::wstring;
/**
*
*/
@ -325,10 +330,10 @@ read_hash(const string &pathname) {
#ifdef _WIN32
wstring pathname_w;
if (string_to_wstring(pathname_w, pathname)) {
stream.open(pathname_w.c_str(), ios::in | ios::binary);
stream.open(pathname_w.c_str(), std::ios::in | std::ios::binary);
}
#else // _WIN32
stream.open(pathname.c_str(), ios::in | ios::binary);
stream.open(pathname.c_str(), std::ios::in | std::ios::binary);
#endif // _WIN32
if (!stream) {

View File

@ -16,7 +16,6 @@
#include "get_tinyxml.h"
#include <string>
using namespace std;
/**
* This simple class is used both within the core API in this module, as well

View File

@ -27,6 +27,10 @@
#include <sys/stat.h>
#endif
using std::cerr;
using std::string;
using std::wstring;
#ifdef _WIN32
// From KnownFolders.h (part of Vista SDK):
#define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \

View File

@ -16,7 +16,6 @@
#include <string>
#include <iostream>
using namespace std;
std::string find_root_dir();

View File

@ -70,7 +70,7 @@ get_osx_home_directory() {
/**
*
*/
string
std::string
find_osx_root_dir() {
string result = call_NSSearchPathForDirectories(NSCachesDirectory, NSUserDomainMask);
if (!result.empty()) {

View File

@ -28,6 +28,10 @@
#include <libio.h>
#endif // !_WIN32 && !__APPLE__ && !__FreeBSD__
using std::cerr;
using std::dec;
using std::hex;
static const size_t handle_buffer_size = 4096;
/**

View File

@ -18,8 +18,6 @@
#include "p3d_lock.h"
#include <iostream>
using namespace std;
/**
*
*/

Some files were not shown because too many files have changed in this diff Show More