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

Вернуться   Форум 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.
Просмотров: 1971771
 
Непрочитано 13.04.2022, 06:56
#4221
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Сравни свой кусок кода (для начала):
Опять опечатка . (печатаю на клавиатуре, чтобы привыкнуть к раскладке и это, иногда, выдает подобные результаты, - копипаст мне в руки)))
К сожалению, работоспособность программы не изменилась. (кроме лишней буквы ничего не нашел)
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
И что в диалоге делает image, когда он там нафиг не нужен? Судя по коду единственное место, где он хоть какое-то получает значение - это нажатие на кнопку ОК. Учитывая, что диалог достаточно быстро закрывается, углядеть, что там поменялось (и поменялось ли) невозможно.
Считаю, было бы интересно в диалоговом окне иметь схему указания точек. Но, очередное "не знаю" не позволило это сделать. Конкретно,- не получается сделать слайд (задавал вопрос в профильной теме, но там тишина). Удалять не стал, оставил на потом.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код переписывать лениво.
Понимаю

----- добавлено через ~12 мин. -----
Не могу понять, почему при "некорректно" работающей программе (включены (fasad_naklad) и (fasad_vklad)), Vibor возвращает "o_nkl", или "o_vkl", как и положено, а при удалении этих строк, Vibor возвращает nil.

Последний раз редактировалось Alxndr1697, 13.04.2022 в 07:01.
Alxndr1697 вне форума  
 
Непрочитано 13.04.2022, 07:58
#4222
Кулик Алексей aka kpblc
Moderator

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


А разве vibor функция, чтобы что-то возвращать? По-моему, это все же переменная, в которой что-то хранится. Не путай теплое с мягким. Как лично у меня выглядел бы код (правда, без основной реализации построения - на это уже нет ни времени, ни сил):
Код:
[Выделить все]
 (vl-load-com)

(defun multibox (/ fun_facade-callback fun_conv-to-int fun_conv-to-real dcl_file dcl_handle dcl_id dcl_res dcl_lst sysvar low_left_point low_right_point
                 up_left_point
                )

  (defun _kpblc-list-add-or-subst (lst key value)
    (if (not value)
      (vl-remove-if (function (lambda (x) (= (car x) key))) lst)
      (if (cdr (assoc key lst))
        (subst (cons key value) (assoc key lst) lst)
        (cons (cons key value) (vl-remove-if (function (lambda (x) (= (car x) key))) lst))
      ) ;_ end of if
    ) ;_ end of if
  ) ;_ end of defun

  (defun fun_conv-to-int (string)
    (atoi (vl-string-trim " " string))
  ) ;_ end of defun

  (defun fun_conv-to-real (string)
    (atof (vl-string-subst "." "," (vl-string-trim " " string)))
  ) ;_ end of defun

  (defun fun_facade-callback (key value ref-list)
    (cond
      ((= key "o_nkl")
       (set ref-list (_kpblc-list-add-or-subst (eval ref-list) "type" "outside"))
      )
      ((= key "o_vkl")
       (set ref-list (_kpblc-list-add-or-subst (eval ref-list) "type" "inside"))
      )
      ((= key "o_col_vo")
       (set ref-list (_kpblc-list-add-or-subst (eval ref-list) "range" (fun_conv-to-int value)))
      )
      ((= key "o_b_mat_fas")
       (set ref-list (_kpblc-list-add-or-subst (eval ref-list) "thick_facade" (fun_conv-to-int value)))
      )
      ((= key "o_b_mat_corp")
       (set ref-list (_kpblc-list-add-or-subst (eval ref-list) "thick_box" (fun_conv-to-int value)))
      )
      ((= key "o_z_r")
       (set ref-list (_kpblc-list-add-or-subst (eval ref-list) "space_facades" (fun_conv-to-int value)))
      )
      ((= key "o_otst_up_front")
       (set ref-list (_kpblc-list-add-or-subst (eval ref-list) "front" (fun_conv-to-real value)))
      )
      ((= key "o_otst_top")
       (set ref-list (_kpblc-list-add-or-subst (eval ref-list) "top" (fun_conv-to-real value)))
      )
      ((= key "o_otst_bottom")
       (set ref-list (_kpblc-list-add-or-subst (eval ref-list) "bottom" (fun_conv-to-real value)))
      )
      ((= key "o_otst_left")
       (set ref-list (_kpblc-list-add-or-subst (eval ref-list) "left" (fun_conv-to-real value)))
      )
    ) ;_ end of cond
    ((= key "o_otst_right")
      (set ref-list (_kpblc-list-add-or-subst (eval ref-list) "right" (fun_conv-to-real value)))
    )
  ) ;_ end of defun


  (setq dcl_file   (strcat (vl-string-right-trim
                             "\\"
                             (vla-get-tempfilepath (vla-get-files (vla-get-preferences (vlax-get-acad-object))))
                           ) ;_ end of VL-STRING-RIGHT-TRIM
                           "\\dlg.dcl"
                   ) ;_ end of strcat
        dcl_handle (open dcl_file "w")
  ) ;_ end of setq

  (foreach item '("dialog_fasad_sup: dialog {label = \"Фасад ящика (горизонтальный)\";" "	:spacer{height=1;}" "	:column {label = \"Точки ввода :\";"
                  "		:spacer{height=1;}" "		:image {key = \"sld\"; width  = 15; aspect_ratio = 1.8; color= 4;}" "	}" "	:spacer{height=1;}"
                  "	:boxed_column {label = \"Параметры фасада :\";" "		:spacer{height=1;}"
                  "		:radio_row {key = \"tip_f\"; label = \"Тип фасада :\";" "			:radio_button {key = \"o_nkl\"; label = \"Накладной\";}"
                  "			:radio_button {key = \"o_vkl\"; label = \"Вкладной\";}" "		}" "		:spacer{height=1;}" "		:row {"
                  "			:boxed_column {" "				:boxed_column {label = \"Количество фасадов :\";"
                  "					:spacer{height=1;}" "					:edit_box {key = \"o_col_vo\"; label = \"Количество :\"; edit_width = 4;}"
                  "				}" "				:spacer{height=2;}" "				:boxed_column {label = \"Толщина материала :\";"
                  "					:edit_box {key = \"o_b_mat_fas\"; label = \"Фасада :\"; edit_width = 4;}"
                  "					:edit_box {key = \"o_b_mat_corp\"; label = \"Корпуса :\"; edit_width = 4;}" "				}"
                  "			}" "			:spacer{height=1;}" "			:boxed_column {label = \"Зазоры фасада :\";"
                  "				:edit_box {key = \"o_z_r\"; label = \"Зазор между фасадами :\"; edit_width = 4;}"
                  "				:edit_box {key = \"o_otst_up_front\"; label = \"Отступ от корпуса вперед :\";  edit_width = 4;}"
                  "				:edit_box {key = \"o_otst_top\"; label = \"Отступ сверху :\"; edit_width = 4;}"
                  "				:edit_box {key = \"o_otst_bottom\"; label = \"Отступ снизу :\"; edit_width = 4;}"
                  "				:edit_box {key = \"o_otst_left\"; label = \"Отступ слева :\"; edit_width = 4;}"
                  "				:edit_box {key = \"o_otst_right\"; label = \"Отступ справа :\"; edit_width = 4;}" "			}"
                  "		}//end row" "	}//end параметры фасада" "	:spacer{height=1;}" "	:boxed_row {label = \"\";" "		ok_cancel;" "	}"
                  "}"
                 )
    (write-line item dcl_handle)
  ) ;_ end of foreach
  (close dcl_handle)

  (setq dcl_id (load_dialog dcl_file))
  (new_dialog "dialog_fasad_sup" dcl_id "(fun_facade-callback $key $value 'dcl_lst)")
  (action_tile "accept" "(done_dialog 1)")
  (action_tile "cancel" "(done_dialog 0)")
  (foreach item '(("o_nkl" . "1")
                  ("o_col_vo" . "1")
                  ("o_b_mat_fas" . "16")
                  ("o_b_mat_corp" . "16")
                  ("o_z_r" . "3")
                  ("o_otst_up_front" . "0")
                  ("o_otst_top" . "1.5")
                  ("o_otst_bottom" . "1.5")
                  ("o_otst_left" . "1.5")
                  ("o_otst_right" . "1.5")
                 )
    (set_tile (car item) (cdr item))
    (fun_facade-callback (car item) (cdr item) 'dcl_lst)
  ) ;_ end of foreach

  (setq dcl_res (start_dialog))
  (unload_dialog dcl_id)
  (if (= dcl_res 1)
    (progn

      (if (and (= (type (setq low_left_point
                               (vl-catch-all-apply
                                 (function (lambda ()
                                             (getpoint "\nУкажите левую внутреннюю нижнюю точку бокса <Отмена> : ")
                                           ) ;_ end of lambda
                                 ) ;_ end of function
                               ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
                  'list
               ) ;_ end of =
               low_left_point
          ) ;_ end of and
        (if (and (= (type (setq low_right_point
                                 (vl-catch-all-apply
                                   (function (lambda ()
                                               (getpoint low_left_point "\nУкажите правую внутреннюю нижнюю точку бокса <Отмена> :")
                                             ) ;_ end of lambda
                                   ) ;_ end of function
                                 ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
                    'list
                 ) ;_ end of =
                 low_right_point
            ) ;_ end of and
          (if (and (= (type (setq up_left_point
                                   (vl-catch-all-apply
                                     (function (lambda ()
                                                 (getpoint "\nУкажите левую внутренюю верхнюю точку бокса <Отмена> :")
                                               ) ;_ end of lambda
                                     ) ;_ end of function
                                   ) ;_ end of vl-catch-all-apply
                            ) ;_ end of setq
                      ) ;_ end of type
                      'list
                   ) ;_ end of =
                   up_left_point
              ) ;_ end of and
            (progn
              ;; Вот здесь в dcl_lst уже хранятся все необходимые данные. Теперь их можно разобрать и посмотреть, что и в каком месте строить.
              ;; Дополнительные проверки можно втыкать где угодно.
            )
            (princ "\nОтмена указания левой внутренней верхней точки бокса")
          ) ;_ end of if
          (princ "\nОтмена указания правой внутренней нижней точки бокса")
        ) ;_ end of if
        (princ "\nОтмена указания левой внутренней нижней точки бокса")
      ) ;_ end of if
    ) ;_ end of progn
    (princ "\nБыла нажата кнопка \"Отмена\"")
  ) ;_ end of if

  (princ)
) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.04.2022, 21:01
#4223
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Ухтыж
Да это космос, для меня. В выходные попробую что-нибудь понять.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А разве vibor функция, чтобы что-то возвращать? По-моему, это все же переменная, в которой что-то хранится.
Да, имел ввиду, что переменная принимает значение...

----- добавлено через ~2 мин. -----
Жаль конечно, что моя программа не заработает
Alxndr1697 вне форума  
 
Непрочитано 13.04.2022, 21:34
#4224
Кулик Алексей aka kpblc
Moderator

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


Да ну, там все достаточно просто. Выполнено разделение логики (хотя бы частично), повторяющийся код вынесен в отдельные локальные функции - и все.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.04.2022, 06:39
#4225
ShaggyDoc

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
повторяющийся код вынесен в отдельные локальные функции
Исчо бы в функцию вынести
Код:
[Выделить все]
 (vl-catch-all-apply
                                 (function (lambda ()
                                             (getpoint "\nУкажите левую внутреннюю нижнюю точку бокса <Отмена> : ")
                                           ) 
                                 ) 
                               )
Alxndr1697, если "нет времени", то надо писать сразу правильно, структурированно. Как Алексей сделал.

А если пытаться сходу и побыстрее, то получится "взрыв на макаронной фабрике", в котором никто не разберется.
ShaggyDoc вне форума  
 
Непрочитано 14.04.2022, 07:55
#4226
Кулик Алексей aka kpblc
Moderator

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


Offtop:
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Исчо бы в функцию вынести
Конечно, стоило бы. Но на практике я все время забываю это сделать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.04.2022, 21:47
#4227
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Подскажите, как создать группу?
В командной строке, - команда, выбор объектов, ентер.
Пишу в программе (command-s "_.group" Bok_l Bok_r N_p Fr_ass ""), - не работает.

Код:
[Выделить все]
(command-s "_.group" Bok_l Bok_r N_p Fr_ass "")

Последний раз редактировалось Alxndr1697, 16.04.2022 в 21:24.
Alxndr1697 вне форума  
 
Непрочитано 20.04.2022, 22:00
#4228
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Программа строит ящик (нижний). Копированием строится второй ящик. Подскажите, как выбрать второй ящик, для создания массива?
entlast строит только задние стенки
Код:
[Выделить все]
(if (> Col_vo 1)
  (progn
  (command-s "_.copy" Bok_l Bok_r N_p Front_sh Back_sh "" P_0 (list (car P_0) (cadr P_0) (+ (caddr P_0) (- (+ H_fasad Z_r) 19.5))) "");второй ящик

   (command-s "_.ucs" "x" 90)
   (command-s "_.arrayrect" (entlast) "" "_col" 1 1 "_r" (1- Col_vo) (+ H_fasad Z_r) "" "")
   (command-s "_.UCS" "_w")
  );end progn
);end if
Миниатюры
Нажмите на изображение для увеличения
Название: 2022-04-20_220140.jpg
Просмотров: 28
Размер:	49.5 Кб
ID:	246847  
Alxndr1697 вне форума  
 
Непрочитано 21.04.2022, 07:32
#4229
Кулик Алексей aka kpblc
Moderator

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


Создавай объекты некомандными методами. И насколько тебе нужен именно массив? Может, проще будет вообще все в блок засовывать сразу?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.04.2022, 07:44
#4230
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Создавай объекты некомандными методами
По плану, эту программу дописать и заняться изучением.


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
И насколько тебе нужен именно массив?
Другого способа не вижу.


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Может, проще будет вообще все в блок засовывать сразу?
Пробовал. Все равно, надо выбирать "второй" блок и проблема (для меня) в том, что если в рисунке предполагается потом рисовать ящики с другими параметрами, вставляется этотже блок. Решения не нашел. Хотел попробовать через группу, - не получилось, да и проблема с выбором осталась бы, наверное.

----- добавлено через ~2 мин. -----
Комп еще поломался(((
Alxndr1697 вне форума  
 
Непрочитано 21.04.2022, 08:05
#4231
Кулик Алексей aka kpblc
Moderator

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


Чего там изучать-то?
(vl-load-com)
(defun c:Example_AddBox()
;; This example creates a box in model space.
(setq acadObj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument acadObj))

;; Define the box
(setq center (vlax-3d-point 5 5 0)
boxLength 5
boxWidth 7
boxHeight 10)

;; Create the box (3DSolid) object in model space
(setq modelSpace (vla-get-ModelSpace doc))
(setq boxObj (vla-AddBox modelSpace center boxLength boxWidth boxHeight))

;; Change the viewing direction of the viewport to better see the box
(setq NewDirection (vlax-3d-point -1 -1 1))
(setq activeViewport (vla-get-ActiveViewport doc))
(vla-put-Direction activeViewport NewDirection)
(vla-put-ActiveViewport doc activeViewport)
(vla-ZoomAll acadObj)
)

По общей идеологии:
  1. Создать описание анонимного блока
  2. Внутрь блока добавлять создаваемые солиды, слегка переделав пример из справки
  3. Вставить блок. В принципе, отдельная и очень большая тема, если не поступать "по-простому" - запросить точку вставки и в нее зашарашить вставку, без отрисовки.
Код:
[Выделить все]
 (defun fun_create-box-low-left-point (where low-left-point len width height / center res)
                                     ;|
  *    Создание "бокса"
  *    Параметры вызова:
    where          ; vla-указатель на владельца
    low-left-point ; левая нижняя точка в WCS
    len            ; длина ящика (oX)
    width          ; ширина ящика (oY)
    height         ; высота ящика (oZ)
  *    Возвращает vla-указатель на созданный бокс или nil
  *    Примеры вызова:
  (fun_create-box-low-left-point (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) '(0. 0. 0.) 20 40 60)
  |;
  (setq center (mapcar (function (lambda (a b) (* (+ a b) 0.5))) low-left-point (list len width height)))
  (if (vl-catch-all-error-p
        (setq res (vl-catch-all-apply
                    (function
                      (lambda ()
                        (vla-addbox where (vlax-3d-point center) len width height)
                      ) ;_ end of lambda
                    ) ;_ end of function
                  ) ;_ end of vl-catch-all-apply
        ) ;_ end of setq
      ) ;_ end of vl-catch-all-error-p
    (progn
      (princ (strcat "\nError creating box : " (vl-catch-all-error-message res)))
      nil
    ) ;_ end of progn
    res
  ) ;_ end of if
) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.04.2022, 21:59
#4232
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Чего там изучать-то?
Легко Вам говорить)))
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Слегка переработанный вариант создания бокса
У меня, почему-то, не работает.


Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
Подскажите, как выбрать второй ящик, для создания массива?
Неужели нет решения? Осталась только эта команда для завершения.
Alxndr1697 вне форума  
 
Непрочитано 21.04.2022, 22:16
#4233
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
У меня, почему-то, не работает.
Че ета не работает? Пример вызова есть, функция возвращает vla-указатель на созданный бокс. vla-copy для него, vla-move для созданной копии - и вперед!

----- добавлено через 35 сек. -----
В качестве подсказки: http://www.cad.dp.ua/stats/vla_doc.php
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.04.2022, 22:36
#4234
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
vla-указатель на созданный бокс. vla-copy для него, vla-move для созданной копии - и вперед!
Я правильно понял мысль, - создать ящик, потом необходимое количество его копий и перемещать копии в нужные места, так?

----- добавлено через 55 сек. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Че ета не работает?
Полюбасу, чета не так делаю)))

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
В качестве подсказки: http://www.cad.dp.ua/stats/vla_doc.php
Добавил в закладки
Alxndr1697 вне форума  
 
Непрочитано 21.04.2022, 23:12
#4235
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
Я правильно понял мысль, - создать ящик, потом необходимое количество его копий и перемещать копии в нужные места, так?
Можно и так.
Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
Полюбасу, чета не так делаю)))
Попробуй вызов, подставь свои значения, запомни результат. К примеру:
Код:
[Выделить все]
 (setq a (fun_create-box-low-left-point (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) '(0. 0. 0.) 20 40 10))
(vla-put-color a 1)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.04.2022, 06:43
#4236
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй вызов,
Набираю в командной строке (fun_create-box-low-left-point), Энтер, - выкидывает в окно редактора.

----- добавлено через ~3 мин. -----
(vl-load-com) пробовал добавлять и как команду назначал. С тем же результатом.
Alxndr1697 вне форума  
 
Непрочитано 22.04.2022, 08:07
#4237
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
Набираю в командной строке (fun_create-box-low-left-point), Энтер, - выкидывает в окно редактора.

----- добавлено через ~3 мин. -----
(vl-load-com) пробовал добавлять и как команду назначал. С тем же результатом.
Эммм... Вот это
Код:
[Выделить все]
*    Примеры вызова:
	  (fun_create-box-low-left-point (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) '(0. 0. 0.) 20 40 60)
я для кого делал?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.04.2022, 12:30
#4238
koMon


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


Цитата:
Сообщение от Alxndr1697 Посмотреть сообщение
Подскажите, как выбрать второй ящик, для создания массива?
ятд надо создать выборку объектов, которую затем можно запихнуть в массив:

Код:
[Выделить все]
(if (> Col_vo 1)
  (progn

  (setq entity (entlast))

  (command-s "_.copy" Bok_l Bok_r N_p Front_sh Back_sh "" P_0 (list (car P_0) (cadr P_0) (+ (caddr P_0) (- (+ H_fasad Z_r) 19.5))) "") ;второй ящик
   (command-s "_.ucs" "x" 90)

 	
 	(setq box_lower_sset (ssadd))
	(while (setq entity (entnext entity))
		(setq box_lower_sset (ssadd entity box_lower_sset))
	)

   (command-s "_.arrayrect" box_lower_sset "" "_col" 1 1 "_r" (1- Col_vo) (+ H_fasad Z_r) "" "")
   (command-s "_.UCS" "_w")
  );end progn
);end if
и касательно построения 3d боксов, почему бы не озадачиться вставкой единичных блоков боксов с масштабами по осям координат, равными исполнительным размерам составляющих и удобной точкой вставки (заранее определённого или сделанного на лету)? и пск крутить вертеть, это как-то несерьёзно)
и командные методы, тут я согласен с Алексеем, надо юзать activex!)
koMon вне форума  
 
Непрочитано 22.04.2022, 21:22
#4239
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Эммм... Вот это
я для кого делал?
Заработало

----- добавлено через ~24 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
и касательно построения 3d боксов
Тут, видимо произошло некоторое недопонимание. То, что я назвал ящиком, это не бокс, это "мебельный ящик" в самом прямом смысле слова, который состоит из пяти примитивов с четвертями и пазами.

----- добавлено через ~17 мин. -----
koMon Спасибо!!! Все получилось!

Последний раз редактировалось Alxndr1697, 22.04.2022 в 22:21.
Alxndr1697 вне форума  
 
Непрочитано 25.04.2022, 21:50
#4240
Alxndr1697


 
Регистрация: 24.01.2008
Подольск
Сообщений: 168


Объясните, пожалуйста, в строке:
Код:
[Выделить все]
(while (setq entity (entnext entity))
вычисляется последующий примитив от переменной entity. Почему он запоминается под тем же именем? Ведь эта переменная уже используется выше.
Alxndr1697 вне форума  
Ответ
Вернуться   Форум 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