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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > почему не работает entmake

почему не работает entmake

Ответ
Поиск в этой теме
Непрочитано 13.08.2012, 09:03 #1
почему не работает entmake
loginovskiy
 
Регистрация: 31.10.2011
Сообщений: 31

Коллеги, помогите пж-лста. Почему то не могу создать примитив "text" через entmake.
(setq pt (list 100.0 100.0 0.0)
(entmake
(list '(0 . "TEXT")
'(8 . "0")
'(40 . 2.5)
'(50 . 0.0)
'(100 . "AcDbText")
'(1 . "Какой то текст")
'(7 . "Standard")
(cons 10 pt)
)

)
Что не так?
Цель такова. Есть текстовый файл вида <X Y Z> (координаты точек)
Нужно создать блоки и рядом с каждым написать текст (Z - отметку).
Т.к. количество строк в файле исчисляется десятками тысячь (80 тыс и более), то приходиться оптимизировать, в частоности
отказаться от command.
Кстати еще вопрос, как быстрее - считать весь файл в список и работать с ним или отрабатывать построчно?
Или это не имеет значения - операции то все равно одни и те же.
М.б. еще есть какие то способы работы с большими объемами.?
И еще, я создаю блоки сопированием (Command "Copy" ...) в надежде, что описан блок в файле будет один раз. А как правильно?

Заранее признателен.

Последний раз редактировалось loginovskiy, 13.08.2012 в 09:24.
Просмотров: 4199
 
Непрочитано 13.08.2012, 09:05
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


Посмотри http://autolisp.ru/2010/04/06/text-and-attrib-entities/
А вообще-то ИМХО лучше делать блок с атрибутом, наверное.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.08.2012, 09:06
#3
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от loginovskiy Посмотреть сообщение
(list '(0 . "_TEXT")
Подчеркивание лишнее.
Александр Ривилис вне форума  
 
Непрочитано 13.08.2012, 09:07
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


И, по-моему, DXF 100 не хватает (сто лет уже не использовал для текстов entmakex).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.08.2012, 09:33
#5
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Кстати еще вопрос, как быстрее - считать весь файл в список и работать с ним или отрабатывать построчно?
Лучше считать файл, закрыть его и работать со списком.

Лучше делать блок с атрибутом, а не текст.

Для скорости (и для удобства) лучше использовать VLA. На больших объемах это даст существенный рост скорости.

Можно попробовать сравнение скоростей по образцу %ACAD%\Sample\VisualLISP\activex\vla-tst.lsp, %ACAD%\Sample\VisualLISP\activex\al-tst.lsp
ShaggyDoc вне форума  
 
Непрочитано 13.08.2012, 09:35
#6
pan

добрый человек
 
Регистрация: 23.02.2004
Глушь
Сообщений: 971


Цитата:
Сообщение от loginovskiy Посмотреть сообщение
М.б. еще есть какие то способы работы с большими объемами.?
Попробуй Civi 3D
__________________
Правильно сформулированный вопрос содержит 90% ответа.
pan вне форума  
 
Непрочитано 13.08.2012, 10:55
#7
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


У меня 180000 блоков. Сивил-32бит уже не спрвляется. А если это точки то ничего, работать можно. Проги на лиспе такое кол-во переваривают медленно, минуты. десятки минут. Проги на .NET -секунды.
__________________
... а Автокад то - голый
Victor вне форума  
 
Непрочитано 13.08.2012, 11:18
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


ИМХО проблема не в языке, а в алгоритме.
P.S. Файл с координатами покажи. Если не военная тайна, конечно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.08.2012, 11:40
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
У меня 180000 блоков
Определений блоков или вставок блоков? Если столько видов блоков, то алгоритм однозначно неправильный.
ShaggyDoc вне форума  
 
Непрочитано 13.08.2012, 11:46
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


Цитата:
Сообщение от loginovskiy Посмотреть сообщение
я создаю блоки сопированием (Command "Copy" ...) в надежде, что описан блок в файле будет один раз. А как правильно?
Правильнее - сразу создавать нормальное вхождение и не использовать командные методы без крайней на то нужды.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.08.2012, 16:03 Спасибо за участие
#11
loginovskiy


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


(WHILE STR ;;считаем все строки и заполним списки
(setq str (read-line fil_1))
(RAZBOR_STR str)
(setq XYZ_i (list (atof (caddr sp_par)) (atof (cadr sp_par)) (atof (car sp_par)))
XY_i (list (car XYZ_i) (cadr XYZ_i) 0.0)
)
(command "_copy" name_ins "" baz_XY XYZ_i "")
(setq poz_txt (polar XY_i 0.785398 1.0))
(setq text (vl-string-right-trim "0" (car sp_par)));;строку отметк урезать справа до 2-х знаков

(entmake (list '(0 . "TEXT")
'(8 . "0")
'(40 . 2.5)
'(50 . 0.0)
'(100 . "AcDbText")
(cons 1 text)
'(1 . "Привет")
'(7 . "Standard")
(cons 10 poz_txt)
))

;;(command "_text" poz_txt 4.0 0.0 (vl-string-right-trim "0" (car sp_par)) 2 2)
(setq i (1+ i))
);_WHILE

Это фрагмент проги (прошу не сильно критиковать за стиль - он старый как я сам)
А текстовый файл простой
12546.120 14745.450 1012.450
14578.140 15678.250 1030.580
и т .д.

В файле есть экземпляр блока - его подгружаю заранее, а потом просто Copy.
Но "спинным мозгм" (с головным то плохо) чую, что не так надо.
loginovskiy вне форума  
 
Непрочитано 13.08.2012, 16:54
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


По-быстрому:
Код:
[Выделить все]
(vl-load-com)

(defun test (file / _kpblc-conv-string-to-list handle str lst adoc)
  ;; file  - имя файла для обработки

  (defun _kpblc-conv-string-to-list (string separator / i)
                                    ;|
*    Функция разбора строки. Возвращает список либо точечную пару.
*    Параметры вызова:
*	string		разбираемая строка
*	separator	символ, используемый в качестве разделителя частей
*    Примеры вызова:
(_kpblc-conv-string-to-list "1;2;3;4;5;6" ";")	;'(1 2 3 4 5 6)
(_kpblc-conv-string-to-list "1;2" ";")		;'(1 2)
*    За основу взяты уроки Евгения Елпанова по рекурсиям
|;
    (cond
      ((= string "") nil)
      ((vl-string-search separator string)
       ((lambda (/ pos res)
          (while (setq pos (vl-string-search separator string))
            (setq res    (cons (substr string 1 pos) res)
                  string (substr string (+ (strlen separator) 1 pos))
                  ) ;_ end of setq
            ) ;_ end of while
          (reverse (cons string res))
          ) ;_ end of lambda
        )
       )
      (t (list string))
      ) ;_ end of cond
    ) ;_ end of defun

  (if (findfile file)
    (progn
      (setq handle (open file "r"))
      (while (setq str (read-line file)) (setq lst (cons str lst)))
      (close handle)
      (setq lst (mapcar
                  (function (lambda (x)
                              (mapcar (function atof) (_kpblc-conv-string-to-list x " "))
                              ) ;_ end of lambda
                            ) ;_ end of function
                  lst
                  ) ;_ end of mapcar
            ) ;_ end of setq
      (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
      (foreach item lst
        (vla-insertblock (vla-get-modelspace adoc) (vlax-3d-point item) name_ins 1. 1. 1. 0.)
        (vla-addtext (vla-get-modelspace adoc) (rtos (last item) 2 4) (vlax-3d-point item) 2.5)
        ) ;_ end of foreach
      (vla-endundomark adoc)
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.08.2012, 00:58
#13
Sta1917

геодезист
 
Регистрация: 21.03.2009
Санкт-Петербург
Сообщений: 67


Попробуй Импорт координат из текстового файла txt (sdr csv) в AutoCAD
Sta1917 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > почему не работает entmake

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто работает в программе Гектор-строитель? Лена911 Прочее. Программное обеспечение 5 16.02.2012 09:48
почему то не работает Лисп Август LISP 15 13.04.2011 09:42
Юмор 2007 Огурец Разное 1172 29.12.2007 11:16
странно работает Change Makswell Программирование 8 21.08.2007 16:47