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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Ответ
Поиск в этой теме
Непрочитано 20.07.2008, 20:12
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,980

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (Visual foxpro) программку типа суммирования столбцов списал у соседа (это уже в университете).
Не смотря на эте намерен научится писать программы для Автокада на лиспе, скачал книгу Хювенена, несколько примеров создания программ, но после получасового “смотрения” таких книг мое мышление явно притормаживает.
Решил пойти другим путем.
Нашел самый короткий лисп из моей коллекции, и прошу программистов с этого форума пошагово объяснить какой символ что означает. Надеюсь на вашу помощь.


Код:
[Выделить все]
(defun c:make-blocks-explodeable (/ adoc)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (and (equal (vla-get-isxref blk_def) :vlax-false)
             (equal (vla-get-islayout blk_def) :vlax-false)
             ) ;_ end of and
      (vl-catch-all-apply '(lambda () (vla-put-explodable blk_def :vlax-true)))
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
_____________________________________________________________________________________________________________

Прошло много лет и топик теперь представляет из себя площадку для обучения азов программирования для многих начинающих.
Так что начинающие лиспогрызы приветствуются .
__________________
Блог

Последний раз редактировалось Red Nova, 12.07.2017 в 05:43.
Просмотров: 1974034
 
Непрочитано 17.10.2012, 08:43
#1941
gomer

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


Цитата:
Сообщение от Кот Пушок Посмотреть сообщение
Я знаю, как работать с коммандной строкой.
А вот как записать - не сразу понял.

Писал "_No plot" "N" "plot", еще чего-то, пока не додумался до "_plot" "no"
Что вводишь в командной строке, то и записываешь в (command ... на то это и командный метод называется
gomer вне форума  
 
Непрочитано 17.10.2012, 10:58
1 | #1942
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 307


>> Кот Пушок
Для ZWCADa 2008 написал лисп создания слоев по запросу, к сожалению, там он работает частично, зато в AutoCADe все замечательно. Для каждого слоя сделал кнопку с макросом на панельке. Можно, конечно, задавать слой автоматом при черчении определенных элементов (была тут тема о простановке размеров на отдельном слое), но я так и не смог объяснять это ZWCADу.
Посмотрите, может пригодится чего.

Еще обнаружил в 2006-8 автокадах такое ограничение для команд и функции "entmake"- если в слое используется тип линии отсутствующий в чертеже, то слой создан не будет. Приходится сначала создавать тип линии, а потом уже слой.
Вложения
Тип файла: lsp _Cris-LayerChange.lsp (7.6 Кб, 48 просмотров)

Последний раз редактировалось Олег К., 17.10.2012 в 11:06.
Олег К. вне форума  
 
Непрочитано 17.10.2012, 19:52
#1943
Кот Пушок

Механик-конструктор
 
Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25


Цитата:
Сообщение от gomer Посмотреть сообщение
Что вводишь в командной строке, то и записываешь в (command ... на то это и командный метод называется
Ну, я это, как бы, осознаю
Но то, что очевидно для знающего язык, не всегда понятно для того, кто начал этим интересоваться полторы недели (или две) назад. Тоесь - для меня.

Моя строка выглядела так:

Command: _la
-LAYER
Current layer: "0"
Enter an option
[?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Fre
eze/Thaw/LOck/Unlock/stAte/Description/rEconcile]: p

Enter a plotting preference [Plot/No plot] <Plot>: n

Enter layer name(s) for this plot preference <0>:

А лисп заработал только после "_plot" "no" - но, как я уже говорил, для того, чтобы составить именно такое сочетание, мне пришлось поломать голову. Недолго, но пришлось.

Ну, да дело уже прошлое, сейчас список слоев на просмотре у босса, как отредактирует названия, толщину линий и пр, буду заниматься дальше.
Назрела необходимость для наших двух оффисов создать систему слоев, удобную НАМ для пользования, до этого пользовались системой, созданной "головным оффисом".
А никого, кто знает лисп, у нас здесь нет.
Вот, решил попробовать я.


Цитата:
Сообщение от Олег К. Посмотреть сообщение
Для ZWCADa 2008 написал лисп создания слоев по запросу

Премного благодарен. Буду изучать.

У меня в начале было в распоряжении два списка слоев, но:
Один список вообще не заработал, второй заработал, но "_с" я посчитал, служит для задания линии "continuous", а потом, когда ничего не получилось, ес-сно, gomer написал коммандную строку, в которой мне, наконец, стало ясно, что от чего зависит.

Вот такое вот - обучение Лиспу на примере.
Кот Пушок вне форума  
 
Непрочитано 17.10.2012, 23:26
#1944
gomer

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


Кот Пушок, когда ты познаешь лисп, твой мир изменится! Ты когда-нибудь слышал о деревьях?
Вот твое меню команды слой - то самое дерево, или даже не дерево, а лабиринт. Сначала перед тобой множество дверей-опций, ты открываешь одну из них, выбирая опцию Plot и вдруг перед тобой еще перед тобой две двери - Plot и No plot. Откроешь любую и ты снова в начале лабиринта, но ты уже прошел немалый путь и твой новый слой не будет печататься. Вот почему твой код выглядит, как
Код:
[Выделить все]
 (command "_.-layer" ... "_p" "_n" "имя_слоя"  ...)
Обрати внимание, дружок, на заглавные буквы опций, это твои ключи, они должны подходить к дверям лабиринта. Только не забывай постоянно выкрикивать имя слоя, а то никогда из лабиринта не выберешься.
зы, сорри за стеб, вот так это должно выглядеть, имхо
gomer вне форума  
 
Непрочитано 18.10.2012, 00:32
#1945
Кот Пушок

Механик-конструктор
 
Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25


Цитата:
Сообщение от gomer Посмотреть сообщение
Кот Пушок, когда ты познаешь лисп, твой мир изменится!
Да, я в самом деле иногда чувствую себя как кот, сидящий на конце ветки дерева.
Ну, или в лабиринте.
Есть чему учиться, но иногда в учебнике дается пример, а до конца не поясняется.
Или не знаешь просто, на что обратить внимание в первую очередь.
Вот и выходит лабуда.

А это то, что у меня получилось, с твоей помощью:

(defun c:MH-lay ()
(command "_layer" "_n" "Background" "_c" "252" "Background" "_l" "continuous" "Background" "")
(command "_layer" "_n" "Background-Hidden" "_c" "252" "Background-Hidden" "_l" "hidden" "Background-Hidden" "")

; здесь список из еще почти 50 слоёв

(command "_layer" "_n" "TitleBlkText" "_c" "white" "TitleBlkText" "_l" "continuous" "TitleBlkText" "")
(command "_layer" "_n" "Worklines" "_c" "53" "Worklines" "_l" "continuous" "Worklines" "_plot" "no" "Worklines" "")
(command "_layer" "_s" "0" "")
)

Понемногу продвигаюсь вперд по тернистым тропам Лиспа.

Написал набросок опоры подшипника головного барабана конвейера, рисует, забавно.
Теперь изучаю, как сделать, чтобы задавать различные размеры подшипников, разную высоту от платформы до центра барабана, и т.д.

Читаю, грызу гранит, глядишь, может, чего и выйдет.
Кот Пушок вне форума  
 
Непрочитано 18.10.2012, 01:04
#1946
gomer

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


Цитата:
Сообщение от Кот Пушок Посмотреть сообщение
Понемногу продвигаюсь вперд по тернистым тропам Лиспа.
Похоже что ты идешь не в ту сторону, Пушок. Переходи на темную сторону, у нас вкусные печеньки
Цитата:
Сообщение от Кот Пушок Посмотреть сообщение
А это то, что у меня получилось, с твоей помощью:
А зачем? Чтоб нарисовать печеньку в определенном слое нужен всего лишь один слой... остальное мусор, мусор обычно хранят в шаблонах, а контролируют с помощью стандартов оформления, о чем тут уже сказали... Кстати, есть еще замечательная утилитка - LayerCreator. Там все уже написано до нас
Цитата:
Сообщение от Кот Пушок Посмотреть сообщение
Теперь изучаю, как сделать, чтобы задавать различные размеры подшипников,
это ты можешь и без лиспа сделать, в виде дин. блока, а вставлять с палитры инструментов, например
Цитата:
Сообщение от Кот Пушок Посмотреть сообщение
разную высоту от платформы до центра барабана, и т.д.
ну вот ты уже и подошел к параметрическому черчению, это уже прогресс, теперь изучай функции ввода/вывода информации а ля get*** А когда надоест, переходи к диалогам
gomer вне форума  
 
Непрочитано 23.10.2012, 01:04
#1947
Кот Пушок

Механик-конструктор
 
Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25


Цитата:
Сообщение от gomer Посмотреть сообщение
теперь изучай функции ввода/вывода информации а ля get*** А когда надоест, переходи к диалогам


Помогите!

Пишу:

(defun c:str ()
(info)
(draw)
)
(defun info ()
(princ "Please click a point: ")
(setq pt (getpoint))
(setq d (getreal "\nEnter distance in inches: "))
)
(defun draw (/ pt)
(command "_line" pt d "")
)

Хочу нарисовать линию любой задаваемой длины.
Нифига не выходит...
Кот Пушок вне форума  
 
Непрочитано 23.10.2012, 01:21
#1948
gomer

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


Отрезок строится по 2м точкам, а не по точке и расстоянию в никуда
gomer вне форума  
 
Непрочитано 23.10.2012, 01:26
#1949
Кот Пушок

Механик-конструктор
 
Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25


Цитата:
Сообщение от gomer Посмотреть сообщение
Отрезок строится по 2м точкам, а не по точке и расстоянию в никуда
Пробовал писать

(command "_line" pt "@0,d" "") все равно d не читает.

а вот так работает:

(setq startpt (getpoint "Select the start point:"))
(setq endpt (getpoint "Select the end point"))
(command "_line" startpt endpt "")

в любом направлении пишет отрезок, не зависимо ОРТО включенно или нет.

Не пойму, как переменную правильно ввести...
Кот Пушок вне форума  
 
Непрочитано 23.10.2012, 01:58
#1950
gomer

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


(command "_line" pt (strcat "@0," (rtos d)) "") как-то так...
Ну основное в функции draw переменная pt локализована и равна nil а отрезок из ниоткуда, также трудно построить, как и отрезок в никуда

Последний раз редактировалось gomer, 23.10.2012 в 02:05.
gomer вне форума  
 
Непрочитано 23.10.2012, 02:10
#1951
Кот Пушок

Механик-конструктор
 
Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25


Цитата:
Сообщение от gomer Посмотреть сообщение
(command "_line" pt (strcat "@0," (rtos d)) "") как-то так...
Ох, горе мне, горе мне...
Увы мне, окаянному (с)


Спасибо!
Кот Пушок вне форума  
 
Непрочитано 26.10.2012, 02:23
#1952
Кот Пушок

Механик-конструктор
 
Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25


Хе-хе.

Код:
[Выделить все]
 (defun c:slot (/ p d L R)
(setq p (Getpoint "Select point: "))
(setq d (Getreal "Identify Slot Diameter: "))
(setq L (Getreal "Identify Slot Lengths: "))
(setq R (Getreal "Specify Rotation Angle: "))
(Draw p d L R)
)
(prompt "slot, ")
(defun Draw (p d L R / p1 p2 p3 p4 p5 p6 x y det)
(setq
x (nth 0 p)
y (nth 1 p)
p1 (list (- x (/ (- L d) 2.0)) (+ y (/ d 2.0)))
p2 (list (+ x (/ (- L d) 2.0)) (+ y (/ d 2.0)))
p3 (list (+ x (/ (- L d) 2.0)) (- y (/ d 2.0)))
p4 (list (- x (/ (- L d) 2.0)) (- y (/ d 2.0)))
p5 (list (- x (/ (- L d) 2.0)) y)
p6 (list (+ x (/ (- L d) 2.0)) y)
)
(command "_osnap" "_none")
(command "_pline" p1 p2 "_arc" "_ce" p6 "_a"
-180 "_l" p3 p4 "_arc" "_ce" p5 "_a"
-180 "_cl" ""
)
(command "_rotate" "_last" "" p1 R "")
(command "_osnap" "int,cen,end,ins")
(prompt "Draw ")
)
рисует slot (не знаю, как это по-русски) любой длины, любого диаметра, под любым углом.

Лёд тронулся, господа присяжные заседатели!
Лёд тронулся
Кот Пушок вне форума  
 
Непрочитано 26.10.2012, 10:44
#1953
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Ну раз тронулся - поскорей забывайте командные методы рисования и вперед DXF/VLA.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 26.10.2012, 14:53
#1954
gomer

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


Цитата:
Сообщение от Кот Пушок Посмотреть сообщение
рисует slot (не знаю, как это по-русски)
Видимо шпоночный паз
Цитата:
Сообщение от Дима_ Посмотреть сообщение
у раз тронулся - поскорей забывайте командные методы рисования и вперед DXF/VLA.
Да погодите вы, дайте поиздеваться над животными, ну хоть здесь
А первых строках своего письма, хочется предположить, что динамический блок в данном случае предпочтительнее
А во-вторых, жмите F2 и смотрите что вы там наворотили
gomer вне форума  
 
Непрочитано 27.10.2012, 21:33
#1955
Кот Пушок

Механик-конструктор
 
Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25


Цитата:
А во-вторых, жмите F2 и смотрите что вы там наворотили
Но рисует же.

А что там неправильно?
Кот Пушок вне форума  
 
Непрочитано 27.10.2012, 22:12
#1956
gomer

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


Цитата:
Сообщение от Кот Пушок Посмотреть сообщение
А что там неправильно?
да много чего? основная ошибка как раз с "" в command
ну вот хотя б так, хотя это тоже концептуально плохой код
Код:
[Выделить все]
 (defun C:SLOT (/ *error* aDoc p d L R osm p1 x y p2 p3 p4 p5 p6)
  (defun *error* (msg) (princ))
  (setvar 'cmdecho 1)
  (if (and (setq p (getpoint "\nSelect insertion point: "))
	   (setq d (getreal "\nIdentify Slot Diameter: "))
	   (setq L (getreal "\nIdentify Slot Lengths: "))
	   (setq R (getreal "\nSpecify Rotation Angle: "))
      )
    (progn
      (vl-load-com)
      (setq
	osm (getvar 'osmode)
	x   (nth 0 p)
	y   (nth 1 p)
	p1  (list (- x (/ (- L d) 2.0)) (+ y (/ d 2.0)))
	p2  (list (+ x (/ (- L d) 2.0)) (+ y (/ d 2.0)))
	p3  (list (+ x (/ (- L d) 2.0)) (- y (/ d 2.0)))
	p4  (list (- x (/ (- L d) 2.0)) (- y (/ d 2.0)))
	p5  (list (- x (/ (- L d) 2.0)) y)
	p6  (list (+ x (/ (- L d) 2.0)) y)
      )
      (vla-StartUndoMark
	(setq aDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
      )
      (setvar 'cmdecho 0)
      (setvar 'osmode 0)
      (command "_.pline"     p1	    p2	   "_a"	  "_ce"	 p6	"_a"
	       -180   "_l"   p3	    p4	   "_a"	  "_ce"	 p5	"_a"
	       -180   "_cl"
	      )
      (if (/= R 0.0)
	(command "_.rotate" "_l" "" p1 R)
      )
      (setvar 'cmdecho 1)
      (setvar 'osmode osm)
      (vla-EndUndoMark aDoc)
    )
  )
  (princ)
)
gomer вне форума  
 
Непрочитано 28.10.2012, 06:30
#1957
Кот Пушок

Механик-конструктор
 
Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25


Цитата:
Сообщение от gomer Посмотреть сообщение
да много чего? основная ошибка как раз с "" в command
ну вот хотя б так, хотя это тоже концептуально плохой код
Ну, к этому я пока еще не дошел.

Я ж говорил, первые шаги и первые попытки.
Учусь, так сказать.

А за помощь - спасибо.

Буду дальше биться головой ап стену.
Постараюсь на следующей неделе разобраться в этом "концептуально" плохом коде.

Последний раз редактировалось Кот Пушок, 28.10.2012 в 06:36.
Кот Пушок вне форума  
 
Непрочитано 28.10.2012, 13:45
#1958
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Еще один неконцептуальный
Код:
[Выделить все]
(defun c:slt (/ *error* ang osm ped pt rad len)
(defun *error* (msg) 

    (cond ((not msg)) 
     ((vl-position 
             msg 
             '("Function cancelled" "quit / exit abort" "console break") 
           ) 
          ) 
          ((princ (strcat "\nSlot Command Error: " msg))) 
    )
    (command)
    (command "undo" "e")
    
	(setvar "cmdecho" 0)
	(if osm
	  (setvar "osmode" osm))
	(if ped
	  (setvar "peditaccept" ped)) 
   
       (setvar "cmdecho" 0) 
    (princ) 
  )
  
 ;;   ------------------    main part   -------------------------    ;;
  
(command "undo" "be")
(setq osm (getvar "osmode"))
(setvar "osmode" 0)
(setq ped (getvar "peditaccept"))
(setq pt (getpoint "\nInsertion point of slot:  "))
(setq rad (getdist pt "\nRadius:  "))
(setq len (getdist pt "\nLength:  "))
(setq ang (getangle pt "\nRotation angle:  "))
(setq lst (entlast))
(command "arc"
	 "c"
	 pt
	 (polar pt (+ (/ pi 2) ang) rad)
	 "a"
	 "180")
(command "line"
	 ""
	 (polar (getvar "lastpoint") rad len)
	 "")
(command "arc"
	 ""
	 (polar (getvar "lastpoint") (+ (/ pi 2) ang) (* 2 rad)))
(command "line"
	 ""
	 (polar (getvar "lastpoint") (+ pi ang) len)
	 "")
;; gather all of the creared entities
(setq sset (ssadd))
(while (setq next (entnext lst))
  (ssadd next sset)
  (setq lst (entnext lst))
  );; end of gathering
(setvar "peditaccept" 1)
(command "pedit" "m" sset "" "j" "" "")
(command "erase" sset "")
(*error* nil)  
(princ)
)
Олег (jr.) вне форума  
 
Непрочитано 31.10.2012, 20:53
#1959
Кот Пушок

Механик-конструктор
 
Регистрация: 13.10.2012
Everett, WA, USA
Сообщений: 25


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Еще один неконцептуальный
Спасиба!

Вот ведь как...
Кот Пушок вне форума  
 
Непрочитано 06.11.2012, 09:30
#1960
papelard


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


Добрый день, у меня вопрос по замечательному лиспу, который похоже написал Кулик Алексей aka kpblc, поэтому надеюсь с топиком я не промахнулся.
Лисп автоматически последовательно нумерует точки, а затем экспортирует их координаты в txt/csv-файл. Работает он отлично, но у него есть один недостаток: если ты промахнулся мимо нужной точки отменить действие увы нельзя. Комбинация <Ctrl>+<Z> выдает сообщение "Неверная точка", а нажатие клавиши <Esc> завершает нумерацию и появляется окно выбора папки для сохранения результатов.
Буду очень благодарен если вы поможете это исправить.
Код:
[Выделить все]
 (vl-load-com)

(defun c:pt2file (/ adoc file handle pt lst count blk_name blk_def blk_ref)
  (if (/= (type (setq count (vl-catch-all-apply
                              (function
                                (lambda ()
                                  (initget 6)
                                  (getint "\nВведите начальный номер точки <1> : ")
                                  ) ;_ end of lambda
                                ) ;_ end of function
                              ) ;_ end of vl-catch-all-apply
                      ) ;_ end of setq
                ) ;_ end of type
          'int
          ) ;_ end of /=
    (setq count 1)
    ) ;_ end of if
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (/= (type
            (setq blk_def (vl-catch-all-apply
                            (function (lambda () (vla-item (vla-get-blocks adoc) (setq blk_name "inoe.kpblc.point"))))
                            ) ;_ end of vl-catch-all-apply
                  ) ;_ end of setq
            ) ;_ end of type
          'vla-object
          ) ;_ end of /=
    ((lambda (/ circle att)
       (setq blk_def (vla-add (vla-get-blocks adoc) (vlax-3d-point '(0. 0. 0.)) blk_name)
             circle  (vla-addcircle blk_def (vlax-3d-point '(0. 0. 0.)) 1.)
             att     (vla-addattribute blk_def
                                       2.5
                                       acattributemodepreset
                                       "Номер точки"
                                       (vlax-3d-point '(1. 1. 0.))
                                       "PointNumber"
                                       "-"
                                       ) ;_ end of vla-AddAttribute
             ) ;_ end of setq
       (vlax-for ent blk_def
         (vla-put-color ent 0)
         (vla-put-lineweight ent aclnwtbyblock)
         (vla-put-linetype ent "Continuous")
         (vla-put-layer ent "0")
         ) ;_ end of vlax-for
       (vla-put-color circle 1)
       ) ;_ end of lambda
     )
    ) ;_ end of if

  (while (= (type (setq pt (vl-catch-all-apply
                             (function
                               (lambda ()
                                 (trans (getpoint "\nУкажите точку <Хватит> : ") 1 0)
                                 ) ;_ end of lambda
                               ) ;_ end of function
                             ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'list
            ) ;_ end of =
    (setq blk_ref (vla-insertblock (vla-get-modelspace adoc) (vlax-3d-point pt) blk_name 1. 1. 1. 0.))
    (vla-put-textstring (car (vlax-safearray->list (vlax-variant-value (vla-getattributes blk_ref))))
                        (itoa count)
                        ) ;_ end of vla-put-textstring
    (setq lst   (cons (cons count pt) lst)
          count (1+ count)
          ) ;_ end of setq
    ) ;_ end of while
  (if (and (setq file (getfiled "Укажите файл для сохранения результатов"
                                (vl-filename-base (getvar "dwgname"))
                                "txt;csv"
                                1
                                ) ;_ end of getfiled
                 ) ;_ end of setq
           (/= file "")
           ) ;_ end of and
    (progn
      (vl-catch-all-apply
        (function
          (lambda ()
            (setq handle (open file "w"))
            (write-line "№;x;y" handle)
            (foreach item (reverse lst)
              (write-line (strcat (rtos (car item) 2 0) ";" (rtos (cadr item) 2 3) ";" (rtos (caddr item) 2 3))
                          handle
                          ) ;_ end of write-line
              ) ;_ end of foreach
            ) ;_ end of lambda
          ) ;_ end of function
        ) ;_ end of vl-catch-all-apply
      (vl-catch-all-apply (function (lambda () (close handle))))
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun

(princ "\nType pt2file to run command")
(princ)
И еще, если можно, хотелось бы чтоб номер точки подписывался в выноске в виде n / z, где n - номер точки (атрибут блока), а z - общее количество точек (его можно вводить через командную строку)
Вложения
Тип файла: lsp pt2file.lsp (4.1 Кб, 56 просмотров)

Последний раз редактировалось papelard, 06.11.2012 в 13:19.
papelard вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46