Тема: LISP. По координатам из txt-файла ставит и подписывает точки

Привет.Сочинил програмку,которая по координатам из файла txt рисует кружочки и подписывает номер точки и отметку Z
Файл д. б. такой
rtyui____1234534.678__1234523.456__565.784
yuhgf____1234535.678__1234524.456__567.739
dfghhh___1234537.678__1234527.456__568.759
Вместо символов подчёркивания д.б. пробелы!!!
Подчёркивания я вставил потому что всё тут разезжается

(defun c:tta( / scl namset namefile nmfile runline firstr Xstr Ystr Zstr
              firstr ZstrN Xnum Ynum Znum koord blcN nmAt nmAt2 myAtsp
              myAtsp2 myAtrr myAtrr2 myAttsp myAttsp2 )
(setq scl 1)
(if (= (tblsearch "block" "blck001") nil)
   (progn
     (setvar "attreq" 0)
     (setq namset (ssadd));
     (command "_attdef" "" "NAME" "Name" "" "J" "Center" '(0.0 11.5 0.0) 1 0 )
     (ssadd (entlast) namset)
     (command "_attdef" "" "HEIGT" "Heigt" "" "J" "Center" '(0.0 7.5 0.0) 1 0 )
     (ssadd (entlast) namset)
     (command "_CIRCLE" '(0.0 10.0 0.0) 1.0)
     (ssadd (entlast) namset)
     (command "_CIRCLE" '(0.0 10.0 0.0) 0.05)
     (ssadd (entlast) namset)
     (command "_block" "blck001" '(0.0 10.0 0.0) namset "")
   ) ;progn
 ) ;if
(setq namefile (getfiled "Select file" "c:\\" "txt" 4))
(setq nmfile (open namefile "r"))
;(getint scl "Enter Scale(1):")
(setq runline (read-line nmfile))
(while (/= runline nil)
(setq firstr (substr runline 1 8))
(setq Xstr   (substr runline 10 12))
(setq Ystr   (substr runline 23 12))
(setq Zstr   (substr runline 36 7))
(setq firstr (vl-string-trim " " firstr))
(setq ZstrN  (vl-string-trim " " Zstr))
(setq Xnum (atof Xstr))
(setq Ynum (atof Ystr))
(setq Znum (atof Zstr))
(setq koord (list Xnum Ynum Znum))
(command "_.insert" "blck001" koord scl scl 0)
(setq blcN  (entlast)); imya bloka
(setq nmAt   (entnext blcN)); imya atributa
(setq nmAt2  (entnext nmAt)); imya atributa 2
(setq myAtsp  (entget nmAt )); spisok atributa
(setq myAtsp2 (entget nmAt2)); spisok atributa 2
(setq myAtrr  (cons 1 firstr))
(setq myAtrr2 (cons 1 ZstrN))
(setq myAttsp  (subst myAtrr  '(1 . "") myAtsp )); zamena
(setq myAttsp2 (subst myAtrr2 '(1 . "") myAtsp2)); zamena
(entmod myAttsp)
(entmod myAttsp2)
(entupd  (cdr (assoc -1 myAttsp)))
(entupd  (cdr (assoc -1 myAttsp2)))
(setq runline (read-line nmfile))
)
);defun

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Программа при загрузке в AutoCad выдает ошибку:"bad argument type:numberp:nil"

Re: LISP. По координатам из txt-файла ставит и подписывает точки

> Виктор
В опциях команд тоже нужно использовать _.
В частности в ATTDEF не "J" а "_J"

(defun c:tta( / scl namset namefile nmfile runline firstr Xstr Ystr Zstr
              firstr ZstrN Xnum Ynum Znum koord blcN nmAt nmAt2 myAtsp
              myAtsp2 myAtrr myAtrr2 myAttsp myAttsp2 )
(setq scl 1)
(if (null (tblsearch "block" "blck001"))
   (progn
     (setvar "attreq" 0)
     (setq namset (ssadd));
     (command "_attdef" "" "NAME" "Name" "" "_J" "_Center" '(0.0 11.5 0.0) 1 0 )
     (ssadd (entlast) namset)
     (command "_attdef" "" "HEIGT" "Heigt" "" "_J" "_Center" '(0.0 7.5 0.0) 1 0 )
     (ssadd (entlast) namset)
     (command "_CIRCLE" '(0.0 10.0 0.0) 1.0)
     (ssadd (entlast) namset)
     (command "_CIRCLE" '(0.0 10.0 0.0) 0.05)
     (ssadd (entlast) namset)
     (command "_block" "blck001" '(0.0 10.0 0.0) namset "")
   ) ;progn
 ) ;if
(and
(setq namefile (getfiled "Select file" "c:\\" "txt" 4))
(setq nmfile (open namefile "r"))
;(getint scl "Enter Scale(1):")
(while (setq runline (read-line nmfile))
(setq firstr (substr runline 1 8))
(setq Xstr   (substr runline 10 12))
(setq Ystr   (substr runline 23 12))
(setq Zstr   (substr runline 36 7))
(setq firstr (vl-string-trim " " firstr))
(setq ZstrN  (vl-string-trim " " Zstr))
(setq Xnum (atof Xstr))
(setq Ynum (atof Ystr))
(setq Znum (atof Zstr))
(setq koord (list Xnum Ynum Znum))
(command "_.insert" "blck001" koord scl scl 0)
(setq blcN  (entlast)); imya bloka
(setq nmAt   (entnext blcN)); imya atributa
(setq nmAt2  (entnext nmAt)); imya atributa 2
(setq myAtsp  (entget nmAt )); spisok atributa
(setq myAtsp2 (entget nmAt2)); spisok atributa 2
(setq myAtrr  (cons 1 firstr))
(setq myAtrr2 (cons 1 ZstrN))
(setq myAttsp  (subst myAtrr  '(1 . "") myAtsp )); zamena
(setq myAttsp2 (subst myAtrr2 '(1 . "") myAtsp2)); zamena
(entmod myAttsp)
(entmod myAttsp2)
(entupd  (cdr (assoc -1 myAttsp)))
(entupd  (cdr (assoc -1 myAttsp2)))
(setq runline (read-line nmfile))
)
)
(princ)
)

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Спасибо VVA за подсказку. Я ещё добавил масштабирование. Прога спрашивает масштаб, если вводите .1 блоки получатся в 10 раз меньше, введёте 10 будут в 10 раз больше. Если это не нужно, поставьте точку с запятой перед строкой
(setq scl (getreal "Enter Scale factor(1):"))
Прогу легко адаптировать для других txt форматов
(setq firstr (substr runline 1 9))    ;atribut
(setq Xstr   (substr runline 10 12))  ;X stroka
(setq Ystr   (substr runline 23 12))  ;Y stroka
(setq Zstr   (substr runline 36 7))   ;Z stroka
Здесь 1 - начало атрибута, 9 - сколько позиций он занимает.
Соответственно 10 - позиция с которой читается координата X, 12 - сколько позиций она занимает.
И.т.д. Прога не выдерживает символов табуляции.
Это её недостаток. Позиции табуляции в некоторых редакторах можно сделать видимыми. Или подвигать курсор стрелочками. Если он прыгает на несколько позиций значит здесь символ табуляции.
(defun c:tta( / scl namset namefile nmfile runline firstr Xstr Ystr Zstr
              firstr ZstrN Xnum Ynum Znum koord blcN nmAt nmAt2 myAtsp
              myAtsp2 myAtrr myAtrr2 myAttsp myAttsp2 snp)
(setq scl 1.0)
(setq scl (getreal "Enter Scale factor(1):")) ;;;; mashtab
(setq snp (getvar "osmode"))
(setvar "osmode" 0)
(if (= (tblsearch "block" "blck001") nil)
   (progn
     (setvar "attreq" 0)
     (setq namset (ssadd));
     (command "_.attdef" "" "NAME" "Name" "" "_J" "_Center" '(0.0 11.5 0.0) 1 0)
     (ssadd (entlast) namset)
     (command "_.attdef" "" "HEIGT" "Heigt" "" "_J" "_Center" '(0.0 7.5 0.0) 1 0)
     (ssadd (entlast) namset)
     (command "_.CIRCLE" '(0.0 10.0 0.0) 1.0)
     (ssadd (entlast) namset)
     (command "_.CIRCLE" '(0.0 10.0 0.0) 0.05)
     (ssadd (entlast) namset)
     (command "_.block" "blck001" '(0.0 10.0 0.0) namset "")
   ) ;progn
) ;if
(setq namefile (getfiled "Select file" "c:\\" "txt" 4))
(setq nmfile (open namefile "r"))
(setq runline (read-line nmfile))
(while  (and (/= runline nil) (/= runline ""))
(setq firstr (substr runline 1 9))    ;atribut
(setq Xstr   (substr runline 10 12))  ;X stroka
(setq Ystr   (substr runline 23 12))  ;Y stroka
(setq Zstr   (substr runline 36 7))   ;Z stroka
(setq firstr (vl-string-trim " " firstr))
(setq ZstrN  (vl-string-trim " " Zstr))
(setq Xnum (atof Xstr))
(setq Ynum (atof Ystr))
(setq Znum (atof Zstr))
(setq koord (list Xnum Ynum Znum))
(command "_.insert" "blck001" koord scl scl 0)
(setq blcN  (entlast)); imya bloka
(setq nmAt   (entnext blcN)); imya atributa
(setq nmAt2  (entnext nmAt)); imya atributa 2
(setq myAtsp  (entget nmAt )); spisok atributa
(setq myAtsp2 (entget nmAt2)); spisok atributa 2
(setq myAtrr  (cons 1 firstr))
(setq myAtrr2 (cons 1 ZstrN))
(setq myAttsp  (subst myAtrr  '(1 . "") myAtsp )); zamena
(setq myAttsp2 (subst myAtrr2 '(1 . "") myAtsp2)); zamena
(entmod myAttsp)
(entmod myAttsp2)
(entupd  (cdr (assoc -1 myAttsp)))
(entupd  (cdr (assoc -1 myAttsp2)))
(setq runline (read-line nmfile))
) ;while
(close nmfile)
(setq nmfile nil)
(setvar "osmode" snp)
) ;defun

Re: LISP. По координатам из txt-файла ставит и подписывает точки

> Victor
Программа (да и пост) будет легче, если будешь пользоваться форматированием. Для кода вначале и конце используй
[_code] программный код [_/code],
удалив символ _  после [

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Еще варианты здесь
https://www.caduser.ru/forum/topic22595.html

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Тогда еще варианты (чтобы все в одном месте было)
Как импортировать координаты точек из файла?
ImportXYZ

ImportXYZ - Import XY or XYZ coords from practically any type of file and:
Draw a node on every point.
Draw a circle on every point (input the diameter)
Draw lines from point to point to point.
Insert a block on every point.
Insert a block and update the x y and/or z attributes on every point.

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Еще один вариант Планировка

Re: LISP. По координатам из txt-файла ставит и подписывает точки

у меня пишет что такой команды нет 'TTA' я уже пербрал кучу лиспов так и не нашел чтоб работал импорт из тхт файла и такая фигня почти всегда! может я не так че-то делаю? подгружаю лисп файл добавляю его потом смотрю команду в  коде пишу или "комонда" или (команда), но в ответ тишина.. :(  (акад 2009 локализованный)

(изменено: Victor, 20 октября 2009г. 18:03:34)

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Должен быть блок blck001 с 2 атрибутами.

(defun c:tta( / scl namset namefile nmfile runline firstr Xstr Ystr Zstr 
              firstr ZstrN Xnum Ynum Znum koord blcN nmAt nmAt2 myAtsp
              myAtsp2 myAtrr myAtrr2 myAttsp myAttsp2 )


(setvar "CMDECHO" 0)
(setq snp (getvar "Osmode"))
(setvar "Osmode" 0) 
(setq scl 1.0)
(setvar "attreq" 0)
(setq namefile (getfiled "Select file" "c:\\" "txt" 4))
(setq nmfile (open namefile "r"))
;(getint scl "Enter Scale(1):")
(setq runline (read-line nmfile))
(while (/= runline nil)
(setq firstr (substr runline 1 8))
(setq Xstr   (substr runline 12 9))
(setq Ystr   (substr runline 22 9))
(setq Zstr   (substr runline 32 6))
(setq firstr (vl-string-trim " " firstr))
(setq ZstrN  (vl-string-trim " " Zstr))
(setq Xnum (atof Xstr))
(setq Ynum (atof Ystr))
(setq Znum (atof Zstr))
(setq koord (list Xnum Ynum Znum))
(setvar "attreq" 0)
(command "_.ins ert" "blck001" koord scl scl 0)
(setq blcN  (entlast)); imya bloka
(setq nmAt   (entnext blcN)); imya atributa
(setq nmAt2  (entnext nmAt)); imya atributa 2
(setq myAtsp  (entget nmAt )); spisok atributa
(setq myAtsp2 (entget nmAt2)); spisok atributa 2
(setq myAtrr  (cons 1 firstr)) 
(setq myAtrr2 (cons 1 ZstrN)) 
(setq myAttsp  (subst myAtrr  '(1 . "") myAtsp )); zamena
(setq myAttsp2 (subst myAtrr2 '(1 . "") myAtsp2)); zamena
(entmod myAttsp)
(entmod myAttsp2)
(entupd  (cdr (assoc -1 myAttsp)))
(entupd  (cdr (assoc -1 myAttsp2)))
(setq runline (read-line nmfile))
)
(se tvar "Osmode" snp) 
(command "_.zoom" "_e")
);defun

Пробелы не сохраняются. В первой строке д.б. 6 пробелов и остальное нужно тоже выровнять.

1044TY     186285.17 561790.14 390.00
1043HJJ    188426.58 560774.50 378.00
1043LLK    188489.81 560520.22 381.00
1043UUU    188504.93 561009.51 379.00
1043RRR    188137.46 571081.22 373.00
1043HH     187676.95 561015.59 396.00
1041IIY    187853.39 564124.56 381.00
1041KKK    187375.10 561027.33 396.00
1041WWW    187606.67 560946.70 391.00
1041FDS    187485.57 560919.19 395.00
1040HGF    187396.74 560499.76 391.00
618JH      187215.87 510873.12 396.00

Re: LISP. По координатам из txt-файла ставит и подписывает точки

попробовал не получилось выдал такое
Команда: tta
; ошибка: неверный тип аргумента: lentityp nil

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Посмотри здесь(#36)
https://www.caduser.ru/forum/topic22595.html

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Mikha,
А для 2000 эта программа пойдёт.

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Я заметил в строке (command "_.ins ert" "blck001" koord scl scl 0)
есть лишний пробел. Д.б."_.insert"

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Valery Brelovsky пишет:

Mikha,

А для 2000 эта программа пойдёт.

Приложение написано и протестировано под AutoCAD 2006. Проверить работу в более поздних версиях нет возможности (и необходимости), но в принципе должно работать как минимум вплоть до 2010 в том случае, если установлена поддержка VBA. Работу в более ранних версиях я также не проверял.
Как выглядит AutoCAD 2000 помню смутно, если верить Википедии, поддержка VBA в нем уже была, но вряд ли предложенная мною программа будет работать в нем без "доработки напильником"

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Спасибо всем за оказанную помощь! все работает :)

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Mikha,
Понял, будем работать по старинке.

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Привет, а нельзя ли модернизировать эту программку, чтобы разделителям вместо пробелов были запятые и первая координата была не X, а Y? То есть столбцы в текстовом файле имеют вид: N,Y,X,Z

(изменено: Victor, 5 января 2010г. 08:12:21)

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Если разделитель запятая. Пару раз попробовал. Кажется работает

(defun c:tta( / scl namset namefile nmfile runline firstr Xstr Ystr Zstr 
              firstr ZstrN Xnum Ynum Znum koord blcN nmAt nmAt2 myAtsp
              myAtsp2 myAtrr myAtrr2 myAttsp myAttsp2 )


(setvar "CMDECHO" 0)
(setq snp (getvar "Osmode"))
(setvar "Osmode" 0) 
(setq scl 1.0)
(setvar "attreq" 0)
(setq namefile (getfiled "Select file" "c:\\" "txt" 4))
(setq nmfile (open namefile "r"))
;(getint scl "Enter Scale(1):")
(setq runline (read-line nmfile))
(while (/= runline nil)
(setq poz (vl-string-position (ascii ",") runline))
(setq firstr (substr runline 1 poz))
(setq runline (substr runline (+ poz 2)))
(setq poz (vl-string-position (ascii ",") runline))
(setq Xstr   (substr runline 1 poz))
(setq runline (substr runline (+ poz 2)))
(setq poz (vl-string-position (ascii ",") runline))
(setq Ystr   (substr runline 1 poz))
(setq runline (substr runline (+ poz 2)))
(setq Zstr   (substr runline 1))
(setq firstr (vl-string-trim " " firstr))
(setq ZstrN  (vl-string-trim " " Zstr))
(setq Xnum (atof Xstr))
(setq Ynum (atof Ystr))
(setq Znum (atof Zstr))
;(setq koord (list Xnum Ynum Znum))
(setq koord (list Ynum Xnum Znum))
(setvar "attreq" 0)
(command "_.ins ert" "BLK001" koord scl scl 0)
(setq blcN  (entlast))
(setq nmAt   (entnext blcN))
(setq nmAt2  (entnext nmAt))
(setq myAtsp  (entget nmAt ))
(setq myAtsp2 (entget nmAt2))
(setq myAtrr  (cons 1 firstr)) 
(setq myAtrr2 (cons 1 ZstrN)) 
(setq myAttsp  (subst myAtrr  '(1 . "") myAtsp ))
(setq myAttsp2 (subst myAtrr2 '(1 . "") myAtsp2))
(entmod myAttsp)
(entmod myAttsp2)
(entupd  (cdr (assoc -1 myAttsp)))
(entupd  (cdr (assoc -1 myAttsp2)))
(se tq runline (read-line nmfile))
)
(se tvar "Osmode" snp) 
(command "_zoom" "_e")

Пробел в "_.insert" удалить не удаётся

(изменено: Владимир Азарко, 4 января 2010г. 19:00:21)

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Еще одна ссылка на свежую программу
Point Manager

This is really just an expansion of my previous program (Block Insertor), but I hope to expand it to the point at which "Block Insertor" doesn't quite fit...

Currently, the user can:
[FONT=Arial]Insert a Block at all Points from a File (txt/csv)
Insert a Point at all Points from a File (txt/csv)
Create a LW/3D Polyline from all Points in a File (txt/csv)
Insert a Block at all/selected Points in a drawing
Export all/selected Points in a drawing to a File (txt/csv)
Create a LW/3D Polyline from all/Selected Points in a drawing
Insert a Block at all vertices of a LW/3D Polyline
Export all Vertices of a LW/3D Polyline to a File (txt/csv)
Create a LW/3D Polyline from all/selected LW/3D Polylines
Export all insertions of a Block to a File (txt/csv).
Insert a Point at all instances of a Block
Create a LW/3D Polyline at all insertions of a Block[/FONT]

LISP. По координатам из txt-файла ставит и подписывает точки

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Владимир, по моему это само то что надо LISP. По координатам из txt-файла ставит и подписывает точки
сам давно помышлял о подобной программе, но будучи не важным программистом, все ни как не приступал к изобретению велосипеда с квадратными колёсами. Она самая универсальная из всех ранее предложенных, и вто же время ни чего лишнего...
Но есть одно но, не могу я её скачать\загрузить. Зарегистрировался, вчера весь день прождал письма с подтверждением регистрации - так и не пришло, сегодня связался с администрацией ресурса - пока ответа тоже нет. А терпение уже нет...
Пожалуйста выложите куда-нибудь в обще доступное место

(изменено: Владимир Азарко, 5 января 2010г. 17:58:11)

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Ссылка на Point Manager v1.9 из #20

(изменено: Al_geor, 12 января 2010г. 07:01:12)

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Согласен с Disney об универсальности программы Point Manager. Было бы снято много вопросов на форуме(о разделителях, о Х У или У Х и т.д.). Просмотрел переписку с Lee Mac, где также согласен c дополнительным форматом точки(№, код). У меня есть предложение (естественно с согласия автора программы) разместить код программы на форуме и доработать его с замечаниями и предложениями, которые поступят.
(Оно небольшое замечание- при записи в файл происходит округление Х и У, а с Z все нормально).

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Я тоже слежу за Point Manager. Пока идет активное тестирование и исправление багов. Как только немного устаканится, то, думаю, можно будет внести необходимые изменения. По поводу публикации кода это форум не подойдет, так как длинный код в неподходящих местах разрывается пробелами, а прикрепить файл нельзя. Скорее всего доработка продолжится на dwg.ru.

(изменено: Disney, 12 января 2010г. 10:58:40)

Re: LISP. По координатам из txt-файла ставит и подписывает точки

Al_geor пишет:

У меня есть предложение (естественно с согласия автора программы) разместить код программы на форуме и доработать его с замечаниями и предложениями, которые поступят.

Владимир Азарко пишет:

Скорее всего доработка продолжится на dwg.ru.

Кем будет продолжена доработка?
После общения с Lee там, и Владимиром Азарко (VVA) тут вернулся опять к идеи написания самому своей программы, чисто для геодезии, где будет и и COD, где X и Y без вариантов - будут геодезическими. Расширю список примитивов для экспорта координат. Разделю Экспорт и Импорт, т.е. экспорт хоть чего, но только в файл, а импорт только из файла, но хоть куда.