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

Вернуться   Форум 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.
Просмотров: 1965811
 
Непрочитано 05.06.2017, 07:04
#3341
Fedorino

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


Снова здравствуйте!
В продолжение предыдущего вопроса.
Необходимо либо выбрать объект, либо сразу ввести значение, возможно ли такое?
Т.е. в переменную записывается либо сам объект, либо любое введенное значение.
Например, вводим число 5, в переменную записалось число 5.
Если щелкнули мышью по объекту, записалось имя объекта.
Код:
[Выделить все]
 (setq es (entsel "\nВыберите объект: "))
(princ es) ; 5 или имя объекта
----- добавлено через ~6 ч. -----
Никто не подсказывает, пришлось думать самому.
Воткнул в initget возможные варианты значений от 0 до 10 с шагом 0.1.
Возможно и глупо, но теперь можно выбрать либо объект, либо ввести необходимое значение, сразу.
Код:
[Выделить все]
 	; формируем initget
		(setq i 0.0)
		(setq str "")
	(repeat 100
		(setq i (+ i 0.1))
		(if (eq (rem (* i 10) i) 0) (setq a 0) (setq a 1))
		(setq str (strcat str (rtos i 2 a) " "))
	)

       (initget str)
       (while
          (setq es (entsel "\nВыберите объект или введите расстояние: "))
          (alert (vl-princ-to-string es))
       )
__________________
слесарь САПР
Fedorino вне форума  
 
Непрочитано 09.06.2017, 09:07 Помогите доделать LISP
#3342
Sergey91@06


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


Здравствуйте, друзья! Необходима ваша помощь
Нашел в интернете полезный LISP - создающий выноску с именем блока, немного адаптировал под себя, т.к. необходимо было чтобы на выноске отображалось не имя блока а название видимости. Проблемы начинаются когда у блока много атрибутов - вместо названия видимости на выноске отображается ###. Так понимаю вся проблема в строке: ">%).Parameter(1).VisibilityState>%", как только видимость перестает быть параметром номер 1 - отображается ###. Пытался с помощью субфункций от LeeMac реализовать вставку значения не путем ссылки, а просто вставки текста = название видимости, пусть даже они не будут связаны ссылкой на параметр объекта.
В общем мне необходимо понять, что нужно исправить в нижнем коде, в который я добавил функции от LeeMac, а именно что нужно написать вместо: "AcDbBlockVisibilityParameterEntity"(в исходной версии:"%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-objectid pline)) ">%).Parameter(1).VisibilityState>%")
Рабочий код:
Код:
[Выделить все]
(defun C:BLNM (/ acsp adoc ent mtx p1 p2 pline txt)
  (vl-load-com)
  (or adoc
      (setq adoc
	     (vla-get-activedocument
	       (vlax-get-acad-object)
	     )
      )
  )
  (if (and
	(= (getvar "tilemode") 0)
	(= (getvar "cvport") 1)
      )
    (setq acsp (vla-get-paperspace adoc))
    (setq acsp (vla-get-modelspace adoc))
  )
  (setq
    pline (vlax-ename->vla-object
	    (car (setq ent (entsel "\n >> Выбрать блок >> \n")))
	  )
  )
  (setq	txt
	 (strcat
	   "%<\\AcObjProp Object(%<\\_ObjId "
	   (itoa (vla-get-objectid pline))
	  ">%).Parameter(1).VisibilityState>%"
	 )
  )
  (setq	p1 (cadr ent)
	p2 (getpoint p1 "\nВторая точка >> \n")
  )
  (setq	mtx (vlax-invoke
	      acsp 'AddMText p2	0.0 txt)
  )
  (vlax-put mtx
	    'AttachmentPoint
	    (cond ((> (car p1) (car p2))
		   acAttachmentPointMiddleRight
		  )
		  ((< (car p1) (car p2))
		   acAttachmentPointMiddleLeft
		  )
		  (T acAttachmentPointMiddleLeft)
	    )
  )

  (vlax-invoke
    acsp
    'Addleader
    (apply 'append (list p1 p2))
    mtx
    acLineWithArrow
  )
  (vl-catch-all-apply
    (function (lambda ()
		(progn
		  (vlax-release-object mtx)
		  (vlax-release-object pline)
		)
	      )
    )
  )
  (vla-regen adoc acactiveviewport)
  (princ)
)
(prompt "\n")
(prompt "\t\t<<< Ввести BLNM для старта программы :  >>>  \n")
(princ)
; TesT : (C:BLNM)LISP]
Моя криворукая попытка вставить значение видимости в обход ссылки на параметр:
Код:
[Выделить все]
(defun C:BLNM (/ acsp adoc ent mtx p1 p2 pline txt)
(defun LM:SetVisibilityState ( blk val / vis )
    (if
        (and
            (setq vis (LM:getvisibilityparametername blk))
            (member (strcase val) (mapcar 'strcase (LM:getdynpropallowedvalues blk vis)))
        )
        (LM:setdynpropvalue blk vis val)
    )
)
(defun LM:getvisibilitystate ( blk )
    (LM:getdynpropvalue blk (LM:getvisibilityparametername blk))
)
(defun LM:getvisibilityparametername ( blk / vis )  
    (if
        (and
            (vlax-property-available-p blk 'effectivename)
            (setq blk
                (vla-item
                    (vla-get-blocks (vla-get-document blk))
                    (vla-get-effectivename blk)
                )
            )
            (= :vlax-true (vla-get-isdynamicblock blk))
            (= :vlax-true (vla-get-hasextensiondictionary blk))
            (setq vis
                (vl-some
                   '(lambda ( pair )
                        (if
                            (and
                                (= 360 (car pair))
                                (= "BLOCKVISIBILITYPARAMETER" (cdr (assoc 0 (entget (cdr pair)))))
                            )
                            (cdr pair)
                        )
                    )
                    (dictsearch
                        (vlax-vla-object->ename (vla-getextensiondictionary blk))
                        "ACAD_ENHANCEDBLOCK"
                    )
                )
            )
        )
        (cdr (assoc 301 (entget vis)))
    )
)
  (vl-load-com)
  (or adoc
      (setq adoc
	     (vla-get-activedocument
	       (vlax-get-acad-object)
	     )
      )
  )
  (if (and
	(= (getvar "tilemode") 0)
	(= (getvar "cvport") 1)
      )
    (setq acsp (vla-get-paperspace adoc))
    (setq acsp (vla-get-modelspace adoc))
  )
  (setq
    pline (vlax-ename->vla-object
	    (car (setq ent (entsel "\n >> Выбрать блок >> \n")))
	  )
  )
  (setq	txt
	 (strcat
	   "AcDbBlockVisibilityParameterEntity"
	 )
  )
  (setq	p1 (cadr ent)
	p2 (getpoint p1 "\nВторая точка >> \n")
  )
  (setq	mtx (vlax-invoke
	      acsp 'AddMText p2	0.0 txt)
  )
  (vlax-put mtx
	    'AttachmentPoint
	    (cond ((> (car p1) (car p2))
		   acAttachmentPointMiddleRight
		  )
		  ((< (car p1) (car p2))
		   acAttachmentPointMiddleLeft
		  )
		  (T acAttachmentPointMiddleLeft)
	    )
  )

  (vlax-invoke
    acsp
    'Addleader
    (apply 'append (list p1 p2))
    mtx
    acLineWithArrow
  )
  (vl-catch-all-apply
    (function (lambda ()
		(progn
		  (vlax-release-object mtx)
		  (vlax-release-object pline)
		)
	      )
    )
  )
  (vla-regen adoc acactiveviewport)
  (princ)
)
(prompt "\n")
(prompt "\t\t<<< Ввести BLNM для старта программы :  >>>  \n")
(princ)
; TesT : (C:BLNM)LISP]
Миниатюры
Нажмите на изображение для увеличения
Название: gif00001.gif
Просмотров: 27
Размер:	1.00 Мб
ID:	189472  
Sergey91@06 вне форума  
 
Непрочитано 09.06.2017, 13:05
#3343
100k

Жалкий инженеришка-проектаст
 
Регистрация: 31.01.2010
Сообщений: 1,986


Господа, подскажите мне пожалуйста:
1. Lisp это функциональный язык?
2. Похож он на F#?
4. Если похож, то значит там используются лямбда выражения?
100k вне форума  
 
Непрочитано 09.06.2017, 16:54
#3344
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
1. Lisp это функциональный язык?
это отец всех функциональных языков



Цитата:
4. Если похож, то значит там используются лямбда выражения?
lisp это сплошная лямбда
trir вне форума  
 
Непрочитано 09.06.2017, 18:17
#3345
gomer

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


Цитата:
Сообщение от 100k Посмотреть сообщение
Господа, подскажите мне пожалуйста:
1. Lisp это функциональный язык?
2. Похож он на F#?
4. Если похож, то значит там используются лямбда выражения?
1. нет
2. нет
4. нет, да
3.?
gomer вне форума  
 
Непрочитано 17.06.2017, 13:01 неверно сформированный список на входе
#3346
Sergey91@06


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


Добрый день!
LISP-код выдает ошибку: ; ошибка: неверно сформированный список на входе
Помогите пожалуйста исправить ошибку

Код:
[Выделить все]
(defun C:BLNM3 (/ acsp adoc ent mtx p1 p2 pline txt)
  (vl-load-com)
  (or adoc
      (setq adoc
	     (vla-get-activedocument
	       (vlax-get-acad-object)
	     )
      )
  )
  (if (and
	(= (getvar "tilemode") 0)
	(= (getvar "cvport") 1)
      )
    (setq acsp (vla-get-paperspace adoc))
    (setq acsp (vla-get-modelspace adoc))
  )
  (setq
    pline (vlax-ename->vla-object
	    (car (setq ent (entsel "\n >> Выберите блок >> \n")))
	  )
  )
(setq text (if (GetParamIDbyName name "Состояние видимости")
                                    (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                                          (itoa (vla-get-ObjectID vla))
                                          ">%).Parameter("
                                          (itoa (GetParamIDbyName name "Состояние видимости"))
                                          ").VisibilityState>%"
                                          )
                                    (if (GetParamIDbyName name "Stav viditelnosti")
                                      (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                                            (itoa (vla-get-ObjectID vla))
                                            ">%).Parameter("
                                            (itoa (GetParamIDbyName name "Stav viditelnosti"))
                                            ").VisibilityState>%"                                      
                                            )
                                    (if (GetParamIDbyName name "Visibility State")
                                      (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                                            (itoa (vla-get-ObjectID vla))
                                            ">%).Parameter("
                                            (itoa (GetParamIDbyName name "Visibility State"))
                                            ").VisibilityState>%"                                      
                                            )
                                      "Ошибка атрибута!"
                                      ))
  (setq	p1 (cadr ent)
	p2 (getpoint p1 "\nВторая точка >> \n")
  )
  (setq	mtx (vlax-invoke
	      acsp 'AddMText p2	0.0 txt)
  )
  (vlax-put mtx
	    'AttachmentPoint
	    (cond ((> (car p1) (car p2))
		   acAttachmentPointMiddleRight
		  )
		  ((< (car p1) (car p2))
		   acAttachmentPointMiddleLeft
		  )
		  (T acAttachmentPointMiddleLeft)
	    )
  )

  (vlax-invoke
    acsp
    'Addleader
    (apply 'append (list p1 p2))
    mtx
    acLineWithArrow
  )
  (vl-catch-all-apply
    (function (lambda ()
		(progn
		  (vlax-release-object mtx)
		  (vlax-release-object pline)
		)
	      )
    )
  )
  (vla-regen adoc acactiveviewport)
  (princ)
)
(prompt "\n")
(prompt "\t\t<<< Ввести BLNM3 для старта программы :  >>>  \n")
(princ)
; TesT : (C:BLNM3)LISP]
Sergey91@06 вне форума  
 
Непрочитано 17.06.2017, 13:07
#3347
Сергей812


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


Код:
[Выделить все]
(princ) ) ; Закрывающая скобка функции
; TesT : (C:BLNM3)LISP]
Сергей812 вне форума  
 
Непрочитано 17.06.2017, 13:25
#3348
Sergey91@06


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


Сергей812, спасибо, к сожалению результат не изменился, видимо ещё есть подобные ошибки
Sergey91@06 вне форума  
 
Непрочитано 17.06.2017, 13:37
#3349
Сергей812


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


Видимо, просто это в глаза бросилось сразу)
Загружаете в редакторе VisualLisp и горячими клавишами "Ctrl + [" и "Ctrl +]" проверяете комплектность скобок (открывающей и закрывающей соответственно) в строках, где их много.
Сергей812 вне форума  
 
Непрочитано 17.06.2017, 13:50
#3350
Sergey91@06


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


Сергей812, нашел недостающую скобку, теперь lisp загружается, но при исполнении и выборе динамического блока выдает ошибку: неверный тип аргумента: lentityp 1 (хотя прежняя версия мое сообщение выше, выносила выноску, я просто изменил ссылку, добавив возможные варианты текста и через if и получение ID параметра видимости)
P.S. скобку в конце все-таки убрал с ней не запускалось, видимо программа закрывается чуть раньше.

Код:
[Выделить все]
(defun C:BLNM3 (/ acsp adoc ent mtx p1 p2 pline txt)
  (vl-load-com)
  (or adoc
      (setq adoc
	     (vla-get-activedocument
	       (vlax-get-acad-object)
	     )
      )
  )
  (if (and
	(= (getvar "tilemode") 0)
	(= (getvar "cvport") 1)
      )
    (setq acsp (vla-get-paperspace adoc))
    (setq acsp (vla-get-modelspace adoc))
  )
  (setq
    pline (vlax-ename->vla-object
	    (car (setq ent (entsel "\n >> Выберите блок >> \n")))
	  )
  )
(setq text (if (GetParamIDbyName name "Состояние видимости")
                                    (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                                          (itoa (vla-get-ObjectID vla))
                                          ">%).Parameter("
                                          (itoa (GetParamIDbyName name "Состояние видимости"))
                                          ").VisibilityState>%"
                                          )
                                    (if (GetParamIDbyName name "Stav viditelnosti")
                                      (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                                            (itoa (vla-get-ObjectID vla))
                                            ">%).Parameter("
                                            (itoa (GetParamIDbyName name "Stav viditelnosti"))
                                            ").VisibilityState>%"                                      
                                            )
                                    (if (GetParamIDbyName name "Visibility State")
                                      (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                                            (itoa (vla-get-ObjectID vla))
                                            ">%).Parameter("
                                            (itoa (GetParamIDbyName name "Visibility State"))
                                            ").VisibilityState>%"                                      
                                            )
                                      "Ошибка атрибута!"
                                      ))))
  (setq	p1 (cadr ent)
	p2 (getpoint p1 "\nВторая точка >> \n")
  )
  (setq	mtx (vlax-invoke
	      acsp 'AddMText p2	0.0 txt)
  )
  (vlax-put mtx
	    'AttachmentPoint
	    (cond ((> (car p1) (car p2))
		   acAttachmentPointMiddleRight
		  )
		  ((< (car p1) (car p2))
		   acAttachmentPointMiddleLeft
		  )
		  (T acAttachmentPointMiddleLeft)
	    )
  )

  (vlax-invoke
    acsp
    'Addleader
    (apply 'append (list p1 p2))
    mtx
    acLineWithArrow
  )
  (vl-catch-all-apply
    (function (lambda ()
		(progn
		  (vlax-release-object mtx)
		  (vlax-release-object pline)
		)
	      )
    )
  )
  (vla-regen adoc acactiveviewport)
  (princ)
	     )
(prompt "\n")
(prompt "\t\t<<< Ввести BLNM для старта программы :  >>>  \n")
(princ) 
; TesT : (C:BLNM)LISP]
Sergey91@06 вне форума  
 
Непрочитано 17.06.2017, 14:08
#3351
Сергей812


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


да, посмотрел внимательнее - последние 4 строки: это подсказка по использованию команды при загрузке лиспа в акад, сорри за введение в заблуждение. Но вы не полный код выложили - например, GetParamIDbyName?
Сергей812 вне форума  
 
Непрочитано 17.06.2017, 14:27
#3352
Sergey91@06


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


Сергей812, да потерял кусок кода, вот обновленный код, собираю его из разных кусков как вслепую конструктор, поскольку в lispе практически не понимаю,
результатом такого метода тыка ошибка теперь приобрела следующий вид: неверный тип аргумента: VLA-OBJECT nil

Код:
[Выделить все]
(defun C:BLNM3 (/ acsp adoc ent mtx p1 p2 pline txt)
    (setq CONSTparamtypes (list
      (list
                "Состояние видимости"   ;visibility
                "Stav viditelnosti"     ;visibility
		"Visibility State"      ;visibility

      )))
  (setq description (LM:getdynpropvalue vla "_Visibility" ) )
  (vl-load-com)
  (or adoc
      (setq adoc
	     (vla-get-activedocument
	       (vlax-get-acad-object)
	     )
      )
  )
  (if (and
	(= (getvar "tilemode") 0)
	(= (getvar "cvport") 1)
      )
    (setq acsp (vla-get-paperspace adoc))
    (setq acsp (vla-get-modelspace adoc))
  )
  (setq
    pline (vlax-ename->vla-object
	    (car (setq ent (entsel "\n >> Выберите блок >> \n")))
	  )
  )
  (setq paramtypes (if (GetParamIDbyName name "_Visibility")
              (nth 1 CONSTparamtypes)
              (nth 0 CONSTparamtypes)
              ))
  (setq vla (vlax-ename->vla-object name))
  (setq description (LM:getdynpropvalue vla "_Visibility" ) )
(setq description_ref (if (GetParamIDbyName name (nth 0 paramtypes))
                                    (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                                          (itoa (vla-get-ObjectID vla))
                                          ">%).Parameter("
                                          (itoa (GetParamIDbyName name (nth 0 paramtypes)))
                                          ").VisibilityState>%"
                                          )
                                    (if (GetParamIDbyName name "Stav viditelnosti")
                                      (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                                            (itoa (vla-get-ObjectID vla))
                                            ">%).Parameter("
                                            (itoa (GetParamIDbyName name "Stav viditelnosti"))
                                            ").VisibilityState>%"                                      
                                            )
                                    (if (GetParamIDbyName name "Visibility State")
                                      (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                                            (itoa (vla-get-ObjectID vla))
                                            ">%).Parameter("
                                            (itoa (GetParamIDbyName name "Visibility State"))
                                            ").VisibilityState>%"                                      
                                            )
                                      "Ошибка атрибута!"
                                      ))))
  (setq	p1 (cadr ent)
	p2 (getpoint p1 "\nВторая точка >> \n")
  )
  (setq	mtx (vlax-invoke
	      acsp 'AddMText p2	0.0 txt)
  )
  (vlax-put mtx
	    'AttachmentPoint
	    (cond ((> (car p1) (car p2))
		   acAttachmentPointMiddleRight
		  )
		  ((< (car p1) (car p2))
		   acAttachmentPointMiddleLeft
		  )
		  (T acAttachmentPointMiddleLeft)
	    )
  )

  (vlax-invoke
    acsp
    'Addleader
    (apply 'append (list p1 p2))
    mtx
    acLineWithArrow
  )
  (vl-catch-all-apply
    (function (lambda ()
		(progn
		  (vlax-release-object mtx)
		  (vlax-release-object pline)
		)
	      )
    )
  )
  (vla-regen adoc acactiveviewport)
  (princ)
  ;;; finds (param) parameter of object (ent) and returns its number
(defun GetParamIDbyName (ent param)
  (cdr (assoc param (GetParameterNumber ent))))
	     )
(prompt "\n")
(prompt "\t\t<<< Ввести BLNM3 для старта программы :  >>>  \n")
(princ) 
; TesT : (C:BLNM3)LISP]
Sergey91@06 вне форума  
 
Автор темы   Непрочитано 23.06.2017, 16:48
#3353
Red Nova

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


Доброго.
Подскажите плиз можно ли повесить блок на курсор и при этом заранее иметь возможность задать его размер.
Если делать командным методом то блок повесится на курсор в размере 1:1, а размер будет задан после этого.
(command "_.Insert" "BMP Dot" pause 100 100 "")
То есть веся на курсоре блок будет иметь неправильный размер.
Если же сперва вставить блок в точку с нулевыми координатами в нужном размере, а затем использовать "._move"
(command "._move" dot "" '(0 0) pause)
То от курсора к точке (0 0) будет видна направляющая, что не есть гут.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 23.06.2017, 17:23
#3354
Сергей812


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


а если activex использовать - vla-move ?
Во всяком случае, в том же NETAPI это задача решается установкой нужного масштаба при первичной вставке в текущее пространство через BlockReference.ScaleFactors с последующей передаче в JIG, который уже и таскает вставку. А командные методы лиспа - это такой черный ящик по сути)
Сергей812 вне форума  
 
Автор темы   Непрочитано 23.06.2017, 18:13
#3355
Red Nova

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


А в vla-move можно делать паузу на user input?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 23.06.2017, 18:30
#3356
Сергей812


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


вообще то имел в виду grread в цикле... Не знаю правда, насколько это мерцать будет - в NET мерцания не заметно особо во время JIG. Т.е. вставляете блок в нужном масштабе тоже через ActiveX, и потом запрашиваете через ggread текущие координаты указателя и подтаскивайте туда вставку блока. И какой то выход из цикла предусмотреть, естественно.
Сергей812 вне форума  
 
Непрочитано 23.06.2017, 19:43
#3357
ShaggyDoc

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Доброго.
Подскажите плиз можно ли повесить блок на курсор и при этом заранее иметь возможность задать его размер.
Если делать командным методом то блок повесится на курсор в размере 1:1, а размер будет задан после этого.
(command "_.Insert" "BMP Dot" pause 100 100 "")
То есть веся на курсоре блок будет иметь неправильный размер.
Если же сперва вставить блок в точку с нулевыми координатами в нужном размере, а затем использовать "._move"
(command "._move" dot "" '(0 0) pause)
То от курсора к точке (0 0) будет видна направляющая, что не есть гут.
Несколько раз публиковал на форуме такую функцию, даже конкурс был на написание. Подскажу основной момент - предварительно надо масштабировать и, если надо, повернуть блок. Поворот можно и задавать на месте после вставки. Фрагмент кода функции:

Код:
[Выделить все]
 (vl-cmdf "_.INSERT"   block_name  "_PROTATE"  (if block_angle   block_angle    0 )
                             "_PXScale"   x_scale "_PYScale"  y_scale    pause )
Надо это обернуть в цикл, т.к. часто приходится вставлять блок многократно. Прерывание цикла по ESC, но с обязательной защитой через error-catch, чтобы прерывалась не программа, а только цикл вставки.

Позаботиться о возможных атрибутах.

Последний раз редактировалось ShaggyDoc, 23.06.2017 в 19:49.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 23.06.2017, 22:27
#3358
Red Nova

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


ShaggyDoc vl-cmdf "_.INSERT" работает, спасибо. Многократно вставлять мне необходимости не было, сделал по простому.
Код:
[Выделить все]
 (vl-cmdf "_.INSERT" "BMP Dot" "_scale" dotscale "_rotate" 0 pause)
__________________
Блог
Red Nova вне форума  
 
Непрочитано 23.06.2017, 22:27
#3359
Кулик Алексей aka kpblc
Moderator

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


Ага, но в последних версиях (начиная с 2015, кажется) vl-cmdf независимо ни от чего возвращает t, а command (равно как и command-s) - nil. Так что учтите
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.06.2017, 01:06
#3360
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
vl-cmdf независимо ни от чего возвращает t
Вот это новость. А как же теперь убедиться, что команда отработала? В случае со вставкой блока ясно - отслеживаем появление или непоявление нового объекта в базе чертежа. Но ведь не все команды создают объекты. Печально в общем. Придется пересмотреть логику некоторых программ, в которых не уйти от командных методов.
skkkk вне форума  
Ответ
Вернуться   Форум 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