⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewspecificgroupretained.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * $RCSfile: ViewSpecificGroupRetained.java,v $ * * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. * * Use is subject to license terms. * * $Revision: 1.8 $ * $Date: 2007/04/12 17:34:07 $ * $State: Exp $ */package javax.media.j3d;import java.util.*;/** * The ViewSpecificGroup node retained object. */class ViewSpecificGroupRetained extends GroupRetained {    ArrayList apiViewList = new ArrayList();    // Used by leaf objects particularly GAs    // Updated in a MT Safe manner and also used by RenderBin    ArrayList cachedViewList = new ArrayList();    // The object that contains the dynamic HashKey - a string type object    // Used in scoping     HashKey tempKey = new HashKey(250);    // ArrayList of Integer indices    ArrayList parentLists = new ArrayList();    static final int SET_VIEW       = 0x1;    static final int ADD_VIEW       = 0x2;    static final int REMOVE_VIEW    = 0x4;        // Construct retained object    ViewSpecificGroupRetained() {          this.nodeType = NodeRetained.VIEWSPECIFICGROUP;	  viewLists = new ArrayList();    }    void addView(View view) {	int i;	Integer mtype = new Integer(ADD_VIEW);	apiViewList.add(view);	if (source.isLive() && view != null) {	    // Gather all affected leaf nodes and send a message to	    // RenderingEnv and RenderBin	    if (inSharedGroup) {		ArrayList parentList;		for (int k = 0; k < localToVworldKeys.length; k++) {		    parentList = (ArrayList)parentLists.get(k);		    // If the parentList contains this view or if this is the		    // first VSG then ..		    if (parentList == null || parentList.contains(view)) {			Object[] objAry = new Object[4];			ArrayList addVsgList = new ArrayList();			ArrayList addLeafList = new ArrayList();			int[] addKeyList = new int[10];			HashKey key = localToVworldKeys[k];			addVsgList.add(this);			addKeyList[0] = k;			objAry[0] = view;			objAry[1] = addVsgList;			objAry[2] = addLeafList;			/*			for (int n = 0; n < addLeafList.size(); n++) {			    System.err.println("Shared:n = "+n+" addLeafList = "+addLeafList.get(n));			}			*/		      objAry[3] = super.processViewSpecificInfo(ADD_VIEW,						      (HashKey)key, view,						      addVsgList, addKeyList, addLeafList);			J3dMessage message = new J3dMessage();			message.type = J3dMessage.VIEWSPECIFICGROUP_CHANGED;			message.threads = (J3dThread.UPDATE_RENDERING_ENVIRONMENT|					   J3dThread.UPDATE_RENDER |					   J3dThread.UPDATE_SOUND|					   J3dThread.SOUND_SCHEDULER);			message.universe = universe;			message.args[0] = mtype;			message.args[1] = objAry;			VirtualUniverse.mc.processMessage(message);		    }		}	    }	    else {		ArrayList parentList = (ArrayList)parentLists.get(0);				// If the parentList contains this view or if this is the		// first VSG then ..		if (parentList == null || parentList.contains(view)) {		    Object[] objAry = new Object[4];		    ArrayList addVsgList = new ArrayList();		    ArrayList addLeafList = new ArrayList();		    int[] addKeyList = new int[10];		    objAry[0] = view;		    objAry[1] = addVsgList;		    objAry[2] = addLeafList;		    addVsgList.add(this);		    addKeyList[0] = 0;		    tempKey.reset();		    objAry[3] = super.processViewSpecificInfo(ADD_VIEW,						  tempKey, view,						  addVsgList, addKeyList, addLeafList);		    /*		      for (int n = 0; n < addLeafList.size(); n++) {		      System.err.println("n = "+n+" addLeafList = "+addLeafList.get(n));		      }		      */		      		    J3dMessage message = new J3dMessage();		    message.type = J3dMessage.VIEWSPECIFICGROUP_CHANGED;		    message.threads = (J3dThread.UPDATE_RENDERING_ENVIRONMENT|				       J3dThread.UPDATE_RENDER |				       J3dThread.UPDATE_SOUND|				       J3dThread.SOUND_SCHEDULER);		    message.universe = universe;		    message.args[0] = mtype;		    message.args[1] = objAry;		    VirtualUniverse.mc.processMessage(message);		}	    }	}    }        void setView(View view, int index) {	int i;	View oldView =  (View)apiViewList.get(index);	Integer mtype = new Integer(SET_VIEW);	if (oldView == view)	    return;		apiViewList.set(index, view);	if (source.isLive()) {	    // Gather all affected leaf nodes and send a message to	    // RenderingEnv and RenderBin	    if (inSharedGroup) {		ArrayList parentList;		for (int k = 0; k < localToVworldKeys.length; k++) {		    parentList = (ArrayList)parentLists.get(k);		    Object[] objAry = new Object[8];		    ArrayList addVsgList = new ArrayList();		    ArrayList removeVsgList = new ArrayList();		    ArrayList addLeafList = new ArrayList();		    ArrayList removeLeafList = new ArrayList();		    int[] addKeyList = new int[10];		    int[] removeKeyList = new int[10];		    objAry[0] = view;		    objAry[1] = addVsgList ;		    objAry[2] = addLeafList;		    objAry[4] = oldView;		    objAry[5] = removeVsgList;		    objAry[6] = removeLeafList;		    		    HashKey key = localToVworldKeys[k];		    if (oldView != null && (parentList == null || parentList.contains(oldView))) {			removeVsgList.add(this);			removeKeyList[0] = k;			objAry[7] = super.processViewSpecificInfo(REMOVE_VIEW, (HashKey)key, 						      oldView, removeVsgList, removeKeyList, removeLeafList);		    }		    		    if (view != null && (parentList == null || parentList.contains(view))) {			addVsgList.add(this);			addKeyList[0] = k;			objAry[3] = super.processViewSpecificInfo(ADD_VIEW, (HashKey)key, 						      view, addVsgList, addKeyList, addLeafList);		    }		    J3dMessage message = new J3dMessage();		    message.type = J3dMessage.VIEWSPECIFICGROUP_CHANGED;		    message.threads = (J3dThread.UPDATE_RENDERING_ENVIRONMENT|				       J3dThread.UPDATE_RENDER |				       J3dThread.UPDATE_SOUND|				       J3dThread.SOUND_SCHEDULER);		    message.universe = universe;		    message.args[0] = mtype;		    message.args[1] = objAry;		    VirtualUniverse.mc.processMessage(message);		}	    }	    else {		ArrayList parentList = (ArrayList)parentLists.get(0);		Object[] objAry = new Object[8];		ArrayList addVsgList = new ArrayList();		ArrayList removeVsgList = new ArrayList();		ArrayList addLeafList = new ArrayList();		ArrayList removeLeafList = new ArrayList();		int[] addKeyList = new int[10];		int[] removeKeyList = new int[10];		objAry[0] = view;		objAry[1] = addVsgList ;		objAry[2] = addLeafList;		objAry[4] = oldView;		objAry[5] = removeVsgList;		objAry[6] = removeLeafList;		tempKey.reset();		if (oldView != null && (parentList == null || parentList.contains(oldView))) {		    removeVsgList.add(this);		    removeKeyList[0] = 0;		    objAry[7] = super.processViewSpecificInfo(REMOVE_VIEW, (HashKey)tempKey, 						  oldView, removeVsgList, removeKeyList, removeLeafList);		}		if (view != null && (parentList == null || parentList.contains(view))) {		    tempKey.reset();		    addVsgList.add(this);		    addKeyList[0] = 0;		    objAry[3] =  super.processViewSpecificInfo(ADD_VIEW, (HashKey)tempKey, 					      view, addVsgList, addKeyList, addLeafList);		}		J3dMessage message = new J3dMessage();		message.type = J3dMessage.VIEWSPECIFICGROUP_CHANGED;		message.threads = (J3dThread.UPDATE_RENDERING_ENVIRONMENT|				   J3dThread.UPDATE_RENDER |				   J3dThread.UPDATE_SOUND|				   J3dThread.SOUND_SCHEDULER);					message.universe = universe;		message.args[0] = mtype;		message.args[1] = objAry;		VirtualUniverse.mc.processMessage(message);	    }	}	    }    int[] processViewSpecificInfo(int mode, HashKey key, View v, ArrayList vsgList, int[] keyList, ArrayList leaflist) {	int hkIndex = 0;	Integer hashInt = null;	int[] newKeyList = null;	// Get the intersection of the viewList with this view, 	if (source.isLive()) {	    if (inSharedGroup) {		hkIndex = key.equals(localToVworldKeys, 0, localToVworldKeys.length);	    }	    	    if (mode == ADD_VIEW) {		ArrayList parentList = (ArrayList)parentLists.get(hkIndex);		parentList.add(v);			    }	    else if (mode == REMOVE_VIEW) {		ArrayList parentList = (ArrayList)parentLists.get(hkIndex);		parentList.remove(v);	    }	    if(apiViewList.contains(v)) {	    //	    System.err.println("processViewSpecificInfo, this = "+this+" key = "+key);		vsgList.add(this);		if (keyList.length< vsgList.size()) {		    //		    System.err.println("====> allocating new array");		    newKeyList = new int[keyList.length+20];		    System.arraycopy(keyList, 0, newKeyList, 0, keyList.length);		    keyList = newKeyList;		}		if (mode == ADD_VIEW) {		    if (inSharedGroup) {			keyList[vsgList.size()-1] = hkIndex;		    }		    else {			keyList[vsgList.size()-1] = 0;		    }		}		else if (mode == REMOVE_VIEW) {		    if (inSharedGroup) {			keyList[vsgList.size()-1] = hkIndex;		    }		    else {			keyList[vsgList.size()-1] = 0;		    }		}		return super.processViewSpecificInfo(mode, key, v, vsgList, keyList, leaflist);	    }	}	return keyList;    }    View getView(int index) {	return (View)apiViewList.get(index);    }    void insertView(View view, int index) {	int i;	Integer mtype = new Integer(ADD_VIEW);	apiViewList.add(index, view);	if (source.isLive() && view != null) {	    // Gather all affected leaf nodes and send a message to	    // RenderingEnv and RenderBin	    if (inSharedGroup) {		ArrayList parentList;		for (int k = 0; k < localToVworldKeys.length; k++) {		    parentList = (ArrayList)parentLists.get(k);		    // If the parentList contains this view or if this is the		    // first VSG then ..		    if (parentList == null || parentList.contains(view)) {			Object[] objAry = new Object[4];			ArrayList addVsgList = new ArrayList();			ArrayList addLeafList = new ArrayList();			int[] addKeyList = new int[10];			HashKey key = localToVworldKeys[k];			addVsgList.add(this);			addKeyList[0] = k;			objAry[0] = view;			objAry[1] = addVsgList;			objAry[2] = addLeafList;			/*			for (int n = 0; n < addLeafList.size(); n++) {			    System.err.println("Shared:n = "+n+" addLeafList = "+addLeafList.get(n));			}			*/		      objAry[3] = super.processViewSpecificInfo(ADD_VIEW,						      (HashKey)key, view,						      addVsgList, addKeyList, addLeafList);			J3dMessage message = new J3dMessage();			message.type = J3dMessage.VIEWSPECIFICGROUP_CHANGED;			message.threads = (J3dThread.UPDATE_RENDERING_ENVIRONMENT|					   J3dThread.UPDATE_RENDER |					   J3dThread.UPDATE_SOUND|					   J3dThread.SOUND_SCHEDULER);			message.universe = universe;			message.args[0] = mtype;			message.args[1] = objAry;			VirtualUniverse.mc.processMessage(message);		    }		}	    }	    else {		ArrayList parentList = (ArrayList)parentLists.get(0);				// If the parentList contains this view or if this is the		// first VSG then ..		if (parentList == null || parentList.contains(view)) {		    Object[] objAry = new Object[4];		    ArrayList addVsgList = new ArrayList();		    ArrayList addLeafList = new ArrayList();		    int[] addKeyList = new int[10];		    objAry[0] = view;		    objAry[1] = addVsgList;		    objAry[2] = addLeafList;		    addVsgList.add(this);		    addKeyList[0] = 0;		    tempKey.reset();		    objAry[3] = super.processViewSpecificInfo(ADD_VIEW,						  tempKey, view,						  addVsgList, addKeyList, addLeafList);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -