Revision 1269

View differences:

tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.app/org.gvsig.dwg.app.mainplugin/src/test/java/org/gvsig/dwg/fmap/dal/store/dwg/TestDWG.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22

  
23
/*
24
* AUTHORS (In addition to CIT):
25
* 2008 IVER T.I. S.A.   {{Task}}
26
*/
27

  
28
package org.gvsig.dwg.fmap.dal.store.dwg;
29

  
30
import java.io.File;
31

  
32
import org.gvsig.fmap.dal.DataStoreParameters;
33
import org.gvsig.fmap.dal.exception.DataException;
34
import org.gvsig.fmap.dal.feature.BaseTestFeatureStore;
35
import org.gvsig.fmap.dal.feature.FeatureStore;
36

  
37
public class TestDWG extends BaseTestFeatureStore {
38

  
39

  
40
	protected boolean testDXFInitialized = false;
41

  
42
	public static File file_prueba = new File(TestDWG.class.getResource(
43
			"data/V2000.dwg").getFile());
44

  
45
	/*
46
	 * (non-Javadoc)
47
	 *
48
	 * @see
49
	 * org.gvsig.fmap.dal.feature.BaseTestFeatureStore#getDefaultDataStoreParameters
50
	 * ()
51
	 */
52
	public DataStoreParameters getDefaultDataStoreParameters()
53
			throws DataException {
54
		DWGStoreParameters dwgParameters = null;
55

  
56
		dwgParameters = (DWGStoreParameters) dataManager
57
				.createStoreParameters(DWGStoreProvider.NAME);
58

  
59
		dwgParameters.setFile(file_prueba);
60
		dwgParameters.setCRS("EPSG:23030");
61
		return dwgParameters;
62
	}
63

  
64
	/*
65
	 * (non-Javadoc)
66
	 *
67
	 * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#hasExplorer()
68
	 */
69
	public boolean hasExplorer() {
70
		// TODO Auto-generated method stub
71
		return false;
72
	}
73

  
74
	public boolean usesResources() {
75
		return true;
76
	}
77

  
78

  
79
	public void testLegendAndLabeling() throws Exception {
80
		DataStoreParameters params = getDefaultDataStoreParameters();
81
		FeatureStore store = (FeatureStore) dataManager.openStore(params
82
				.getDataStoreName(), params);
83

  
84
		assertNotNull(store.invokeDynMethod("getLegend", null));
85
		assertNotNull(store.invokeDynMethod("getLabeling", null));
86
		store.dispose();
87
	}
88
}
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.app/org.gvsig.dwg.app.mainplugin/src/test/java/org/gvsig/dwg/fmap/dal/store/dwg/TestDWG2004.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
* MA  02110-1301, USA.
20
*
21
*/
22

  
23
/*
24
* AUTHORS (In addition to CIT):
25
* 2009 IVER T.I   {{Task}}
26
*/
27

  
28
package org.gvsig.dwg.fmap.dal.store.dwg;
29

  
30
import java.io.File;
31

  
32
public class TestDWG2004 extends TestDWG {
33
	public static File file_prueba = new File(TestDWG.class.getResource(
34
			"data/V2004.dwg").getFile());
35
}
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.app/org.gvsig.dwg.app.mainplugin/src/main/java/org/gvsig/dwg/DWGRegisterExtension.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.dwg;
23

  
24
import org.gvsig.andami.IconThemeHelper;
25
import org.gvsig.andami.plugins.Extension;
26
import org.gvsig.dwg.fmap.dal.store.dwg.DWGStoreProvider;
27
import org.gvsig.fmap.mapcontext.MapContextLocator;
28

  
29
/**
30
 * Dummy DWG extension, as all the registration happens in the
31
 * {@link DWGLibrary}.
32
 *
33
 * @author gvSIG Team
34
 */
35
public class DWGRegisterExtension extends Extension {
36

  
37
	public void execute(String actionCommand) {
38
		// Nothing to do
39
	}
40

  
41
	public void initialize() {
42
		IconThemeHelper.registerIcon("layer", "layer-icon-dwg", this);
43
	}
44

  
45
	public void postInitialize() {
46
		MapContextLocator.getMapContextManager().registerIconLayer(DWGStoreProvider.NAME, "layer-icon-dwg");
47
	}
48

  
49
	public boolean isEnabled() {
50
		// Nothing to do
51
		return false;
52
	}
53

  
54
	public boolean isVisible() {
55
		// Nothing to do
56
		return false;
57
	}
58

  
59
}
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.app/org.gvsig.dwg.app.mainplugin/src/main/resources-plugin/config.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<plugin-config>
3
	<libraries library-dir="lib">
4
	</libraries>
5
	<depends plugin-name="org.gvsig.app.mainplugin"/>
6
		<resourceBundle name="text"/>
7
	<extensions>
8
		<extension class-name="org.gvsig.dwg.DWGRegisterExtension"
9
			description="DWG Driver"
10
			active="true">
11
		</extension>
12

  
13
	</extensions>
14
</plugin-config>
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.app/org.gvsig.dwg.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
1
<assembly>
2
  <id>gvsig-plugin-package</id>
3
  <formats>
4
    <format>zip</format>
5
  </formats>
6
  <baseDirectory>${project.artifactId}</baseDirectory>
7
  <includeBaseDirectory>true</includeBaseDirectory>
8
  <files>
9
    <file>
10
      <source>target/${project.artifactId}-${project.version}.jar</source>
11
      <outputDirectory>lib</outputDirectory>
12
    </file>
13
    <file>
14
      <source>target/package.info</source>
15
    </file>
16
  </files>
17

  
18
  <fileSets>
19
    <fileSet>
20
      <directory>src/main/resources-plugin</directory>
21
      <outputDirectory>.</outputDirectory>
22
    </fileSet>
23
  </fileSets>
24

  
25
  <dependencySets>
26
    <dependencySet>
27
      <useProjectArtifact>false</useProjectArtifact>
28
      <useTransitiveDependencies>false</useTransitiveDependencies>
29
      <outputDirectory>lib</outputDirectory>
30
      <includes>
31
        <include>org.gvsig:org.gvsig.dwg.provider.legend</include>
32
        <include>org.gvsig:org.gvsig.dwg.provider</include>
33
        <include>org.gvsig:org.gvsig.dwg.lib</include>
34
      </includes>
35
    </dependencySet>
36
  </dependencySets>
37

  
38
</assembly>
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.app/org.gvsig.dwg.app.mainplugin/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
  <modelVersion>4.0.0</modelVersion>
6
  <artifactId>org.gvsig.dwg.app.mainplugin</artifactId>
7
  <packaging>jar</packaging>
8
  <name>${project.artifactId}</name>
9
  <description>
10
DWG file format support (read-only)
11

  
12
Supported versions:
13
- v12
14
- v14
15
- v15
16
- v2004
17

  
18
  </description>
19
  <parent>
20
      <groupId>org.gvsig</groupId>
21
      <artifactId>org.gvsig.dwg.app</artifactId>
22
      <version>2.0.264</version>
23
  </parent>
24

  
25
  <dependencies>
26
    <dependency>
27
        <groupId>org.gvsig</groupId>
28
        <artifactId>org.gvsig.tools.lib</artifactId>
29
        <scope>compile</scope>
30
    </dependency>
31
    <dependency>
32
        <groupId>org.gvsig</groupId>
33
        <artifactId>org.gvsig.andami</artifactId>
34
        <scope>compile</scope>
35
    </dependency>
36
    <dependency>
37
        <groupId>org.gvsig</groupId>
38
        <artifactId>org.gvsig.dwg.provider</artifactId>
39
        <scope>compile</scope>
40
    </dependency>
41
    <dependency>
42
        <groupId>org.gvsig</groupId>
43
        <artifactId>org.gvsig.dwg.provider.legend</artifactId>
44
        <scope>compile</scope>
45
    </dependency>
46

  
47
    <dependency>
48
        <groupId>org.gvsig</groupId>
49
        <artifactId>org.gvsig.dwg.lib</artifactId>
50
        <scope>runtime</scope>
51
    </dependency>
52

  
53
    <!-- Tests -->
54

  
55
    <dependency>
56
      <groupId>org.gvsig</groupId>
57
      <artifactId>org.gvsig.fmap.dal.impl</artifactId>
58
      <type>test-jar</type>
59
      <scope>test</scope>
60
    </dependency>
61

  
62
    <dependency>
63
      <groupId>org.gvsig</groupId>
64
      <artifactId>org.gvsig.fmap.dal.impl</artifactId>
65
      <type>jar</type>
66
      <scope>test</scope>
67
    </dependency>
68

  
69
  </dependencies>
70

  
71
    <properties>
72
        <!-- Package info property values -->
73
        <!-- Default values in org.gvsig.desktop -->
74
        <gvsig.package.info.name>Formats: dwg file format support (read-only)</gvsig.package.info.name>
75
        <gvsig.package.info.state>testing</gvsig.package.info.state>
76
        <gvsig.package.info.official>true</gvsig.package.info.official>
77
        <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.1.0-A</gvsig.package.info.dependencies>
78
        <gvsig.package.info.categories>Formats,Vector</gvsig.package.info.categories>
79
        <gvsig.package.info.poolURL>https://devel.gvsig.org/download/projects/gvsig-dwg/pool</gvsig.package.info.poolURL>
80
    </properties>
81

  
82
  <build>
83
    <plugins>
84

  
85
      <plugin>
86
        <!-- Skip compilation tests -->
87
        <groupId>org.apache.maven.plugins</groupId>
88
        <artifactId>maven-compiler-plugin</artifactId>
89
        <executions>
90
          <execution>
91
            <id>default-testCompile</id>
92
            <phase>process-test-sources</phase>
93
            <goals>
94
              <goal>testCompile</goal>
95
            </goals>
96
            <configuration>
97
              <skip>true</skip>
98
            </configuration>
99
          </execution>
100
        </executions>
101
      </plugin>
102

  
103
      <plugin>
104
        <!-- Skip test execution -->
105
        <groupId>org.apache.maven.plugins</groupId>
106
        <artifactId>maven-surefire-plugin</artifactId>
107
        <configuration>
108
          <skipTests>true</skipTests>
109
        </configuration>
110
      </plugin>
111

  
112
    </plugins>
113
  </build>
114

  
115
</project>
116

  
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.app/org.gvsig.dwg.app.mainplugin/buildNumber.properties
1
#Sun Feb 04 23:15:30 CET 2024
2
buildNumber=2333
0 3

  
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.app/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
  <modelVersion>4.0.0</modelVersion>
6
  <artifactId>org.gvsig.dwg.app</artifactId>
7
  <packaging>pom</packaging>
8
  <name>${project.artifactId}</name>
9
  <parent>
10
      <groupId>org.gvsig</groupId>
11
      <artifactId>org.gvsig.dwg</artifactId>
12
      <version>2.0.264</version>
13
  </parent>
14

  
15
  <modules>
16
    <module>org.gvsig.dwg.app.mainplugin</module>
17
  </modules>
18

  
19

  
20
</project>
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/CorruptedDwgEntityException.java
1
/*
2
 * Created on 01-feb-2007
3
 *
4
 * gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
5
 *
6
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
7
 *
8
 * This program is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License
10
 * as published by the Free Software Foundation; either version 2
11
 * of the License, or (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program; if not, write to the Free Software
20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
21
 *
22
 * For more information, contact:
23
 *
24
 *  Generalitat Valenciana
25
 *   Conselleria d'Infraestructures i Transport
26
 *   Av. Blasco Ib??ez, 50
27
 *   46010 VALENCIA
28
 *   SPAIN
29
 *
30
 *      +34 963862235
31
 *   gvsig@gva.es
32
 *      www.gvsig.gva.es
33
 *
34
 *    or
35
 *
36
 *   IVER T.I. S.A
37
 *   Salamanca 50
38
 *   46005 Valencia
39
 *   Spain
40
 *
41
 *   +34 963163400
42
 *   dac@iver.es
43
 */
44
/* CVS MESSAGES:
45
*
46
* $Id: CorruptedDwgEntityException.java 28969 2009-05-25 13:23:12Z jmvivo $
47
* $Log$
48
* Revision 1.1.2.2  2007-03-21 19:49:16  azabala
49
* implementation of dwg 12, 13, 14.
50
*
51
* Revision 1.1  2007/02/01 20:00:27  azabala
52
* *** empty log message ***
53
*
54
*
55
*/
56
package org.gvsig.dwg.lib;
57

  
58
public class CorruptedDwgEntityException extends Exception {
59

  
60
	public CorruptedDwgEntityException(String string) {
61
		super(string);
62
	}
63

  
64
}
65

  
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/IDwgVertex.java
1
/*
2
 * Created on 04-mar-2007
3
 *
4
 * gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
5
 *
6
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
7
 *
8
 * This program is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License
10
 * as published by the Free Software Foundation; either version 2
11
 * of the License, or (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program; if not, write to the Free Software
20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
21
 *
22
 * For more information, contact:
23
 *
24
 *  Generalitat Valenciana
25
 *   Conselleria d'Infraestructures i Transport
26
 *   Av. Blasco Ib??ez, 50
27
 *   46010 VALENCIA
28
 *   SPAIN
29
 *
30
 *      +34 963862235
31
 *   gvsig@gva.es
32
 *      www.gvsig.gva.es
33
 *
34
 *    or
35
 *
36
 *   IVER T.I. S.A
37
 *   Salamanca 50
38
 *   46005 Valencia
39
 *   Spain
40
 *
41
 *   +34 963163400
42
 *   dac@iver.es
43
 */
44
/* CVS MESSAGES:
45
*
46
* $Id: IDwgVertex.java 28969 2009-05-25 13:23:12Z jmvivo $
47
* $Log$
48
* Revision 1.2.2.1  2007-03-21 19:49:16  azabala
49
* implementation of dwg 12, 13, 14.
50
*
51
* Revision 1.2  2007/03/20 19:55:27  azabala
52
* source code cleaning
53
*
54
* Revision 1.1  2007/03/06 19:39:38  azabala
55
* Changes to adapt dwg 12 to general architecture
56
*
57
*
58
*/
59
package org.gvsig.dwg.lib;
60

  
61
/**
62
 * Base interface for all DWG vertices. 
63
 * 
64
 * @author azabala
65
 * 
66
 * */
67
public interface IDwgVertex {
68
	public double[] getPoint();
69
	public void setPoint(double[] point);
70
}
71

  
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/DwgHeader.java
1
/* jdwglib. Java Library for reading Dwg files.
2
 * 
3
 * Author: Jose Morell Rama (jose.morell@gmail.com).
4
 * Port from the Pythoncad Dwg library by Art Haas.
5
 *
6
 * Copyright (C) 2005 Jose Morell, IVER TI S.A. and Generalitat Valenciana
7
 *
8
 * This program is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License
10
 * as published by the Free Software Foundation; either version 2
11
 * of the License, or (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program; if not, write to the Free Software
20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
21
 *
22
 * For more information, contact:
23
 *
24
 * Jose Morell (jose.morell@gmail.com)
25
 * 
26
 * or
27
 *
28
 * IVER TI S.A.
29
 *  C/Salamanca, 50
30
 *  46005 Valencia
31
 *  Spain
32
 *  +34 963163400
33
 *  dac@iver.es
34
 */
35
package org.gvsig.dwg.lib;
36

  
37
/**
38
 * The DwgHeader class implements the Header of a DWG file
39
 * 
40
 * @author jmorell
41
 */
42
public class DwgHeader {
43
}
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/util/Point3D.java
1
/*
2
 *
3
 * Este codigo se distribuye bajo licencia GPL
4
 * de GNU. Para obtener una c?pia integra de esta
5
 * licencia acude a www.gnu.org.
6
 * 
7
 * Este software se distribuye "como es". AGIL
8
 * solo  pretende desarrollar herramientas para
9
 * la promoci?n del GIS Libre.
10
 * AGIL no se responsabiliza de las perdidas econ?micas o de 
11
 * informaci?n derivadas del uso de este software.
12
 */
13

  
14

  
15
package org.gvsig.dwg.lib.util;
16

  
17
/**
18
 *  3dim double point. A point is transformed different than a vector.
19
 *  The class is now declared final to allow a more aggresive optimization.
20
 *
21
 *  @see       dxfviewer.math.Vector3D;
22
 *
23
 *  @version   1.10,?01/13/99
24
 */
25
public final class Point3D {
26
  public double   x, y, z;     // coordinates, allowing direct access
27

  
28
  /**
29
   *
30
   */
31
  public Point3D() {
32
  }
33

  
34
  /**
35
   *  Copy constructor.
36
   *  @param  p    point to copy
37
   */
38
  public Point3D(Point3D p) {
39
	x = p.x;
40
	y = p.y;
41
	z = p.z;
42
  }
43

  
44
  /**
45
   *  @param   xx    x coord
46
   *  @param   yy    y coord
47
   *  @param   zz    z coord
48
   */
49
  public Point3D(double xx, double yy, double zz) {
50
	x = xx;
51
	y = yy;
52
	z = zz;
53
  }
54

  
55
  /**
56
   *  Scale.
57
   *  @param   f     scaling factor
58
   */
59
  public void scale(double f) {
60
	if (f != 1f) {
61
	  x *= f;
62
	  y *= f;
63
	  z *= f;
64
	}
65
  }
66

  
67
  /**
68
   *  Add a vector.
69
   *  @param  v      vector to add
70
   */
71
  public void add(Vector3D v) {
72
	x += v.x;
73
	y += v.y;
74
	z += v.z;
75
  }
76

  
77
  /**
78
   *  Get sum with vector.
79
   *  @param  v     vector to add
80
   *  @return this+v
81
   */
82
  public Point3D plus(Vector3D v) {
83
	Point3D ret = new Point3D(this);
84
	ret.add(v);
85
	return ret;
86
  }
87

  
88
  /**
89
   *  Substract a vector.
90
   *  @param  v     vector to substract
91
   */
92
  public void sub(Vector3D v) {
93
	x -= v.x;
94
	y -= v.y;
95
	z -= v.z;
96
  }
97

  
98
  /**
99
   *  Get difference with vector.
100
   *  @param  v     vector to substract
101
   *  @return this-v
102
   */
103
  public Point3D minus(Vector3D v) {
104
	Point3D ret = new Point3D(this);
105
	ret.sub(v);
106
	return ret;
107
  }
108

  
109
  /**
110
   *  Get difference with point.
111
   *  @param  p     point to substract
112
   *  @return this-p
113
   */
114
  public Vector3D minus(Point3D p) {
115
	Vector3D ret = new Vector3D(this);
116
	ret.sub(new Vector3D(p));
117
	return ret;
118
  }
119

  
120
  /**
121
   *  Output.
122
   *  @return  output string
123
   */
124
  public String toString() {
125
	return new String(new StringBuffer().append("[").append(x).append(",").append(y).append(",").append(z).append("]"));
126
  }
127
}
128

  
129

  
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/util/FMapUtil.java
1
/*
2
 * Created on 18-ene-2007 by azabala
3
 *
4
 */
5
package org.gvsig.dwg.lib.util;
6

  
7
import java.awt.geom.Point2D;
8
import java.util.Iterator;
9
import java.util.List;
10

  
11
import org.gvsig.dwg.lib.IDwgVertex;
12
import org.gvsig.fmap.geom.Geometry;
13
import org.gvsig.fmap.geom.GeometryLocator;
14
import org.gvsig.fmap.geom.GeometryManager;
15
import org.gvsig.fmap.geom.aggregate.MultiCurve;
16
import org.gvsig.fmap.geom.aggregate.MultiLine;
17
import org.gvsig.fmap.geom.exception.CreateGeometryException;
18
import org.gvsig.fmap.geom.primitive.Line;
19
import org.gvsig.fmap.geom.primitive.Point;
20
import org.gvsig.fmap.geom.primitive.Polygon;
21
import org.gvsig.fmap.geom.primitive.Surface;
22

  
23
/**
24
 * @author alzabord
25
 *
26
 */
27
public class FMapUtil {
28

  
29
    private static final GeometryManager gManager = GeometryLocator
30
            .getGeometryManager();
31

  
32
    public static Line ptsToLine(List<double[]> pts, int subType)
33
            throws CreateGeometryException {
34

  
35
        if (pts.size() < 2) {
36
            throw new IllegalArgumentException();
37
        }
38
        try {
39
            boolean is3D = subType == Geometry.SUBTYPES.GEOM3D || subType == Geometry.SUBTYPES.GEOM3DM;
40
            Line line = gManager.createLine(subType);
41
            for (double[] p : pts) {
42
                if( is3D ) {
43
                    if( p.length<3 ) {
44
                        line.addVertex(p[0],p[1],0);            
45
                    } else {
46
                        line.addVertex(p[0],p[1],p[2]);            
47
                    }
48
                } else {
49
                    line.addVertex(p[0],p[1]);            
50
                }
51
            }
52
            return line;
53
        } catch(RuntimeException ex) {
54
            throw ex;
55
        }
56
    }
57

  
58
    public static Surface ptsToPolygon(List<double[]> pts, int subType)
59
            throws CreateGeometryException {
60

  
61
        if (pts.size() < 3) {
62
            throw new IllegalArgumentException();
63
        }
64

  
65
        boolean is3D = subType == Geometry.SUBTYPES.GEOM3D || subType == Geometry.SUBTYPES.GEOM3DM;
66
        Polygon polygon = gManager.createPolygon(subType);
67
        for (double[] p : pts) {
68
            if( is3D ) {
69
                polygon.addVertex(p[0],p[1],p[2]);            
70
            } else {
71
                polygon.addVertex(p[0],p[1]);            
72
            }
73
        }
74
        return polygon;
75
    }
76

  
77
    public static Point createPoint(int subType, double[] point) throws CreateGeometryException {
78
        Point result = gManager.createPoint(point[0], point[1], subType);
79
        if (subType == Geometry.SUBTYPES.GEOM3D) {
80
            result.setCoordinateAt(Geometry.DIMENSIONS.Z, point[2]);
81
        }
82
        return result;
83
    }
84

  
85
    public static Point createPoint(int subType, Point2D point) throws CreateGeometryException {
86
        Point result = gManager.createPoint(point.getX(), point.getY(), subType);
87
        return result;
88
    }
89

  
90
    public static Point createPoint(int subType, IDwgVertex dwgvertex) throws CreateGeometryException {
91
        double[] point = dwgvertex.getPoint();
92
        Point result = gManager.createPoint(point[0], point[1], subType);
93
        if (subType == Geometry.SUBTYPES.GEOM3D) {
94
            result.setCoordinateAt(Geometry.DIMENSIONS.Z, point[2]);
95
        }
96
        return result;
97
    }
98

  
99
    /**
100
     * Devuelve la distancia desde angle1 a angle2. Angulo en radianes de
101
     * diferencia entre angle1 y angle2 en sentido antihorario
102
     *
103
     * @param angle1 angulo en radianes. Debe ser positivo y no dar ninguna
104
     * vuelta a la circunferencia
105
     * @param angle2 angulo en radianes. Debe ser positivo y no dar ninguna
106
     * vuelta a la circunferencia
107
     *
108
     * @return distancia entre los ๏ฟฝngulos
109
     */
110
    public static double angleDistance(double angle1, double angle2) {
111
        if (angle1 < angle2) {
112
            return angle2 - angle1;
113
        } else {
114
            return ((Math.PI * 2) - angle1) + angle2;
115
        }
116
    }
117
}
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/util/ArcFromBulgeCalculator.java
1
/* jdwglib. Java Library for reading Dwg files.
2
 * 
3
 * Author: Jose Morell Rama (jose.morell@gmail.com).
4
 * Port from the Pythoncad Dwg library by Art Haas.
5
 *
6
 * Copyright (C) 2005 Jose Morell, IVER TI S.A. and Generalitat Valenciana
7
 *
8
 * This program is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License
10
 * as published by the Free Software Foundation; either version 2
11
 * of the License, or (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program; if not, write to the Free Software
20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
21
 *
22
 * For more information, contact:
23
 *
24
 * Jose Morell (jose.morell@gmail.com)
25
 * 
26
 * or
27
 *
28
 * IVER TI S.A.
29
 *  C/Salamanca, 50
30
 *  46005 Valencia
31
 *  Spain
32
 *  +34 963163400
33
 *  dac@iver.es
34
 */
35
package org.gvsig.dwg.lib.util;
36

  
37
import java.awt.geom.Point2D;
38
import java.util.Vector;
39

  
40
/**
41
 * This class calculates an arc given by a start and end points and a bulge
42
 * 
43
 * @author jmorell
44
 */
45
public class ArcFromBulgeCalculator {
46
	private double[] coord1, coord2;
47
	private double[] center;
48
	private double radio, empieza, acaba;
49
	private double bulge;
50
	private double d, dd, aci;
51
	private double[] coordAux;
52
	
53
	/**
54
	 * This method calculates an arc given by a start and end points and a bulge
55
	 * 
56
	 * @param p1 Start point of the arc given by a Point2D
57
	 * @param p2 End point of the arc given by a Point2D
58
	 * @param bulge Bulge of the arc given by a double value 
59
	 */
60
	public ArcFromBulgeCalculator(double[] p1, double[] p2, double bulge) {
61
		this.bulge = bulge;
62
		if (bulge < 0.0) {
63
			coord1 = p2;
64
			coord2 = p1;
65
		} else {
66
			coord1 = p1;
67
			coord2 = p2;
68
		}
69
		calParams();
70
	}
71
	
72
	private void calParams() {
73
		d = Math.sqrt((coord2[0]-coord1[0])*(coord2[0]-coord1[0]) + 
74
				(coord2[1]-coord1[1])*(coord2[1]-coord1[1]));
75
		coordAux = new double[]{(coord1[0]+coord2[0])/2.0, (coord1[1]+coord2[1])/2.0};
76
		double b = Math.abs(bulge);
77
		double beta = Math.atan(b);
78
		double alfa = beta*4.0;
79
		double landa = alfa/2.0;
80
		dd = (d/2.0)/(Math.tan(landa));
81
		radio = (d/2.0)/(Math.sin(landa));		
82
		aci = Math.atan((coord2[0]-coord1[0])/(coord2[1]-coord1[1]));
83
		double aciDegree = aci*180.0/Math.PI;
84
		if (coord2[1] > coord1[1]) {
85
			aci += Math.PI;
86
			aciDegree = aci*180.0/Math.PI;
87
		}
88
		center = new double[]{coordAux[0] + dd*Math.sin(aci+(Math.PI/2.0)), coordAux[1] + dd*Math.cos(aci+(Math.PI/2.0))};
89
		calEA(alfa);
90
	}
91
	
92
	private void calEA(double alfa){
93
		empieza = Math.atan2(coord1[1]-center[1], coord1[0]-center[0]);
94
		acaba = (empieza + alfa);
95
		empieza = empieza*180.0/Math.PI;
96
		acaba = acaba*180.0/Math.PI;
97
	}
98
	
99
	/**
100
	 * This method calculates an arc in a Gis geometry model. This arc is represented in
101
	 * this model by a Vector of Point2D. The distance between points in the arc is given
102
	 * as an argument
103
	 * 
104
	 * @param inc Distance between points in the arc
105
	 * @return Vector Vector with the set of Point2D that represents the arc
106
	 */
107
	public Vector getPoints(double inc) {
108
		Vector arc = new Vector();
109
		double angulo;
110
		int iempieza = (int) empieza + 1;
111
		int iacaba = (int) acaba;
112
		if (empieza <= acaba) {
113
			addNode(arc, empieza);
114
			for (angulo = iempieza; angulo <= iacaba; angulo += inc) {
115
				addNode(arc, angulo);
116
			}
117
			addNode(arc, acaba);
118
		} else {
119
			addNode(arc, empieza);
120
			for (angulo = iempieza ; angulo <= 360; angulo += inc) {
121
				addNode(arc, angulo);
122
			}
123
			for (angulo = 1; angulo <= iacaba; angulo += inc) {
124
				addNode(arc, angulo);
125
			}
126
			addNode(arc, angulo);
127
		}
128
		Point2D aux = (Point2D)arc.get(arc.size()-1);
129
		double aux1 = Math.abs(aux.getX()-coord2[0]);
130
		double aux2 = Math.abs(aux.getY()-coord2[1]);
131
		return arc;
132
	}
133
	
134
	/**
135
	 * Method that allows to obtain a set of points located in the central zone of 
136
	 * this arc object
137
	 */
138
	public Vector getCentralPoint() {
139
		Vector arc = new Vector();
140
		if (empieza <= acaba) {
141
			addNode(arc, (empieza+acaba)/2.0);
142
		} else {
143
			addNode(arc, empieza);
144
			double alfa = 360-empieza;
145
			double beta = acaba;
146
			double an = alfa + beta;
147
			double mid = an/2.0;
148
			if (mid<=alfa) {
149
				addNode(arc, empieza+mid);
150
			} else {
151
				addNode(arc, mid-alfa);
152
			}
153
		}
154
		return arc;
155
	}
156
	
157
	private void addNode(Vector arc, double angulo) {
158
		double yy = center[1] + radio * Math.sin(angulo*Math.PI/180.0);
159
		double xx = center[0] + radio * Math.cos(angulo*Math.PI/180.0);		
160
		arc.add(new Point2D.Double(xx,yy));
161
	}
162
}
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/util/GisModelCurveCalculator.java
1
/* jdwglib. Java Library for reading Dwg files.
2
 * 
3
 * Author: Jose Morell Rama (jose.morell@gmail.com).
4
 * Port from the Pythoncad Dwg library by Art Haas.
5
 *
6
 * Copyright (C) 2005 Jose Morell, IVER TI S.A. and Generalitat Valenciana
7
 *
8
 * This program is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License
10
 * as published by the Free Software Foundation; either version 2
11
 * of the License, or (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program; if not, write to the Free Software
20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
21
 *
22
 * For more information, contact:
23
 *
24
 * Jose Morell (jose.morell@gmail.com)
25
 * 
26
 * or
27
 *
28
 * IVER TI S.A.
29
 *  C/Salamanca, 50
30
 *  46005 Valencia
31
 *  Spain
32
 *  +34 963163400
33
 *  dac@iver.es
34
 */
35
package org.gvsig.dwg.lib.util;
36

  
37
import java.awt.geom.Point2D;
38
import java.util.ArrayList;
39
import java.util.List;
40
import java.util.Vector;
41

  
42
/**
43
 * This class allows to obtain arcs and circles given by the most usual parameters, in a
44
 * Gis geometry model. In this model, an arc or a circle is given by a set of points that
45
 * defines it shape
46
 * 
47
 * @author jmorell
48
 */
49
public class GisModelCurveCalculator {
50
    
51
    /**
52
     * This method calculates an array of Point2D that represents a circle. The distance
53
     * between it points is 1 angular unit 
54
     * 
55
     * @param c Point2D that represents the center of the circle
56
     * @param r double value that represents the radius of the circle
57
     * @return Point2D[] An array of Point2D that represents the shape of the circle
58
     */
59
	public static List calculateGisModelCircle(Point2D c, double r) {
60
		List pts = new ArrayList();
61
		int angulo = 0;
62
		for (angulo=0; angulo<360; angulo++) {
63
			double[] pt = new double[]{c.getX(), c.getY()};
64
			pt[0] = pt[0] + r * Math.sin(angulo*Math.PI/(double)180.0);
65
			pt[1] = pt[1] + r * Math.cos(angulo*Math.PI/(double)180.0);
66
			
67
			pts.add(pt);
68
		}
69
		return pts;
70
	}
71
	
72
    /**
73
     * This method calculates an array of Point2D that represents a ellipse. The distance
74
     * between it points is 1 angular unit 
75
     * 
76
     * @param center Point2D that represents the center of the ellipse
77
     * @param majorAxisVector Point2D that represents the vector for the major axis
78
     * @param axisRatio double value that represents the axis ratio
79
	 * @param initAngle double value that represents the start angle of the ellipse arc
80
	 * @param endAngle double value that represents the end angle of the ellipse arc
81
     * @return Point2D[] An array of Point2D that represents the shape of the ellipse
82
     */
83
	public static List calculateGisModelEllipse(Point2D center, Point2D majorAxisVector, double axisRatio, double initAngle, double endAngle) {
84
		Point2D majorPoint = new Point2D.Double(center.getX()+majorAxisVector.getX(), center.getY()+majorAxisVector.getY());
85
		double orientation  = Math.atan(majorAxisVector.getY()/majorAxisVector.getX());
86
	    double semiMajorAxisLength = center.distance(majorPoint);
87
		double semiMinorAxisLength = semiMajorAxisLength*axisRatio;
88
	    double eccentricity = Math.sqrt(1-((Math.pow(semiMinorAxisLength, 2))/(Math.pow(semiMajorAxisLength, 2))));
89
		int isa = (int)initAngle;
90
		int iea = (int)endAngle;
91
		double angulo;
92
		List pts = new ArrayList();
93
		if (initAngle <= endAngle) {
94
			angulo = initAngle;
95
			double r = semiMinorAxisLength/Math.sqrt(1-((Math.pow(eccentricity, 2))*(Math.pow(Math.cos(angulo*Math.PI/(double)180.0), 2))));
96
		    double x = r*Math.cos(angulo*Math.PI/(double)180.0);
97
		    double y = r*Math.sin(angulo*Math.PI/(double)180.0);
98
		    double xrot = x*Math.cos(orientation) - y*Math.sin(orientation);
99
		    double yrot = x*Math.sin(orientation) + y*Math.cos(orientation);
100
			
101
			double[] pt = new double[]{center.getX() + xrot, center.getY() + yrot };
102
			pts.add(pt);
103
			
104
			for (int i=1; i<=(iea-isa)+1; i++) {
105
				angulo = (double)(isa+i);
106
				r = semiMinorAxisLength/Math.sqrt(1-((Math.pow(eccentricity, 2))*(Math.pow(Math.cos(angulo*Math.PI/(double)180.0), 2))));
107
			    x = r*Math.cos(angulo*Math.PI/(double)180.0);
108
			    y = r*Math.sin(angulo*Math.PI/(double)180.0);
109
			    xrot = x*Math.cos(orientation) - y*Math.sin(orientation);
110
			    yrot = x*Math.sin(orientation) + y*Math.cos(orientation);
111
			    
112
			    pt = new double[]{center.getX() + xrot, center.getY() + yrot};
113
			    pts.add(pt);
114
			}
115
			
116
			angulo = endAngle;
117
			r = semiMinorAxisLength/Math.sqrt(1-((Math.pow(eccentricity, 2))*(Math.pow(Math.cos(angulo*Math.PI/(double)180.0), 2))));
118
		    x = r*Math.cos(angulo*Math.PI/(double)180.0);
119
		    y = r*Math.sin(angulo*Math.PI/(double)180.0);
120
		    xrot = x*Math.cos(orientation) - y*Math.sin(orientation);
121
		    yrot = x*Math.sin(orientation) + y*Math.cos(orientation);
122
		    
123
		    
124
		    pt = new double[]{center.getX() + xrot, center.getY() + yrot};
125
		    pts.add(pt);
126
		    
127
		} else {
128
			angulo = initAngle;
129
			double r = semiMinorAxisLength/Math.sqrt(1-((Math.pow(eccentricity, 2))*(Math.pow(Math.cos(angulo*Math.PI/(double)180.0), 2))));
130
		    double x = r*Math.cos(angulo*Math.PI/(double)180.0);
131
		    double y = r*Math.sin(angulo*Math.PI/(double)180.0);
132
		    double xrot = x*Math.cos(orientation) - y*Math.sin(orientation);
133
		    double yrot = x*Math.sin(orientation) + y*Math.cos(orientation);
134
		    
135
		  
136
			double[] pt = new double[]{center.getX() + r*Math.cos(angulo*Math.PI/(double)180.0), center.getY() + r*Math.sin(angulo*Math.PI/(double)180.0)};
137
		    pts.add(pt);
138
		    
139
		    for (int i=1; i<=(360-isa); i++) {
140
				angulo = (double)(isa+i);
141
				r = semiMinorAxisLength/Math.sqrt(1-((Math.pow(eccentricity, 2))*(Math.pow(Math.cos(angulo*Math.PI/(double)180.0), 2))));
142
			    x = r*Math.cos(angulo*Math.PI/(double)180.0);
143
			    y = r*Math.sin(angulo*Math.PI/(double)180.0);
144
			    xrot = x*Math.cos(orientation) - y*Math.sin(orientation);
145
			    yrot = x*Math.sin(orientation) + y*Math.cos(orientation);
146
			    
147
			    pt = new double[]{center.getX() + xrot, center.getY() + yrot};
148
			    pts.add(pt);
149
			}
150
		    
151
		    
152
			for (int i=(360-isa)+1; i<=(360-isa)+iea; i++) {
153
				angulo = (double)(i-(360-isa));
154
				r = semiMinorAxisLength/Math.sqrt(1-((Math.pow(eccentricity, 2))*(Math.pow(Math.cos(angulo*Math.PI/(double)180.0), 2))));
155
			    x = r*Math.cos(angulo*Math.PI/(double)180.0);
156
			    y = r*Math.sin(angulo*Math.PI/(double)180.0);
157
			    xrot = x*Math.cos(orientation) - y*Math.sin(orientation);
158
			    yrot = x*Math.sin(orientation) + y*Math.cos(orientation);
159
			    
160
			    pt = new double[]{center.getX() + xrot, center.getY() + yrot};
161
			    pts.add(pt);
162
			    
163
			}
164
			
165
			angulo = endAngle;
166
			r = semiMinorAxisLength/Math.sqrt(1-((Math.pow(eccentricity, 2))*(Math.pow(Math.cos(angulo*Math.PI/(double)180.0), 2))));
167
		    x = r*Math.cos(angulo*Math.PI/(double)180.0);
168
		    y = r*Math.sin(angulo*Math.PI/(double)180.0);
169
		    xrot = x*Math.cos(orientation) - y*Math.sin(orientation);
170
		    yrot = x*Math.sin(orientation) + y*Math.cos(orientation);
171
		    
172
		    pt = new double[]{center.getX() + xrot, center.getY() + yrot};
173
		    pts.add(pt);
174
		}
175
		return pts;
176
	}
177
	
178
	/**
179
     * This method calculates an array of Point2D that represents an arc. The distance
180
     * between it points is 1 angular unit 
181
	 * 
182
     * @param c Point2D that represents the center of the arc
183
     * @param r double value that represents the radius of the arc
184
	 * @param sa double value that represents the start angle of the arc
185
	 * @param ea double value that represents the end angle of the arc
186
     * @return Point2D[] An array of Point2D that represents the shape of the arc
187
	 */
188
	public static List calculateGisModelArc(double[] center, double r, double sa, double ea) {
189
		int isa = (int)sa;
190
		int iea = (int)ea;
191
		double angulo;
192
		List pts = new ArrayList();
193
		if (sa <= ea) {
194
			angulo = sa;
195
			pts.add(new double[]{center[0] + r * Math.cos(angulo*Math.PI/(double)180.0), 
196
					center[1] + r * Math.sin(angulo*Math.PI/(double)180.0)});
197
			for (int i=1; i <= (iea-isa)+1; i++) {
198
				angulo = (double)(isa+i);
199
				double x = center[0] + r * Math.cos(angulo*Math.PI/(double)180.0);
200
				double y = center[1] + r * Math.sin(angulo*Math.PI/(double)180.0);
201
				pts.add(new double[]{x, y});
202
			}
203
			angulo = ea;
204
			double x = center[0] + r * Math.cos(angulo*Math.PI/(double)180.0);
205
			double y = center[1] + r * Math.sin(angulo*Math.PI/(double)180.0);
206
			pts.add(new double[]{x, y});
207
		} else {
208
			angulo = sa;
209
			double x = center[0] + r * Math.cos(angulo*Math.PI/(double)180.0);
210
			double y = center[1] + r * Math.sin(angulo*Math.PI/(double)180.0);
211
			pts.add(new double[]{x, y});
212
			for (int i=1; i <= (360-isa); i++) {
213
				angulo = (double)(isa+i);
214
				x = center[0] + r * Math.cos(angulo*Math.PI/(double)180.0);
215
				y = center[1] + r * Math.sin(angulo*Math.PI/(double)180.0); 
216
				pts.add(new double[]{x, y});
217
			}
218
			
219
			for (int i=( 360-isa)+1; i <= (360-isa)+iea; i++) {
220
				angulo = (double)(i-(360-isa));
221
				x = center[0] + r * Math.cos(angulo*Math.PI/(double)180.0);
222
				y = center[1] + r * Math.sin(angulo*Math.PI/(double)180.0);
223
				pts.add(new double[]{x, y});
224
			}
225
			angulo = ea;
226
			x = center[0] + r * Math.cos(angulo*Math.PI/(double)180.0);
227
			y = center[1] + r * Math.sin(angulo*Math.PI/(double)180.0);
228
			pts.add(new double[]{x, y});
229
		}
230
		return pts;
231
	}
232
	
233
	/**
234
	 * This method applies an array of bulges to an array of Point2D that defines a
235
	 * polyline. The result is a polyline with the input points with the addition of the
236
	 * points that define the new arcs added to the polyline
237
	 * 
238
	 * @param newPts Base points of the polyline
239
	 * @param bulges Array of bulge parameters
240
	 * @return Polyline with a new set of arcs added and defined by the bulge parameters
241
	 */
242
	public static List calculateGisModelBulge(List newPts, double[] bulges) {
243
		Vector ptspol = new Vector();
244
		double[] init = null;
245
		double[] end = null;
246
		for (int j=0; j<newPts.size(); j++) {
247
			init = (double[]) newPts.get(j);
248
			if (j != newPts.size()-1) 
249
				end = (double[]) newPts.get(j+1);
250
			if (bulges[j]==0 || j== newPts.size()-1 || 
251
				(init[0] == end[0] && init[1] == end[1])) {
252
				ptspol.add(init);
253
			} else {
254
				ArcFromBulgeCalculator arcCalculator = new ArcFromBulgeCalculator(init, end, bulges[j]);
255
				Vector arc = arcCalculator.getPoints(1);
256
				if (bulges[j]<0) {
257
					for (int k=arc.size()-1; k>=0; k--) {
258
						ptspol.add(arc.get(k));
259
					}
260
					ptspol.remove(ptspol.size()-1);
261
				} else {
262
					for (int k=0;k<arc.size();k++) {
263
						ptspol.add(arc.get(k));
264
					}
265
					ptspol.remove(ptspol.size()-1);
266
				}
267
			}
268
		}
269
		List points = new ArrayList();
270
		for (int j=0;j<ptspol.size();j++) {
271
			points.add(ptspol.get(j));
272
		}
273
		return points;
274
	}
275
}
tags/org.gvsig.dwg-2.0.264/org.gvsig.dwg.lib/src/main/java/org/gvsig/dwg/lib/util/HexUtil.java
1
package org.gvsig.dwg.lib.util;
2

  
3
import java.util.BitSet;
4

  
5
/**
6
 * Number in hexadecimal format are used throughout Freenet.
7
 * 
8
 * <p>Unless otherwise stated, the conventions follow the rules outlined in the 
9
 * Java Language Specification.</p>
10
 * 
11
 * @author syoung
12
 */
13
public class HexUtil {
14
	private HexUtil() {		
15
	}	
16
	
17

  
18
	/**
19
	 * Converts a byte array into a string of upper case hex chars.
20
	 * 
21
	 * @param bs
22
	 *            A byte array
23
	 * @param off
24
	 *            The index of the first byte to read
25
	 * @param length
26
	 *            The number of bytes to read.
27
	 * @return the string of hex chars.
28
	 */
29
	public static final String bytesToHex(byte[] bs, int off, int length) {
30
		StringBuffer sb = new StringBuffer(length * 2);
31
		bytesToHexAppend(bs, off, length, sb);
32
		return sb.toString();
33
	}
34

  
35
	public static final void bytesToHexAppend(
36
		byte[] bs,
37
		int off,
38
		int length,
39
		StringBuffer sb) {
40
		sb.ensureCapacity(sb.length() + length * 2);
41
		for (int i = off; i < (off + length) && i < bs.length; i++) {
42
			sb.append(Character.forDigit((bs[i] >>> 4) & 0xf, 16));
43
			sb.append(Character.forDigit(bs[i] & 0xf, 16));
44
		}
45
	}
46

  
47
	public static final String bytesToHex(byte[] bs) {
48
		return bytesToHex(bs, 0, bs.length);
49
	}
50

  
51
	public static final byte[] hexToBytes(String s) {
52
		return hexToBytes(s, 0);
53
	}
54

  
55
	public static final byte[] hexToBytes(String s, int off) {
56
		byte[] bs = new byte[off + (1 + s.length()) / 2];
57
		hexToBytes(s, bs, off);
58
		return bs;
59
	}
60

  
61
	/**
62
	 * Converts a String of hex characters into an array of bytes.
63
	 * 
64
	 * @param s
65
	 *            A string of hex characters (upper case or lower) of even
66
	 *            length.
67
	 * @param out
68
	 *            A byte array of length at least s.length()/2 + off
69
	 * @param off
70
	 *            The first byte to write of the array
71
	 */
72
	public static final void hexToBytes(String s, byte[] out, int off)
73
		throws NumberFormatException, IndexOutOfBoundsException {
74
		int slen = s.length();
75
		if ((slen % 2) != 0) {
76
			s = '0' + s;
77
		}
78

  
79
		if (out.length < off + slen / 2) {
80
			throw new IndexOutOfBoundsException(
81
				"Output buffer too small for input ("
82
					+ out.length
83
					+ "<"
84
					+ off
85
					+ slen / 2
86
					+ ")");
87
		}
88

  
89
		// Safe to assume the string is even length
90
		byte b1, b2;
91
		for (int i = 0; i < slen; i += 2) {
92
			b1 = (byte) Character.digit(s.charAt(i), 16);
93
			b2 = (byte) Character.digit(s.charAt(i + 1), 16);
94
			if (b1 < 0 || b2 < 0) {
95
				throw new NumberFormatException();
96
			}
97
			out[off + i / 2] = (byte) (b1 << 4 | b2);
98
		}
99
	}
100

  
101
	/**
102
	 * Pack the bits in ba into a byte[].
103
	 */
104
	public final static byte[] bitsToBytes(BitSet ba, int size) {
105
		int bytesAlloc = countBytesForBits(size);
106
		byte[] b = new byte[bytesAlloc];
107
		StringBuffer sb = new StringBuffer();
108
		for(int i=0;i<b.length;i++) {
109
			short s = 0;
110
			for(int j=0;j<8;j++) {
111
				int idx = i*8+j;
112
				boolean val = 
113
					idx > size ? false :
114
						ba.get(idx);
115
				s |= val ? (1<<j) : 0;
116
				sb.append(val ? '1' : '0');
117
			}
118
			if(s > 255) throw new IllegalStateException("WTF? s = "+s);
119
			b[i] = (byte)s;
120
		}
121
		return b;
122
	}
123

  
124
	/**
125
	 * Pack the bits in ba into a byte[] then convert that
126
	 * to a hex string and return it.
127
	 */
128
	public final static String bitsToHexString(BitSet ba, int size) {
129
		return bytesToHex(bitsToBytes(ba, size));
130
	}
131

  
132

  
133
	/**
134
	 * @return the number of bytes required to represent the
135
	 * bitset
136
	 */
137
	public static int countBytesForBits(int size) {
138
		// Brackets matter here! == takes precedence over the rest
139
		return (size/8) + ((size % 8) == 0 ? 0:1);
140
	}
141

  
142

  
143
	/**
144
	 * Read bits from a byte array into a bitset
145
	 * @param b the byte[] to read from
146
	 * @param ba the bitset to write to
147
	 */
148
	public static void bytesToBits(byte[] b, BitSet ba, int maxSize) {
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff