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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Я начинаю заниматься программированием LISP (help)

Я начинаю заниматься программированием LISP (help)

Ответ
Поиск в этой теме
Непрочитано 19.02.2006, 20:00
Я начинаю заниматься программированием LISP (help)
mmax
 
Программист широкого профиля.
 
Челябинск
Регистрация: 08.09.2005
Сообщений: 722

Гопода, я начал этим заниматься совсем недавно, буквально в этом месяце. И у меня уже есть грандиозные планы например: чтобы автокад рисовал какие нибудь стандартные детали сам (болты, гайки шурупы итд)

И соответственно у меня начали появляться вопросы на которые г-н Полещук НН в своих произведениях не смог ответить в полном объеме, значит мне понадобится чья нибудь еще помощь.

У меня уже были вопросы которые я задал здесь и получил исчерпывающие ответы. Но если я на кждый вопрос буду создавать отдельный топик, то количество топиков будет = кол-ву вопросов, а вопросов миллион -- администраторы и модераторы данного ресурса наверное понимают о чем я. Да и такое кол-во ссылок не влезет мой..........

Вобщем я хотел бы все свои вопросы помещать в этот топик и надеюсь на поддержку знающих людей.

Всем заранее благодарен.
Просмотров: 80041
 
Непрочитано 03.03.2006, 21:18
#101
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от {Smirnoff}
Цитата:
Осколки после взрыва можно собрать (ssget "_P") , кажется проще.
В общем то да, но в этом случае требуется проверка - а получилось ли взорвать?
Та же проверка с (entlast) сойдет. Возможно, (vl-cmdf) удастся использовать для этого, однако, последнее не проверял.
vk вне форума  
 
Автор темы   Непрочитано 03.03.2006, 21:23
#102
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от Apelsinov
например так можно получить список слоев:
Код:
[Выделить все]
(defun test (/ layers_lst)
  (vlax-for i
	      (vla-get-layers
		(vla-get-ActiveDocument (vlax-get-acad-object))
	      )
    (setq layers_lst (cons (vla-get-name i) layers_lst))
  )
  (reverse layers_lst)
)
;;;(test)
Вот только возвращает веселый список

Код:
[Выделить все]
("Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" "Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" "Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" "Слой6" ("Слой5" ("Слой4" ("Слой3" ("Слой2" ("Слой1" ("0" ("Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" (vla-get-Name I) LAYERS_LST))))))))
это один из вариантов, а так каждый раз возвращает по разному те разная очередность элементов и разное количество

из такого неустойчивого списка будет сложновато отбросить лишние элементы

А нельзя как нибудь не используя АктивХ извлекать имена.
Я например до использования этой функции пытался зациклить TBLNEXT, пока безрезультатно.
mmax вне форума  
 
Непрочитано 03.03.2006, 21:43
#103
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от mmax
Вот только возвращает веселый список

Код:
[Выделить все]
("Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" "Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" "Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" "Слой6" ("Слой5" ("Слой4" ("Слой3" ("Слой2" ("Слой1" ("0" ("Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" (vla-get-Name I) LAYERS_LST))))))))
это один из вариантов, а так каждый раз возвращает по разному те разная очередность элементов и разное количество
За последние несколько лет, Вам первому удалось обнаружить столь странный глюк этого кода. Есть уверенность, что все без ошибок скопировано?
vk вне форума  
 
Непрочитано 03.03.2006, 21:49
#104
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от favorite
Подскажите пытаюсь текст в блоке заменить что-то не получается .....
В наипростейшем случае (в блоке "rrr" только TEXT) что то вроде такого
Код:
[Выделить все]
(setq a (tblsearch "Block" "RRR"))
(setq b (cdr(assoc -2 a)))
(setq Bsp1 (entget b))
(entmod (subst '(1 . "Новый текст") (assoc 1 Bsp1) BSp1))
Ну и _.regenall потом....
vk вне форума  
 
Непрочитано 03.03.2006, 22:06
#105
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Так поступают все гуры
Код:
[Выделить все]
(defun C:BlkTxtRpl ( / adoc bks util blk bn str)
  (vl-load-com)
  (setq adoc (vla-get-ActiveDocument (vlax-get-acad-object))				;Активный тугамент
	    bks (vla-get-blocks adoc)							;Список блоков в активном тугаменте
	    util (vla-get-utility adoc))							;Хваталка объектов
  (setq bn (vla-getString util t "\Enter Block Name or <Enter> to Select: "))		;Ну, это и так понятно
  (if (= bn "") (progn (vla-getEntity util 'blk nil) (setq bn (vla-get-name blk))))	;Хватаем блок из чертежа
  (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list bks bn)))		;Не наврано ли имя блока
    (setq blk (vla-item bks bn)))							;Тащим блок из списка
  (vlax-for ent blk									;Вытаскиваем елементы блока по очереди
    (if (or (= (vla-get-objectname ent) "AcDbText")					;Проверка на текстность...
	    (= (vla-get-objectname ent) "AcDbMText"))					;и мультитекстность
      (if (/= "" (setq str (vla-getString util t
			     (strcat "\Enter New text: <"(vla-get-TextString ent)">"))))       ;Вывод существующего текста
	(vla-put-textString ent str))))							;Замена текста
);end
Лентяй вне форума  
 
Непрочитано 03.03.2006, 22:57
#106
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Лентяй
Так поступают все гуры...
Точно? :wink:

Код:
[Выделить все]
(defun C:BlkTxtRpl (/ adoc bks util blk bn str)
  (vl-load-com)
  (setq adoc (vla-get-ActiveDocument (vlax-get-acad-object))
                                        ;Активный тугамент 
        bks  (vla-get-blocks adoc)      ;Список блоков в активном тугаменте 
        util (vla-get-utility adoc)
  )                                     ;Хваталка объектов 
  (setq
    bn (vla-getString util t "\Enter Block Name or <Enter> to Select: ")
  )                                     ;Ну, это и так понятно 
  (if (= bn "")
    (progn (vla-getEntity util 'blk nil) (setq bn (vla-get-name blk)))
  )                                     ;Хватаем блок из чертежа 
  (if (vl-catch-all-error-p
        (setq blk (vl-catch-all-apply 'vla-item (list bks bn)))
      )
                                        ;Не наврано ли имя блока
    (alert "Ошибка получения блока!")
    (vlax-for ent blk                   ;Вытаскиваем елементы блока по очереди 
      (if (or (= (vla-get-objectname ent) "AcDbText")
                                        ;Проверка на текстность... 
              (= (vla-get-objectname ent) "AcDbMText")
          )                             ;и мультитекстность 
        (if (/= ""
                (setq str (vla-getString
                            util
                            t
                            (strcat "\Enter New text: <"
                                    (vla-get-TextString ent)
                                    ">"
                            )
                          )
                )
            )                           ;Вывод существующего текста 
          (vla-put-textString ent str)
        )
      )
    )                                   ;Замена текста
  )
  (vla-Regen adoc acAllViewports)
)                                       ;end
* Только избавление от фатальных ошибок
Alaspher вне форума  
 
Непрочитано 03.03.2006, 23:24
#107
favorite

инженер
 
Регистрация: 05.12.2005
Москва
Сообщений: 425


Даааааа Многому мне еще предстоит научиться!
А скажите если я создам блок в котором будут аттрибуты, затем расставлю эти блоки на чертеже. Можно ли зделать программу которая в каждом блоке будет изменять аттрибут на нужное мне значение.
Например нумерация свай.???? :?:
favorite вне форума  
 
Автор темы   Непрочитано 03.03.2006, 23:31
#108
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от favorite
Даааааа Многому мне еще предстоит научиться!
:?:
Да, мне тоже.

Кстати вопрос к профессионалам.
Без АктивХ можно использовать Автокад на полную мощность?
mmax вне форума  
 
Непрочитано 03.03.2006, 23:36
#109
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от favorite
если я создам блок в котором будут аттрибуты, затем расставлю эти блоки на чертеже. Можно ли зделать программу которая в каждом блоке будет изменять аттрибут на нужное мне значение.
Например нумерация свай.???? :?:
Если будут выработаны непротиворечивые формализованые правила таких изменений, то сам код накидать - дело техники.

Цитата:
Сообщение от mmax
Без АктивХ можно использовать Автокад на полную мощность?
ActiveX добавляет ряд важных возможностей в API Autocad. Для разработчика это очень ценно, а для юзера - всё равно, каким механизмом решается его задача.
Alaspher вне форума  
 
Автор темы   Непрочитано 03.03.2006, 23:52
#110
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от vk
Цитата:
Сообщение от mmax

Код:
[Выделить все]
("Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" "Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" "Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" "Слой6" ("Слой5" ("Слой4" ("Слой3" ("Слой2" ("Слой1" ("0" ("Слой6" "Слой5" "Слой4" "Слой3" "Слой2" "Слой1" "0" (vla-get-Name I) LAYERS_LST))))))))

все без ошибок скопировано?
Без ошибок
просто я вместо (test) переменную LAYERS_LST тыркал, вот и чесал голову.

Огромное спасибо Apelsinovу за предоставленую информацию.

Вопрос к гуру(ам) сколько времени требуется чтобы основательно все изучить, понять и применять знания не обращаясь за помощью к другим.

Слышал что ЛИСП умирает и получится так что я его изучил, а он уже в гробу лежит и Билл Гейтс последний гвоздь в крышку заколачивает.
mmax вне форума  
 
Непрочитано 03.03.2006, 23:54
#111
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Сообщение от Alaspher
Цитата:
Сообщение от Лентяй
Так поступают все ...
Точно? :wink:
Мне что, следовало написать - "настоящие гуры"?
Лентяй вне форума  
 
Непрочитано 03.03.2006, 23:56
#112
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Сообщение от favorite
Даааааа Многому мне еще предстоит научиться!
А скажите если я создам блок в котором будут аттрибуты, затем расставлю эти блоки на чертеже. Можно ли зделать программу которая в каждом блоке будет изменять аттрибут на нужное мне значение.
Например нумерация свай.???? :?:
Я тут как-то выкидывал соотв. лиспу, KAN называлась.
Лентяй вне форума  
 
Непрочитано 04.03.2006, 00:06
#113
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от mmax
Слышал что ЛИСП умирает и получится так что я его изучил, а он уже в гробу лежит и Билл Гейтс последний гвоздь в крышку заколачивает.
А я каждый год слышу, что Винде осталось, от силы, полгода быть ОСью нумба уан... и что? Кто выглядит лучше, те, кто говорят или те, кто эти продукты делает? Только клинический идиот может позволить себе такой фортель, как отказ от AutoLISP. В руководстве Autodesk, появление таковых крайне маловероятно.

Цитата:
Сообщение от Лентяй
Мне что, следовало написать - "настоящие гуры"?
Эт' вам, гурям - виднее...
Alaspher вне форума  
 
Непрочитано 04.03.2006, 00:39
#114
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от mmax
просто я вместо (test) переменную LAYERS_LST тыркал, вот и чесал голову.
Подозреваю, что переменная LAYERS_LST была не локализованой, что в ней накопилось столько дряни
vk вне форума  
 
Непрочитано 04.03.2006, 16:04
#115
favorite

инженер
 
Регистрация: 05.12.2005
Москва
Сообщений: 425


Вопрос в почему в справке Vlisp я не могу найти написание таких функций как "_.insert" и "_.regenall" и что означает "_."?

(command "_.regenall")-здесь еще нужны какие-то параметры?
Код:
[Выделить все]
(setq a (tblsearch "Block" "RRR"))
(setq b (cdr(assoc -2 a)))
(setq Bsp1 (entget b))
(setq OLD (assoc 1 Bsp1))
(setq New (subst '(1 . "ïîëó÷èëîñü") OLD  BSp1))
;(entupd a)
(command "_.regenall")
Я зделал как написали мне выше но не работает .
Что не так? Объясните
favorite вне форума  
 
Непрочитано 04.03.2006, 16:51
#116
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от favorite
Вопрос в почему в справке Vlisp я не могу найти написание таких функций как "_.insert" и "_.regenall"
Потому что это не функции а команды АКАДа. Учите матчасть.
Цитата:
Сообщение от favorite
и что означает "_."?
Подчерк - означает игнорировать локализацию АКАДа, использовать оригинальное английское имя команды. Точка - использовать оригинальную версию команды, если команда была переопределена при помощи Лиспа.

Цитата:
Сообщение от favorite
(command "_.regenall")-здесь еще нужны какие-то параметры?
Учитывая что _.regenall это команда, ответ на этот вопрос легко ищется в хелпе. Можно также набрать команду с клавиатуры и посмтреть, будут ли задаваться дополнительные вопросы.


Цитата:
Сообщение от favorite
Код:
[Выделить все]
(setq a (tblsearch "Block" "RRR"))
(setq b (cdr(assoc -2 a)))
(setq Bsp1 (entget b))
(setq OLD (assoc 1 Bsp1))
(setq New (subst '(1 . "ïîëó÷èëîñü") OLD  BSp1))
;(entupd a)
(command "_.regenall")
Я зделал как написали мне выше но не работает .
Что не так? Объясните
Прочтите и сравните по буквам или по функциям, как написали выше с тем что опубликовано здесь.
vk вне форума  
 
Автор темы   Непрочитано 11.03.2006, 13:12
#117
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Господа, подскажиете такую вещь.

Насколько я понимаю LISP - приложение нельзя внедрить в Файл рисунка, а очень бы хотелось чтобы программа выполнялась при открытии документа; acaddoc.lsp acad.lsp и автозагрузка здесь не катят тк программа должна выполняться на чужом компьютере.

Скажите пожалуйста как на VBA создать внедренный макрос который бы выполнил лисп функцию (load "plot.lsp") те при открытии рисунка появляется сообщение с кнопками Да Нет если нажать да то выполнится лисп функция

Связано это с тем, что печать на плоттере я осуществляю в фирмах, предоставляющих такую услугу, и мне уже надоело объяснять работникам фирмы, что формат А1 в на листе 620*940 разместится в масштабе 1:1 без вписывания, а они утверждают обратное -- типа ихние плоттеры имеют меньшую площадь печати чем формат А1 и умудряются вписывать формат с уменьшением масштаба в такую обширную площадь печати, что недопустимо для машиностроительных чертежей, к настройке печати они меня не допускают и моих советов не слушают тк считают ниже своего достоинства давать настраивать печать какомуто студенту.

Тк мои познания автокада в последнее время несколько расширились и дрова плоттера установлены на моем компьютере, то печать я могу настраивать дома, и уменя все получается.
mmax вне форума  
 
Автор темы   Непрочитано 14.03.2006, 19:23
#118
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Уважаемые господа, получил списки

Код:
[Выделить все]
((10 1165.89 805.692) (10 1165.89 652.957) (10 1318.62 652.957) (10 1318.62 805.692))

((11 1177.2 794.379) (11 1177.2 664.271) (11 1307.31 664.271) (11 1307.31 794.379)) 
_$
а соответствующие линии(LINE) ни ENTMAKE .
Уж я их и переворачивал и объединял и чего только не делал а они всеравно ни ENTMAKE.

Количество элементов в списках зависит от нужд пользователя. Начала и концы линий соответствуют правилу:
Для первой первые элементы обоих списков
Для второй вторые
Для третьей третьи
ИТД

Это из моей программы для рисования фланца. Фланец уже рисуется, а осевые не проставляются, списки приведенные выше – координаты осевых для крепежных отверстий .
mmax вне форума  
 
Непрочитано 14.03.2006, 19:50
#119
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от mmax
а они всеравно ни ENTMAKE.
Что то туго с телепатией сегодня. Проблемный кусок кода где?
vk вне форума  
 
Непрочитано 14.03.2006, 19:54
#120
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Код:
[Выделить все]
(mapcar
  (function
    (lambda (a b)
      (entmakex
        (list
          '(0 . "LINE")
          a
          b
        ) ;_  list
      ) ;_  entmakex
    ) ;_  lambda
  ) ;_  function
  '((10 1165.89 805.692) (10 1165.89 652.957) (10 1318.62 652.957) (10 1318.62 805.692))
  '((11 1177.2 794.379) (11 1177.2 664.271) (11 1307.31 664.271) (11 1307.31 794.379))
) ;_  mapcar
Елпанов Евгений вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Я начинаю заниматься программированием LISP (help)

Опции темы Поиск в этой теме
Поиск в этой теме:

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