📄 ducts.java
字号:
finally {
if (rset != null)
try {rset.close();} catch(SQLException ignore) {}
if (stmt != null)
try {stmt.close();} catch(SQLException ignore) {}
}
return intCableCount;
}
/**获取起始或终止管孔中缆线占用信息量多的一方 Vector*/
public Vector createMaxCableDucts(JLabel jLabel1){
Vector vMaxCableDucts = null;
Vector vStartDucts = null;
Vector vEndDucts = null;
int intStartDuctCableCount = 0;
int intEndDuctCableCount = 0;
vStartDucts = getStartDucts(); //获取起始管孔
vEndDucts = getEndDucts(); //获取终止管孔
//System.out.println("起始管孔数量:" + vStartDucts.size() + "===终止管孔数量:" + vEndDucts.size());
intStartDuctCableCount = getStartDuctCableCount(vStartDucts);
intEndDuctCableCount = getEndDuctCableCount(vEndDucts);
//由于 起始和终止的管孔不能调换,所以要分别处理
if (intStartDuctCableCount > intEndDuctCableCount){
vMaxCableDucts = vStartDucts;
//平移管孔坐标到左下角
moveDuctsParalleCoord(vMaxCableDucts);
//生成起始中间表的“管道表”
creatStartMiddleDuctTable(vMaxCableDucts,jLabel1);
}else{
vMaxCableDucts = vEndDucts;
//平移管孔坐标到左下角
moveDuctsParalleCoord(vMaxCableDucts);
//生成 终止中间表的“管道表”
creatEndMiddleDuctTable(vMaxCableDucts,jLabel1);
}
//返回结果
return vMaxCableDucts;
}
/**建立 起始端 中间表的管道表*/
private void creatStartMiddleDuctTable(Vector vDucts,JLabel jLabel1){
int i;
String strDuctCode;
double dblMaxX=0,dblMaxY=0;
double dblX,dblY; //管孔坐标
String strStartX,strStartY; //起始X,Y
String strEndX,strEndY; //终止X,Y
//根据管孔编号,获取 同一个所属管道编码的所有管孔的最大X,Y
DuctEntity oMaxDuctEntity = getHighestCoord(vDucts);
dblMaxX = oMaxDuctEntity.getX();
dblMaxY = oMaxDuctEntity.getY();
//终止断面坐标计算方法 起始断面坐标
for(i=0;i<vDucts.size();i++){
DuctEntity oDuctEntity = (DuctEntity)vDucts.elementAt(i);
dblX = oDuctEntity.getX();
dblY = oDuctEntity.getY();
oDuctEntity.setStartX(dblX);
oDuctEntity.setStartY(dblMaxY - dblY);
oDuctEntity.setEndX(dblMaxX - dblX);
oDuctEntity.setEndY(dblMaxY - dblY);
}
creatMiddleDuctTable(vDucts,jLabel1);
}
/**建立 终止端 中间表的管道表*/
private void creatEndMiddleDuctTable(Vector vDucts,JLabel jLabel1){
int i;
String strDuctCode;
double dblMaxX=0,dblMaxY=0;
double dblX,dblY; //管孔坐标
String strStartX,strStartY; //起始X,Y
String strEndX,strEndY; //终止X,Y
//根据管孔编号,获取 同一个所属管道编码的所有管孔的最大X,Y
DuctEntity oMaxDuctEntity = getHighestCoord(vDucts);
dblMaxX = oMaxDuctEntity.getX();
dblMaxY = oMaxDuctEntity.getY();
//终止断面坐标计算方法 起始断面坐标
strStartX = Double.toString(dblMaxX) + "-X";
strStartY = Double.toString(dblMaxY) + "-Y";
strEndX = "X";
strEndY = Double.toString(dblMaxY) + "-Y";
for(i=0;i<vDucts.size();i++){
DuctEntity oDuctEntity = (DuctEntity)vDucts.elementAt(i);
dblX = oDuctEntity.getX();
dblY = oDuctEntity.getY();
oDuctEntity.setStartX(dblX);
oDuctEntity.setStartY(dblMaxY - dblY);
oDuctEntity.setEndX(dblMaxX - dblX);
oDuctEntity.setEndY(dblMaxY - dblY);
}
creatMiddleDuctTable(vDucts,jLabel1);
}
/**建立 中间表的管道表*/
private void creatMiddleDuctTable(Vector vDucts,JLabel jLabel1){
int i;
String strDuctCode;
double dblMaxX=0,dblMaxY=0;
double strStartX,strStartY,strEndX,strEndY;
DuctEntity oDuctEntity = null;
Statement stmt = null;
try{
stmt = conn.createStatement();
//根据数组的管孔编号,查询PCDM的“管孔”表
for(i=0;i<vDucts.size();i++){
try {
oDuctEntity = (DuctEntity)vDucts.elementAt(i);
strDuctCode = oDuctEntity.getDuctCode();
strStartX = oDuctEntity.getStartX();
strStartY = oDuctEntity.getStartY();
strEndX = oDuctEntity.getEndX();
strEndY = oDuctEntity.getEndY();
//生成中间表的“管道”表,单面
strSql = "Insert Into " + strTargetDBName + ".I_管道(" +
"管道编码,起始断面坐标X,起始断面坐标Y,终止断面坐标X,终止断面坐标Y," +
"起始人井展开图坐标X,起始人井展开图坐标Y,终止人井展开图坐标X,终止人井展开图坐标Y," +
"所属管道段编码,管径,管料,管道状态,规格型号,设施状态," +
"建设单位,数据采集单位,数据采集人,数据采集日期,备注" +
") Select " +
"管孔编码," + strStartX + "," + strStartY + "," + strEndX + "," + strEndY + "," +
"0,0,0,0," +
"所属管道段编码,管径,管材,管孔状态,规格型号,'竣工'," +
"建设单位,数据采集单位,数据采集人,数据采集日期,备注" +
" From " + strSourceDBName + ".GK_T" +
" Where 管孔编码='" + strDuctCode + "'";
//测试
//System.out.println(strSql);
jLabel1.setText("生成管孔管道断面坐标:"+strStartX+","+strStartY+","+strEndX+","+strEndY);
stmt.execute(strSql);
}catch(SQLException e) {
//System.out.println("Insert SQL error: " + e.toString());
//System.out.println(strSql);
oErrorInfoExcel.writeExcelRow(e.toString(),strSql);
}catch(NullPointerException nulle){
Debug.print(nulle.toString());
oErrorInfoExcel.writeExcelRow(nulle.toString(),strSql);
}
}
stmt.close();
stmt = null;
}catch(SQLException e) {
Debug.print("SQL error: " + e.toString());
}
finally {
if (stmt != null)
try {stmt.close();} catch(SQLException ignore) {}
}
}
/**获取 截面矩形 最大的X 和 最大的Y*/
private DuctEntity getHighestCoord(Vector vDucts){
DuctEntity oReturnDuctEntity = null;
DuctEntity oDuctEntity = null;
String strDuctCode;
double dblMaxX=0,dblMaxY=0;
int i;
if (vDucts.size()>0){
//获取第一个管孔作为比较的起点
oDuctEntity = (DuctEntity)vDucts.elementAt(0);
dblMaxX = oDuctEntity.getX();
dblMaxY = oDuctEntity.getY();
}
//构造一个管孔实体对象,用于返回
oReturnDuctEntity = new DuctEntity("test",dblMaxX,dblMaxY);
for (i=0;i<vDucts.size();i++){
oDuctEntity = (DuctEntity)vDucts.elementAt(i);
//先比较X,后比较Y
if(oDuctEntity.getX() > dblMaxX){
dblMaxX = oDuctEntity.getX();
}
if(oDuctEntity.getY() > dblMaxY){
dblMaxY = oDuctEntity.getY();
}
}
dblMaxX = dblMaxX + 45;
dblMaxY = dblMaxY + 45;
oReturnDuctEntity.setX(dblMaxX);
oReturnDuctEntity.setY(dblMaxY);
return oReturnDuctEntity;
}
/**获取 截面矩形最左下角的(X,Y)*/
private DuctEntity getLowestCoord(Vector vDucts){
DuctEntity oReturnDuctEntity = null;
DuctEntity oDuctEntity = null;
String strDuctCode;
double dblLowX=0,dblLowY=0;
int i;
if (vDucts.size()>0){
//获取第一个管孔作为比较的起点
oDuctEntity = (DuctEntity)vDucts.elementAt(0);
dblLowX = oDuctEntity.getX();
dblLowY = oDuctEntity.getY();
}
//构造一个管孔实体对象,用于返回
oReturnDuctEntity = new DuctEntity("test",dblLowX,dblLowY);
for (i=0;i<vDucts.size();i++){
oDuctEntity = (DuctEntity)vDucts.elementAt(i);
//先比较X,后比较Y
if(oDuctEntity.getX() < dblLowX){
dblLowX = oDuctEntity.getX();
}
if(oDuctEntity.getY() < dblLowY){
dblLowY = oDuctEntity.getY();
}
}
oReturnDuctEntity.setX(dblLowX);
oReturnDuctEntity.setY(dblLowY);
return oReturnDuctEntity;
}
/**根据 最左下角的管孔的向量 平移所有管孔*/
private void moveDuctsParalleCoord(Vector vDucts){
double dblOldX,dblOldY; //左下角管孔的原来坐标
double dblXLen,dblYLen; //平移的向量
double dblNewX,dblNewY; //管孔的新坐标
String strDuctCode; //管孔编码
DuctEntity oFirstDuctEntity = null;
//获取 截面矩形最左下角的(X,Y)
oFirstDuctEntity = getLowestCoord(vDucts);
//移到管道段截面的左下角
dblOldX = 45;
dblOldY = 45;
dblXLen = oFirstDuctEntity.getX() - dblOldX;
dblYLen = oFirstDuctEntity.getY() - dblOldY;
/*平移所有管孔*/
int i;
for (i=0;i<vDucts.size();i++){
try {
DuctEntity oDuctEntity = (DuctEntity)vDucts.elementAt(i);
strDuctCode = oDuctEntity.getDuctCode();
dblNewX = oDuctEntity.getX() - dblXLen;
dblNewY = oDuctEntity.getY() - dblYLen;
oDuctEntity.setX(dblNewX);
oDuctEntity.setY(dblNewY);
}catch (Exception e){
Debug.print("平移管孔" + e.toString());
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -