Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) - Страница 246
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

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

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

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

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (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.
Просмотров: 2047921
 
Непрочитано 17.01.2025, 18:26
#4901
Ingpro


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


Цитата:
Сообщение от koMon Посмотреть сообщение
(vla-put-activedimstyle
(vla-get-activedocument (vlax-get-acad-object))
(vla-item (vla-get-dimstyles (vla-get-activedocument (vlax-get-acad-object)))
"_01_100"
)
)
Yes, that's what need! koMon, thanks!
А можно это сделать с помощью commаnd?
(setvar "DIMSTYLE" "_01_100"); не устанавливает!, только выводит имя текущего размерного стиля

Последний раз редактировалось Ingpro, 17.01.2025 в 18:32.
Ingpro вне форума  
 
Непрочитано 17.01.2025, 18:57
#4902
Кулик Алексей aka kpblc
Moderator

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


А зачем команда, если программно работает?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.01.2025, 19:04
#4903
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А зачем команда, если программно работает?
У меня есть лисп
Код:
[Выделить все]
 (defun C:Syst_Var ( ) ; установки System Variable 
(vl-load-com) 
(setvar "celweight" -1) 
(setvar "CELTYPE" "bylayer") 
(setvar "cecolor" "bylayer")
(setvar 'textsize 25)
............................
............................
Хотелось бы туда добавить строку в таком стиле для DIMSTYLE...
А код из поста #4900 можно добавить в чистом виде или нужны дополнительные установки?
Ingpro вне форума  
 
Непрочитано 17.01.2025, 19:16
1 | #4904
Кулик Алексей aka kpblc
Moderator

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


1. Да, можно
2. В твоем лиспе как минимум нет меток начала / конца отмены
3. Сравни свои несколько штук setvar'ов, и, к примеру:
Код:
[Выделить все]
 (foreach item 
  '(("celweight" . -1)
    ("celtype" . "ByLayer")
    ("cecolor" . "ByLayer")
    ("textsixe" . 25.)
    ("clayer" . "0")
   )
  (setvar (car item) (cdr item))
)
----- добавлено через 39 сек. -----
Если что - такое форматирование выдала VSCode + AutoLisp Extension
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.01.2025, 19:27
#4905
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
2. В твоем лиспе как минимум нет меток начала / конца отмены
это не понятно...
Ingpro вне форума  
 
Непрочитано 17.01.2025, 19:31
1 | #4906
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Ingpro Посмотреть сообщение
это не понятно...
https://autolisp.ru/2009/09/20/howto_undo/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.01.2025, 10:49
#4907
Ingpro


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


В этом коде точка вставки текста уходит в начало ПСК, а мне нужно в указанную точку, что нужно исправить, please
Код:
[Выделить все]
 (defun c:count-insert-txt-WP ()
  (setq pl (car (entsel "\nВыберите границу (полилинию): ")))
  (if pl
    (progn
      (setq points (mapcar 'cdr
                           (vl-remove-if-not
                             '(lambda (x) (= (car x) 10))
                             (entget pl)
                           )
                  )
      )
      (setq count (sslength (ssget "_wp" points)))

      (setq pt (getpoint "\nУкажите точку для вставки текста: "))

          (entmakex
        (list
         '(0 . "TEXT")                     
         (cons 10 pt)                     
         '(40 . 250.0)                     
         '(7 . "STANDARD")                 
         (cons 1 (strcat (itoa count)))    
         '(50 . 0.0)                       
         '(71 . 0)                         
         '(72 . 1)                        
         '(73 . 0)                         
        )
      )

        (prompt (strcat "\nНайдено объектов: " (itoa count)))
    )
    (prompt "\nНе выбрана полилиния.")
  )
  (princ)
)
или можно как-то поэлегантнее с vla?

Последний раз редактировалось Ingpro, 08.02.2025 в 21:41.
Ingpro вне форума  
 
Непрочитано 23.01.2025, 10:56
#4908
Кулик Алексей aka kpblc
Moderator

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


DXF Reference + https://autolisp.ru/2010/04/06/text-...trib-entities/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.01.2025, 11:27
#4909
Ingpro


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


Чё-то не улавливаю суть, с точкой вставки в указанную точку?..
dxf text 10 First alignment point (in OCS) DXF: X value; APP: 3D point
надо изменить эту строку (cons 10 pt)?
или добавить (cons 11 ...), а чего туда писать?
Ingpro вне форума  
 
Непрочитано 23.01.2025, 11:35
1 | #4910
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


(entmakex
(list
'(0 . "TEXT")
(cons 10 (trans pt 1 0))
'(40 . 250.0)
'(7 . "STANDARD")
(cons 1 (itoa count))
'(50 . 0.0)
; '(71 . 0)
; '(72 . 1)
; '(73 . 0)
)
)
__________________
K Lisp
koMon вне форума  
 
Непрочитано 23.01.2025, 12:10
#4911
Ingpro


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


Цитата:
Сообщение от koMon Посмотреть сообщение
(entmakex
(list
'(0 . "TEXT")
(cons 10 (trans pt 1 0))
'(40 . 250.0)
'(7 . "STANDARD")
(cons 1 (itoa count))
'(50 . 0.0)
; '(71 . 0)
; '(72 . 1)
; '(73 . 0)
)
)
Yes! Вставляет текст в указанную точку!
"Вызывает антирес
И такой ишо разрез:"
где про это красиво написано, что эта строка должна выглядеть именно так (cons 10 (trans pt 1 0)?
Ingpro вне форума  
 
Непрочитано 23.01.2025, 12:43
1 | #4912
name02


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


Цитата:
Сообщение от Ingpro Посмотреть сообщение
где про это красиво написано, что эта строка должна выглядеть именно так (cons 10 (trans pt 1 0)?
Про то, что группа 10 - DXF Reference для объектов типа TEXT
(trans pt 1 0) - преобразование координат - см. справку по функции
name02 вне форума  
 
Непрочитано 23.01.2025, 15:19
#4913
Ingpro


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


А может кто-нибудь попробовать запустить у себя код из поста #4907?
В блокноте нормально отображается, а в командной строке и в подсказках на экране вот такая фигнематика:

Выберите границу (полилинию):
Укажите точку для вставки текста:
Найдено объектов:

Выберите границу (полилинию):
Укажите точку для вставки текста:
Найдено объектов:

Кодировка UTF-8
пробы с другими кодировками ничего не дают, что можно ещё попробовать???
Другие коды нормально отображаются...
Ingpro вне форума  
 
Непрочитано 23.01.2025, 15:23
#4914
Кулик Алексей aka kpblc
Moderator

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


Да гидрит твою налево!...
Цитата:
Сообщение от Ingpro Посмотреть сообщение
Кодировка UTF-8
А должна быть ANSI, сколько раз уж говорить-то!
Цитата:
Сообщение от Ingpro Посмотреть сообщение
пробы с другими кодировками ничего не дают, что можно ещё попробовать???
Либо повторно скопировать код и сохранить в кодировке ANSI, либо заменить кодировку. в 99% случаев срабатывает технология: открыть, выделить все, скопировать, сменить кодировку, вставить, сохранить
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.01.2025, 15:39
#4915
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Либо повторно скопировать код и сохранить в кодировке ANSI, либо заменить кодировку. в 99% случаев срабатывает технология: открыть, выделить все, скопировать, сменить кодировку, вставить, сохранить
Не-а
Если ANSI в блокноте, то нормальный вид превращается в Выберите границу (полилинию):

Если по аглицки, то understand...
Select the contour (polyline:
Specify a point to insert the text:
Objects found:
Но вопрос про кодировку завис...
Ingpro вне форума  
 
Непрочитано 23.01.2025, 15:42
#4916
Кулик Алексей aka kpblc
Moderator

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


Ты внимательно прочитал? Скопировать нормальный вид, сменить кодировку, вставить поверх. В Notepad++ прекрасно работает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.01.2025, 16:17
#4917
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Скопировать нормальный вид, сменить кодировку, вставить поверх. В Notepad++ прекрасно работает.
А в AutoCADе после этого пробовали?
Выбираю ANSI в блокноте и нормальные слова превращаются в ... смысл это копировать?
Миниатюры
Нажмите на изображение для увеличения
Название: ANSI в блокноте.png
Просмотров: 9
Размер:	120.6 Кб
ID:	266440  
Ingpro вне форума  
 
Непрочитано 23.01.2025, 16:19
#4918
name02


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


Так надо преобразовать в ANSI
name02 вне форума  
 
Непрочитано 23.01.2025, 16:23
#4919
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Ingpro Посмотреть сообщение
А в AutoCADе после этого пробовали?
Выбираю ANSI в блокноте и нормальные слова превращаются в ... смысл это копировать?
Пробовал, работает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.01.2025, 16:24
#4920
Ingpro


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


Цитата:
Сообщение от name02 Посмотреть сообщение
Так надо преобразовать в ANSI
Т.е. недостаточно просто выбрать кодировку, именно преобразовать
Да, так получилось...спасибо.
Не приходилось раньше с таким сталкиваться...
Миниатюры
Нажмите на изображение для увеличения
Название: преобразовать.png
Просмотров: 12
Размер:	48.7 Кб
ID:	266441  
Ingpro вне форума  
Ответ
Вернуться   Форум 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