Тема: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Помогите с программой, может уже есть готовая, надо преобразовать координаты Х, У, Z. записанные в блокноте в формате .txt, или .doc, в Word в виде колонок в точки с соответствующими координатами в Аutocad в формате .dwg или .dxf

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

https://www.caduser.ru/forum/topic21343.html

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

> Олег
Хотелось бы посмотреть на формат записи координат. Например:

152.25,45.89,10.5
или
152.25 45.89 10.5
или
152,25 45,89 10,5
или
x=152.25
y=45.89
z=10.5
...

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Ага спасибоу за сочувствие che, вторая строка
152.25 45.89 10.5; Вам Евгений Елпанов так-же огромное благодарю, завтра проверю на работе Вашу версию.

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Евгений, я проверил программу по ссылке, она почему-то не работает, может я чего-то неправильно делаю, извините

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

> Олег
Уточни формат записи у тебя точка с запятой после каждой строки или как, напиши несколько строк, чтоб было ясно
~'J'~

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

уточняю формат записи
125.111  45.123  25.125
125.111  45.123  25.125
125.111  45.123  25.125
125.111  45.123  25.125
так это выглядит, Х У Z через пробел, три столбца данных

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

> Олег
Пробуй

(defun txt2ac (path / coors fn fname ln)
(if (setq fname
    (getfiled "Выбрать файл для чтения координат"
          path
          "txt"
          8))
(progn
(setq fn (open (findfile fname) "r"))
(while (setq ln (read-line fn))
(setq coors (cons (read (strcat "(" ln ")")) coors)))
(close fn)))
  coors)
(defun C:tac (/ path points)
(setvar "cmdecho"  0)
(setvar "osmode"  0)
;;задаешь путь поиска текстового файла :
(setq path "C:\\Blalbla\\blabla\\");измени на свой
;; получили точки из текстового файла :
(setq points (txt2ac path))
;; можно их отрисовать :
(foreach pt points
(entmake
(list
(cons 0 "POINT")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPoint")
(cons 10 pt)
(cons 8  "0")
(cons 62  2))));цвет - желтый
;; или начертить 3d-полилинию и т.д.:
(setvar "osmode" 0)
(command "3dpoly")
(mapcar 'command points)
(command "")
  (setvar "cmdecho"  1)
(setvar "osmode"  703)
(princ)
)
(prompt "\nВ командной строке набери TAC по-аглицки\n")

~'J'~

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Олег(jr.) Спасибо, попробую. Я геодезист, уже лет 5-6 пользуюсь Autocad начинал с 14-го, осваивал его сам программировать не приходилось, собственно только недавно узнал, что это возможно (к своему стыду, ну не надо было) спасибо еще раз, о результате сообщу.

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Олег(jr.) Круто, огромное спасибо, работает. Как говорится с меня причитается.

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Олег пишет:

Олег(jr.) Спасибо, попробую. Я геодезист, уже лет 5-6 пользуюсь Autocad начинал с 14-го, осваивал его сам программировать не приходилось, собственно только недавно узнал, что это возможно (к своему стыду, ну не надо было) спасибо еще раз, о результате сообщу.

К своему стыду я тоже не знаю ни геодезии ни лиспа, так что не расстраивайся. Кстати, по-моему, геодезисты больше как-то используют Эксель для записи данных, или я ошибаюсь?
~'J'~

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

] Олег(jr.) Все равно спасибо, хоть ты и не геодезист(сочувствую) все лечится.

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

> Олег
Еще вариант:
Давно где-то выкопал, частично перевел, кое-что исправил и добавил. Постоянно использую.
Довести до более универсального уровня времени нет...
(DEFUN C:XYZPOINT ( / fn ins f bm hi os format input read-point line plist ss)
; Is a utility for use with AutoCAD Release 10 or 11,
; which reads coordinate data from ASCII files in CDF or SDF format,
; and generates AutoCAD geometry using the incoming coordinate data.
; The XYZPOINT command will read coordinate data from an ASCII file,
; and generate either a continuous string of LINES, a POLYLINE, a
; 3DPOLYline, multiple copies of a selected group of objects, or
; AutoCAD POINT entities.
;
;  Format:
;    Command: XYZPOINT
;    File to read: MYFILE.TXT                           <- ASCII input file
;    Comma/Space delimited <Comma>: Comma               <- data format
;    Generate Copies/Lines/Nodes/3Dpoly/<Pline>: Nodes  <- entity to create
;    Reading coordinate data...
;
; If you selected "Copies", then XYZPOINT will prompt you to select the
; objects that are to be copied.  The basepoint for all copies is the
; current UCS origin (0,0,0).  One copy of the selected objects will be
; created for each incoming coordinate, and placed at each coordinate.
;
; A comma-delimited (CDF) ascii file contains one coordinate per line,
; with each component seperated by a comma, like this:
;
;    -4.33,0.0,6.3
;    0.322,5.32,0.0
;    etc....
;
; There should be no spaces or blank lines in a CDF coordinate data file.
;
; A space-delimited (SDF) ascii file contains one coordinate per line,
; with each component seperated by one or more spaces, like this:
;
;   -4.33   0.0    6.3
;    0.322  5.32   0.0
;    ...
;
; Coordinate data can be 2D or 3D.
;
; Note that all numeric values must have at least one digit to the left
; and the right of the decimal point (values less than one must have a
; leading 0), and a leading minus sign indicates negative values.  This
; applys to both CDF and SDF formats.
; XYZPOINT can generate a continuous chain of LINE entities from your
; coordinate data, where each pair of adjacent lines share a coordinate
; from the file.
; XYZPOINT can also generate a polyline or 3DPOLYline from the coordinate
; data, where each point in the file becomes a vertice of the polyline.
; If the input file contains 3D coordinates, and you specify a polyline,
; then the Z component is ignored and the default of 0.0 is used.
; XYZPOINT will also COPY a selected group of objects, creating one copy
; for each incoming coordinate, and using the coordinate as the absolute
; copy displacement from the CURRENT UCS origin (0,0,0).
;
; Finally, XYZPOINT will generate AutoCAD POINT entities from the data in
; the file.  Specify the point size and type prior to invoking XYZPOINT.

  (DEFUN CDF (l) (COMMAND "_.SETVAR" "LASTPOINT" l) (GETVAR "LASTPOINT"))
  (DEFUN SDF (l) (READ (STRCAT "(" l ")")))
  (DEFUN NOZ (p) (LIST (CAR p) (CADR p)))
  (DEFUN STRTRIM (s)
    (WHILE (EQ " " (SUBSTR s 1 1)) (SETQ s (SUBSTR s 2)))
    (WHILE (EQ " " (SUBSTR s (STRLEN s))) (SETQ s (SUBSTR s 1 (1- (STRLEN s)))))
    (COND ((EQ s "") NIL) (T s) )
  )
;  (SETQ fn "~")           ; Имя файла по умолчанию
  (SETQ fn (GETFILED "Список файлов для чтения" "" "*" 2))
  (IF (AND fn (SETQ f (OPEN fn "r")))  ;Есть имя файла и он открыт
    (PROGN
      (INITGET "Пробел Запятая")
      (SETQ format
        (COND
          ((GETKWORD "\nРазделитель - Пробел/Запятая <Пробел>: "))
          (T "Пробел")
        )
      )
      (INITGET "Копии Линии Точки 3Мполилиния Полилинию")
      (SETQ input
        (CDR (ASSOC
          (COND
            ((GETKWORD "\nСоздавать - Копии/Линии/Точки/3Мполилиния/<Полилинию>: "))
            (T "Полилинию")
          )
          '(("Линии" . "_.LINE") ("Копии" . "_.COPY")("Точки" . "_.POINT")
            ("Полилинию" . "_.PLINE")("3Мполилиния" . "_.3DPOLY"))
          )
        )
      )
      (SETQ read-point (COND ((EQ format "Запятая") CDF) (T SDF)))
      (SETVAR "CMDECHO" 0)
      (SETQ bm (GETVAR "BLIPMODE"))
      (SETQ hi (GETVAR "HIGHLIGHT"))
      (SETQ os (GETVAR "OSMODE"))
      (SETVAR "BLIPMODE" 0)
      (SETVAR "OSMODE" 0)
      (PRINC "\nЧтение координат...")
      (WHILE (SETQ line (READ-LINE f))
        (COND
          ((SETQ line (STRTRIM line))
           (SETQ line (READ-POINT line))
           (SETQ plist
             (APPEND plist
               (COND
                 ((EQ input "_.PLINE") (LIST (NOZ line)))
                 (T (LIST line))
               )
             )
           )
          )
        )
      )
      (CLOSE f)
      (PRINC "\nЧтение координат закончено!")
      (COND
        ((EQ input "_.POINT")
         (SETVAR "HIGHLIGHT" 0)
         (COMMAND "_.POINT" "0,0,0" "_.COPY" (SETQ ss (ENTLAST)) "" "_M" "0,0,0")
         (APPLY 'COMMAND plist) (COMMAND)
         (ENTDEL ss)
        )
        ((EQ input "_.COPY")
         (PRINC "\nВыберите объекты для копирования:")
         (WHILE (NOT (SETQ ss (SSGET)))
           (PRINC "\nОбъекты не выбраны!")
           (PRINC " Выберите объекты для копирования:")
         )
         (SETQ ins (GETPOINT "Укажите точку вставки копируемых объектов:"))
         (SETVAR "HIGHLIGHT" 0)
         (COMMAND "_.COPY" ss "" "_M" ins)
         (APPLY 'COMMAND plist)
         (COMMAND)
        )
        (T (COMMAND input) (APPLY 'COMMAND plist) (COMMAND))
      )
      (PRINC "\nНанесение точек закончено!!!")
      (SETVAR "HIGHLIGHT" hi)
      (SETVAR "BLIPMODE" bm)
      (SETVAR "OSMODE" os)
    );end PROGN
    (PRINC "\nНе могу открыть файл для чтения координат.")
  );end IF
  (PRIN1)
)

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Вариант программы для отрисовки точек, линий, полилиний, окружностей, блоков (в том числе с атрибутами) по данным из текстового файла с разделителями. Программа OCREATE.
http://geol-dh.ru/kai_stru.html

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Хочу немного изменить программу Олега(jr.) /в первую очередь из-за ее простоты и, следовательно, быстродействия/. Она должна рисовать линии по коордианатам из файла, для определенности и простоты пускай формат записи останется прежним:

125.111 45.123 25.125
125.111 45.123 25.125
125.111 45.123 25.125
125.111 45.123 25.125
т.е. Х У Z через пробел - три столбца данных

   Подозреваю, что следует поменять этот кусок кода:

;; можно их отрисовать :
(foreach pt points
(entmake
(list
(cons 0 "POINT")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPoint")
(cons 10 pt)
(cons 8  "0")
(cons 62  2))));цвет — желтый
;; или начертить 3d-полилинию и т.д.:

а точнее параметр "POINT" и константы его определяющие.
   Пробовал изменять - менял параметры на те, которые должны быть у линии (10 20 30 9) но по причине неграмотности успеха не имел.
   Направьте меня на путь истинный.

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

> Дмитрий
Наверно этот кусок нужно заменить на
следующий

(mapcar (function (lambda (x y)
(entmake
(list
(cons 0 "LINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbLine")
(cons 10 x)
(cons 11 y)
(cons 8  "0")
(cons 62  2))));цвет — желтый
points
(cdr points)
)

~'J'~

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

К сожалению замена не подходит. Или я неправильно изменил. Вот код с учетом Вашей доработки:

(defun txt2ac (path / coors fn fname ln)
(if (setq fname
  (getfiled "Выбрать файл для чтения координат"
      path
      "txt"
      8))
(progn
(setq fn (open (findfile fname) "r"))
(while (setq ln (read-line fn))
(setq coors (cons (read (strcat "(" ln ")")) coors)))
(close fn)))
  coors)
(defun C:tac (/ path points)
(setvar "cmdecho"  0)
(setvar "osmode"  0)
;;задаешь путь поиска текстового файла :
(setq path "C:\\Blalbla\\blabla\\");измени на свой
;; получили точки из текстового файла :
(setq points (txt2ac path))
;; можно их отрисовать :
(mapcar (function (lambda (x y)
(entmake
(list
(cons 0 "LINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbLine")
(cons 10 x)
(cons 11 y)
(cons 8  "0")
(cons 62  2))));цвет — желтый
points
(cdr points)
)
;; или начертить 3d-полилинию и т.д.:
(setvar "osmode" 0)
(command "3dpoly")
(mapcar 'command points)
(command "")
  (setvar "cmdecho"  1)
(setvar "osmode"  703)
(princ)
)
(prompt "\nВ командной строке набери TAC по-аглицки\n")
~'J'~

В таком варианте отказывается запускаться. Аргументирует неизвесностью комманды :(

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

> Дмитрий
Была пропущена одна скобка
Так работает

(defun txt2ac (path / coors fn fname ln)
(if (setq fname
  (getfiled "Выбрать файл для чтения координат"
      path
      "txt"
      8))
(progn
(setq fn (open (findfile fname) "r"))
(while (setq ln (read-line fn))
(setq coors (cons (read (strcat "(" ln ")")) coors)))
(close fn)))
  coors)
(defun C:tac (/ path points)
(setvar "cmdecho"  0)
(setvar "osmode"  0)
;;задаешь путь поиска текстового файла :
(setq path (getvar "dwgprefix"));измени на свой
;; получили точки из текстового файла :
(setq points (txt2ac path))
;; можно их отрисовать :
(mapcar (function (lambda (x y)
(entmake
(list
(cons 0 "LINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbLine")
(cons 10 x)
(cons 11 y)
(cons 8  "0")
(cons 62  2)))));цвет — желтый
points
(cdr points)
)
;; или начертить 3d-полилинию и т.д.:
(setvar "osmode" 0)
(setvar "cecolor" "121")
(command "3dpoly")
(mapcar 'command points)
(command "")
(setvar "cmdecho"  1)
(setvar "osmode"  703)
(princ)
)
(prompt "\nВ командной строке набери TAC по-аглицки\n")
(princ)

~'J'~

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

to Fatty
   СПАСИБО прямо таки огромное :) В таком варианте заработало: 2 516 кБ (108 тысяч строк данных :) перерисовало секунд за 30!
   Отдельное спасибо разработчику кода - Олег'у(jr.)

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

> Дмитрий
Олег(jr.) - это моя старая кликуха
Успехов
~'J'~

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Вот и хорошо! Два раза спасибо сказал :) Респект и уважуха.
ЗЫ: Еще раз СПАСИБО за отзывчивость.

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Вот и хорошо! Еще раз СПАСИБО!  :)

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Эти лиспы, конечно, все хорошие. Но, зачем так усложнять все? Если необходимо просто закинуть точки в автокад, то, можно просто преобразовать их в вид:
123.456,789.123,111.234
и и скопировав массив в буфер, дать в автокаде команду то ли _point, то ли _polyline и вставить в командную строку, получим что надо, точки или линию по точкам.
Для геодезистов встает вопрос, как потом по этим точкам что то нарисовать?
Я решил этот вопрос так. Скидываю в ексель точки с их номерами, прописываю в екселе функцию
сцепить получаю массив с номерами и координатами, а, далее через скрипт вкидываю их в автокад. Получаю по слоям: точки, номера, отметки.
кому интересно, могу описать детально.
Да, есть еще в тулпаке возможность импорта блоков с атрибутами с екселевского файла.
Геодезисты должны пользоваться Геониксом или Цивилом, там можно настроить любой формат для импорта точек. Голый автокад для геодезии не очень подходит.

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

> Игорь Богаченко
Это известный прием для рисования полилиний
Но дело в том что эта ветка называется
"Программирование::Lisp" если ты заметил,
а способы описанные тобой скорее подходят
для ветки:
https://www.caduser.ru/forum/forum40.html
(Геодезия и картография)
IMHO
~'J'~

Re: Помогите создать программу по преобразованию из координат .txt в точки в .dwg или .dxf

Вообще то можно и через сам Кад непосредственно, в моем случае пример

_line (list 0.0 0.0 25)
_line (list -10.6988 29.997 30)
..........................

   Но опять же это намного ресурсоемче и продолжительнее чем LISP. А про скорость я уже хвалился выше (хотя зависит от железа). Да и у каждого свои задачи.
   ЗЫ: Вспоминается анекдот про учительницу и компьютеры :)