Re: LISP. Рисование точек с номерами по координатам из внешнего файла

> прохожий
pancake - блин, ^~ (^Ё) - мои собственные ругательства. Но это уже жуткий оффтопик.

Re: LISP. Рисование точек с номерами по координатам из внешнего файла

Владимир Громов пишет:

pancake - блин, ^~ (^Ё) - мои собственные ругательства. Но это уже жуткий оффтопик

ААААААААААААААААААААААААААААА!
Ну тада панятна!

Re: LISP. Рисование точек с номерами по координатам из внешнего файла

У меня после всех запросов проги, вместо построения точек пишется текст: bad argument type: streamp nil. Что это за ерунда?

Re: LISP. Рисование точек с номерами по координатам из внешнего файла

> VOVAMAT
Код? Тут вариантов кода было мама не горюй. Да еще и по личке несколько вариантов, по-моему, промелькнуло.

Re: LISP. Рисование точек с номерами по координатам из внешнего файла

> kpblc (2005-11-21 08:36:34)
Уважаемый kpblc,
может и не актуально, но желающим уточнение не помешает:
1. bad argument type: streamp nil выдается из-за ошибки в коде программы: file_name или file-name?
2. Может проясните и для меня неясное, по поводу открытия файла. Если я в

(setq file_name (getstring "\nВведите имя файла : "))

указываю только имя файла без полного пути, модуль не работает, несмотря на то, что путь в файлах поддержки прописан.
Так и должно быть? или это "глюк".
Спасибо за полезный модуль.

Re: LISP. Рисование точек с номерами по координатам из внешнего файла

> gas
По п.1 - не понял, если честно. Имена переменных сделаны "как надо". Если можно, то пришли файл, на котором сбоит (хотя бы часть).
По п.2 - ну в общем-то да, не планировалось, что файл будет в путях поддержки. Немного доработанная функция выглядит таким манером (заменить в исходном):

(defun c:mk-point (/ file_name _answer_ text_height offset)
  ;; Локальные функции
  (defun *error* (msg)
    (princ msg)
    (lib:error-restore-sysvar)
    ) ;_ end of defun
  ;; Конец локальных функций
  (setq file_name (getstring t "\nВведите имя файла : "))
  (if (and file_name
       (setq file_name (findfile file_name))
       ) ;_ end of and
    (progn
      (lib:error-save-sysvar '(("osmode" 0)))
      (initget "Да Нет Yes No _ Yes No Yes No")
      (setq _answer_
         (getkword "\nВыполнять автоматическую нумерацию [Да/Нет] <Нет>? : "
               ) ;_ end of getkword
        ) ;_ end of setq
      (setq _answer_ (= _answer_ "Yes"))
      (if
    (= (lib:ent-get-dxf-data (tblsearch "style" (getvar "textstyle")) 40)
       0.0
       ) ;_ end of =
     (progn
       (setq text_height
          (getreal "\nВведите высоту текста для нумерации <2.5> : ")
         ) ;_ end of setq
       (if (not text_height)
         (setq text_height 2.5)
         ) ;_ end of if
       (setq offset (getreal "\nВведите значение смещения текста <0.0> : "))
       (if (not offset)
         (setq offset 0.0)
         ) ;_ end of if
       ) ;_ end of progn
     (setq text_height
        (lib:ent-get-dxf-data (tblsearch "style" (getvar "textstyle")) 40)
           ) ;_ end of setq
     ) ;_ end of if
      (_kpblc-make-points file_name _answer_ text_height offset)
      ) ;_ end of progn
    ) ;_ end of if
  (lib:error-restore-sysvar)
  ) ;_ end of defun

Код не проверял, т.к. возможности сейчас никакой, увы. Если что - прошу в почту.

Re: LISP. Рисование точек с номерами по координатам из внешнего файла

У меня аналогичная задача решаеся (на VBA) следующим образом: данные с тахеометра заносятя в Excel, там (если нужно сортируются), подготавливаются и записываются в отдельные текстовые файл, а потом уже из шаблона AutoCAD-а
программа считывает эти обычные текстовые файлы и, напрммер, вставляев блоки - условные знаки в определенные слои и т.д

Re: LISP. Рисование точек с номерами по координатам из внешнего файла

У меня немного аналогичная задача, но нужно построить линию из 2-х точек и относительно её под заданным углом поставить точку на заданном расстоянии и пронумировать её. данные нужно брать из экселя.
Я просмотрел код макроса и ничего там знакомого не нашел. вопрос к спецам : можно ли такое оформить на ВБА(просто я с ним знаком)

Re: LISP. Рисование точек с номерами по координатам из внешнего файла

Кто подскажет по совмещению Autodesk Map и Autodesk Land ,после переустановки винда никак не могу их обьединить.

Re: LISP. Рисование точек с номерами по координатам из внешнего файла

Файл для вставки координат должен иметь следующий вид:
№ точки коорд.X коорд.Y высота H (разделитель пробел) программа воспринимает разделитель целой и дробной части в виде точки,запятые не воспринимаются
1 100.00 120.20 180.00
2 120.00 150.14 180.15
3 150.00 130.40 180.07
В данной прогр. реализуется проставление № точек по их координатам из txt файла опсианного выше:
(defun C:POINTIMPORT ()
  (if (not (tblsearch "BLOCK" "TOPO_POINT"))
   (progn
    (entmake
     (mapcar 'cons
      (list 0 8 2 70 10 3)
      (list "BLOCK" "0" "TOPO_POINT" 2 '(0 0 0) "TOPO_POINT")))
    (entmake
     (mapcar 'cons
      (list 0 8 62 10 210 50)
      (list "POINT" "0" 0 '(0 0 0) '(0 0 1) 0.0)))
    (entmake
     (mapcar 'cons
      (list 0 8 62 10 40 70 1 210 3 2)
      (list "ATTDEF" "0" 0 '(1 1 0) 2.5 0 "" '(0 0 1) "Номер точки" "TOPO_POINT_NUMBER")))
    (entmake
     (mapcar 'cons
      (list 0 8)
      (list "ENDBLK" "0")))))
;
  (if (not (tblsearch "STYLE" "TOPO"))
   (progn
(command "_.STYLE" "TOPO" "TXT.SHX" "0" "1.0" "0" "" "" "")
))
  (setq layername (getstring T "\nИмя слоя для точек: "))
  (if
   (progn
    (setq filename (getfiled "Файл данных" "" "txt" 0))
    (if filename
     (setq f (open filename "r"))))
   (while (setq s (read-line f))
    (setq l (read (strcat "(" s ")")))
    (mapcar 'set (list 'n 'y 'x 'z) l)
    (entmake
     (mapcar 'cons
      (list 0 8 62 66 2 10 210)
      (list "INSERT" layername 256 1 "TOPO_POINT" (list x y 0) '(0 0 1))))
    (entmake
     (mapcar 'cons
;      (list 0 8 62 10 40 1 2 70 210)
;      (list "ATTRIB" layername 256 (append (mapcar '1+ (list (- x 0.75) (- y 0.75))) (list z)) 0.8 (itoa n) "TOPO_POINT_NUMBER" 0 '(0 0 1))))
      (list 0 7 8 62 10 40 1 2 70 210)
      (list "ATTRIB" "TOPO" layername 256 (append (mapcar '1+ (list (- x 0.75) (- y 0.75))) (list (- z z))) 0.8 (itoa n) "TOPO_POINT_NUMBER" 0 '(0 0 1))))
    (entmake
     (mapcar 'cons
      (list 0 8 62)
      (list "SEQEND" layername 256))))
   (prompt "\nФайл не найден."))
  (prin1)
)
В данной прогр. реализуется проставление высот точек по их координатам из txt файла опсианного выше:
(defun C:POINTIMPORT_H ()
  (if (not (tblsearch "BLOCK" "TOPO_POINT"))
   (progn
    (entmake
     (mapcar 'cons
      (list 0 8 2 70 10 3)
      (list "BLOCK" "0" "TOPO_POINT" 2 '(0 0 0) "TOPO_POINT")))
    (entmake
     (mapcar 'cons
      (list 0 8 62 10 210 50)
      (list "POINT" "0" 0 '(0 0 0) '(0 0 1) 0.0)))
    (entmake
     (mapcar 'cons
      (list 0 8 62 10 40 70 1 210 3 2)
      (list "ATTDEF" "0" 0 '(1 1 0) 2.5 0 "" '(0 0 1) "Номер точки" "TOPO_POINT_NUMBER")))
    (entmake
     (mapcar 'cons
      (list 0 8)
      (list "ENDBLK" "0")))))
;
  (if (not (tblsearch "STYLE" "TOPO"))
   (progn
(command "_.STYLE" "TOPO" "TXT.SHX" "0" "1.0" "0" "" "" "")
))
  (setq layername (getstring T "\nИмя слоя для точек: "))
  (if
   (progn
    (setq filename (getfiled "Файл данных" "" "txt" 0))
    (if filename
     (setq f (open filename "r"))))
   (while (setq s (read-line f))
    (setq l (read (strcat "(" s ")")))
    (mapcar 'set (list 'n 'y 'x 'z) l)
    (entmake
     (mapcar 'cons
      (list 0 8 62 66 2 10 210)
      (list "INSERT" layername 256 1 "TOPO_POINT" (list x y 0) '(0 0 1))))
    (entmake
     (mapcar 'cons
;      (list 0 8 62 10 40 1 2 70 210)
;      (list "ATTRIB" layername 256 (append (mapcar '1+ (list (- x 0.5) (- y 1.9))) (list z)) 0.8 (rtos z) "TOPO_POINT_NUMBER" 0 '(0 0 1))))
      (list 0 7 8 62 10 40 1 2 70 210)
      (list "ATTRIB" "TOPO" layername 256 (append (mapcar '1+ (list (- x 0.5) (- y 1.9))) (list (- z z))) 0.8 (rtos z) "TOPO_POINT_NUMBER" 0 '(0 0 1))))
    (entmake
     (mapcar 'cons
      (list 0 8 62)
      (list "SEQEND" layername 256))))
   (prompt "\nФайл не найден."))
  (prin1)
)

Re: LISP. Рисование точек с номерами по координатам из внешнего файла

Спасибо Дмитрию за выложенные LISP'ы. это как раз то что мне нужно. Сама я только начинаю с ними работать, поэтому еще не все получается. Очень хотелось, что бы кто-то помог сделатьь так, что бы одновременно выносились номера точек и отметки высот. так как поправить самостоятельно у меня совсем не получается.
Спасибо.