Model Studio CS
dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

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

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

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

Red Nova вне форума Вставить имя

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (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, 03.12.2013 в 12:43.
Просмотров: 938253
 
Непрочитано 18.04.2017, 06:44
#3301
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 1,287


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Таким методом работают ссылки на дин. свойства но не на атрибуты.
И атрибуты тоже. Другое дело, что в строку нужно вставлять не ID блока, а ID самого атрибута, т.к. атрибут самостоятельный объект.
ЗЫ.
И если не сложно, дополните пожалуйста код, до рабочего состояния, не у всех есть набор используемых Вами функций.

Последний раз редактировалось Boxa, 18.04.2017 в 06:56.
Boxa вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 18.04.2017, 06:56
#3302
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,949
Отправить сообщение для Red Nova с помощью Skype™


Цитата:
Сообщение от Boxa Посмотреть сообщение
И атрибуты тоже. Другое дело, что в строку нужно вставлять не ID блока, а ID самого атрибута, т.к. атрибут самостоятельный объект.
Все верно.
Но проблема с регенерацией у меня осталась...
__________________
Блог
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.04.2017, 07:04
1 | #3303
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 1,287


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Но проблема с регенерацией у меня осталась...
_UPDATEFIELD вместо Regen пробовали?
Код:
[Выделить все]
 
;create a selection set of items eg: all items on your prefered layer
(setq #temp (ssget "X" (list (cons 8 "Your_Layer_Name"))))

;then update all items on the layer in selectionset
(command ".updatefield" #temp "")
Boxa вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 18.04.2017, 19:59
#3304
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,949
Отправить сообщение для Red Nova с помощью Skype™


За ".updatefield" спасибо, не знал. Очень полезно. Искал как-то нечто подобное но не нашел...
Про мой блок - дальнейшие тесты показали, что если не редактировать атрибут существующего блока а вводить содержание его при вставке блока , то поле сразу отображается как нужно.
__________________
Блог
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 22.04.2017, 06:03
#3305
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,949
Отправить сообщение для Red Nova с помощью Skype™


Други, у меня баг при использовании vlr-object-reactor для атрибута дин. блока.
Дин. блок имеет линейный параметр ширины рамки, который по задумке реактора изменяется в зависимости от содержания атрибута. То есть каждый раз получаем ширину атрибута через vla-getBoundingBox и соответственно изменяем ширину рамки. Все работает пока не добавить в дин блок flip state. Без реактора флипает нормально, а с реактором атрибут, после флипа, получает при изменении текста непонятное смещение.
Может кто с таким встречался? Вот код и файл примера.

Код:
[Выделить все]
 (defun c:test (/ *error* var val CSblk vlaCSblk tagtext pt TagTextWidth vlaattobj OutsideTagFieldReactor)
  (defun *error* ( msg )
    (mapcar 'setvar var val)
    (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
                 (princ (strcat "\nError: " msg)))
    (vla-endundomark adoc))
  (vl-load-com)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (setq var '(cmdecho attreq attdia) 
        val  (mapcar 'getvar var))
  (setvar "CMDECHO" 0)
  (setvar "ATTREQ" 1)
  (setvar "ATTDIA" 0)
  (setq CSblk (ssget "_:S" '((0 . "INSERT")(66 . 1))))
  (setq vlaCSblk (car (setq vlaCSblk (LM:ss->vla CSblk))))
  (setq tagtext
	 (strcat
	   "ga, L="
	   (strcat "%<\\AcObjProp Object(%<\\_ObjId " (vl-princ-to-string(Get-ObjectID-x86-x64 vlaCSblk)) ">%).Parameter(16).UpdatedDistance \\f \"%lu4%pr2\">%")
	   )
	)
  (setq pt (getpoint "Specify Tag Insertion Point"))
  (command "_.Insert" "BMP Tag CS Outside" pt 1 1 "" tagtext)
  (setq obj (entlast))
  (setq vlaobj (vlax-ename->vla-object obj))
  (setq vlaattobj (car (vlax-safeArray->list (vlax-variant-value (vla-getAttributes vlaobj)))))
  (setq OutsideTagFieldReactor (vlr-object-reactor (list vlaattobj vlaobj)
		      "Outside Tag Field Reactor" '((:vlr-modified . UpdateTagField))))
  (vlr-pers OutsideTagFieldReactor)
  (setq TagTextWidth (RN:GetAttWidth vlaobj))
  (setq TagBoxSize (+ TagTextWidth (/ 0.1 (getvar 'CANNOSCALEVALUE))))
  (LM:setdynpropvalue vlaobj "Tag Box Size" TagBoxSize)
  (vla-endundomark adoc)
  (princ)
  (*error* nil)
  )

(defun UpdateTagField (notifier-object reactor-object parameter-list /
		       objlist a b TagTextWidth TagBoxSize )
  (setq objlist (vlr-owners reactor-object))
  (if
    (= notifier-object (nth 1 objlist))
    (progn
      (vla-getBoundingBox (nth 1 objlist) 'a 'b)
      (setq a (vlax-safeArray->list a))
      (setq b (vlax-safeArray->list b))
      (setq TagTextWidth (- (car b) (car a)))
      (setq TagBoxSize (+ TagTextWidth (/ 0.1 (getvar 'CANNOSCALEVALUE))))
      (if
	(wcmatch (LM:effectivename (nth 0 objlist)) "BMP Tag*")
	(LM:setdynpropvalue (nth 0 objlist) "Tag Box Size" TagBoxSize)
	)
      )
    )
  )

(defun UpdateTagFieldX (notifier-object reactor-object parameter-list /
		       objlist a b TagTextWidth TagBoxSize )
  (setq objlist (vlr-owners reactor-object))
  (if
    (= notifier-object (nth 0 objlist))
    (progn
      (vla-getBoundingBox (nth 0 objlist) 'a 'b)
      (setq a (vlax-safeArray->list a))
      (setq b (vlax-safeArray->list b))
      (setq TagTextWidth (- (car b) (car a)))
      (setq TagBoxSize (+ TagTextWidth (/ 0.1 (getvar 'CANNOSCALEVALUE))))
      (LM:setdynpropvalue (nth 1 objlist) "Tag Box Size" TagBoxSize)
      )
    )
  )

(defun Get-ObjectID-x86-x64 (obj / util)
  (setq util (vla-get-Utility (vla-get-activedocument (vlax-get-acad-object))))
  (if (= (type obj) 'ENAME)(setq obj (vlax-ename->vla-object obj)))
  (if (= (type obj) 'VLA-OBJECT)
     (if (> (vl-string-search "x64" (getvar "platform")) 0)
       (vlax-invoke-method util "GetObjectIdString" obj :vlax-False)
       (rtos (vla-get-objectid obj) 2 0)
     )
  )
)

(defun RN:GetAttWidth (obj / atts att a b w rot)
  (vl-load-com)
  (setq rot (vlax-get-property obj 'Rotation))
  (vlax-put obj 'Rotation 0)
  (if
    (= (vla-get-hasAttributes obj) :vlax-true)
    (progn
      (setq atts (vlax-safeArray->list
		   (vlax-variant-value (vla-getAttributes obj))))
      (foreach att atts
	(vla-getBoundingBox att 'a 'b)
	(setq a (vlax-safeArray->list a))
	(setq b (vlax-safeArray->list b))
	(setq w (- (car b) (car a)))
	);foreach
      );progn
    );if
  (vlax-put obj 'Rotation rot)
  (princ w)
  )

(defun LM:setdynpropvalue ( blk prp val )
    (setq prp (strcase prp))
    (vl-some
       '(lambda ( x )
            (if (= prp (strcase (vla-get-propertyname x)))
                (progn
                    (vla-put-value x (vlax-make-variant val (vlax-variant-type (vla-get-value x))))
                    (cond (val) (t))
                )
            )
        )
        (vlax-invoke blk 'getdynamicblockproperties)
    )
)

(defun LM:effectivename ( obj )
    (vlax-get-property obj
        (if (vlax-property-available-p obj 'effectivename)
            'effectivename
            'name
        )
    )
)
Добавлено. Вру. Реактор тут не причем. Нужно динамический блок потыкать...
Вложения
Тип файла: dwg
DWG 2013
sample file reactor.dwg (121.0 Кб, 13 просмотров)
__________________
Блог

Последний раз редактировалось Red Nova, 22.04.2017 в 20:28.
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 23.04.2017, 03:15
#3306
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,949
Отправить сообщение для Red Nova с помощью Skype™


По предыдущему посту - я просто не учел что флип не меняет направления текста. Убрал флип чтобы пока не мешал... Пошли дальше.

Первый вариант объектного реактора у меня работает.
Но когда попытался усложнить код возникли проблемы.
В реакторе многие команды не работают. По крайней мере у меня...
Итак я имею блок маркера текст в котором может иметь разную ширину. Чтобы рамка блока маркера совпадала по ширине с текстом и пишется реактор.
При вставке блока я получаю ширину текста при помощи vla-getBoundingBox, при этом если блок повернут то я перед применением vla-getBoundingBox поворачивал блок как нужно, получал ширину и возвращал прежний поворот. Такой трюк в реакторе не работает. Не знаю в чем дело. На строчке vlax-put код слетает.

В прикрепленном коде закомментил следующие строки, которые должны производить трюк с поворотом блока при получении BoundingBox. На них происходит вылет.
Вот они.

;(setq rot (vlax-get-property (nth 0 objlist) 'Rotation))
;(vlax-put (nth 1 objlist) 'Rotation 0)
(vla-getBoundingBox (nth 1 objlist) 'a 'b)
;(vlax-put (nth 1 objlist) 'Rotation rot)

В теперешнем виде все работает, но для повернутых блоков vla-getBoundingBox получает не те координаты что нужно.

Почему vlax-put не работает в реакторе?
Вложения
Тип файла: lsp test3.LSP (4.2 Кб, 5 просмотров)
Тип файла: dwg
DWG 2013
sample file reactor 2.dwg (93.8 Кб, 6 просмотров)
__________________
Блог
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 24.04.2017, 16:43
#3307
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,949
Отправить сообщение для Red Nova с помощью Skype™


Решение нашлось благодоря замене vla-getBoundingBox на функзию от Lee Mac.

Код:
[Выделить все]
 ;; Text Box  -  Lee Mac
;; A wrapper for the textbox function to return the bounding box of a Text or Attrib (in OCS)
(defun LM:textbox ( ent / ins mat rot )
        (setq ent (entget ent)
              ins (cdr (assoc 10 ent))
              rot (cdr (assoc 50 ent))
              mat (list
                      (list (cos rot) (sin (- rot)) 0.0)
                      (list (sin rot) (cos rot)     0.0)
                     '(0.0 0.0 1.0)
                  )
        )
        (mapcar '(lambda ( x ) (mapcar '+ (mxv mat x) ins)) (LM:points->boundingbox (textbox ent)))
    )

;; Points to Bounding Box  -  Lee Mac
;; Returns the rectangular extents of a supplied point list
(defun LM:points->boundingbox ( lst )
    (   (lambda ( l )
            (mapcar '(lambda ( a ) (mapcar '(lambda ( b ) ((eval b) l)) a))
               '(
                    (caar   cadar)
                    (caadr  cadar)
                    (caadr cadadr)
                    (caar  cadadr)
                )
            )
        )
        (mapcar '(lambda ( f ) (apply 'mapcar (cons f lst))) '(min max))
    )
)

;; Matrix x Vector  -  Vladimir Nesterovsky
;; Args: m - nxn matrix, v - vector in R^n
(defun mxv ( m v )
    (mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) m)
)
 
(princ)
__________________
Блог

Последний раз редактировалось Red Nova, 24.04.2017 в 22:18.
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 03.05.2017, 16:39
#3308
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,949
Отправить сообщение для Red Nova с помощью Skype™


Никак не выходит отключить Object Reactor для определенных блоков.
Как правильно обозначить Object Reactor в рамках vlr-owner-remove?
Вот так не работает:
Цитата:
(vlr-owner-remove '#<VLR-Object-Reactor> owner)
Error: bad argument type: Object reactor: #<VLR-OBJECT-REACTOR>
В хелпе такой пример:
Цитата:
(vlr-owner-remove circleReactor archie)
#<VLA-OBJECT IAcadArc 03ad0bcc>
Но как до того назначить кто такой circleReactor?
Если при создании реактора я именую его TagFieldReactor
Цитата:
(setq TagFieldReactor (vlr-object-reactor (reverse (cons vlaobj vlaattobj))
"TagFieldReactor" '((:vlr-modified . UpdateTagField))))
И при этом TagFieldReactor - глобальная переменная, получаю
Цитата:
(vlr-owner-remove TagFieldReactor owner)
Error: bad argument type: Object reactor: nil
__________________
Блог
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.05.2017, 07:41
#3309
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,014


Возможно ли как-то в лиспе добиться "псевдо-вложенности" меток отмены? Если схематично, то имею в виду нечто следующее:
Код:
[Выделить все]
[НАЧАЛО] <начало_1><конец_1>   <начало_2><конец_2> ............<начало_N><конец_N>   [КОНЕЦ]
Я понимаю: явно (в лоб) этого не сделать, поскольку известно, что вторая подряд начальная метка отката "стирает" первую. Но может, можно как-то логически или аналитически схитрить?

Пример.
Программа в цикле поочередно (с помощью nentsel) просит указать подобъекты блока. Указанный подобъект незамедлительно стирается. До момента завершения команды (прерывания цикла по Enter) я хочу отменять по Ctrl+Z удаление каждого подобъекта по одному, а после завершения - отменить удаление сразу всех подобъектов.

Подобный принцип реализован в штатной _.PLINE: в процессе отрисовки можем убирать по одному сегменту, а по ее завершении - можно отменить сразу всю полилинию.
skkkk на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.05.2017, 07:55
#3310
Saur


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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Никак не выходит
Red Nova, до сих пор лисп не освоил?

Последний раз редактировалось Saur, 09.05.2017 в 13:01.
Saur вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.05.2017, 09:50
#3311
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 3,293


Цитата:
Сообщение от skkkk Посмотреть сообщение
Программа в цикле поочередно (с помощью nentsel) просит указать подобъекты блока. Указанный подобъект незамедлительно стирается. До момента завершения команды (прерывания цикла по Enter) я хочу отменять по Ctrl+Z удаление каждого подобъекта по одному, а после завершения - отменить удаление сразу всех подобъектов.
если с помощью grread можно перехватить нажатие Ctrl-Z и эта функция срабатывает раньше, чем nentsel (в .Net и ObjectARX перехват событий системы соответствующей функцией осуществляется на самом входе в акад, не знаю как в лиспе) - то не удалять, а скрывать объекты. И вести стек "удаленных" объектов. А саму команду обкрутить стандартными маркерами отмены. Т.е. внутри команды происходит перехват хоткея отмены и просто показывается объект с удалением из стека. После завершения команды все объекты чохом удаляются - но за их восстановление уже будет отвечать стандартный механизм отмены.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.05.2017, 16:46
#3312
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,014


Сергей812, идея для данного примера здравая, спасибо - суть хитрости уловил. Не додумался даже до такой. Было у меня еще пару-тройку программ, где я хотел бы реализовать подобный механизм, но сейчас что-то не припомню, где именно.
Причем тут с перехватом нажатия Ctrl+Z проблем нет, даже без grread. Это сочетание просто передает в командную строку символы _U, которые можно назначить в качестве ключевого слова переменной на запрос nentsel (предварив initget'ом) - и далее обработать. Тут я столкнулся с другим: как скрыть объект внутри блока? С удалением проблем нет: применяем vla-Delete ко вложенному объекту, затем entupd ко всему блоку - даже не подвисает ни на секунду. А вот как скрыть, пока не пойму. Redraw с аргументом 2 (скрыть примитив, перерисовать цветом фона) работает только в активном пространстве. Метод HighLight может только подсветить примитив пунктиром.

Пока писал, навела на мысль эта ремарка Полещука: "перерисовать цветом фона". Вроде, подходит. Ладно, свой цвет я знаю и не меняю его - стандартный черный (AC 2011) - 0, 0, 0. Назначаю его подпримитиву - и дело в шляпе, казалось бы... Но цвет не у всех такой. А выяснить программно на лиспе цвет фона нельзя (цитата из Полещука):
Цитата:
Этот тип данных не поддерживается AutoLISP, тем не менее управлять цветом можно, зная цифровые коды цветов, но нельзя получить значение установленного цвета
фактически.
Не выходит вычислить значение полученного варианта (#<variant 19 16777215>):
Цитата:
;;; error: LISPFromPtr failed. The type is not supported: 19
Выходит, придется каждому юзеру прописывать в коде цвет индивидуально. Может, у кого еще какие мысли найдутся?
Сергей812, еще раз большое спасибо за хорошую идею.
И всех с праздником Великой Победы!
skkkk на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.05.2017, 17:19
#3313
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 3,293


Варианты:
1. Переносить на вспомогательный выключенный слой
2. Полещук. п. 8.2.636. Свойство Visible
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 10.05.2017, 08:33
#3314
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
каждому юзеру прописывать в коде цвет индивидуально.
На форуме были коды получения цвета фона любого пространства.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 11.05.2017, 00:35
#3315
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,014


Сергей812, и снова спасибо. С п.2 - в точку. Забыл я что-то про него. Не приходилось вроде, еще использовать, хватало до этого redraw.
Кулик Алексей aka kpblc, вроде как уже и не надо для этой задачи, но все равно стало любопытно, однако найти такой код так и не удалось. Только для изменения цвета нашел.
skkkk на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 11.05.2017, 01:40
#3316
frostmourn


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


skkkk, вот, например: http://forum.dwg.ru/showthread.php?t=49422
frostmourn вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 11.05.2017, 05:44
#3317
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,949
Отправить сообщение для Red Nova с помощью Skype™


Цитата:
Сообщение от Saur Посмотреть сообщение
Red Nova, до сих пор лисп не освоил?
Зависит от того что понимать под словом освоить. Толком я занялся лиспом только в этом году. Многое (не особо сложное) получается довольно неплохо. Для сельской местности хватает. Но осваивать там еще много чего. Хотя и цель познать все не стоит, только то что нужно для конкретных задач.

__________________
Блог

Последний раз редактировалось Red Nova, 11.05.2017 в 06:46.
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 11.05.2017, 05:50
#3318
Titli-pytli


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


Здравствуйте! Извините, может вопрос уже был, найти не смог. В динамическом блоке есть параметр "отражение", соответственно возможны два варианта настройки: "Без отражения", "отраженное". В каком виде данных скармливать параметр функции vla-put-value для изменения этого динамического свойства?
Titli-pytli вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 11.05.2017, 06:14
1 | #3319
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,949
Отправить сообщение для Red Nova с помощью Skype™


Titli-pytli
Вот вариант от Lee Mac-а
Код:
[Выделить все]
 ;; Toggle Dynamic Block Flip State  -  Lee Mac
;; Toggles the Flip parameter if present in a supplied Dynamic Block.
;; blk - [vla] VLA Dynamic Block Reference object
;; Return: [int] New Flip Parameter value

(defun LM:toggleflipstate ( blk )
    (vl-some
       '(lambda ( prp / rtn )
            (if (equal '(0 1) (vlax-get prp 'allowedvalues))
                (progn
                    (vla-put-value prp (vlax-make-variant (setq rtn (- 1 (vlax-get prp 'value))) vlax-vbinteger))
                    rtn
                )
            )
        )
        (vlax-invoke blk 'getdynamicblockproperties)
    )
)
__________________
Блог
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 11.05.2017, 07:33
#3320
Fedorino

автоматизация и организация черчения
 
Регистрация: 17.11.2009
Sterlitamak
Сообщений: 106


Здравствуйте! Подскажите пожалуйста, как заставить подобную конструкцию работать
Код:
[Выделить все]
 (setq pt (getpoint "\nУкажите точку: [привет]"))
(alert (vl-princ-to-string pt))
чтобы по нажатию мыши на привет, выводился привет.
Т.е. чтобы при выборе точки всегда была возможность сделать еще что-либо в текущем режиме.
Спасибо!
__________________
слесарь САПР
Fedorino вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

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

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

Быстрый переход

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

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||


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