| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Импорт текста по координатам из файла

Импорт текста по координатам из файла

Ответ
Поиск в этой теме
Непрочитано 08.12.2013, 13:35 #1
Импорт текста по координатам из файла
uamihanik
 
Регистрация: 26.02.2010
Сообщений: 9

Понадобилась программа для вывода в чертёж текста по заданным координатам. Нашел вот такую:
(defun str-str-lst (str pat / i)
;;; (str-str-lst "Столб 401.535 181.548 9.00" " ")
;;; ("Столб" "401.535" "181.548" "9.00")
(cond ((= str "") nil)
((setq i (vl-string-search pat str))
(cons
(substr str 1 i)
(str-str-lst
(vl-string-left-trim pat (substr str (1+ i)))
pat
) ;_ end of str-str-lst
) ;_ cons
)
(t (list str))
) ;_ cond
) ;_ defun

(defun txt2ac (path / coors fn fname ln)
(if (setq fname
(getfiled "Выбрать файл для чтения координат" path "txt" 16)
) ;_ end of setq
(progn
(setq fn (open (findfile fname) "r"))
(while (setq ln (read-line fn))
(setq coors (cons (str-str-lst ln " ") coors))
;;; (setq coors (cons (read (strcat "(" ln ")")) coors))
) ;_ end of while
(close fn)
) ;_ end of progn
) ;_ end of if
(reverse coors)
) ;_ end of defun

(defun C:tac (/ path points r h st sysvar lst)
;;;Создаем слои
(mapcar '(lambda (x y)
(if (not (tblsearch "layer" x))
(entmakex (list '(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
(cons 2 x)
'(70 . 0)
(cons 62 y)
'(6 . "Continuous")
) ;_ end of list
) ;_ end of entmakex
) ;_ end of if
) ;_ end of lambda
'("Точка" "Круг" "NITKA1" "Нумерация" "Bereg") ;имена слоев
'(2 3 1 7 7) ;цвета слоев
) ;_ end of mapcar
;;;задаешь путь поиска текстового файла :
(setq path (getvar "dwgprefix")) ;путь измени на свой
;;; получили точки из текстового файла
(setq points (txt2ac path))
;;; можно их отрисовать :
(setq r (getreal "\nРадиус: "))
(setq h (getreal "\nВысота текста: "))
(setq st (getvar "TEXTSTYLE"))
;;;1. Точки + Круги + Текст
(mapcar '(lambda (x / pt)
(setq pt (mapcar 'read (cdr x)))
(setq lst (cons pt lst))
(entmakex
(list '(0 . "POINT")
(cons 8 "Точка")
(cons 10 pt)
) ;_ end of list
) ;_ end of entmakex
(entmakex
(list '(0 . "CIRCLE")
(cons 8 "Круг")
(cons 10 pt)
(cons 40 r)
) ;_ end of list
) ;_ end of entmakex
(entmakex
(list '(0 . "TEXT")
(cons 8 "Нумерация")
(cons 7 st)
(cons 10 (mapcar '+ pt '(0.0 5.0 0.0)))
;! 5 - отступ вверх на 5мм от точки
(cons 40 h)
(cons 1 (car x))
) ;_ end of list
) ;_ end of entmakex
(entmakex
(list '(0 . "TEXT")
(cons 8 "Отметка")
(cons 7 st)
(cons 10 (mapcar '+ pt '(5.0 0.0 0.0)))
;! 5 - отступ вправо на 5мм от точки
(cons 40 h)
(cons 1 (last x))
) ;_ end of list
) ;_ end of entmakex
) ;_ end of lambda
points
) ;_ end of mapcar
;;;2. Полилинию
(setq sysvar (mapcar 'getvar '("osmode" "cmdecho" "clayer")))
(mapcar 'setvar '("osmode" "cmdecho" "clayer") '(0 0 "Полилиния"))
(command "_3dpoly")

В принципе она меня устраивает, но в ней есть то, что мне не нужно и приходится удалять лишнее вручную. Может Вы смогли бы подправить эту программу (сам, к сожалению, не владею языком) или у Вас есть готовое решение моих просьб: оставить запрос высоты текста, экспорт в чертеж только текста(z) из файла (формат файла: x y z (разделители - пробел)) без кругов, точек и номера. Убрать: запрос радиуса круга, смещение текста,все слои, кроме Отметка.
Спасибо.
С уважением, uamihanik.
Просмотров: 6032
 
Непрочитано 08.12.2013, 17:07
1 | #2
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Код:
[Выделить все]
 (defun str-str-lst (str pat / i) 
;;; (str-str-lst "Столб 401.535 181.548 9.00" " ") 
;;; ("Столб" "401.535" "181.548" "9.00") 
  (cond ((= str "") nil) 
    ( (setq i (vl-string-search pat str)) 
      (cons 
        (substr str 1 i) 
        (str-str-lst 
          (vl-string-left-trim pat (substr str (1+ i))) 
          pat 
        )
      )
    ) 
    (t (list str)) 
  )
)


(defun txt2ac (path / coors fn fname ln) 
  (if
    (setq
      fname 
      (getfiled "Выбрать файл для чтения координат" path "txt" 16) 
    )
    (progn 
      (setq fn (open (findfile fname) "r")) 
      (while (setq ln (read-line fn)) 
        (setq coors (cons (str-str-lst ln " ") coors)) 
     ;; (setq coors (cons (read (strcat "(" ln ")")) coors)) 
      )
      (close fn) 
    )
  )
  (reverse coors) 
)


(defun C:TAC (/ path points r h st sysvar lst) 

;;;Создаем слои 

  (mapcar
   '(lambda (x y) 
      (if (not (tblsearch "layer" x))
        (entmakex
          (list
           '(0   . "LAYER") 
           '(100 . "AcDbSymbolTableRecord") 
           '(100 . "AcDbLayerTableRecord") 
            (cons 2 x) 
           '(70  . 0) 
            (cons 62 y) 
           '(6   . "Continuous") 
          )
        )
      )
    )
   '("Отметка") ; "Точка" "Круг" "NITKA1" "Нумерация" "Bereg") ;имена слоев 
   '(2 ) ; 3 1 7 7) ;цвета слоев 
  )

;;;задаешь путь поиска текстового файла : 
  (setq path (getvar "dwgprefix")) ;путь измени на свой

;;; получили точки из текстового файла 
  (setq points (txt2ac path))

;;; можно их отрисовать : 
;;;  (setq r  (getreal "\nРадиус: ")) 
  (setq h  (getreal "\nВысота текста: ")) 
  (setq st (getvar "TEXTSTYLE"))

;;; 1. Точки + Круги + Текст 
  (mapcar
   '(lambda (x / pt) 
      (setq pt (mapcar 'read x)) 
   ;; (setq pt (mapcar 'read (cdr x))) 
      (setq lst (cons pt lst)) 
;;;      (entmakex 
;;;        (list
;;;         '(0 . "POINT") 
;;;          (cons 8 "Точка") 
;;;          (cons 10 pt) 
;;;        )
;;;      )
;;;      (entmakex 
;;;        (list
;;;         '(0 . "CIRCLE") 
;;;          (cons 8 "Круг") 
;;;          (cons 10 pt) 
;;;          (cons 40 r) 
;;;        ) 
;;;      )
;;;      (entmakex 
;;;        (list
;;;         '(0 . "TEXT") 
;;;          (cons 8 "Нумерация") 
;;;          (cons 7 st) 
;;;          (cons 10 (mapcar '+ pt '(0.0 5.0 0.0))) ; отступ вверх на 5мм от точки
;;;          (cons 40 h) 
;;;          (cons 1 (car x)) 
;;;        )
;;;      )
      (entmakex 
        (list
         '(0 . "TEXT") 
          (cons 8 "Отметка") 
          (cons 7 st) 
          (cons 10 pt) ; (mapcar '+ pt '(5.0 0.0 0.0))) 
          (cons 40 h) 
          (cons 1 (last x)) 
        )
      )
    )
    points 
  ) 

;;; 2. Полилинию 
  (setq sysvar (mapcar 'getvar '("osmode" "cmdecho" "clayer"))) 
  (mapcar 'setvar '("osmode" "cmdecho" "clayer") '(0 0 "Полилиния")) 
  (command "_.3dpoly")
  ;; ГДЕ???
)

Последний раз редактировалось gomer, 08.12.2013 в 20:56.
gomer вне форума  
 
Автор темы   Непрочитано 08.12.2013, 19:44 Импорт текста по координатам из файла
#3
uamihanik


 
Регистрация: 26.02.2010
Сообщений: 9


В вашем коде учитывается строка "Нумерация" из файла (может я не правильно выражаюсь, но программа работает с файлами с содержанием типа n x y z), а хотелось бы, что-бы программа работала с файлом типа: x y z
Поправьте, пожалуйста

Последний раз редактировалось uamihanik, 08.12.2013 в 19:54.
uamihanik вне форума  
 
Непрочитано 08.12.2013, 20:57
1 | #4
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


так что ли?
gomer вне форума  
 
Автор темы   Непрочитано 08.12.2013, 23:28
#5
uamihanik


 
Регистрация: 26.02.2010
Сообщений: 9


Спасибо, теперь всё замечательно, тему можно закрывать
uamihanik вне форума  
 
Непрочитано 09.12.2013, 01:30
1 | #6
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от uamihanik Посмотреть сообщение
Спасибо, теперь всё замечательно, тему можно закрывать
эээ, ну, кагбэ я намекнул, что это кусок программы, вырванный зверски из чего-то большего...
gomer вне форума  
 
Непрочитано 09.12.2013, 16:44
1 | #7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Так, к сведению. Есть еще такая штука
Импорт координат из текстовых файлов форматов txt, sdr, csv и других в AutoCAD
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 09.12.2013, 17:07
#8
uamihanik


 
Регистрация: 26.02.2010
Сообщений: 9


Цитата:
Сообщение от VVA Посмотреть сообщение
Так, к сведению. Есть еще такая штука
Импорт координат из текстовых файлов форматов txt, sdr, csv и других в AutoCAD
Спасибо за подсказку, попробовал, как-то много ненужных мне опций (хотя кому-то это действительно подходящая программа), вот вариант выше более лаконичен, а иногда приходится закидывать кучу текста и тут уже скорость на первом месте. Еще раз всем спасибо.
uamihanik вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Импорт текста по координатам из файла

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли каким-то образом выцепить имена слоёв файла в виде обычного текста? deema AutoCAD 3 18.09.2013 12:20
Программное создание размерных стилей Кулик Алексей aka kpblc Программирование 89 08.04.2013 12:59
MS Word Нужен скрипт для копирования с одновременной заменой части текста Солидворкер Прочее. Программное обеспечение 27 27.11.2012 15:52
LISP. Выравнивание текста по двум точкам. Krieger Готовые программы 10 24.12.2011 16:02
Импорт точек из файла .job & .are G-RAV Программирование 34 20.08.2009 08:20