[GRASS-SVN] r69679 - in grass-addons/grass7/vector: . v.in.survey v.in.survey/.git v.in.survey/.git/hooks v.in.survey/.git/info v.in.survey/.git/logs v.in.survey/.git/logs/refs v.in.survey/.git/logs/refs/heads v.in.survey/.git/objects v.in.survey/.git/objects/03 v.in.survey/.git/objects/0a v.in.survey/.git/objects/10 v.in.survey/.git/objects/12 v.in.survey/.git/objects/13 v.in.survey/.git/objects/14 v.in.survey/.git/objects/1c v.in.survey/.git/objects/1d v.in.survey/.git/objects/1e v.in.survey/.git/objects/1f v.in.survey/.git/objects/27 v.in.survey/.git/objects/2b v.in.survey/.git/objects/32 v.in.survey/.git/objects/38 v.in.survey/.git/objects/44 v.in.survey/.git/objects/45 v.in.survey/.git/objects/47 v.in.survey/.git/objects/4b v.in.survey/.git/objects/50 v.in.survey/.git/objects/52 v.in.survey/.git/objects/54 v.in.survey/.git/objects/56 v.in.survey/.git/objects/5e v.in.survey/.git/objects/61 v.in.survey/.git/objects/64 v.in.survey/.git/objects/68 v.in.survey/.git/objects/6a v.in.surve y/.git/objects/6d v.in.survey/.git/objects/76 v.in.survey/.git/objects/81 v.in.survey/.git/objects/89 v.in.survey/.git/objects/8b v.in.survey/.git/objects/90 v.in.survey/.git/objects/94 v.in.survey/.git/objects/95 v.in.survey/.git/objects/98 v.in.survey/.git/objects/9a v.in.survey/.git/objects/9b v.in.survey/.git/objects/9e v.in.survey/.git/objects/a9 v.in.survey/.git/objects/b0 v.in.survey/.git/objects/b2 v.in.survey/.git/objects/b6 v.in.survey/.git/objects/b8 v.in.survey/.git/objects/c0 v.in.survey/.git/objects/c5 v.in.survey/.git/objects/c8 v.in.survey/.git/objects/c9 v.in.survey/.git/objects/ca v.in.survey/.git/objects/cc v.in.survey/.git/objects/d1 v.in.survey/.git/objects/d8 v.in.survey/.git/objects/e3 v.in.survey/.git/objects/e6 v.in.survey/.git/objects/eb v.in.survey/.git/objects/f1 v.in.survey/.git/objects/f2 v.in.survey/.git/objects/f7 v.in.survey/.git/objects/f9 v.in.survey/.git/objects/fd v.in.survey/.git/objects/fe v.in.survey/.git/refs v.in.survey/.git/refs/heads
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Oct 6 01:10:52 PDT 2016
Author: evas
Date: 2016-10-06 01:10:51 -0700 (Thu, 06 Oct 2016)
New Revision: 69679
Added:
grass-addons/grass7/vector/v.in.survey/
grass-addons/grass7/vector/v.in.survey/.git/
grass-addons/grass7/vector/v.in.survey/.git/COMMIT_EDITMSG
grass-addons/grass7/vector/v.in.survey/.git/HEAD
grass-addons/grass7/vector/v.in.survey/.git/branches/
grass-addons/grass7/vector/v.in.survey/.git/config
grass-addons/grass7/vector/v.in.survey/.git/description
grass-addons/grass7/vector/v.in.survey/.git/hooks/
grass-addons/grass7/vector/v.in.survey/.git/hooks/applypatch-msg.sample
grass-addons/grass7/vector/v.in.survey/.git/hooks/commit-msg.sample
grass-addons/grass7/vector/v.in.survey/.git/hooks/post-update.sample
grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-applypatch.sample
grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-commit.sample
grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-push.sample
grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-rebase.sample
grass-addons/grass7/vector/v.in.survey/.git/hooks/prepare-commit-msg.sample
grass-addons/grass7/vector/v.in.survey/.git/hooks/update.sample
grass-addons/grass7/vector/v.in.survey/.git/index
grass-addons/grass7/vector/v.in.survey/.git/info/
grass-addons/grass7/vector/v.in.survey/.git/info/exclude
grass-addons/grass7/vector/v.in.survey/.git/logs/
grass-addons/grass7/vector/v.in.survey/.git/logs/HEAD
grass-addons/grass7/vector/v.in.survey/.git/logs/refs/
grass-addons/grass7/vector/v.in.survey/.git/logs/refs/heads/
grass-addons/grass7/vector/v.in.survey/.git/logs/refs/heads/master
grass-addons/grass7/vector/v.in.survey/.git/objects/
grass-addons/grass7/vector/v.in.survey/.git/objects/03/
grass-addons/grass7/vector/v.in.survey/.git/objects/03/28fae983785eef93612c23f7b9efb4269378c4
grass-addons/grass7/vector/v.in.survey/.git/objects/0a/
grass-addons/grass7/vector/v.in.survey/.git/objects/0a/20261bf39392492e1c0e6be2444ca2702f9228
grass-addons/grass7/vector/v.in.survey/.git/objects/10/
grass-addons/grass7/vector/v.in.survey/.git/objects/10/0b0e0b91fce8b1fd37494573a4208abe359877
grass-addons/grass7/vector/v.in.survey/.git/objects/12/
grass-addons/grass7/vector/v.in.survey/.git/objects/12/987fe9d1f8e1c415b87ad55194c489f651d94f
grass-addons/grass7/vector/v.in.survey/.git/objects/13/
grass-addons/grass7/vector/v.in.survey/.git/objects/13/cf1869a8db284e373bc99b86d794cb1ecff6db
grass-addons/grass7/vector/v.in.survey/.git/objects/14/
grass-addons/grass7/vector/v.in.survey/.git/objects/14/0d32355a20862ecf5006f758cd97d6dfaa6681
grass-addons/grass7/vector/v.in.survey/.git/objects/1c/
grass-addons/grass7/vector/v.in.survey/.git/objects/1c/f2c35cf7858257f1ba0f33e349f89efc172a4e
grass-addons/grass7/vector/v.in.survey/.git/objects/1d/
grass-addons/grass7/vector/v.in.survey/.git/objects/1d/3f5c44bb7c53c45f0b69311cbfc5c872abc411
grass-addons/grass7/vector/v.in.survey/.git/objects/1e/
grass-addons/grass7/vector/v.in.survey/.git/objects/1e/094956288d0b9b35c7682cc34e86f44517f1cc
grass-addons/grass7/vector/v.in.survey/.git/objects/1f/
grass-addons/grass7/vector/v.in.survey/.git/objects/1f/c94a337a764cb2c5aba6e9bf404476bf1c38f8
grass-addons/grass7/vector/v.in.survey/.git/objects/27/
grass-addons/grass7/vector/v.in.survey/.git/objects/27/71f37ea094be36070f61196c5694c25b363aeb
grass-addons/grass7/vector/v.in.survey/.git/objects/27/abd2678f662aa3cc76c844ddacd750b19ed86a
grass-addons/grass7/vector/v.in.survey/.git/objects/2b/
grass-addons/grass7/vector/v.in.survey/.git/objects/2b/cba6a995c70ae8e267f4f2aebcb6babd84e906
grass-addons/grass7/vector/v.in.survey/.git/objects/32/
grass-addons/grass7/vector/v.in.survey/.git/objects/32/fa2414088a109757202c2888a0a7b5380d682b
grass-addons/grass7/vector/v.in.survey/.git/objects/38/
grass-addons/grass7/vector/v.in.survey/.git/objects/38/a1aac24671d12daf6b10f59cfcbbb18a05c97b
grass-addons/grass7/vector/v.in.survey/.git/objects/44/
grass-addons/grass7/vector/v.in.survey/.git/objects/44/a823d4adb6ec9363ecd8535d703874766ab34d
grass-addons/grass7/vector/v.in.survey/.git/objects/45/
grass-addons/grass7/vector/v.in.survey/.git/objects/45/b68b812f9a07b730e8cfdef72ca804e031b601
grass-addons/grass7/vector/v.in.survey/.git/objects/47/
grass-addons/grass7/vector/v.in.survey/.git/objects/47/77b40edeac5a4da02f1ba442f8192ed0733fd0
grass-addons/grass7/vector/v.in.survey/.git/objects/4b/
grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c8ad006bead1c7840940e53da707c48dbda829
grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c90dafb77214b42800624dbd3e94914615518f
grass-addons/grass7/vector/v.in.survey/.git/objects/50/
grass-addons/grass7/vector/v.in.survey/.git/objects/50/e24814464b538174b07b2c0b1c14835cc84542
grass-addons/grass7/vector/v.in.survey/.git/objects/52/
grass-addons/grass7/vector/v.in.survey/.git/objects/52/ad200e6377a7af0ec5a97ed83e72dc7a451207
grass-addons/grass7/vector/v.in.survey/.git/objects/54/
grass-addons/grass7/vector/v.in.survey/.git/objects/54/afda083a48e8ac3046af1b9e5b843f265b5b22
grass-addons/grass7/vector/v.in.survey/.git/objects/56/
grass-addons/grass7/vector/v.in.survey/.git/objects/56/cffcf896f336800b771623941a52e12c9d683d
grass-addons/grass7/vector/v.in.survey/.git/objects/5e/
grass-addons/grass7/vector/v.in.survey/.git/objects/5e/94212cde10625fed27404117d098b64bd7f312
grass-addons/grass7/vector/v.in.survey/.git/objects/61/
grass-addons/grass7/vector/v.in.survey/.git/objects/61/32e33f678d5f37a25e8535fb946fd4e7912763
grass-addons/grass7/vector/v.in.survey/.git/objects/64/
grass-addons/grass7/vector/v.in.survey/.git/objects/64/5df46b073f13bcfdcc80eb0bd16abcd9e9c071
grass-addons/grass7/vector/v.in.survey/.git/objects/68/
grass-addons/grass7/vector/v.in.survey/.git/objects/68/6f39815237bf23ba2bf93fc87e2c9a272c7e18
grass-addons/grass7/vector/v.in.survey/.git/objects/6a/
grass-addons/grass7/vector/v.in.survey/.git/objects/6a/793b2b7cf9f8c55b211c3f95eccd8d7816eb09
grass-addons/grass7/vector/v.in.survey/.git/objects/6d/
grass-addons/grass7/vector/v.in.survey/.git/objects/6d/09b36e2a98eab26e006bae916c71c290971d29
grass-addons/grass7/vector/v.in.survey/.git/objects/76/
grass-addons/grass7/vector/v.in.survey/.git/objects/76/79e538a9038c95c3af4911e7cd5cbd6c20d766
grass-addons/grass7/vector/v.in.survey/.git/objects/81/
grass-addons/grass7/vector/v.in.survey/.git/objects/81/0a8b4e6765eb13f3aead825c8488aab82033d9
grass-addons/grass7/vector/v.in.survey/.git/objects/81/e7cfa645454bf4af46fc909a4e5b53ddfb9f21
grass-addons/grass7/vector/v.in.survey/.git/objects/89/
grass-addons/grass7/vector/v.in.survey/.git/objects/89/d550f0b780d02a3c9623d907738bf3fecb65b2
grass-addons/grass7/vector/v.in.survey/.git/objects/8b/
grass-addons/grass7/vector/v.in.survey/.git/objects/8b/0f3871ddde717951439240ee70514b2530e1d7
grass-addons/grass7/vector/v.in.survey/.git/objects/8b/9b85886087307927dde24f4db139837580c596
grass-addons/grass7/vector/v.in.survey/.git/objects/90/
grass-addons/grass7/vector/v.in.survey/.git/objects/90/d7c3aea2324a6a16160aa6f79d132225994f29
grass-addons/grass7/vector/v.in.survey/.git/objects/94/
grass-addons/grass7/vector/v.in.survey/.git/objects/94/2d9c5414c63ff83b6139d4985d5e0352e245e6
grass-addons/grass7/vector/v.in.survey/.git/objects/94/6f266a701e10a46e2828273b5c7ea27a2a6bc6
grass-addons/grass7/vector/v.in.survey/.git/objects/94/79d9fc8a6f87e071d6810a30fa22618ee2ef8e
grass-addons/grass7/vector/v.in.survey/.git/objects/95/
grass-addons/grass7/vector/v.in.survey/.git/objects/95/0c044a9ab4eab5ae0a4988842b6e8ef42e05af
grass-addons/grass7/vector/v.in.survey/.git/objects/98/
grass-addons/grass7/vector/v.in.survey/.git/objects/98/d4874af604cfb48481607d7cc822e7f86d3eb1
grass-addons/grass7/vector/v.in.survey/.git/objects/9a/
grass-addons/grass7/vector/v.in.survey/.git/objects/9a/bbdab7fc3c6c0c7318646a33bfa2b9ed010092
grass-addons/grass7/vector/v.in.survey/.git/objects/9b/
grass-addons/grass7/vector/v.in.survey/.git/objects/9b/d6fb785cf42f4fa9503df685549bcfb62502d3
grass-addons/grass7/vector/v.in.survey/.git/objects/9e/
grass-addons/grass7/vector/v.in.survey/.git/objects/9e/b93615ad4238ddf41e79d948bab8ce6c04c8ec
grass-addons/grass7/vector/v.in.survey/.git/objects/9e/c94a321cfffc2e94cf4ca8c1b5ee9661d7add6
grass-addons/grass7/vector/v.in.survey/.git/objects/a9/
grass-addons/grass7/vector/v.in.survey/.git/objects/a9/fef768f80c1340fec52ea6b251b285644805e2
grass-addons/grass7/vector/v.in.survey/.git/objects/b0/
grass-addons/grass7/vector/v.in.survey/.git/objects/b0/f02a774ffefed15ff60439ad3e2064df21d07d
grass-addons/grass7/vector/v.in.survey/.git/objects/b2/
grass-addons/grass7/vector/v.in.survey/.git/objects/b2/7f9e6669b4c206c62f67993b98fa40823215d6
grass-addons/grass7/vector/v.in.survey/.git/objects/b6/
grass-addons/grass7/vector/v.in.survey/.git/objects/b6/26a08c65d66e548c2ce42b05c9ab9663b54d3b
grass-addons/grass7/vector/v.in.survey/.git/objects/b8/
grass-addons/grass7/vector/v.in.survey/.git/objects/b8/1e3d2c4240b3e6d1b8a7b288cab69966673d98
grass-addons/grass7/vector/v.in.survey/.git/objects/b8/4d653a23d831b724b1b61516da7ff323d9d940
grass-addons/grass7/vector/v.in.survey/.git/objects/c0/
grass-addons/grass7/vector/v.in.survey/.git/objects/c0/a61d094163d7589a536662f685f7cfd849342e
grass-addons/grass7/vector/v.in.survey/.git/objects/c5/
grass-addons/grass7/vector/v.in.survey/.git/objects/c5/35d0aedb835e67d376dd225113f892cc878b50
grass-addons/grass7/vector/v.in.survey/.git/objects/c8/
grass-addons/grass7/vector/v.in.survey/.git/objects/c8/88042305ea8569822d9f4290fc8251bbd65153
grass-addons/grass7/vector/v.in.survey/.git/objects/c9/
grass-addons/grass7/vector/v.in.survey/.git/objects/c9/8775a04dd598d4cf71f2c0f27611dd67e3796d
grass-addons/grass7/vector/v.in.survey/.git/objects/ca/
grass-addons/grass7/vector/v.in.survey/.git/objects/ca/e391ba56ddf8c453a66ee33a08e9e77a4e3535
grass-addons/grass7/vector/v.in.survey/.git/objects/cc/
grass-addons/grass7/vector/v.in.survey/.git/objects/cc/187a168e12c5f32d95bcd6e728eeeec8ab31e4
grass-addons/grass7/vector/v.in.survey/.git/objects/d1/
grass-addons/grass7/vector/v.in.survey/.git/objects/d1/641c1c9232a196e4c1d7bc59b710177220c0bd
grass-addons/grass7/vector/v.in.survey/.git/objects/d1/efbf0b31256b58223225c6d4d269288dcdfec7
grass-addons/grass7/vector/v.in.survey/.git/objects/d8/
grass-addons/grass7/vector/v.in.survey/.git/objects/d8/30fc068890077db2155730c18a2f1b1b6f909c
grass-addons/grass7/vector/v.in.survey/.git/objects/e3/
grass-addons/grass7/vector/v.in.survey/.git/objects/e3/bb8c5317aa8c7afaae35f7e67cbc8e5446108f
grass-addons/grass7/vector/v.in.survey/.git/objects/e6/
grass-addons/grass7/vector/v.in.survey/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
grass-addons/grass7/vector/v.in.survey/.git/objects/eb/
grass-addons/grass7/vector/v.in.survey/.git/objects/eb/bad8aae651ceaafb56abbb12604f787fb59b82
grass-addons/grass7/vector/v.in.survey/.git/objects/f1/
grass-addons/grass7/vector/v.in.survey/.git/objects/f1/9898d403ef60db5a15faed5015198b45c48c61
grass-addons/grass7/vector/v.in.survey/.git/objects/f2/
grass-addons/grass7/vector/v.in.survey/.git/objects/f2/87b6df2a101d7b8f8d365550ce6cfa5b2d1253
grass-addons/grass7/vector/v.in.survey/.git/objects/f7/
grass-addons/grass7/vector/v.in.survey/.git/objects/f7/0f28e6d63fb05696616ad6ba48f6b823cac61c
grass-addons/grass7/vector/v.in.survey/.git/objects/f9/
grass-addons/grass7/vector/v.in.survey/.git/objects/f9/f9e416403d8e2273aac25a243413d45d6dda6b
grass-addons/grass7/vector/v.in.survey/.git/objects/fd/
grass-addons/grass7/vector/v.in.survey/.git/objects/fd/9e641f0fd181d86e38f7168184c2c7b3394ec0
grass-addons/grass7/vector/v.in.survey/.git/objects/fe/
grass-addons/grass7/vector/v.in.survey/.git/objects/fe/b9a2564a54affb7a9ad4201b08c5d37add9efb
grass-addons/grass7/vector/v.in.survey/.git/objects/info/
grass-addons/grass7/vector/v.in.survey/.git/objects/pack/
grass-addons/grass7/vector/v.in.survey/.git/refs/
grass-addons/grass7/vector/v.in.survey/.git/refs/heads/
grass-addons/grass7/vector/v.in.survey/.git/refs/heads/master
grass-addons/grass7/vector/v.in.survey/.git/refs/tags/
grass-addons/grass7/vector/v.in.survey/.gitignore
grass-addons/grass7/vector/v.in.survey/Makefile
grass-addons/grass7/vector/v.in.survey/img_NC_dxf.png
grass-addons/grass7/vector/v.in.survey/img_lyrs_broken.png
grass-addons/grass7/vector/v.in.survey/img_soils_correct.png
grass-addons/grass7/vector/v.in.survey/img_sorted_boundaries.png
grass-addons/grass7/vector/v.in.survey/v.in.survey.html
grass-addons/grass7/vector/v.in.survey/v.in.survey.py
Log:
v.in.survey: script for automatic import of coded surveying data
Added: grass-addons/grass7/vector/v.in.survey/.git/COMMIT_EDITMSG
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/COMMIT_EDITMSG (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/COMMIT_EDITMSG 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+dxf done
Added: grass-addons/grass7/vector/v.in.survey/.git/HEAD
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/HEAD (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/HEAD 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+ref: refs/heads/master
Added: grass-addons/grass7/vector/v.in.survey/.git/config
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/config (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/config 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,5 @@
+[core]
+ repositoryformatversion = 0
+ filemode = true
+ bare = false
+ logallrefupdates = true
Added: grass-addons/grass7/vector/v.in.survey/.git/description
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/description (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/description 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/applypatch-msg.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/applypatch-msg.sample (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/applypatch-msg.sample 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit. The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+ exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/applypatch-msg.sample
___________________________________________________________________
Added: svn:executable
+ *
Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/commit-msg.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/commit-msg.sample (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/commit-msg.sample 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message. The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit. The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+ sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
+ echo >&2 Duplicate Signed-off-by lines.
+ exit 1
+}
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/commit-msg.sample
___________________________________________________________________
Added: svn:executable
+ *
Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/post-update.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/post-update.sample (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/post-update.sample 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/post-update.sample
___________________________________________________________________
Added: svn:executable
+ *
Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-applypatch.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-applypatch.sample (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-applypatch.sample 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+ exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-applypatch.sample
___________________________________________________________________
Added: svn:executable
+ *
Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-commit.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-commit.sample (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-commit.sample 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments. The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+ against=HEAD
+else
+ # Initial commit: diff against an empty tree object
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ASCII filenames set this variable to true.
+allownonascii=$(git config --bool hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ASCII filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+ # Note that the use of brackets around a tr range is ok here, (it's
+ # even required, for portability to Solaris 10's /usr/bin/tr), since
+ # the square bracket bytes happen to fall in the designated range.
+ test $(git diff --cached --name-only --diff-filter=A -z $against |
+ LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+ cat <<\EOF
+Error: Attempt to add a non-ASCII file name.
+
+This can cause problems if you want to work with people on other platforms.
+
+To be portable it is advisable to rename the file.
+
+If you know what you are doing you can disable this check using:
+
+ git config hooks.allownonascii true
+EOF
+ exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-commit.sample
___________________________________________________________________
Added: svn:executable
+ *
Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-push.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-push.sample (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-push.sample 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+# An example hook script to verify what is about to be pushed. Called by "git
+# push" after it has checked the remote status, but before anything has been
+# pushed. If this script exits with a non-zero status nothing will be pushed.
+#
+# This hook is called with the following parameters:
+#
+# $1 -- Name of the remote to which the push is being done
+# $2 -- URL to which the push is being done
+#
+# If pushing without using a named remote those arguments will be equal.
+#
+# Information about the commits which are being pushed is supplied as lines to
+# the standard input in the form:
+#
+# <local ref> <local sha1> <remote ref> <remote sha1>
+#
+# This sample shows how to prevent push of commits where the log message starts
+# with "WIP" (work in progress).
+
+remote="$1"
+url="$2"
+
+z40=0000000000000000000000000000000000000000
+
+IFS=' '
+while read local_ref local_sha remote_ref remote_sha
+do
+ if [ "$local_sha" = $z40 ]
+ then
+ # Handle delete
+ :
+ else
+ if [ "$remote_sha" = $z40 ]
+ then
+ # New branch, examine all commits
+ range="$local_sha"
+ else
+ # Update to existing branch, examine new commits
+ range="$remote_sha..$local_sha"
+ fi
+
+ # Check for WIP commit
+ commit=`git rev-list -n 1 --grep '^WIP' "$range"`
+ if [ -n "$commit" ]
+ then
+ echo "Found WIP commit in $local_ref, not pushing"
+ exit 1
+ fi
+ fi
+done
+
+exit 0
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-push.sample
___________________________________________________________________
Added: svn:executable
+ *
Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-rebase.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-rebase.sample (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-rebase.sample 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+ topic="refs/heads/$2"
+else
+ topic=`git symbolic-ref HEAD` ||
+ exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+ ;;
+*)
+ exit 0 ;# we do not interrupt others.
+ ;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master. Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+ echo >&2 "No such branch $topic"
+ exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+ echo >&2 "$topic is fully merged to master; better remove it."
+ exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next? If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+ not_in_topic=`git rev-list "^$topic" master`
+ if test -z "$not_in_topic"
+ then
+ echo >&2 "$topic is already up-to-date with master"
+ exit 1 ;# we could allow it, but there is no point.
+ else
+ exit 0
+ fi
+else
+ not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+ /usr/bin/perl -e '
+ my $topic = $ARGV[0];
+ my $msg = "* $topic has commits already merged to public branch:\n";
+ my (%not_in_next) = map {
+ /^([0-9a-f]+) /;
+ ($1 => 1);
+ } split(/\n/, $ARGV[1]);
+ for my $elem (map {
+ /^([0-9a-f]+) (.*)$/;
+ [$1 => $2];
+ } split(/\n/, $ARGV[2])) {
+ if (!exists $not_in_next{$elem->[0]}) {
+ if ($msg) {
+ print STDERR $msg;
+ undef $msg;
+ }
+ print STDERR " $elem->[1]\n";
+ }
+ }
+ ' "$topic" "$not_in_next" "$not_in_master"
+ exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+ merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+ it is deleted. If you need to build on top of it to correct
+ earlier mistakes, a new topic branch is created by forking at
+ the tip of the "master". This is not strictly necessary, but
+ it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+ branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next". Young
+ topic branches can have stupid mistakes you would rather
+ clean up before publishing, and things that have not been
+ merged into other branches can be easily rebased without
+ affecting other people. But once it is published, you would
+ not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+ Then you can delete it. More importantly, you should not
+ build on top of it -- other people may already want to
+ change things related to the topic as patches against your
+ "master", so if you need further changes, it is better to
+ fork the topic (perhaps with the same name) afresh from the
+ tip of "master".
+
+Let's look at this example:
+
+ o---o---o---o---o---o---o---o---o---o "next"
+ / / / /
+ / a---a---b A / /
+ / / / /
+ / / c---c---c---c B /
+ / / / \ /
+ / / / b---b C \ /
+ / / / / \ /
+ ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished. It has been fully merged up to "master" and "next",
+ and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+ git rev-list ^master ^topic next
+ git rev-list ^master next
+
+ if these match, topic has not merged in next at all.
+
+To compute (2):
+
+ git rev-list master..topic
+
+ if this is empty, it is fully merged to "master".
+
+DOC_END
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-rebase.sample
___________________________________________________________________
Added: svn:executable
+ *
Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/prepare-commit-msg.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/prepare-commit-msg.sample (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/prepare-commit-msg.sample 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source. The hook's purpose is to edit the commit
+# message file. If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples. The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output. It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited. This is rarely a good idea.
+
+case "$2,$3" in
+ merge,)
+ /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+# /usr/bin/perl -i.bak -pe '
+# print "\n" . `git diff --cached --name-status -r`
+# if /^#/ && $first++ == 0' "$1" ;;
+
+ *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/prepare-commit-msg.sample
___________________________________________________________________
Added: svn:executable
+ *
Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/update.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/update.sample (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/update.sample 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+# This boolean sets whether unannotated tags will be allowed into the
+# repository. By default they won't be.
+# hooks.allowdeletetag
+# This boolean sets whether deleting tags will be allowed in the
+# repository. By default they won't be.
+# hooks.allowmodifytag
+# This boolean sets whether a tag may be modified after creation. By default
+# it won't be.
+# hooks.allowdeletebranch
+# This boolean sets whether deleting branches will be allowed in the
+# repository. By default they won't be.
+# hooks.denycreatebranch
+# This boolean sets whether remotely creating branches will be denied
+# in the repository. By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+ echo "Don't run this script from the command line." >&2
+ echo " (if you want, you could supply GIT_DIR then run" >&2
+ echo " $0 <ref> <oldrev> <newrev>)" >&2
+ exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+ echo "usage: $0 <ref> <oldrev> <newrev>" >&2
+ exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+ echo "*** Project description file hasn't been set" >&2
+ exit 1
+ ;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+ newrev_type=delete
+else
+ newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+ refs/tags/*,commit)
+ # un-annotated tag
+ short_refname=${refname##refs/tags/}
+ if [ "$allowunannotated" != "true" ]; then
+ echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+ echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+ exit 1
+ fi
+ ;;
+ refs/tags/*,delete)
+ # delete tag
+ if [ "$allowdeletetag" != "true" ]; then
+ echo "*** Deleting a tag is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/tags/*,tag)
+ # annotated tag
+ if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+ then
+ echo "*** Tag '$refname' already exists." >&2
+ echo "*** Modifying a tag is not allowed in this repository." >&2
+ exit 1
+ fi
+ ;;
+ refs/heads/*,commit)
+ # branch
+ if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+ echo "*** Creating a branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/heads/*,delete)
+ # delete branch
+ if [ "$allowdeletebranch" != "true" ]; then
+ echo "*** Deleting a branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/remotes/*,commit)
+ # tracking branch
+ ;;
+ refs/remotes/*,delete)
+ # delete tracking branch
+ if [ "$allowdeletebranch" != "true" ]; then
+ echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ *)
+ # Anything else (is there anything else?)
+ echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+ exit 1
+ ;;
+esac
+
+# --- Finished
+exit 0
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/update.sample
___________________________________________________________________
Added: svn:executable
+ *
Added: grass-addons/grass7/vector/v.in.survey/.git/index
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/index
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/info/exclude
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/info/exclude (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/info/exclude 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
Added: grass-addons/grass7/vector/v.in.survey/.git/logs/HEAD
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/logs/HEAD (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/logs/HEAD 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,5 @@
+0000000000000000000000000000000000000000 9abbdab7fc3c6c0c7318646a33bfa2b9ed010092 Eva <eva.stopkova at gmail.com> 1448300065 +0100 commit (initial): v.in.ascii.multiple: initial commit
+9abbdab7fc3c6c0c7318646a33bfa2b9ed010092 946f266a701e10a46e2828273b5c7ea27a2a6bc6 Eva <eva.stopkova at gmail.com> 1448316749 +0100 commit: v.in.ascii.multiple: sorted functions, improved comments
+946f266a701e10a46e2828273b5c7ea27a2a6bc6 c535d0aedb835e67d376dd225113f892cc878b50 Eva <eva.stopkova at gmail.com> 1448370564 +0100 commit: v.in.ascii_multiple: fixed line issues
+c535d0aedb835e67d376dd225113f892cc878b50 50e24814464b538174b07b2c0b1c14835cc84542 Eva <eva.stopkova at gmail.com> 1448908842 +0100 commit: v.in.surveying: First version to publish
+50e24814464b538174b07b2c0b1c14835cc84542 27abd2678f662aa3cc76c844ddacd750b19ed86a Eva <eva.stopkova at gmail.com> 1452302398 +0100 commit: dxf done
Added: grass-addons/grass7/vector/v.in.survey/.git/logs/refs/heads/master
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/logs/refs/heads/master (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/logs/refs/heads/master 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,5 @@
+0000000000000000000000000000000000000000 9abbdab7fc3c6c0c7318646a33bfa2b9ed010092 Eva <eva.stopkova at gmail.com> 1448300065 +0100 commit (initial): v.in.ascii.multiple: initial commit
+9abbdab7fc3c6c0c7318646a33bfa2b9ed010092 946f266a701e10a46e2828273b5c7ea27a2a6bc6 Eva <eva.stopkova at gmail.com> 1448316749 +0100 commit: v.in.ascii.multiple: sorted functions, improved comments
+946f266a701e10a46e2828273b5c7ea27a2a6bc6 c535d0aedb835e67d376dd225113f892cc878b50 Eva <eva.stopkova at gmail.com> 1448370564 +0100 commit: v.in.ascii_multiple: fixed line issues
+c535d0aedb835e67d376dd225113f892cc878b50 50e24814464b538174b07b2c0b1c14835cc84542 Eva <eva.stopkova at gmail.com> 1448908842 +0100 commit: v.in.surveying: First version to publish
+50e24814464b538174b07b2c0b1c14835cc84542 27abd2678f662aa3cc76c844ddacd750b19ed86a Eva <eva.stopkova at gmail.com> 1452302398 +0100 commit: dxf done
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/03/28fae983785eef93612c23f7b9efb4269378c4
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/03/28fae983785eef93612c23f7b9efb4269378c4
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/0a/20261bf39392492e1c0e6be2444ca2702f9228
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/0a/20261bf39392492e1c0e6be2444ca2702f9228
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/10/0b0e0b91fce8b1fd37494573a4208abe359877
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/10/0b0e0b91fce8b1fd37494573a4208abe359877
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/12/987fe9d1f8e1c415b87ad55194c489f651d94f
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/12/987fe9d1f8e1c415b87ad55194c489f651d94f
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/13/cf1869a8db284e373bc99b86d794cb1ecff6db
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/13/cf1869a8db284e373bc99b86d794cb1ecff6db
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/14/0d32355a20862ecf5006f758cd97d6dfaa6681
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/14/0d32355a20862ecf5006f758cd97d6dfaa6681
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/1c/f2c35cf7858257f1ba0f33e349f89efc172a4e
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/1c/f2c35cf7858257f1ba0f33e349f89efc172a4e
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/1d/3f5c44bb7c53c45f0b69311cbfc5c872abc411
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/1d/3f5c44bb7c53c45f0b69311cbfc5c872abc411
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/1e/094956288d0b9b35c7682cc34e86f44517f1cc
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/1e/094956288d0b9b35c7682cc34e86f44517f1cc
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/1f/c94a337a764cb2c5aba6e9bf404476bf1c38f8
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/1f/c94a337a764cb2c5aba6e9bf404476bf1c38f8
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/27/71f37ea094be36070f61196c5694c25b363aeb
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/27/71f37ea094be36070f61196c5694c25b363aeb
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/27/abd2678f662aa3cc76c844ddacd750b19ed86a
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/27/abd2678f662aa3cc76c844ddacd750b19ed86a (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/27/abd2678f662aa3cc76c844ddacd750b19ed86a 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,3 @@
+xÎM
+Â0@a×9Åì
I&DÜxüªhRcñøö
+n|ðRoí1@¡>µHÞ1 )gã]¦T«J²*¶9[.½Íb kY9$²vÈ%ÇDLHNR"|ƽ¯pÝʦ÷è˳oárkáñRog at 2JK¥½£D)Å^÷»Qþu"+ä>ñA@
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/2b/cba6a995c70ae8e267f4f2aebcb6babd84e906
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/2b/cba6a995c70ae8e267f4f2aebcb6babd84e906 (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/2b/cba6a995c70ae8e267f4f2aebcb6babd84e906 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,2 @@
+x]Ͻ
+1aê,Ë¿±3ÇNHHì_ç(¸ô¾×>^ïã.·ýÁAÇçÄÐÕX E1lÿF 'rFUq¦«Ñ2Ñeî¨zÍ«±2I,[Î-Ƨ2µc«ie¤Ñi§YîúËý·ã}mK+§ñ×h
X0ؾ0¹@
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/32/fa2414088a109757202c2888a0a7b5380d682b
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/32/fa2414088a109757202c2888a0a7b5380d682b
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/38/a1aac24671d12daf6b10f59cfcbbb18a05c97b
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/38/a1aac24671d12daf6b10f59cfcbbb18a05c97b
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/44/a823d4adb6ec9363ecd8535d703874766ab34d
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/44/a823d4adb6ec9363ecd8535d703874766ab34d
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/45/b68b812f9a07b730e8cfdef72ca804e031b601
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/45/b68b812f9a07b730e8cfdef72ca804e031b601
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/47/77b40edeac5a4da02f1ba442f8192ed0733fd0
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/47/77b40edeac5a4da02f1ba442f8192ed0733fd0
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c8ad006bead1c7840940e53da707c48dbda829
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c8ad006bead1c7840940e53da707c48dbda829
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c90dafb77214b42800624dbd3e94914615518f
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c90dafb77214b42800624dbd3e94914615518f
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/50/e24814464b538174b07b2c0b1c14835cc84542
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/50/e24814464b538174b07b2c0b1c14835cc84542 (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/50/e24814464b538174b07b2c0b1c14835cc84542 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+xÎMjÃ0@á®uÙF?\JÈ&½ÇH'¢±e$YÐÛ7WèöÁ/m˱½2öDQÙaBhÊÕ.q!ô$m\\UÞ;D«mÄ)xmyvI»9%¥,¢^ý¢bôÎ+ýY*ÜÁZ/ÇOt{l_S,ÛпHïD)Å»¾ï:ÿ×1å}jgü÷Ç'|çÚ:®-zã¯Üâã=OQ
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/52/ad200e6377a7af0ec5a97ed83e72dc7a451207
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/52/ad200e6377a7af0ec5a97ed83e72dc7a451207
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/54/afda083a48e8ac3046af1b9e5b843f265b5b22
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/54/afda083a48e8ac3046af1b9e5b843f265b5b22 (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/54/afda083a48e8ac3046af1b9e5b843f265b5b22 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,3 @@
+x]IN1DY#qYNx8â_°CBâþÊÎgH/[z)WÝ·ÏÛsÈ|xy5Öwº}÷¦ÖÇ emJkh{züÇdÌ¥Þy0ÒT9u:©C¦Éq1&L¬YM4´°ÔY,'NV³ñ=Òqѱ¦A£GyöHÕO/Fv®ÁéGÍ~ÔóvïgJzä'¤ëÂT?zïG:bI?uv?rï¾Òó<<4ê±ûñdzÑ©~|òÃÎÉðo®íý
íY¡xBÖ/:wZH¹
+g?qúAX'÷}ì©£;ݳ¢£ç͸Ô,?ýtN¦/Ç,!öÜáBî÷S:°fÎô#4¶gL>ÖýùÌ;tæòSÌ$±Ìezî+¸Ñ¼Iû
+M³$H"sÁÿ|Lõl3÷%ØfîÔôÂ g
NîKÐAé\³£g¥~wöd2×7±ñÉ0
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/56/cffcf896f336800b771623941a52e12c9d683d
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/56/cffcf896f336800b771623941a52e12c9d683d
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/5e/94212cde10625fed27404117d098b64bd7f312
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/5e/94212cde10625fed27404117d098b64bd7f312
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/61/32e33f678d5f37a25e8535fb946fd4e7912763
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/61/32e33f678d5f37a25e8535fb946fd4e7912763
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/64/5df46b073f13bcfdcc80eb0bd16abcd9e9c071
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/64/5df46b073f13bcfdcc80eb0bd16abcd9e9c071 (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/64/5df46b073f13bcfdcc80eb0bd16abcd9e9c071 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,6 @@
+x]ÐË
+1PÎ[XVü:
+DpCB¢ÿqûÓÌØýñìga>]®äÅ°¿nX£IACÛ¿ah»áaÊÑHo<sD,ÄÑh(Ä
+kÌ.]M3:Òpd®¦¦áZv#4ͲÇó.³Oµa¤.]1
+»F³¦qýn¾Ïïü|_ã
+¶78G
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/68/6f39815237bf23ba2bf93fc87e2c9a272c7e18
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/68/6f39815237bf23ba2bf93fc87e2c9a272c7e18
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/6a/793b2b7cf9f8c55b211c3f95eccd8d7816eb09
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/6a/793b2b7cf9f8c55b211c3f95eccd8d7816eb09
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/6d/09b36e2a98eab26e006bae916c71c290971d29
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/6d/09b36e2a98eab26e006bae916c71c290971d29
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/76/79e538a9038c95c3af4911e7cd5cbd6c20d766
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/76/79e538a9038c95c3af4911e7cd5cbd6c20d766
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/81/0a8b4e6765eb13f3aead825c8488aab82033d9
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/81/0a8b4e6765eb13f3aead825c8488aab82033d9 (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/81/0a8b4e6765eb13f3aead825c8488aab82033d9 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+xÏ;Ã@EÑÔ^EF|ØkKÞÀÒ§>zóºÏ7¾ }àbq°¥àø2'OJÄ*eÒ@â\;æ6ØÔ¢£:°xãBXïç}²;\ÿ¨³6¸Ô)nxÂñ1¶
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/81/e7cfa645454bf4af46fc909a4e5b53ddfb9f21
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/81/e7cfa645454bf4af46fc909a4e5b53ddfb9f21
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/89/d550f0b780d02a3c9623d907738bf3fecb65b2
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/89/d550f0b780d02a3c9623d907738bf3fecb65b2
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/8b/0f3871ddde717951439240ee70514b2530e1d7
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/8b/0f3871ddde717951439240ee70514b2530e1d7 (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/8b/0f3871ddde717951439240ee70514b2530e1d7 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,15 @@
+x}XËvGÍÚ_èE×£{º&crlâ`sl3`&a|~$]¤iBvÛz\=JUòÝvw÷ë§é<uOë»ýîEƾKCîãööp¹Nú!]îOrR87ùa ùádT¼(ÞLTCj÷ûÍú°ß<Ý?úîò¾öóssԤܰæ
°¡Ûm?4ís30uש¬Vö»¤îú]Ê«ÙrÁÈ(R-Ù¡Ñ]VEÜÒdå2ª5¹³Â2¥wË"RzOCRÁVÐ
+h"Vߥ×ß=z9£D !©7cpÒÚ9Ih
»ýãýg«qw²øàfÜTùN×ݳ9¥
+
+·ÐWͪê©AiÔªæ¦4DϲA®fSÃìÉéì9Çì*Z쬲,h6È¡ÆÈPöÞ¿BàGû7)Ô.P]~YFNf #ðio÷/îGëU~°Â"Ü5Ý "+®¶, %ƱGÅÒ¯£6o
Lr aÎGºT¯JU/\)!LèÜ»-°ÎV¯±Q\O!'¯×3¥®îØ%B
+ 4opØðñáûàf
+ç¢éA@k¢v8IÚ¹£×W2äpôè8n¾¬O4cHBÝ=¼®
+øC+¯5ì¹T³ÚYR^Å"#?y~ôh¯<2uRs/tìäQhKÅ+Î&g¨E¢ÖÉç
+]¿<U'§¸¦Ö,íLf½`M}ähòäCb@ràoöðE¤ö«½GTjª"Á¬ÄU{ÍR{wRÔäô¤5y2¤ëjr¤¡&ZÝv³hÍî¦áêq5A f0Àj¼.¤5yUiÜ£Ï+z¨Ù©aòÂN¨
+Ä1 ãT]:Ï#ð¡ìuûêVvK´ÞsHêÐd õ-ùÈ)ÃaH!ÌŪ!Fz¸^¿«ã*¸Y ØÈÌéHsNá ps¨LȹÐpñ£yGq3Q
+BÜÓ3 ¹³\;}3W/5½´äò³yýæôõEZ?ïw·î®xé=8-À+^
+2rlêAByrû¤N×
+ÉQ#©¹zoг35HçA¦fR§Ò9Ñ~¡æÿû¶äÏ?ÕkßþO¯åæÜS4`h±DÉÒbVsàêÒÐeÐÔ#hê¸ YMÔ¢>4PÚïÜÝ\ºçëçCw%ÁûÝþi³o¿©Ãî¿ÖWWò5Ñú÷òì²},SwvùA7Ùõpé^]·Ow>KãÐýýøéÃnk©»|ÜïÀÈ{_¢§yä ȶÈ[P`@Ç ¤Íöyû°~ÞÞ>5(4_5ñÚ}9Ü~Þ¬ïûmÃ
+=R7»ogïò=±ç1àxn8·ÀNÀu;"Oãм*@
+ÍÚnÕÆlÒ¹Zo¶´D,7(?-&~"D¨G¹É«á#^ïLDÈQCÅ}ÍÐÚfjê}lñ¡«8RÓí;¦Þ¦»ÙHÑMlÐElj;ð;R9¤Qõ&oºÀ2B£(økGÐh2N°D÷e·-<¼¨yTîpSK8ò©Úá«ÄÀ6"CPIo KEB×|Ñ@@S²5kòSÙ¬k2éM°Ð³Ì)#ëPp¦ÕÇl RZqA:èêoFQÆÑ
+=LEPz4=L¦-#Áª
Ê#_´Óæa £ÔÐÂDШÌÒ±º A´@ò@ë!°Kë!ÖCÐ:´_´¢¾BØ°CÉ ,tYÜ(.!'ìÐ3É´Àö ÍêXÜz÷Óza* <z8o&#ô*ý-· Gµ·Öj¼K"!U°JÛÉ(¹LN#o ¦&¹b$F]é_A±jBj5T Vi0«JãE .&¡H ÍZ¹â×8l¤Y96{4kù/JbtÐ<: Ç®þ}zéêoLE£¯lZ@ö
M#q@ÖÓ8@Þ®.×ë÷¿ýù¶òÏIÃùòÖàÀÌ?F,FAæLÛ~Û½Ïéç×~<Ö"ClÚ£ÿIÆKûá^`Äüð#Fk±f8L!ùº{Þ;ýÃæË¡y)}wsþöìúÜ?KÞbV?úgÄûÓZ-®.Nß4)z$~»ÝnÚôp´Ú,Uâ2¦ò/Ö©[y
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/8b/9b85886087307927dde24f4db139837580c596
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/8b/9b85886087307927dde24f4db139837580c596
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/90/d7c3aea2324a6a16160aa6f79d132225994f29
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/90/d7c3aea2324a6a16160aa6f79d132225994f29 (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/90/d7c3aea2324a6a16160aa6f79d132225994f29 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,2 @@
+xeÏ;Â0`械¬Øã×*F$$î?§]ZöOÿc~æÝÏóõ~9¦Óäéö Ëó÷
ÁR# É( ¨ac$9¯FÃHÛ¦ebÇÚ¬RvFéa¸EΩa¸æÅ
+³Ûcàªkz7Rw]mî¿zq ce»Â.ßYÆæJ~0~C
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/94/2d9c5414c63ff83b6139d4985d5e0352e245e6
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/94/2d9c5414c63ff83b6139d4985d5e0352e245e6 (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/94/2d9c5414c63ff83b6139d4985d5e0352e245e6 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,4 @@
+xUQÑn@ì3_±ò`« ÆVFErm9qbl©oÕr,pÊqGÉßL<vvnvv6*»ûå¿XÛ0Þ¢c´ög¶vÊ u¹t±fÿ)ax%ÈYxY)mj¨öÉ´*ao¢2.,¨ %fgÒ5
+Ø$D&46Fh8C!Î)rýßkÄjëÆz
+¯^va<ìã~»¿Øí?On_Æaë]<Rº¡Ðý¸ú¿[R\}XÖaà'ú4Zñ´~g¿#Ýés|Â×StÂçã覷³>í¿aU½©ûYY#áJÚ¨ðÍ&ÔgR4*mÕñ>¸DÙ,mÆ`ÃFãtPB9²ËQe§»ÊÜÜÆ".«*Æá8MmÔç
gÇNä·å?ùê:=í½Úd#¨$YßÀ;:~eÓáÁk¬@Sºë=ÿ
+Þ|yë}¿õ0¿[-îWóoðÕ[xLâFÞÅÑÓ¦pÝ©ÿx¸Ý§
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/94/6f266a701e10a46e2828273b5c7ea27a2a6bc6
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/94/6f266a701e10a46e2828273b5c7ea27a2a6bc6 (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/94/6f266a701e10a46e2828273b5c7ea27a2a6bc6 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,2 @@
+xAnÄ sæsßaÁ¬¢h/yÈÅ0ïû\[ª®îPrN#ßz%)$¼1ÐêeÜÕNßB½=©»[e'V::8ô~CocPÁ¬«Ñòïh³Ò-¯þS*|
+È[/çoøüÎvJþ©õª¤B¸½06Ó¹®Ó96x:8¶Ï×ÞÓ¹ÓZ©6×z*G{ÏZÆÌ^¢y§±?U
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/94/79d9fc8a6f87e071d6810a30fa22618ee2ef8e
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/94/79d9fc8a6f87e071d6810a30fa22618ee2ef8e
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/95/0c044a9ab4eab5ae0a4988842b6e8ef42e05af
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/95/0c044a9ab4eab5ae0a4988842b6e8ef42e05af
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/98/d4874af604cfb48481607d7cc822e7f86d3eb1
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/98/d4874af604cfb48481607d7cc822e7f86d3eb1
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/9a/bbdab7fc3c6c0c7318646a33bfa2b9ed010092
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/9a/bbdab7fc3c6c0c7318646a33bfa2b9ed010092
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/9b/d6fb785cf42f4fa9503df685549bcfb62502d3
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/9b/d6fb785cf42f4fa9503df685549bcfb62502d3
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/9e/b93615ad4238ddf41e79d948bab8ce6c04c8ec
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/9e/b93615ad4238ddf41e79d948bab8ce6c04c8ec
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/9e/c94a321cfffc2e94cf4ca8c1b5ee9661d7add6
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/9e/c94a321cfffc2e94cf4ca8c1b5ee9661d7add6
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/a9/fef768f80c1340fec52ea6b251b285644805e2
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/a9/fef768f80c1340fec52ea6b251b285644805e2
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/b0/f02a774ffefed15ff60439ad3e2064df21d07d
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/b0/f02a774ffefed15ff60439ad3e2064df21d07d
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/b2/7f9e6669b4c206c62f67993b98fa40823215d6
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/b2/7f9e6669b4c206c62f67993b98fa40823215d6
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/b6/26a08c65d66e548c2ce42b05c9ab9663b54d3b
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/b6/26a08c65d66e548c2ce42b05c9ab9663b54d3b
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/b8/1e3d2c4240b3e6d1b8a7b288cab69966673d98
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/b8/1e3d2c4240b3e6d1b8a7b288cab69966673d98
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/b8/4d653a23d831b724b1b61516da7ff323d9d940
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/b8/4d653a23d831b724b1b61516da7ff323d9d940
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/c0/a61d094163d7589a536662f685f7cfd849342e
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/c0/a61d094163d7589a536662f685f7cfd849342e
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/c5/35d0aedb835e67d376dd225113f892cc878b50
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/c5/35d0aedb835e67d376dd225113f892cc878b50 (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/c5/35d0aedb835e67d376dd225113f892cc878b50 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,3 @@
+xKJÀ0@]ç³J¾("n<LƦ4iñøö
+òv<îÕ Ö»y¸g"QâH
H\(Q0ræ$Á{4:µÓ!Û'Å"RÔF&bÓMt9p²,afTtÎï~ÀûEð"-cöý§_ôöÕ¨®÷ö
+Æûä¢èáQÕmï»)ÿíÔµÔm¡Áµ~´su_åJýOXë&PÇ8e¨?(NU
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/c8/88042305ea8569822d9f4290fc8251bbd65153
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/c8/88042305ea8569822d9f4290fc8251bbd65153
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/c9/8775a04dd598d4cf71f2c0f27611dd67e3796d
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/c9/8775a04dd598d4cf71f2c0f27611dd67e3796d
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/ca/e391ba56ddf8c453a66ee33a08e9e77a4e3535
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/ca/e391ba56ddf8c453a66ee33a08e9e77a4e3535
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/cc/187a168e12c5f32d95bcd6e728eeeec8ab31e4
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/cc/187a168e12c5f32d95bcd6e728eeeec8ab31e4
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/d1/641c1c9232a196e4c1d7bc59b710177220c0bd
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/d1/641c1c9232a196e4c1d7bc59b710177220c0bd
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/d1/efbf0b31256b58223225c6d4d269288dcdfec7
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/d1/efbf0b31256b58223225c6d4d269288dcdfec7
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/d8/30fc068890077db2155730c18a2f1b1b6f909c
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/d8/30fc068890077db2155730c18a2f1b1b6f909c
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/e3/bb8c5317aa8c7afaae35f7e67cbc8e5446108f
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/e3/bb8c5317aa8c7afaae35f7e67cbc8e5446108f
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/eb/bad8aae651ceaafb56abbb12604f787fb59b82
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/eb/bad8aae651ceaafb56abbb12604f787fb59b82
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/f1/9898d403ef60db5a15faed5015198b45c48c61
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/f1/9898d403ef60db5a15faed5015198b45c48c61
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/f2/87b6df2a101d7b8f8d365550ce6cfa5b2d1253
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/f2/87b6df2a101d7b8f8d365550ce6cfa5b2d1253
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/f7/0f28e6d63fb05696616ad6ba48f6b823cac61c
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/f7/0f28e6d63fb05696616ad6ba48f6b823cac61c
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/f9/f9e416403d8e2273aac25a243413d45d6dda6b
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/f9/f9e416403d8e2273aac25a243413d45d6dda6b
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/fd/9e641f0fd181d86e38f7168184c2c7b3394ec0
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/fd/9e641f0fd181d86e38f7168184c2c7b3394ec0
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/.git/objects/fe/b9a2564a54affb7a9ad4201b08c5d37add9efb
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/fe/b9a2564a54affb7a9ad4201b08c5d37add9efb (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/fe/b9a2564a54affb7a9ad4201b08c5d37add9efb 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,23 @@
+xÍY{oÛÈï¿Ò§PuíB¨äò:9ÛçGÂg´y¦H»²¥ ¾¿Ý¥HJìôÖbiwÞïYlL{õ×ÿìýðr©ã8}©Ò{Ê×æ6KÛ{í½?õ Ò¯§ï®>½¶îq:ô$ÃÅ21q(¹suùËéy÷¢7l½¿èÂdù]vµ÷Z¯øìêüìôÔÞ*2<%ºWDkUhGZMé¥6¥ZYÌüèíéÙ?Ï?þr9Ü{AÝ·=::8|êdn}<sqAïÔ½J²|¡RC*Z0ãVëò6ÖÙ¼³B)ÒÙÌ<D
¢e:U
¥qrEUª(¡³å8'ý)¨T+êÞC¼8Ké¨7 sMeÉO>â 24ÉJÓClnPLcý¦ÊDq¢,ÓúÓnï½XdÓ%éØèIçÉZï²õ¬ÈM¦~AwjýS=tÞaʳxg
©½¹x{|\?òÆ©J§,&e"}OÏ.ÃáñÉÙÕ¥CRæK¡ZÓá$Z(ÊföÄÞ&£±"+
2~¡>/ãBM´Vz7¿÷g%7ò¨y|2_Æa(F;f1.[D,M]ô=7a3³Ò¼ÍÜK$}6ÊxZ|ú#«Vµäüa$«d(éIâElh¥úACfxX13Ûat«I¤ÜÂb ".*ð}Òq:¯ ?ßú.ÎYL³ÎQs+ÞƱ'§àcjHö»ÿ/ëq³\Ø[$+>%qÄDì03B¦¢\=
+¬n7ò%ªS¬jr&w8Ý,Y.R «6ìÂdª
x³§wà[aMgqs¼ÂXtñÛ'ÒfJTS at 4¨ÙäêZEð!+çDÔFøk[Ö
+gØ
+féSÊ©xÝÃ^°Û*ÒÆ)ÿÝ>=ÜéoÒÇÖø´äæirìQQÅâûMÍ4L¹n¸@ÇqTÐ#÷?§¨}·ÿ©nG߯çÿ_QN%ê>â¸bù¾Ûs_ãÝó<×a:ÑA¾TíO¦°ØíPÄ÷ÿJ[°Vó¬X¯²Ë4þ¼TT¾Öñ<E Ò©hrKEö@Q:¥"6F¥|ªëp«y<K")YèöCúÂv©åÞ^½ócÛ"âÂíS¥½ÝHv$¨EnÖ2"¤ZÅf@'dk§Ø0¨Èxñ©lMÔwоW+t/Co·°SE
+sñÔÆ
+0ñ¿VõwL5E·Ç{bG]¡µ2¯J{aË6fH£)¥U×´;Mµ<ÙY ÇÍeö³É²(x.ÔûÄVý{:÷x+ç¨BÆEvkrgíêÞ³4´Óéµn»YùÉ5Nw1ìÖÃðøgÇDwüAÄ´ý=F|væ> ß.në`þسèùÚþƯ£9fÇk®L¸Ðó,²'Å>`¨"y@Ú=)væö2Rù:y«ýø:ÿê´Ñ½i~¯»%voØnų
+5.Zù:,! ±
+½cuÀûMà:&ªÀÂÀ&`FßS`Ê,¤CE¯¶XJ`*WÝ °>É_Jcëd¹6HTÚë^[¶«¯Ò9=d¶c
+Æu|ÃÇ-8ú|ää²78ðBMÕ=sùá¿O~¦ïS9ª3Óv]¡
+^p@rµRÖ_Hw
W$öG»j
+¯àÓó±KùúüÌèueÅüÜ"Ô'YGà>Ê_ú4LÄߦj
ißoN,,T`P¶n å-Þ@èuùZpoh¿
+äf°ýç=ðU
+bt=öðÞ"BèÌ©¬b>é²rí6øÝ^»ÝÚ³Ã7vRÙeµ×pîä:Ü´[¥©ª·å!CðV½äïÉKJ
$/-|UWÏíȪÝÕªzå`wµ®^ùÒÝ}©Þ# \bö¯HÁÃÂMÕQÜ:}#ç±Ýò^ÅõgÁÍ@çIlºAÃÐGuÔ=-C¸
+[Ö!C¥º áQÁ
·kx»å*
+Å}ÂUƧ@P= 1 AbI¶DM³ôÇq¥wvÓäjeWÎ ¶ìQZn+[ l@æ*¶aÈX|%s¿çç.ÎJ[ÚøtÀ
+3GÄF|å9or«&wòN]1û.r^¬ý¶ø )ìÏÅLeÝ)Iz"Z3TÓF±ÅUÃJ´Ð ðeÂk]XFßÐóÝ6LL«nIÊÇǦ/Ô"»WdgI¦èú0Értb_¯Ä+¶°Aëýªõ{ʲjp7ßõÀmã,ä?(jØ
+Ѻ.Bq at 3äõæÎ Ó»>¼¦«Þe.´ öíaIs
+S]\
²L7R98ÌÇAȯ}òÁAJeH\ܹ KÑU/ÇZv}~å`bÅ\çÙÒps~Có%ãÀ¬L"B2;í¤I÷±ÜÔ\ku6é
íÏúæVÙæàóí¾8îa¹A.×QÚ6°=/@SÉ¿Ðû x|Èã>K at YmÃñäÎÖG*ËE]oN½ÇE~]½2óé%¾ÆøÄa +ðÛ)ÈÆ8!!DQ(æ`ì¹òÈXS¡E°ÃCØ¡
ß¹$sØq¡üE[tä=ú¨Àõ7~G2ÌzCâF§'¬ïa²J}^âpôà6z-
Ç¿kØÈtó2U,ïso,°+e,÷._º«ÿâØ/6×y¯ui+Í}lGöº¤ã2oxÔ7ªË¼$Iðé«øFýMØ$Át<:ê«AÂ9 r<îêüãýùåñ3üØCÐûà&S`nDØè>²oùÇ¢Øb¸{)õô pR15âê«)Í|+³ÞÆÚ}Û}lªø±O¼
b@Ü®ñÃÿU}ï(."Ê0áÄÈ°óC³?$pò&¨`·°bì\Ý
+6
+x
ÿF\j¸Dî¼8¶Âç}5#]ñuTb}Z0Ha¶]óï5^ø÷CK.%ÞYÂZÅúY*V«Õ(,þrd,ê-iK1]'häÔDt>°-¹´k>|e#TµÆC3ë4²n+Âß;Io5_ûw5
+k(åçë' ðe¥umª_0IßýÍbeãeͯ[æ·ûO$Égc¿ì=¶\ZC5¸Ð6js±+µÉ@_*µÏ¦ýÄbQän×JT.Ó+ûÁLãç¼jº}+·AdO<?¢çÛÖdã/µËµß+U¶Z[ðªµÁÚñÉq½0ÄpKeÈàyDÕî`pyµ¶/8ßF·¯U["m{ç^8¥¢¯`<é «¹be
+Æ#Ó®jõÿ^«ôî1à ÕnáTÔ0g¨0ä}8ù9Çm¸¨©\]Ê7
+¬Ç-»:·ùçß$Ss
\ No newline at end of file
Added: grass-addons/grass7/vector/v.in.survey/.git/refs/heads/master
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/refs/heads/master (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/refs/heads/master 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+27abd2678f662aa3cc76c844ddacd750b19ed86a
Added: grass-addons/grass7/vector/v.in.survey/.gitignore
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.gitignore (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.gitignore 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,10 @@
+# ignore txt and dat
+*.txt
+*.dat
+
+# ignore everything with ~
+*.*~
+*~
+
+# ignore directories
+test/
Added: grass-addons/grass7/vector/v.in.survey/Makefile
===================================================================
--- grass-addons/grass7/vector/v.in.survey/Makefile (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/Makefile 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,7 @@
+MODULE_TOPDIR = ../..
+
+PGM = v.in.survey
+
+include $(MODULE_TOPDIR)/include/Make/Script.make
+
+default: script
Added: grass-addons/grass7/vector/v.in.survey/img_NC_dxf.png
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/img_NC_dxf.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/img_lyrs_broken.png
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/img_lyrs_broken.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/img_soils_correct.png
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/img_soils_correct.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/img_sorted_boundaries.png
===================================================================
(Binary files differ)
Property changes on: grass-addons/grass7/vector/v.in.survey/img_sorted_boundaries.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: grass-addons/grass7/vector/v.in.survey/v.in.survey.html
===================================================================
--- grass-addons/grass7/vector/v.in.survey/v.in.survey.html (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/v.in.survey.html 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,288 @@
+<h2>DESCRIPTION</h2>
+
+<em>v.in.survey</em> imports points from ASCII file into specific vector layers by point names. The script
+joins several modules to perform following steps:
+<ul>
+ <li>The data is sorted according to point names to keep points from separated layers together.</li>
+ <li>The script <b>scans input file and creates separate files for each layer</b>. Layers are distinguished by
+ point names that provide information on layer name, vector type and point identifier. More detailed information about
+ how to draft point names in your dataset (during data acquisition or in post-processing) is provided in <b>Notes</b>
+ section.<br> </li>
+ <li>Line and polygon data are <b>converted to standard format</b> (input data should respect topological rules to get
+ geometrically correct layers).<br> </li>
+ <li>Then, <b>new vector layer</b> is created using <i>v.in.ascii</i>. Points are stored in point layer; lines and polygons in
+ line layer at this moment. Lines that store polygon data are converted to new polygon layer using <i>v.centroid</i>.<br>
+ <li><b>Attribute table is maintained</b> for line and polygon layers (points are imported in point format with the attributes
+ as well).
+ <ul>
+ <li>in case of line layers, categories are added at first using <i>v.category</i>,</li>
+ <li>attribute table is created using <i>v.db.addtable</i>,</li>
+ <li>column that stores layer name is updated using <i>v.db.update</i>.<br> </li>
+ </ul></li>
+ <li>There is an option to <b>merge the features</b> by <i>v.patch</i> using various patterns to detect desired layers.
+ For more details, see <b>Notes</b>.<br> </li>
+ <li>Finally, <i>v.clean</i> is performed to <b>clean the topology</b> if any layers have been merged. </li>
+ <li>If desired, <b>conversion to DXF</b> file is performed as well.</li>
+</ul>
+
+<h2>NOTES</h2>
+<h3>Input data</h3>
+Several recommendations how to format the data:
+<ul>
+ <li>only input data in <b>point format</b> is accepted. The file should contain just point identifier (see next item) and
+ coordinates in two- or three-dimensional space.
+ <div class="code"><pre>
+ Point_name easting northing [elevation]
+ name.code.number x y [z]
+ </pre></div>
+ It does not depend on the coordinate order in the input file. The user can set up number of column for each coordinate
+ (as in <i>v.in.ascii</i>).<br> </li>
+ <li>Point name provides information that is substantial for new layer creation - name and desired type of vector. Required
+ <b>format of the point name</b> looks like this:
+ <div class="code">
+ <pre>
+ layer_name.code.number
+ </pre>
+ </div>
+ Items are separated by dots. To get correct results, please remove or replace all redundant dots in the input data.
+ <table>
+ <tr>
+ <td>
+ <div class="code"><pre>
+ name
+ </pre></div>
+ </td>
+ <td>
+ any short, descriptive name as you wish your layer to be named. Please do not use spaces or dots.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="code"><pre>
+ code
+ </pre></div>
+ </td>
+ <td>
+ information about vector type of the new layer (point, line, polygon). You may define your own codes that
+ refer directly to the geometry (e.g. <i>point</i>, <i>line</i>, <i>poly</i> etc. including various
+ abbreviations). Or you may specify that e.g. <i>tree</i>, <i>bush</i> etc. are codes for point features,
+ <i>river</i>, <i>profile</i> etc. refer to line segments and <i>lake</i> and
+ <i>house</i> represent new polygon layers.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="code"><pre>
+ number
+ </pre></div>
+ </td>
+ <td>
+ simple identifier of the point in the layer (preferably plain numbering)
+ </td>
+ </tr>
+ </table></li>
+ <li>if using a <b>header or columns' names</b>, refer this in <i>skip</i> parameter<br> </li>
+ <li>if necessary to <b>merge</b> any layers, please give them a name with specific prefix, which should be used as
+ merging rule as well. Merging rule that is based on suffix or another part of the layer name is not recognized.<br> </li>
+ <li>if the module <b>crashes suddenly</b> during large dataset processing,
+ it might be caused by incomplete data writing to the layer input file. Please divide input data into several smaller
+ files (probably depends on your computer performance).</li>
+</ul>
+
+<h3>Conversion to DXF</h3>
+If you wish to convert the data to DXF, please use <i>-x</i> flag. Then, it is necessary to set up:
+<ul>
+<li>the <b>name of DXF file</b>. The file will be written into the output directory.</li>
+<li><b>drawing units</b>. Default value: <i>metric</i>. Another option: <i>imperial</i>.</li>
+<li><b>height of the text</b>. Default value: 0.0 (the height will be derived as a fraction (0.003) of longer side of a rectangular
+mapset region)</li>
+</ul>
+Output drawing consists of geometry layers (point, line and polygon) supplemented with text. The text layers contain elevation of the vertices
+and labels of the points and of the objects as <i>Fig. 4</i> shows.
+
+<h2>EXAMPLES</h2>
+This example is based on the sample dataset of North Carolina
+(<a href="https://grass.osgeo.org/sampledata/north_carolina/nc_spm_08_grass7.zip">nc_spm_08_grass7</a>).
+Point vector layer <i>hospitals</i>, line vector layer <i>railroads</i> and polygon vector layer <i>soil_general</i> have
+been exported to the text files, vertices have been renamed and the files have been merged. This final input was used as
+test data for the script.
+
+<div class="code"><pre>
+v.in.survey input=test_data.dat separator=tab skip=1 easting=2 northing=3 pt_rules=pt ln_rules=ln poly_rules=poly outdir=NC_test
+</pre></div>
+
+As might be seen in <i>Fig. 1</i>, points and lines fit original dataset well, but areas are broken.
+This is caused by input data - it was created exporting lines from areas and then exporting points from lines. Boundary of each
+area was split into lines according to topological rule that vertices of the line are given by its intersection with at least
+two other lines. Thus, each new area was generated as the space surrounded by a line and connection between its vertices.
+
+<p>
+<table>
+ <tr>
+ <td>
+ <i>Fig. 1</i>: Imported features with broken areas
+ </td>
+ <td>
+ <i>Fig. 2</i>: Lines with the directions
+ </td>
+ <td>
+ <i>Fig. 3</i>: Imported features with correct areas
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <img src="img_lyrs_broken.png" alt="Broken areas" style="float: left; width: 100%; margin-right: 1%; margin-bottom: 0.5em;">
+ </td>
+ <td>
+ <img src="img_sorted_boundaries.png" alt="Criteria for the reconstruction of the boundaries" style="float: left; width: 100%; margin-right: 1%; margin-bottom: 0.5em;">
+ </td>
+ <td>
+ <img src="img_soils_correct.png" alt="Correct areas" style="float: left; width: 100%; margin-right: 1%; margin-bottom: 0.5em;">
+ </td>
+ </tr>
+</table>
+
+<p>To fix broken areas, original lines have been merged using <i>v.edit</i> according to their categories. Then points have been
+exported again and they were copied to enclose each area - respecting lines and the directions as might be seen in
+<i>Fig. 2</i>. In <i>Fig. 3</i>, there is shown that areas fit well too after editing input file.
+
+<p> If it is necessary also to merge some of the layers, then merging rules can be set up:
+<div class="code"><pre>
+ v.in.survey input=test_data_small_corrected_soils.dat separator=tab easting=2 northing=3 pt_rules=pt ln_rules=ln poly_rules=poly \
+ outdir=NC_test_small_merge merge_lyrs=road,soil
+</pre></div>
+
+<p>
+<table>
+ <tr>
+ <td>
+ <i>Fig. 1</i>: DXF drawing together with the labels<br>(north arrow and scale have been added later)
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <img src="img_NC_dxf.png" alt="DXF" style="float: left; width: 55%; margin-right: 1%; margin-bottom: 0.5em;">
+ </td>
+ </tr>
+</table>
+
+<p>
+The colours in DXF drawing have been set up automatically. In this case, labels of roads and elevation labels of soil types
+have been switched of because of too large amount of the data. Examples of more detailed exports can be seen in
+<i>(Stopkova, 2016)</i>.
+
+<h2>WARNINGS</h2>
+<i>WARNING: There are no layers to merge into <item>.</i><br>
+Any imported layer does not match given <i>item</i> referring how to merge layers in script settings.
+
+<h2>ERROR MESSAGES</h2>
+<h3>Input data:</h3>
+<i>ERROR: Too many columns. Use input data in format 'name east north [elev]', please.</i><br>
+Current version supports only import of 2D or 3D geometry and point name. Edit input file and run script again.
+
+<p><i>ERROR: Please rename point in line i according to the script request in format
+'lyr_name.vect_type_code.number'.</i><br>
+Point name is expected to provide information in particular format. Edit point name in <i>i</i><sup>th</sup> line of the
+input file and run script again.
+
+<p><i>ERROR: Please do not use SQL forbidden characters in your input data. Remove all 'char' from the file.</i><br>
+Any special characters are not allowed in the data. Please use just <i>dots</i> to separate parts of point names. If
+necessary, make the names more clear using <i>underscores</i>.
+
+<p><i>ERROR: Not enough points to make line layer <layer>.</i><br>
+<i>ERROR: Not enough points to make polygon layer <layer>.</i><br>
+These errors may refer to:
+<ul>
+ <li>a typographical mistake in particular point's name. Edit point's name in the input file and run script again.
+ <li>mixed layers. See <i>(Stopkova, 2016)</i> for more details. Edit point's name in the input file and run script again.
+ <li>broken geometry (just one point referring to a line or less than three points referring to a polygon). Please remove
+ these points or edit their vector type (middle part of point name) to refer to a point.
+</ul>
+
+<h3>Script settings:</h3>
+<i>ERROR: Wrong separator type.</i><br>
+The separator does not fit the data file. Please set up another type: <i>pipe</i>, <i>comma</i>, <i>space</i>, <i>tab</i>,
+<i>newline</i>. Default: <i>pipe</i>
+
+<p><i>ERROR: Vector layer <i>layer</i> is not point, neither line, nor boundary. Please check your input data and rules that
+you have typed in.</i><br>
+Vector type information (middle part of the point name) does not match to any of geometry codes that you have
+entered. Please compare input settings with point names in the data file, complete input settings (or edit input data)
+and run the script again.</p>
+
+<p><i>ERROR: Please redefine merging option <char>. Different vector types match this rule.</i><br>
+Merging different vector types is not allowed. This might be matter of comparing layer names with too free rules:
+
+<p>
+<table>
+ <caption>Tab. 1: Example of too free rules for merging layers</caption>
+ <tr>
+ <td><b>river</b></td>
+ <td></td>
+ <td>river -> <b>river_stream</b></td>
+ </tr>
+ <tr>
+ <td>river_stream_Danube</td>
+ <td></td>
+ <td>river_area_Danube</td>
+ </tr>
+ <tr>
+ <td>river_stream_Vah</td>
+ <td></td>
+ <td>river_stream_Vah</td>
+ </tr>
+ <tr>
+ <td>river_stream_Hron</td>
+ <td></td>
+ <td>river_stream_Hron</td>
+ </tr>
+</table>
+
+<p>
+In the left column, there are summarized line objects that should be merged to one single layers called
+<i>river</i>. This merge is possible, as all the features are represented by line. In the right column, there
+are summarized rivers as well. But they cannot be merged, because the Danube river is represented by polygon and the rest of the
+features are lines. It would be better to use merging criteria <i>river_stream</i>
+to separate just line object to be merged.
+
+<h3>Files:</h3>
+<i>ERROR: File <i>filename</i> does not exist.</i><br>
+Missing input file.
+
+<h3>Output layers:</h3>
+<i>ERROR: Vector layer <layer> exists. Please remove the layer or rename the input points.</i><br>
+There is a layer with identical name in the mapset. Overwrite it, rename it or rename the layer in the input file
+(edit points names). However, this error usually happens if points that belong to several layers are mixed in the file as well. How to prevent this,
+examples in <i>(Stopkova, 2016)</i> can demonstrate.
+
+<p><b>Empty layer</b> (not reported in command output): if the layer exists but is empty, please check the input points. This might happened
+because of wrong point order (especially if the point order has been edited).
+
+<h3>DXF conversion:</h3>
+<i>ERROR: Please set up the drawing units to 'metric' or to 'imperial'.</i><br>
+Anything else cannot be accepted (in accordance to DXF settings). Default value: <i>metric</i>.
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="v.in.ascii.html">v.in.ascii</a><br>
+<a href="v.centroids.html">v.centroids</a><br>
+<a href="g.remove.html">g.remove</a><br>
+<a href="v.db.addtable">v.db.addtable</a><br>
+<a href="v.db.update">v.db.update</a><br>
+<a href="v.patch">v.patch</a><br>
+<a href="v.clean">v.clean</a><br>
+<a href="v.out.dxf">v.out.dxf</a>
+</em>
+<br><br>
+Stopkova, E. (in print). Open-source tool for automatic import of coded surveying data to multiple vector layers in GIS
+environment. In <i>Geoinformatics FCE CTU</i>. Vol. 15, No. 2 (2016). Prague: Czech Technical University, Faculty of Civil
+Engineering. ISSN 1802-2669. pp. tba. doi: tba.
+
+<h2>AUTHOR</h2>
+
+Eva Stopkova<br>
+functions for DXF conversion are taken from (or based on) the module <i>v.out.dxf</i> (Charles Ehlschlaeger and Radim Blazek)
+
+<p>
+<i>Last changed: $Date$</i>
Property changes on: grass-addons/grass7/vector/v.in.survey/v.in.survey.html
___________________________________________________________________
Added: svn:mime-type
+ text/html
Added: svn:keywords
+ Author Date Id
Added: svn:eol-style
+ native
Added: grass-addons/grass7/vector/v.in.survey/v.in.survey.py
===================================================================
--- grass-addons/grass7/vector/v.in.survey/v.in.survey.py (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/v.in.survey.py 2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,1688 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+##############################################################################
+#
+# MODULE: v.in.survey
+#
+# AUTHOR(S): Eva Stopková
+# functions for DXF conversion are taken from (or based on)
+# the module v.out.dxf (Charles Ehlschlaeger and Radim Blazek)
+#
+# PURPOSE: Create multiple vector layers based on one textfile
+# COPYRIGHT: (C) 2015 by the GRASS Development Team
+#
+# This program is free software under the GNU General Public
+# License (version 2). Read the file COPYING that comes with
+# GRASS for details.
+#
+##############################################################################
+
+#%module
+#% description: Creates multiple vector layers from just one textfile
+#% keywords: vector
+#% keywords: import
+#% keywords: ASCII
+#% keywords: multiple
+#%end
+
+#% option G_OPT_F_INPUT
+#% key: input
+#% description: Name of input file to be imported
+#% required: yes
+#%end
+
+#% option G_OPT_F_SEP
+#% key: separator
+#% guisection: Input format
+#%end
+
+#% option
+#% key: pt_rules
+#% guisection: Vector type codes
+#% multiple: yes
+#% description: Point(s): hosp.pt.01..., forest.tree.01 -> 'pt,tree'
+#%end
+
+#% option
+#% key: ln_rules
+#% guisection: Vector type codes
+#% multiple: yes
+#% description: Line(s): road.ln.01..., Danube.river.01 -> 'ln,river'
+#%end
+
+#% option
+#% key: poly_rules
+#% guisection: Vector type codes
+#% multiple: yes
+#% description: Polygon(s): hosp.area.01,..., forest.area.01 -> 'area'
+#%end
+
+#% option
+#% key: skip
+#% type: integer
+#% required: NO
+#% multiple: NO
+#% answer: 0
+#% description: Number of lines to skip at top of input file (points mode)
+#% guisection: Points
+#%end
+
+#% option
+#% key: columns
+#% type: string
+#% required: NO
+#% multiple: NO
+#% guisection: Points
+#% label: Column definition in SQL style (points mode))
+#% description: E.g.: 'x double precision, y double precision, cat int, name varchar(10)'
+#%end
+
+#% option
+#% key: easting
+#% type: integer
+#% required: NO
+#% multiple: NO
+#% answer: 2
+#% guisection: Points
+#% label: Number of column used as easting coordinate (points mode)
+#% description: First column is 1
+#%end
+
+#% option
+#% key: northing
+#% type: integer
+#% required: NO
+#% multiple: NO
+#% answer: 3
+#% guisection: Points
+#% label: Number of column used as northing coordinate (points mode)
+#% description: First column is 1
+#%end
+
+#% option
+#% key: elevation
+#% type: integer
+#% required: NO
+#% multiple: NO
+#% answer: 0
+#% guisection: Points
+#% label: Number of column used as elevation (points mode)
+#% description: First column is 1. If 0, z coordinate is not used
+#%end
+
+#% option G_OPT_M_DIR
+#% key: outdir
+#% guisection: Output settings
+#% description: Name of directory to store separated files for each layer
+#% required: no
+#%end
+
+#% option
+#% key: merge_lyrs
+#% guisection: Output settings
+#% multiple: yes
+#% description: Pattern(s) for layers to be merged
+#%end
+
+#% flag
+#% key: z
+#% description: Create 3D vector map
+#%end
+
+#% flag
+#% key: e
+#% description: Create a new empty vector map and exit. Nothing is read from input.
+#%end
+
+#% flag
+#% key: n
+#% description: Do not expect a header when reading in standard format
+#% guisection: Input format
+#%end
+
+#% flag
+#% key: t
+#% description: Do not create table in points mode
+#% guisection: Points
+#%end
+
+#% flag
+#% key: r
+#% description: Only import points falling within current region (points mode)
+#% guisection: Points
+#% end
+
+#% flag
+#% key: x
+#% description: Convert to DXF
+#% guisection: DXF conversion
+#%end
+
+#% option
+#% key: dxf_file
+#% description: Name of the DXF file
+#% guisection: DXF conversion
+#%end
+
+#% option
+#% key: draw_unit
+#% description: Drawing units
+#% answer: metric
+#% options: metric, imperial
+#% guisection: DXF conversion
+#%end
+
+#% option
+#% key: textsize
+#% description: Text height of the labels in DXF file
+#% answer: 0.
+#% guisection: DXF conversion
+#%end
+
+import sys
+import os
+import string
+import math
+import fileinput
+
+import grass.script as grass
+from grass.pygrass.messages import get_msgr
+import grass.script.vector as gvect
+
+
+class test:
+ def __init__(self, test_file):
+ self.test_file = test_file
+
+ def files(self): # test if file exists
+ if not os.path.isfile(self.test_file):
+ special = self.test_file.split('/') # which file is being checked:
+ # list of layers that have been done in previous session
+ if special[len(special) - 1] == "_layers_done.txt":
+ grass.fatal(_("File <" + self.test_file
+ + "> should contain list of existing layers."
+ + " The file does not exist, thus it is not"
+ + " possible to process script with -x flag."))
+ else: # any other file (input file)
+ grass.fatal("File <" + self.test_file + "> does not exist.")
+ return 0
+
+ # test if file is blank
+ def blank(self, want_blank):
+ for line in self.test_file:
+ # the file is blank and it should not be:
+ if not line.strip() and want_blank is False:
+ msgr.fatal(_("File <" + self.lyr_name + "." + extension
+ + "> is empty."))
+ return 0
+
+ def overwrite_file(self):
+ # the file is not blank and it should be
+ if os.path.isfile(self.test_file):
+ if overwrite_all is True:
+ # remove potentially broken input file
+ os.remove(self.test_file)
+ msgr.message(_("Existing file <" + self.test_file
+ + "> has been removed..."))
+ else:
+ msgr.fatal(_("File <" + self.test_file
+ + "> exists. To overwrite it,"
+ + " please use --o flag..."))
+ return 0
+# ****** #
+
+
+class glob: # *** Global variables *** #
+ separator = '' # separator of the rows in the input data
+ py_separator = ''
+ outdir = ''
+ infile = ''
+
+ def __init__(self, infile, outdir, separator):
+ test(infile).files() # test file existence
+
+ glob.infile = infile # input file (name-east-north-[elev])
+ glob.separator = separator
+ glob.py_separator = self.g2py(separator) # separator of the input data
+ # directory to store separated files for each layer
+ glob.outdir = self.test_dir(outdir)
+
+ # separators from GRASS to Python
+ # e.g. "pipe" -> "|"
+ def g2py(self, separator):
+ if separator == "pipe":
+ py_separator = "|"
+ elif separator == "comma":
+ py_separator = ","
+ elif separator == "space":
+ py_separator = " "
+ elif separator == "tab":
+ py_separator = "\t"
+ elif separator == "newline":
+ py_separator = "\n"
+ else:
+ msgr.fatal(_("Please setup correct separator..."))
+
+ return py_separator
+
+ # test if output directory exists
+ def test_dir(self, outdir):
+ if outdir == '':
+ outdir = 'output'
+ msgr.message(_("Output files will be stored "
+ + "in the <output> directory."))
+
+ if not os.path.isdir(outdir): # output directory does not exist
+ os.makedirs(outdir) # create new directory
+
+ else: # output directory exists
+ msgr.warning(_("Output directory exists. It may contain layers"
+ + " that might be overwritten."))
+
+ return outdir
+# ****** #
+
+
+class Flag:
+ signs = ''
+
+ def __init__(self, sign):
+ self.sign = sign
+ Flag.signs = self.add_flag()
+
+ def add_flag(self): # test flags
+ if flags[self.sign]:
+ if Flag.signs == '':
+ Flag.signs = self.sign
+ else:
+ Flag.signs += self.sign
+ return Flag.signs
+# ****** #
+
+
+class inputs(glob, test):
+ data = [] # input data
+ n = 0
+ dim = 0
+
+ def __init__(self, skip_input):
+ # no. of lines to be skipped in the input file
+ self.skip_input = int(skip_input)
+ inputs.data, inputs.n, inputs.dim = self.raw_data() # extract xyz
+
+ # find out data dimension
+ def dimension(self, row, n_lines, skip_lines, find_dim):
+ # remove blank elements
+ filtered = [y for y in row if y != '\n'
+ and y != '' and y != ' ' and y != '\t']
+ n = len(row) # number of non-blank elements
+
+ if find_dim is True:
+ if n == 3: # name easting northing
+ inputs.dim = 2 # 2D
+ elif n == 4: # name easting northing elevation
+ inputs.dim = 3 # 3D
+ else:
+ msgr.fatal(_("Too many columns. Use input data in format"
+ + " \'name east north [elev]\', please."))
+
+ find_dim = False
+
+ else:
+ if n - 1 != inputs.dim:
+ msgr.fatal(_("Number of columns do not match. Please check"
+ + " rows " + str(n_lines + skip_lines - 1)
+ + " and " + str(n_lines + skip_lines)
+ + " in your data."))
+
+ return inputs.dim, find_dim
+
+ # test not allowed characters
+ def characters(self, string, char):
+ # list of forbidden characters
+ avoid = ['-', '*', '/', '+', '\\', '|', '<', '>', '=', '~', '°', '!',
+ '`', ';', ':', '@', '£', '$', '%', '&', '(', ')', '#', '^',
+ '\'', '\"', '?', '§', '[', ']']
+ # number of forbidden characters
+ n_avoid = len(avoid)
+
+ for i in range(0, n_avoid):
+ if string.find(avoid[i]) > -1:
+ if char == '-': # test just '-' in names
+ msgr.fatal(_("Please do not use SQL forbidden characters"
+ + " in your input data... remove all \'"
+ + avoid[i] + "\' from point names."))
+ break # everything else has been tested
+ else: # general test:
+ if i == 0: # do not test '-'
+ continue
+ msgr.fatal(_("Please do not use SQL forbidden characters"
+ + " in your input data... remove all \'"
+ + avoid[i] + "\' from the file."))
+ return 0
+
+ # extract raw data
+ def raw_data(self):
+ open_input = open(glob.infile, 'r') # open input file for reading
+ data = []
+ find_dim = True # unknown dimension of the data
+
+ skip_lines = self.skip_input + skip.layers
+ n_lines = 0 # number of non-blank lines
+
+ for line in open_input: # for each line in the file
+ if n_lines < skip_lines: # skip lines
+ n_lines += 1
+ continue
+
+ if line.strip(): # use strip to check the content
+ # test the data for SQL non-compliant content:
+ # everything except '-' <=> allowed in numeric types
+ self.characters(line, 'general')
+ n_lines += 1
+
+ row = line.strip('\n').split(glob.py_separator)
+ if len(row) == 1:
+ msgr.fatal(_("Wrong separator type."))
+
+ # test if the layer name does not start with a digit
+ if line[0].isdigit():
+ msgr.fatal(_("Illegal vector map name <" + row[0]
+ + ">. Must start with a letter."))
+
+ # test point names:
+ # - for '-' as SQL non-compliant content
+ self.characters(row[0], '-')
+
+ # - for length
+ if len(row[0].split('.')) != 3:
+ msgr.fatal(_("Please rename point " + row[0]
+ + " according to the script request in format"
+ + " \'lyr_name.vect_type_code.number\'."))
+
+ # make data array from the first unskipped non-blank line:
+ # 2D or 3D
+ inputs.dim, find_dim = self.dimension(
+ row, n_lines, skip_lines, find_dim)
+
+ # join everthing to data
+ data.append(row)
+ open_input.close() # close input file
+
+ if n_lines == skip_lines:
+ msgr.warning(_("All the data is imported. Just patching"
+ + " and cleaning will be done if necessary."))
+ inputs.skip = True
+
+ return None, None, inputs.skip
+ if n_lines < 1:
+ msgr.fatal(_("Empty input file."))
+
+ # remove empty lines from the data
+ data = [x for x in data if x != '\n']
+ inputs.n = len(data) # number of elements
+
+ # sort data by name
+ inputs.data = sorted(data, key=lambda data: data[0])
+
+ return inputs.data, inputs.n, inputs.dim
+
+
+class vect_rules:
+ pt = ''
+ ln = ''
+ poly = ''
+ east = 2
+ north = 3
+ elev = 0
+
+ def __init__(self, pt, ln, poly, east, north, elev):
+ vect_rules.pt = pt.split(',') # list of codes for point layer
+ vect_rules.ln = ln.split(',') # list of codes for line layer
+ vect_rules.poly = poly.split(',') # list of codes for boundary
+
+ if (vect_rules.pt[0] == '' and vect_rules.ln[0] == ''
+ and vect_rules.poly[0] == ''):
+ msgr.fatal(_("Any rule for vector geometry missing..."))
+
+ vect_rules.east = east # column with easting
+ vect_rules.north = north # column with northing
+ vect_rules.elev = elev # column with elevation
+
+
+class files(glob):
+ base = ''
+
+ def __init__(self, base):
+ files.base = base
+
+ # create path to file
+ def path2(self, extension):
+ filename = glob.outdir + '/' + files.base + '.' + extension
+ return filename
+
+ # open output file
+ def open_output(self, skip_blank_test, dxf):
+ out_file = glob.outdir + '/' + files.base
+ if dxf is False:
+ out_file += '.txt'
+
+ test(out_file).overwrite_file()
+ open_output = open(out_file, 'a+')
+
+ if skip_blank_test is False:
+ test(out_file).blank(True) # test if the file is blank
+
+ return open_output
+# ****** #
+
+
+class skip(glob, test, files):
+ layers = 0
+ existing = False
+ lyr_names = '' # names of the layers to be analyzed for merging
+ vectors = '' # geometry types of the layers for merging
+
+ def __init__(self, existing):
+ self.existing = existing
+
+ if self.existing is True:
+ # test if file exists
+ test.files(glob.outdir + "/_layers_done.txt", "_layers_done.txt")
+ # open list of existing layers
+ done_lyrs = files.open_output(
+ glob.outdir, "_layers_done", True, False)
+ skip.layers, skip.lyr_names, skip.vectors = self.lines(done_lyrs)
+
+ # count points in existing layers to skip lines
+ def lines(self):
+ i = 0 # index
+ for line in glob.infile: # for each line in the file
+ if line.strip(): # use strip to check the content
+ # test layer names for SQL non-compliant content:
+ # everything except '-' <=> allowed in numeric types)
+ test.characters(line, 'general')
+
+ # test layer names for '-' as SQL non-compliant content
+ test.characters(line, '-')
+
+ row = line.strip('\n').split(glob.py_separator)
+ skip.layers += int(row[0])
+ if i == 0:
+ skip.lyr_names = row[1]
+ skip.vectors = row[2]
+ else:
+ skip.lyr_names += ',' + row[1]
+ skip.vectors += ',' + row[2]
+ i += 1
+ return skip.layers, skip.lyr_names, skip.vectors
+# ****** #
+
+
+class layer_init:
+ def __init__(self, i):
+ self.i = i
+ self.name, self.code = self.define_name() # setup name of the layer
+
+ # setup name of the layer
+ def define_name(self):
+ # extract point name
+ point_name = inputs.data[self.i][0].split(".") # split the data by dot
+ unit_name = point_name[0] # core name of the layer
+ self.code = point_name[1] # vector type (point, line, boundary)
+ self.name = unit_name + "_" + self.code # whole layer name
+
+ return self.name, self.code
+# ****** #
+
+
+class layer(glob, Flag, vect_rules, layer_init):
+ unit = '' # pure name of the layer
+ code = '' # code for geometry type according to the rules(P - L - B)
+ name = '' # name of the layer (unit_code)
+ vector = '' # geometry type of the layer (P - L - B)
+ n_pts = 0 # number of lines / polygons
+ close = 0 # index of closing point
+
+ def __init__(self, i):
+ self.i = i
+
+ layer.name, layer.code = self.define_name()
+ # open output file (test blank, no dxf)
+ self.out = files(layer.name).open_output(False, False)
+
+ # initial values for the new layer
+ layer.n_pts = 0 # number of lines / polygons
+ layer.close = i # index of the closing point
+ layer.vector = self.code2vector() # geometry type
+ layer.unit = self.setup_unit(1)
+
+ self.vformat = self.grass_format()
+ if self.vformat == 'standard':
+ # open backup file (test blank, no dxf)
+ self.out_bckp = files(
+ layer.name + '_bckp').open_output(False, False)
+
+ self.test_existence(layer.name, False) # test layer existence
+ self.filename = files(layer.name).path2('txt')
+
+ # compare code with rules to sort the layers
+ def compare(self, rules, sign):
+ n_rules = len(rules) # number of rules for each vector type
+ for i in range(0, n_rules):
+ if layer.code == rules[i]: # if code is the same as any rule:
+ layer.vector = sign # define vector type
+ return layer.vector
+
+ # sort layers according to codes (by user)
+ # to points, lines and boundaries
+ def code2vector(self):
+ layer.vector = ''
+ layer.vector = self.compare(vect_rules.pt, 'P') # test points
+ if layer.vector != '':
+ return layer.vector
+
+ if (layer.vector == ''): # if type undefined:
+ layer.vector = self.compare(vect_rules.ln, 'L') # test lines
+ if layer.vector != '':
+ return layer.vector
+
+ if (layer.vector == ''): # if type still undefined:
+ # test boundaries
+ layer.vector = self.compare(vect_rules.poly, 'B')
+ if layer.vector != '':
+ return layer.vector
+
+ if (layer.vector == ''): # if type remains undefined:
+ msgr.fatal(_("Vector layer <" + layer.name + "> is not point,"
+ + " neither line, nor boundary. Please check" # etc
+ + "your input data and rules that you have" # etc
+ + "typed in."))
+ return 0
+
+ # format, number of vertices and index of closing point (for polygons)
+ def grass_format(self):
+ if layer.vector == 'P':
+ self.vformat = 'point'
+ else:
+ self.vformat = 'standard'
+
+ return self.vformat
+
+ def not_point(self):
+ if self.vformat != 'P':
+ layer.n_pts += 1 # number of points in the layer
+
+ return layer.n_pts
+
+ # test existence of the layer
+ def test_existence(self, layer_name, final):
+ # final: True - merging / cleaning (skip existing);
+ # False - any other (fatal error)
+
+ # initial value: do not skip existing layer and make fatal error
+ skip = False
+ mapset = grass.gisenv()['MAPSET']
+
+ # make fatal error if there are any existing layers during data import
+ if (overwrite_all is False and self.final is False
+ and grass.find_file(layer_name, element='vector', # etc
+ mapset=mapset)['file']):
+ msgr.fatal(_("Vector layer <" + layer_name + "> exists. Please"
+ + " remove the layer or rename the input points."))
+
+ # skip existing layers during final steps (merge and clean)
+ if (final is True and grass.find_file(layer_name, element='vector', mapset=mapset)['file']):
+ # change value: skip existing layer and do not make fatal error
+ skip = True
+
+ return skip
+
+ # make new layer from subdataset written to separate file
+ def make_new(self):
+ # set up suffix for temporary line layers
+ # to be transformed into polygon or to be added an attribute table
+ suffix = ''
+ separator = glob.separator
+ if layer.vector != 'P':
+ suffix = '_' + layer.code + '_tmp'
+ separator = 'space'
+ layer_name = layer.unit + suffix
+ self.test_existence(layer_name, False) # test layer existence
+
+ in_ascii = grass.run_command('v.in.ascii', input=self.filename,
+ output=layer_name, format=self.vformat,
+ separator=separator, x=vect_rules.east,
+ y=vect_rules.north, z=vect_rules.elev,
+ flags=Flag.signs, overwrite=overwrite_all)
+
+ # make polygon from boundaries
+ if layer.vector == 'B':
+ self.test_existence(layer.name, False) # test layer existence
+ # add centroids and create polygon layer
+ grass.run_command('v.centroids',
+ input=layer_name, output=layer.name)
+ # remove temporary line layer
+ grass.run_command('g.remove', type='vector',
+ name=layer_name, flags='f')
+
+ if self.vformat == 'standard':
+ self.set_attribute_table()
+
+ # make a note that layer has been done"""
+ # done_lyrs.write(str(self.n_elems) + glob.py_separator + layer.name +
+ # glob.py_separator + self.vector + '\n')
+
+ return 0
+
+ # unit name according to temporary layer name (base + vector type code)
+ def setup_unit(self, remove_suffix):
+ if layer.vector != 'P':
+ base = layer.name.split('_') # split point name by '_'
+ layer.unit = base[0] # unit name: base
+
+ # all parts of the base without vector code
+ for i in range(1, len(base) - remove_suffix):
+ layer.unit += "_" + base[i]
+ else:
+ layer.unit = layer.name
+
+ return layer.unit
+
+ def check_number_pts(self):
+ if layer.vector == 'L' and layer.n_pts < 2:
+ can_be_broken = done_lyrs.readlines()[-1]
+ msgr.fatal(_("Not enough points to make line layer <"
+ + layer.name + ">."))
+ if layer.vector == 'B' and layer.n_pts < 3:
+ msgr.fatal(_("Not enough points to make polygon layer <"
+ + layer.name + ">."))
+ return 0
+
+ # add two specific lines at the beginning of the file in standard format
+ def standard_poly(self):
+ if layer.vector == 'B': # for boundaries
+ layer.n_pts += 1 # no. of vertices (including the closing point)
+ return layer.n_pts
+
+ def standard_header(self):
+ # *** function based on answer 3: http://stackoverflow.com/ ...
+ # questions/5287762/how-to-insert-a-new-line-before-the-first-line- ...
+ # in-a-file-using-python
+ for num, line in enumerate(fileinput.FileInput(self.filename, # etc
+ inplace=2)):
+ if num == 0:
+ print "VERTI:"
+ print layer.vector + ' ' + str(layer.n_pts)
+ print line.strip('\n')
+ else:
+ print line.strip('\n')
+ # ***
+ return 0
+
+ # modify file to respect standard format for lines and boundaries:
+ def complete_input(self):
+ # add two specific lines at the beginning of the file
+ layer.n_pts = self.standard_poly()
+ self.standard_header()
+
+ # add closing point (the 1st one of the subsample)
+ if (layer.vector == 'B'): # just for boundaries
+ with open(self.filename, 'a') as self.out:
+ self.write2('standard', self.out, layer.close)
+ return 0
+
+ def complete(self):
+ # modify file to respect standard format for lines and boundaries:
+ self.out.close() # close layer input file
+ if self.vformat == 'standard':
+ self.out_bckp.close() # close backup file
+ self.check_number_pts()
+ self.complete_input()
+
+ return 0
+
+ def write(self, i):
+ # write the point to the layer file
+ if (self.vformat == 'point'):
+ self.write2('point', self.out, i)
+
+ if (self.vformat == 'standard'):
+ self.write2('standard', self.out, i) # nameless points
+ self.write2('point', self.out_bckp, i) # backup of point names
+
+ layer.n_pts = self.not_point() # setup for non-point layers
+ return layer.n_pts
+
+ # add atrribute table with the name of the layer
+ def set_attribute_table(self):
+ if self.vector == 'L':
+ line_layer = layer.name + '_tmp' # suffix '_tmp' to the line
+ self.test_existence(line_layer, False) # test layer existence
+ # add categories to line layer
+ grass.run_command('v.category', input=line_layer,
+ option='add', type='line', output=layer.name)
+ # remove the layer without cats
+ grass.run_command('g.remove',
+ type='vector', name=line_layer, flags='f')
+
+ # add table with the name column
+ grass.run_command('v.db.addtable',
+ map=layer.name, columns='lyr_name varchar(15)')
+ # update the name column with the 1st 15 characters of the layer's name
+ grass.run_command('v.db.update', map=layer.name,
+ column='lyr_name', value=layer.name[:15])
+ return 0
+
+ # write coordinates to file
+ def write2(self, vformat, outfile, index):
+ if vformat == 'point':
+ separator = glob.py_separator
+ else:
+ separator = ' '
+
+ if inputs.dim == 2:
+ endline = '\n'
+ if inputs.dim == 3:
+ endline = separator
+
+ # create input file for subsample of the 1st layer
+ if vformat == 'point':
+ # point name (standard format is nameless)
+ outfile.write(inputs.data[index][0] + separator)
+
+ outfile.write(inputs.data[index][1] + separator) # easting
+ outfile.write(inputs.data[index][2] + endline) # northing
+
+ if inputs.dim == 3:
+ outfile.write(inputs.data[index][3] + "\n") # elevation
+
+ return 0
+# ****** #
+
+
+class Merge_init(glob, layer): # Functionality for merging layers
+ item = ''
+ n_items = 0
+ len_item = [] # array of length of layers' names
+
+ def __init__(self, pattern):
+ self.pattern = pattern # list of merged layers
+ merge_list = self.count_layers()
+ Merge_init.item, Merge_init.n_items, Merge_init.len_item = merge_list
+
+ # options -> properties of merged layers (count and names)
+ def count_layers(self):
+ # split pattern to the names of merged layers
+ item = self.pattern.strip(' ').split(',')
+ n_items = len(item) # count merged layers
+
+ len_item = [0 for i in range(0, n_items)] # initialize
+ for i in range(0, n_items):
+ len_item[i] = len(item[i]) # array of length of layers' names
+
+ return item, n_items, len_item
+# ****** #
+
+
+class Merge(Merge_init, layer):
+ name = [] # export to DXF after merging
+ vector = [] # export to DXF after merging
+ n_pts = []
+ filename = []
+ init_add = True
+ init_done = True
+ wait4 = False
+
+ def __init__(self, export2dxf):
+ self.export2dxf = export2dxf
+
+ if sum(Merge_init.len_item) > 0:
+ if Merge.init_add is True:
+ # export to DXF after merging
+ Merge.name = ['' for i in range(0, Merge_init.n_items)]
+ # export to DXF after merging
+ Merge.vector = ['' for i in range(0, Merge_init.n_items)]
+ (Merge.name, Merge.vector, Merge.init_add,
+ Merge.wait4) = self.add_layers()
+
+ # export to DXF if the layer is not to be merged
+ # layer containing several objects
+ if dxf.export2 is True and Merge.wait4 is True:
+ # create merged file of the layer to be merged...
+ # and convert it at last
+ if Merge.init_done is True:
+ # number of points in merged layers
+ Merge.n_pts = [[] for i in range(0, Merge_init.n_items)]
+ for i in range(0, Merge_init.n_items):
+ # set up path to final merged file
+ Merge.filename.append(files(Merge_init.item[i] # etc
+ + '_bckp').path2('txt'))
+
+ test(Merge.filename[i]).overwrite_file()
+ Merge.n_pts, Merge.init_done = self.outfiles()
+
+ # add layer to the merge list according to pattern
+ def add_layers(self):
+ for i in range(0, Merge_init.n_items):
+ # compare name of each layer with the items of the pattern:
+ if layer.name[:Merge_init.len_item[i]] == Merge_init.item[i]:
+ # test: layer to be merged and merged layer not to be identical
+ if Merge_init.len_item[i] == len(layer.name):
+ msgr.fatal(_("Please change merging rule or layer <"
+ + Merge_init.item[i] + ">. Their names"
+ + " should not be identical."))
+
+ if Merge.name[i] == '': # initial value:
+ # name of the first layer according to the pattern
+ Merge.name[i] = layer.name
+ # vector type of the first layer according to the pattern
+ Merge.vector[i] = layer.vector
+ Merge.init_add = False
+ else: # next values:
+ # add all suitable layers delimited by comma
+ Merge.name[i] += ',' + layer.name
+ # add vector types of the layers
+ Merge.vector[i] += ',' + layer.vector
+
+ # test if all layers have the same vector type
+ control_items = Merge.vector[i].split(',') # create list
+ n_ctrl = len(control_items) # length of the list
+
+ # compare two last values
+ if control_items[n_ctrl - 1] != control_items[n_ctrl - 2]:
+ msgr.fatal(_("Please redefine merging option <"
+ + Merge.item[i] + ">. Different vector"
+ + " types match this rule."))
+ if dxf.export2 is True: # the layers should be exported 2 CAD:
+ Merge.wait4 = True # do not export layers before merging
+ return (Merge.name, Merge.vector,
+ Merge.init_add, Merge.wait4)
+
+ return Merge.name, Merge.vector, Merge.init_add, Merge.wait4
+
+ # merge files to convert several objects as one layer
+ def outfiles(self):
+ # compare current layer with the list of merged ones & derive settings.
+ for i in range(0, Merge_init.n_items): # for each merged layer:
+ n_item = len(Merge_init.item[i])
+ # if current layer is to be merged:
+ if Merge.wait4 is True and layer.name[:n_item] == Merge_init.item[i]:
+ merge_file = Merge.filename[i]
+ # set up name of current file to be merged
+ add_file_name = files(layer.name + '_bckp').path2('txt')
+ if layer.vector == 'B':
+ subtract = -1
+ else:
+ subtract = 0
+ # add merged items to list of point number in the layer
+ Merge.n_pts[i].append(layer.n_pts + subtract)
+ Merge.init_done = False
+
+ # test if file to be added is not blank
+ with open(add_file_name, 'r') as add_file:
+ test(add_file).blank(False)
+
+ # test if final file that shall contain coordinates...
+ # ... of all parts of the layer is blank
+ with open(merge_file, 'a+') as merged_file:
+ test(merged_file).blank(False)
+
+ # add content of the current file to the final file
+ with open(merge_file, 'a') as merged_file:
+ with open(add_file_name, 'r') as add_file:
+ for line in add_file:
+ merged_file.write(line)
+
+ return Merge.n_pts, Merge.init_done
+
+ # merge layers according to pattern items
+ def layers(self):
+ if sum(Merge_init.len_item) > 0:
+ for i in range(0, Merge_init.n_items):
+ if Merge.name[i] == '':
+ msgr.warning(_("There are no layers to merge into <" # etc
+ + Merge_init.item[i] + ">."))
+ continue
+
+ # merge layers to temporary layer
+ grass.run_command('v.patch',
+ input=Merge.name[i],
+ output=Merge_init.item[i]+"_tmp",
+ flags='e', overwrite=True)
+ # remove original dataset
+ grass.run_command('g.remove',
+ type='vector', name=Merge.name[i], flags='f')
+ return 0
+
+ # clean topology
+ def clean_topology(self):
+ if sum(Merge_init.len_item) > 0:
+ for i in range(0, Merge.n_items):
+ if Merge.name[i] != '': # just for merged layers
+
+ # find out code to recognize a type of the vector layer:
+ # split the name of the 1st layer to be merged...
+ element = Merge.name[i].split(',')[0]
+ part = element.split('_') # ... by '_'
+ n_part = len(part) # count parts
+ # code: the last part of the layer's name
+ code = part[n_part - 1]
+
+ # test vector type
+ if code == 'line':
+ methods = "snap,break,rmdupl" # topology clean
+ lyr_name = Merge.item[i] + '_line' # final layer name
+ elif code != 'pt': # polygons
+ methods = "break,rmdupl,rmsa" # topology clean
+ lyr_name = Merge.item[i] # final layer name
+ # test if these layers have been merged already
+ current_layer.test_existence(lyr_name, False)
+
+ # each non-point layer that has not been cleaned yet:
+ if code != 'pt':
+ temp = Merge.item[i] + "_tmp" # temporary layer
+ # topology clean according to vector type
+ grass.run_command('v.clean', input=temp,
+ output=lyr_name, tool=methods)
+ # remove temporary layer
+ grass.run_command('g.remove',
+ type='vector', name=temp, flags='f')
+ return 0
+# ****** #
+
+
+class dxf(glob, files):
+ # based on v.out.dxf by Chuck Ehlschlaeger, Radim Blazek and Martin Landa
+ export2 = False
+ File = '' # dxf file
+ out = ''
+ units = 'metric'
+ textsize = ''
+
+ def __init__(self, export2, File, unit, textsize):
+ dxf.export2 = export2
+ dxf.File = File
+ dxf.unit = unit
+ dxf.textsize = textsize
+
+ # open dxf file
+ if dxf.export2 is True:
+ if dxf.File == '':
+ msgr.fatal(_("Please set up a name of the DXF file"
+ + " or remove -x flag."))
+
+ # open dxf file and test if it is empty (should be)
+ dxf.out = files(dxf.File).open_output(False, True)
+
+ # setup height of the text if invalid value
+ if dxf.textsize < 0.:
+ msgr.fatal(_("Text height must be positive."))
+
+ if dxf.textsize == 0.:
+ # find extends and save textsize
+ dxf.textsize = self.do_limits(True)
+ else:
+ # find extends and do not save textsize (given by the user)
+ self.do_limits(False)
+
+ self.make_tables() # start section of the tables
+
+ # estimate text size according to the map extents
+ # original: make_layername (v.out.dxf: main)
+ def do_limits(self, calculate_textsize):
+ region = grass.region()
+ self.north = region['n']
+ self.south = region['s']
+ self.east = region['e']
+ self.west = region['w']
+
+ self.header()
+ self.draw_units()
+ self.limits()
+ self.endsec()
+
+ if calculate_textsize is True:
+ if ((self.east - self.west) >= (self.north - self.south)):
+ dxf.textsize = (self.east - self.west) * text_ratio
+ else:
+ dxf.textsize = (self.north - self.south) * text_ratio
+
+ return dxf.textsize
+ else:
+ return 0
+
+ # set up drawing units
+ def draw_units(self):
+ if dxf.units == 'imperial':
+ code = 0
+ elif dxf.units == 'metric':
+ code = 1
+ else:
+ msgr.fatal(_("Please set up the drawing units"
+ + " to 'metric' or to 'imperial'."))
+
+ dxf.out.write(' 9\n$MEASUREMENT\n 70\n%6d\n' % code)
+
+ return 0
+
+ # define tables
+ # functions from v.out.dxf
+ def make_tables(self):
+ self.tables()
+ self.linetype_table(1)
+ self.solidline()
+ self.endtable()
+ self.layer_table(7)
+ self.layer0()
+
+ return 0
+
+ # write the header
+ # original: dxf_header (v.out.dxf: write_dxf)
+ def header(self):
+ dxf.out.write(' 0\nSECTION\n 2\nHEADER\n')
+
+ return 0
+
+ # write tables
+ # original: dxf_tables (v.out.dxf: write_dxf)
+ def tables(self):
+ dxf.out.write(' 0\nSECTION\n 2\nTABLES\n')
+
+ return 0
+
+ # write entities
+ # original: dxf_entities (v.out.dxf: write_dxf)
+ def entities(self):
+ dxf.out.write(' 0\nSECTION\n 2\nENTITIES\n')
+
+ return 0
+
+ # end section
+ # original: dxf_endsec (v.out.dxf: write_dxf)
+ def endsec(self):
+ dxf.out.write(' 0\nENDSEC\n')
+
+ return 0
+
+ # finalize dxf file
+ # original: dxf_eof (v.out.dxf: write_dxf)
+ def eof(self):
+ dxf.out.write(' 0\nEOF\n')
+ dxf.out.close()
+
+ return 0
+
+ # header stuff
+ # original: dxf_limits (v.out.dxf: write_dxf)
+ def limits(self):
+ dxf.out.write(
+ ' 9\n$LIMMIN\n 10\n' + str(self.west) + '\n 20\n' # etc
+ + str(self.south) + '\n')
+ dxf.out.write(
+ ' 9\n$LIMMAX\n 10\n' + str(self.east) + '\n 20\n' # etc
+ + str(self.north) + '\n')
+
+ return 0
+
+ # tables stuff
+ # original: dxf_linetype_table (v.out.dxf: write_dxf)
+ def linetype_table(self, numlines):
+ dxf.out.write(' 0\nTABLE\n 2\nLTYPE\n 70\n%6d\n' % numlines)
+
+ return 0
+
+ # original: dxf_layer_table (v.out.dxf: write_dxf)
+ def layer_table(self, numlayers):
+ dxf.out.write(' 0\nTABLE\n 2\nLAYER\n 70\n%6d\n' % numlayers)
+
+ return 0
+
+ # end table
+ # original: dxf_endtable (v.out.dxf: write_dxf)
+ def endtable(self):
+ dxf.out.write(' 0\nENDTAB\n')
+
+ return 0
+
+ # write line
+ # original: dxf_solidline (v.out.dxf: write_dxf)
+ def solidline(self):
+ dxf.out.write(' 0\nLTYPE\n 2\nCONTINUOUS\n 70\n')
+ dxf.out.write(' 64\n 3\nSolid line\n 72\n 65\n')
+ dxf.out.write(' 73\n 0\n 40\n0.0\n')
+
+ return 0
+
+ # todo: naco?
+ # original: dxf_layer0 (v.out.dxf: write_dxf)
+ def layer0(self):
+ dxf.out.write(' 0\nLAYER\n 2\n0\n 70\n 0\n')
+ dxf.out.write(' 62\n 7\n 6\nCONTINUOUS\n')
+
+ return 0
+
+ # create list of the layers and of their properties...
+ # ... and write them to dxf file
+ # functions from v.out.dxf
+
+ # end section of tables
+ def end_tables(self):
+ dxfs.endtable()
+ dxfs.endsec()
+
+ return 0
+
+ # finalize dxf file
+ def end_dxf(self):
+ dxfs.endsec() # end section
+ dxfs.eof() # puts final stuff in dxf_fp, closes file
+
+ return 0
+
+ # setup elevation according to 2D/3D geometry
+ def setup_elev(self, point):
+ if inputs.dim == 3: # 3D objects:
+ if point[3] == '': # empty elevation:
+ elev = str(0.0) # setup 0.
+ else:
+ elev = point[3] # setup value
+ else: # 2D objects:
+ elev = str(0.0) # setup 0.
+
+ return elev
+# ****** #
+
+
+class dxf_layer_merged(Merge):
+ name = ''
+ vector = ''
+ n_pts = ''
+
+ def __init__(self, i):
+ self.i = i
+
+ dxf_layer_merged.name = Merge_init.item[i]
+ dxf_layer_merged.vector = Merge.vector[i]
+ dxf_layer_merged.n_pts = Merge.n_pts[i]
+ Merge.wait4 = False
+
+
+class dxf_layer(layer, Merge, dxf): # *** make separate dxf layers *** #
+ color = 1 # layer color (1-255). 0 not recognized by AutoCAD Civil 2015.
+ n = 0 # number of the layers
+ name = [] # list of layers for drawing entities
+ vector = [] # list of geometry types
+ n_pts = [] # list of point numbers
+
+ def __init__(self, set_layer):
+ self.set_layer = set_layer
+
+ # export to DXF if the layer is not to be merged
+ # layer containing single object:
+ if dxf.export2 is True and Merge.wait4 is False:
+ self.dxf_properties()
+
+ Merge.wait4 = False
+
+ # DXF properties
+ def dxf_properties(self):
+ # add layer name to the list for drawing entities
+ dxf_layer.name.append(self.set_layer.name)
+ # add geometry type to the list for drawing entities
+ dxf_layer.vector.append(self.set_layer.vector)
+ # add no. of pts to the list
+ dxf_layer.n_pts.append(self.set_layer.n_pts)
+
+ dxf_layer.n += 1 # increase number of the layers to be drawn
+ Merge.wait4 = False # merging indicator to the default (no merge)
+
+ self.layername() # add layer name to the layer section
+ dxf_layer.color = self.setup_color()
+
+ return dxf_layer.color, dxf_layer.n, dxf_layer.name, # etc
+ dxf_layer.vector, dxf_layer.n_pts, Merge.wait4
+
+ # define layers and their properties
+ # original: make_layername (v.out.dxf: main)
+ def layername(self):
+ self.layercontent('', 'CONTINUOUS', 0) # geometry object
+ self.layercontent('_elev_pts', 'CONTINUOUS', 0) # elevation (vertex)
+ self.layercontent('_label_pts', 'CONTINUOUS', 0) # label (vertex)
+ if layer.vector != 'P':
+ self.layercontent('_label', 'CONTINUOUS', 0) # label layer
+
+ return 0
+
+ # write layer
+ # original: dxf_layer (v.out.dxf: write_dxf)
+ def layercontent(self, suffix, linetype, is_frozen):
+ if is_frozen:
+ frozen = 1
+ else:
+ frozen = 64
+ dxf.out.write(
+ ' 0\nLAYER\n 2\n' + dxf_layer.name[dxf_layer.n-1] # etc
+ + suffix + '\n 70\n')
+ dxf.out.write(
+ '%6d\n 62\n%6d\n 6\n%s\n' % (frozen, self.color, linetype))
+
+ return 0
+
+ # extra color for each group of layers to export2dxf (geometry + labels)
+ def setup_color(self):
+ self.color += 1 # calculate new color indicator
+ if self.color == 256: # if maximum value of 255 has been exceeded:
+ self.color = 1 # set up minimum again
+
+ return self.color
+# ****** #
+
+
+class finalize_dxf(
+ inputs, layer, Merge_init, Merge, dxf,
+ dxf_layer_merged, dxf_layer):
+
+ def __init__(self):
+ dxfs.end_tables() # close the section of the tables
+
+ msgr.message(_("Converting layers to DXF..."))
+ self.entities2()
+ dxfs.end_dxf() # finalize and close dxf file
+
+ # add point to the entity in the dxf file
+ # based on add_plines (v.out.dxf: main)
+ def point2dxf(self, vector, point, seq_type):
+ # create layer name according to entity type (geometry or text)
+ if seq_type == 'geometry':
+ appendix = ''
+ else: # elevation or point label, or layer label
+ appendix = '_' + seq_type
+
+ self.layer2write = self.dxf_layer_name + appendix # layer name
+
+ # write geometry
+ if seq_type == 'geometry':
+ if vector == 'P':
+ self.point2write(point) # write point
+ else:
+ self.vertex(point) # write vertex
+
+ # write label to point or to the layer
+ elif seq_type == 'label':
+ self.text2write(True, self.dxf_layer_name) # write label
+
+ # write elevation to the point
+ else:
+ if seq_type == 'elev_pts':
+ default_justification = False # change justification mode
+ text = self.setup_elev(point) # text elevation (2D point: 0.0)
+ if seq_type == 'label_pts':
+ default_justification = True # keep default justification mode
+ text = str(point[0]) # use point name as text
+
+ # write point labels (name and elev)
+ self.text2write(default_justification, text)
+
+ return 0
+
+ # label centroid
+ def label_centroid(self, n):
+ self.centroid.append(self.dxf_layer_name) # add layer name
+ self.centroid.append(self.sum_east / n) # easting
+ self.centroid.append(self.sum_north / n) # northing
+ self.centroid.append(self.sum_elev / n) # elevation
+
+ self.point2dxf('P', self.centroid, 'label') # label layer
+
+ return 0
+
+ # initial values for the label of the layer
+ def init_label(self):
+ # compute centroid for line/polygon elements
+ self.sum_east = 0.
+ self.sum_north = 0.
+ self.sum_elev = 0.
+ self.centroid = []
+ return self.sum_east, self.sum_north, self.sum_elev, self.centroid
+
+ # write sequence to dxf
+ def write_sequence(self, parts, seq_type):
+ self.seq_type = seq_type
+
+ with open(self.filename, 'r+') as coord_file: # open backup file:
+ test(self.filename).files() # test if the file exists
+ test(self.filename).blank(False) # test if the file is not blank
+
+ # initial values for the label of the layer
+ if self.seq_type == 'label' and self.vector != 'P':
+ (self.sum_east, self.sum_north, self.sum_elev,
+ self.centroid) = self.init_label()
+
+ closing_pt = True # current point should close the polygon shape
+
+ # converting a layer with more than one object:
+ if parts is not None:
+ close_merged = 0 # point index for splitting line detection
+ index_merged = 0 # index of the object in the layer
+ # no. of points in labeled objects => closing point detection
+ done = parts[0]
+ sum_layer = sum(parts)
+
+ for line in iter(coord_file.readline, ''):
+ # extract point name and coordinates
+ self.point = line.strip('\n').split(glob.py_separator)
+
+ if self.seq_type != 'label':
+ # write point to particular entity
+ self.point2dxf(self.vector, self.point, self.seq_type)
+
+ # write label of the layer
+ if self.seq_type == 'label' and self.vector != 'P':
+ # sum of coordinates
+ self.sum_east += float(self.point[1])
+ self.sum_north += float(self.point[2])
+ if inputs.dim == 3:
+ self.sum_elev += float(self.point[3])
+
+ # write label extra for each object in the layer
+ if parts is not None:
+ if close_merged == done - 1: # closing point reached:
+ # no. of points in the object
+ n = parts[index_merged]
+ # compute and label centroid of the object
+ self.label_centroid(n)
+
+ # start writing centroid of the next object
+ # initial values for the label of the layer
+ if self.seq_type == 'label' and self.vector != 'P':
+ (self.sum_east, self.sum_north, self.sum_elev,
+ self.centroid) = self.init_label()
+
+ index_merged += 1 # index of the next object
+
+ # add number of currently labeled object to the sum
+ # to not exceed array size:
+ if index_merged < len(parts):
+ done += parts[index_merged]
+
+ # check the next point (closing or not)
+ close_merged += 1
+ # end: if merged_elements is not None
+ # end: if seq_type == 'label_pts' and code != 'P'
+
+ # write geometry of the layer
+ if self.seq_type == 'geometry':
+ if self.vector == 'B': # for polygon layer:
+ # if closing point (CP) missing in current session:
+ if(closing_pt):
+ # save coordinates of (CP)
+ point0 = self.point
+ # => not necessary to save CP in the session now
+ closing_pt = False
+
+ # separated objects (lines or polygons)
+ if parts is not None and self.vector != 'P':
+ if close_merged == done - 1: # closing point reached:
+ # close the object:
+ if self.vector == 'B': # copy closing point (B)
+ # closing point
+ self.point2dxf(
+ self.vector, point0, self.seq_type)
+ self.poly_end() # end line/polygon object
+
+ # start new line/polygon object
+ # not after the last object:
+ if close_merged < sum_layer - 1:
+ self.polyline()
+ if self.vector == 'B':
+ closing_pt = True
+
+ index_merged += 1 # index of the next object
+ # add number of currently labeled object to the sum
+ if index_merged < len(parts):
+ # to not exceed array size
+ done += parts[index_merged]
+
+ # check the next point (closing or not)
+ close_merged += 1
+ # end: if merged_elements is not None ...
+ # and (code == 'B' or code == 'L')
+ # end: if seq_type == 'label_pts' and code != 'P'
+ # end: line in iter(coord_file.readline, '')
+
+ # single object in the layer:
+ if parts is None:
+ # close geometry
+ if self.seq_type == 'geometry':
+ if self.vector == 'B':
+ # write closing point
+ self.point2dxf(self.vector, point0, self.seq_type)
+ if self.vector != 'P':
+ self.poly_end() # end polygon
+
+ # label the layer
+ if self.seq_type == 'label' and self.vector != 'P':
+ self.label_centroid(self.dxf_layer_n_pts)
+
+ return 0
+
+ # write geometry entities to dxf file
+ def entities2(self):
+ dxfs.entities() # start section of entities
+
+ j = 0 # index of merging pattern item (= merged layer name)
+ for i in range(0, dxf_layer.n):
+ self.dxf_layer_name = dxf_layer.name[i]
+ self.vector = dxf_layer.vector[i]
+ self.dxf_layer_n_pts = dxf_layer.n_pts[i]
+
+ # set up input file appendix (depends on geometry type)
+ if self.vector == 'P':
+ base = self.dxf_layer_name
+ else:
+ base = self.dxf_layer_name + "_bckp"
+ self.filename = files(base).path2('txt') # path to input file
+
+ # write geometry
+ if self.vector != 'P':
+ self.polyline() # start polyline entity
+
+ # if current layer has been merged:
+ if Merge_init.item[j] == self.dxf_layer_name:
+ parts = Merge.n_pts[j] # find number of points in each object
+ j += 1 # index of the next merged layer
+ else:
+ parts = None # not merged layers: there are no parts
+
+ # write geometry and label of the layer
+ self.write_sequence(parts, 'geometry')
+ self.write_sequence(parts, 'label')
+
+ # write labels of the vertices
+ self.write_sequence(None, 'label_pts')
+
+ # write elevations of the vertices
+ self.write_sequence(None, 'elev_pts')
+
+ return 0
+
+ # entities: point
+ # original: dxf_point (v.out.dxf: write_dxf)
+ def point2write(self, point):
+ self.east = point[1]
+ self.north = point[2]
+ self.elev = self.setup_elev(point)
+
+ dxf.out.write('0\nPOINT\n')
+ dxf.out.write('8\n' + self.dxf_layer_name + '\n')
+ dxf.out.write(
+ '10\n' + self.east + '\n20\n' + self.north + '\n30\n' # etc
+ + self.elev + '\n')
+
+ return 0
+
+ # entities: polyline
+ # original: dxf_polyline (v.out.dxf: write_dxf)
+ def polyline(self):
+ dxf.out.write('0\nPOLYLINE\n')
+ dxf.out.write('8\n' + self.dxf_layer_name + '\n')
+ dxf.out.write('66\n1\n')
+ # fprintf(dxf_fp,"10\n0.0\n 20\n0.0\n 30\n0.0\n"); *//* ?
+
+ if inputs.dim == 3:
+ dxf.out.write('70\n8\n')
+
+ return 0
+
+ # entities: vertex
+ # original: dxf_vertex (v.out.dxf: write_dxf)
+ def vertex(self, point):
+ self.east = point[1]
+ self.north = point[2]
+ self.elev = self.setup_elev(point)
+
+ dxf.out.write('0\nVERTEX\n')
+ dxf.out.write('8\n' + self.dxf_layer_name + '\n')
+ dxf.out.write(
+ '10\n' + self.east + '\n20\n' + self.north + '\n 30\n' # etc
+ + self.elev + '\n')
+
+ return 0
+
+ # entities: text
+ # original: dxf_text (v.out.dxf: write_dxf)
+ def text2write(self, default, text):
+ self.east = self.point[1]
+ self.north = self.point[2]
+ self.elev = self.setup_elev(self.point)
+
+ # start text entity
+ dxf.out.write(' 0\nTEXT\n 8\n' + self.layer2write + '\n')
+ # reference point
+ dxf.out.write(
+ ' 10\n%s\n20\n%s\n30\n%s\n' % (self.east, self.north, self.elev))
+ # text properties
+ dxf.out.write(
+ ' 40\n' + str(dxf.textsize) + '\n 1\n' + text + '\n')
+
+ # do not use default justification (hz: left, v: baseline):
+ if default is False:
+ # justify to hz: rigth, v: top
+ dxf.out.write((
+ ' 72\n 2\n 73\n 3\n 11\n%s\n 21\n' # etc
+ + '%s\n 31\n%s\n') % (self.east, self.north, self.elev))
+
+ return 0
+
+ # entities: end polyline
+ # original: dxf_poly_end (v.out.dxf: write_dxf)
+ def poly_end(self):
+ dxf.out.write(' 0\nSEQEND\n 8\n' + self.dxf_layer_name + '\n')
+
+ return 0
+# ****** #
+
+
+def main():
+ global msgr
+ msgr = get_msgr() # setup messenger as global variable
+
+ global overwrite_all
+ overwrite_all = grass.overwrite()
+
+ global current_layer
+ global dxfs
+ global text_ratio # size of text compared to screen = 1
+ global centered
+ text_ratio = .003
+ centered = 4
+
+ # define options
+ opt = glob(options['input'], options['outdir'], options['separator'])
+ # open list of existing layers
+ done_lyrs = files("_layers_done").open_output(True, False)
+
+ # define rules for vector type
+ rules = vect_rules(options['pt_rules'], options['ln_rules'],
+ options['poly_rules'], options['easting'],
+ options['northing'], options['elevation'])
+
+ # flags for v.in.ascii
+ Flag('n')
+ Flag('t')
+ Flag('r')
+ Flag('z')
+ Flag('e')
+
+ # export to dxf
+ dxfs = dxf(flags['x'], options['dxf_file'],
+ options['draw_unit'], options['textsize'])
+
+ # *** read input coordinates
+ inp = inputs(options['skip'])
+
+ # continue importing layers to GIS
+ current_name = layer_init(0)
+ current_layer = layer(0) # initial layer settings
+
+# test options for merging layers
+ merge_init = Merge_init(options['merge_lyrs']) # manage items to merge
+
+# continue importing layers to GIS
+ for i in range(0, inp.n): # step: number of columns (3 or 4)
+ new_name = layer_init(i)
+
+ # compare current lyr name with i-th name
+ if current_name.name != new_name.name: # not equal =>
+ current_layer.complete() # finalize current layer's output file
+ current_layer.make_new() # import current layer
+ merge = Merge(dxf.export2) # add current layer to the merging list
+ dxf_lyr = dxf_layer(current_layer)
+
+ # make a note that layer has been done
+ done_lyrs.write(str(current_layer.n_pts) + glob.py_separator # etc
+ + current_layer.name + glob.py_separator # etc
+ + current_layer.vector + '\n')
+
+ current_name = layer_init(i)
+ current_layer = layer(i) # setup new layer as current
+ # end initializing a new layer
+
+ current_layer.write(i) # write the point to the file of current layer
+ # end for i in range(0, n, dim+1)
+
+ # *** process the last layer import
+ current_layer.complete() # finalize current layer's output file
+ current_layer.make_new() # import current layer
+ merge = Merge(dxf.export2) # add current layer to the merging list
+ dxf_lyr = dxf_layer(current_layer)
+
+ # make a note that layer has been done
+ done_lyrs.write(str(current_layer.n_pts) + glob.py_separator # etc
+ + current_layer.name + glob.py_separator # etc
+ + current_layer.vector + '\n')
+ done_lyrs.close()
+
+ # finalize merging and clean topology
+ if merge.n_items > 0:
+ merge.layers() # merge the layers
+ merge.clean_topology() # clean topology
+
+ # finalize DXF export
+ if dxf.export2 is True:
+ if merge.n_items > 0:
+ # add merged layers
+ for i in range(0, merge.n_items):
+ dxf_pars = dxf_layer_merged(i)
+ # add merged layers to the table of layers
+ dxf_lyr = dxf_layer(dxf_pars)
+ fin_dxf = finalize_dxf() # create entities in DXF file
+
+ return 0
+
+if __name__ == "__main__":
+ options, flags = grass.parser()
+ main()
More information about the grass-commit
mailing list