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

Вернуться   Форум 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.
Просмотров: 1972107
 
Непрочитано 15.11.2016, 09:43
#3141
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


И все ж таки интересно, почему этот vla-addLightWeightPolyline кушает координты в WCS, а нормаль цепляет текущую?
Проверку на "нормальность" результата дописал...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 24.11.2016, 14:20
#3142
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


Уважаемые знатоки, а из можно ли из LISP залезть в открытый документ Word и что-нибудь там поковырять, например, вставить текст в таблицу, двинуть курсор? Покажите примеры, пожалуйста!

Последний раз редактировалось Nike, 24.11.2016 в 14:28.
Nike вне форума  
 
Непрочитано 24.11.2016, 14:22
#3143
Кулик Алексей aka kpblc
Moderator

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


Можно. Залезай
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.11.2016, 14:31
#3144
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


Как вставить текст нашел - http://forum.dwg.ru/showthread.php?t=5993&page=2

А передвинуть курсор, например в таблице (сделать TAB) если можно, как?
Nike вне форума  
 
Непрочитано 24.11.2016, 15:08
#3145
trir


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


а зачем?
trir вне форума  
 
Непрочитано 24.11.2016, 15:12
#3146
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


trir, таблицу заполнять
Nike вне форума  
 
Непрочитано 24.11.2016, 15:19
1 | #3147
krok64

Л, ТХ
 
Регистрация: 01.06.2016
Ухта
Сообщений: 38


Курсор двигается функциями Selection.MoveRight (Left, Up, Down), с параметром Unit на сколько двигать (например wdCell - 1 ячейка)
krok64 вне форума  
 
Непрочитано 24.11.2016, 15:20
#3148
trir


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


а сделать экспорт csv?
trir вне форума  
 
Непрочитано 24.11.2016, 15:39
#3149
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


Цитата:
Сообщение от krok64 Посмотреть сообщение
Курсор двигается функциями Selection.MoveRight (Left, Up, Down), с параметром Unit на сколько двигать (например wdCell - 1 ячейка)
на VBA я знаю как, мне бы из LISP


Цитата:
Сообщение от trir Посмотреть сообщение
а сделать экспорт csv?
Nike вне форума  
 
Непрочитано 24.11.2016, 16:02
1 | #3150
krok64

Л, ТХ
 
Регистрация: 01.06.2016
Ухта
Сообщений: 38


Цитата:
Сообщение от Nike Посмотреть сообщение
на VBA я знаю как, мне бы из LISP



А через vlax-invoke-method дергать VBA методы не получится?
krok64 вне форума  
 
Непрочитано 24.11.2016, 16:15
1 | #3151
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Nike Посмотреть сообщение
на VBA я знаю как, мне бы из LISP
По твоей ссылке выше есть пример на лиспе
Цитата:
;;;Делаем Word видимым
(setq work_range (vlax-invoke-method ActiveDocument 'range 0 0))
(vlax-invoke-method
work_range
"insertafter"
text ;_ end strcat
) ;_ end vlax-invoke-method
) ;_ end progn
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 24.11.2016, 17:26
#3152
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


Спасибо, получилось - (vlax-invoke-method (vlax-get-property msw "Selection") "MoveRight" wdCell

Ух, теперь такого натворю!!

----- добавлено через ~13 мин. -----
Натворил - из крайней правой ячейки курсор вылетает из таблицы и далее в программе ошибка.

Как бы всё-таки TAB в Word передать?
Nike вне форума  
 
Непрочитано 25.11.2016, 08:07
#3153
krok64

Л, ТХ
 
Регистрация: 01.06.2016
Ухта
Сообщений: 38


Цитата:
Сообщение от Nike Посмотреть сообщение
Натворил - из крайней правой ячейки курсор вылетает из таблицы и далее в программе ошибка.
Не забывай вставлять пустые строки Selection.InsertRowsBelow(1) и тогда все будет хорошо
krok64 вне форума  
 
Непрочитано 25.11.2016, 15:38
#3154
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


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

так вот при Selection.MoveRight Unit:=wdCell из крайней правой ячейки курсор прыгает первую ячейку следующей строки (если строки нету то создается, как при TAB)
а если я это же делаю лиспом (vlax-invoke-method (vlax-get-property ... "Selection") "MoveRight" wdCell)
то курсор не переходит в следующую ячейку, а вываливается из таблицы вправо и мыргает там.
Миниатюры
Нажмите на изображение для увеличения
Название: 2016-11-25_14-10-59.png
Просмотров: 33
Размер:	4.2 Кб
ID:	179767  

Последний раз редактировалось Nike, 25.11.2016 в 15:49.
Nike вне форума  
 
Непрочитано 25.11.2016, 16:15
1 | #3155
krok64

Л, ТХ
 
Регистрация: 01.06.2016
Ухта
Сообщений: 38


Попробуй вместо константы wdCell число 12
krok64 вне форума  
 
Непрочитано 25.11.2016, 16:22
#3156
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


krok64, ура, работает!
Nike вне форума  
 
Автор темы   Непрочитано 28.11.2016, 01:10
#3157
Red Nova

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


Доброго.

Подскажите плиз как в указанной точке можно назначить цвет блоку (строка 53).
Блок в списке vla-объектов (не уверен верно ли я выразился).
Подопытный блок прикрепляю.

*Добавил используемые функции от LeeMac

**Добавил еще
Нашел: vla-put-Color

Код:
[Выделить все]
  (defun c:test ( / blkselection vlablkselection hiddenlength CurrentThickness CurrentSpan CurrentLoading RebarSize lstThickness lstRebar tbl ColumnNumber)

  (vl-load-com)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object)))) ;_ end of vla-startundomark

  (setq blkselection (getblockselection "BMP Plan ComSlab"))
  (setq vlablkselection (LM:ss->vla blkselection))  

 (foreach n vlablkselection
  (progn  
  (setq hiddenlength (LM:getdynpropvalue n "Hidden Length"))
  (setq CurrentThickness (distof (LM:vl-getattributevalue n "THICKNESS")))
  (setq CurrentSpan (/ (+ hiddenlength (/ CurrentThickness 2)) 1000))
  (setq CurrentLoading (distof (LM:vl-getattributevalue n "LOADING")))

  (setq lstThickness 	'(260	270	280	290	300	310	320	330))
  (setq lstRebar 	'("10M"	"15M"	"20M"	"25M"	"30M"	"35M"))
  (setq tbl '(
			(6.20	6.20	6.20	6.40	6.40	6.50	6.50	6.50)  ;10
			(7.00	7.00	7.00	7.20	7.20	7.20	7.20	7.40)  ;15
			(7.60	7.80	7.80	7.80	8.00	8.00	8.00	8.00)  ;20
			(8.60	9.00	9.00	9.00	9.20	9.20	9.20	9.20)  ;25
			(8.80	9.20	9.50	9.80	10.20	10.20	10.20	10.40) ;30
			(9.20	9.50	9.80	10.20	10.20	10.20	10.20	10.40) ;35
			))
  (cond ((= CurrentThickness (nth 0 lstThickness)) (setq ColumnNumber 0))
	((= CurrentThickness (nth 1 lstThickness)) (setq ColumnNumber 1))
	((= CurrentThickness (nth 2 lstThickness)) (setq ColumnNumber 2))
	((= CurrentThickness (nth 3 lstThickness)) (setq ColumnNumber 3))
	((= CurrentThickness (nth 4 lstThickness)) (setq ColumnNumber 4))
	((= CurrentThickness (nth 5 lstThickness)) (setq ColumnNumber 5))
	((= CurrentThickness (nth 6 lstThickness)) (setq ColumnNumber 6))
	((= CurrentThickness (nth 7 lstThickness)) (setq ColumnNumber 7))
	)

  (setq tbl (mapcar (function (lambda (x)
			      (nth ColumnNumber x)
			      )) tbl))
  ;'(6.2 7.0 7.8 9.0 9.2 9.5)

  (cond ((<= CurrentSpan (nth 0 tbl)) (setq RebarSize (nth 0 lstRebar)))
	((and (> CurrentSpan (nth 0 tbl)) (<= CurrentSpan (nth 1 tbl))) (setq RebarSize (nth 1 lstRebar)))
	((and (> CurrentSpan (nth 1 tbl)) (<= CurrentSpan (nth 2 tbl))) (setq RebarSize (nth 2 lstRebar)))
	((and (> CurrentSpan (nth 2 tbl)) (<= CurrentSpan (nth 3 tbl))) (setq RebarSize (nth 3 lstRebar)))
	((and (> CurrentSpan (nth 3 tbl)) (<= CurrentSpan (nth 4 tbl))) (setq RebarSize (nth 4 lstRebar)))
	((and (> CurrentSpan (nth 4 tbl)) (<= CurrentSpan (nth 5 tbl))) (setq RebarSize (nth 5 lstRebar)))
	((and (> CurrentSpan (nth 5 tbl)) (<= CurrentSpan (nth 6 tbl))) (setq RebarSize (nth 6 lstRebar)))
	((and (> CurrentSpan (nth 6 tbl)) (<= CurrentSpan (nth 7 tbl))) (setq RebarSize (nth 7 lstRebar)))
	(t (setq RebarSize "X"))  
	)

  (LM:vl-setattributevalue n "REBAR" RebarSize)
;òóò íóæíî íàçíà÷èòü öâåò
  
   );progn
  );foreach

  (vla-endundomark adoc) ;;; undomark bottom mark
  (command "regen")
 )

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; Get Attribute Value  -  Lee Mac
;; Returns the value held by the specified tag within the supplied block, if present.
;; blk - [vla] VLA Block Reference Object
;; tag - [str] Attribute TagString
;; Returns: [str] Attribute value, else nil if tag is not found.

(defun LM:vl-getattributevalue ( blk tag )
    (setq tag (strcase tag))
    (vl-some '(lambda ( att ) (if (= tag (strcase (vla-get-tagstring att))) (vla-get-textstring att)))
        (vlax-invoke blk 'getattributes)
    )
)

;; Set Attribute Value  -  Lee Mac
;; Sets the value of the first attribute with the given tag found within the block, if present.
;; blk - [vla] VLA Block Reference Object
;; tag - [str] Attribute TagString
;; val - [str] Attribute Value
;; Returns: [str] Attribute value if successful, else nil.

(defun LM:vl-setattributevalue ( blk tag val )
    (setq tag (strcase tag))
    (vl-some
       '(lambda ( att )
            (if (= tag (strcase (vla-get-tagstring att)))
                (progn (vla-put-textstring att val) val)
            )
        )
        (vlax-invoke blk 'getattributes)
    )
)

;; Get Dynamic Block Property Value  -  Lee Mac
;; Returns the value of a Dynamic Block property (if present)
;; blk - [vla] VLA Dynamic Block Reference object
;; prp - [str] Dynamic Block property name (case-insensitive)

(defun LM:getdynpropvalue ( blk prp )
    (setq prp (strcase prp))
    (vl-some (function (lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value))))
        (vlax-invoke blk 'getdynamicblockproperties)
    )
)

;; Set Dynamic Block Property Value  -  Lee Mac
;; Modifies the value of a Dynamic Block property (if present)
;; blk - [vla] VLA Dynamic Block Reference object
;; prp - [str] Dynamic Block property name (case-insensitive)
;; val - [any] New value for property
;; Returns: [any] New value if successful, else nil

(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)
    )
)

;;------------=={ SelectionSet -> VLA Objects }==-------------;;
;;                                                            ;;
;;  Converts a SelectionSet to a list of VLA Objects          ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  ss - Valid SelectionSet (Pickset)                         ;;
;;------------------------------------------------------------;;
;;  Returns:  List of VLA Objects, else nil                   ;;
;;------------------------------------------------------------;;

(defun LM:ss->vla ( ss / i l )
    (if ss
        (repeat (setq i (sslength ss))
            (setq l (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) l))
        )
    )
)

;; Inverse Sine (ArcSin)
;; Args: -1 <= x <= 1

(defun asin (x)
  (cond ((< 1. (abs x)) nil)
        ((equal (abs x) 1. 1e-9)
         (* x (/ pi 2.)))
        (t (atan (/ x (sqrt (- 1 (expt x 2))))))))

;; Inverse Cosine (ArcCos)
;; Args: -1 <= x <= 1

(defun acos (x)
  (cond ((< 1. (abs x)) nil)
        ((zerop x) (/ pi 2.))
        (t (atan (/ (sqrt (- 1 (expt x 2))) x)))))

; select dynamic block by name

(defun getblockselection ( blk )
    (ssget ;"_X"
        (list '(0 . "INSERT")
            (cons 2
                (apply 'strcat
                    (cons blk
                        (mapcar '(lambda ( x ) (strcat ",`" x))
                            (LM:getanonymousreferences blk)
                        )
                    )
                )
            )
        )
    )
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun testifblockexists ( blk / )
       (ssget "_X"
        (list '(0 . "INSERT")
            (cons 2
                (apply 'strcat
                    (cons blk
                        (mapcar '(lambda ( x ) (strcat ",`" x))
                            (LM:getanonymousreferences blk)
                        )
                    )
                )
            )
        )
     ) 	
 );defun

(defun LM:getanonymousreferences ( blk / ano def lst rec ref )
    (setq blk (strcase blk))
    (while (setq def (tblnext "block" (null def)))
        (if
            (and (= 1 (logand 1 (cdr (assoc 70 def))))
                (setq rec
                    (entget
                        (cdr
                            (assoc 330
                                (entget
                                    (tblobjname "block"
                                        (setq ano (cdr (assoc 2 def)))
                                    )
                                )
                            )
                        )
                    )
                )
            )
            (while
                (and
                    (not (member ano lst))
                    (setq ref (assoc 331 rec))
                )
                (if
                    (and
                        (entget (cdr ref))
                        (= blk (strcase (LM:al-effectivename (cdr ref))))
                    )
                    (setq lst (cons ano lst))
                )
                (setq rec (cdr (member (assoc 331 rec) rec)))
            )
        )
    )
    (reverse lst)
) ; end of defun

;; Effective Block Name  -  Lee Mac
;; ent - [ent] Block Reference entity

(defun LM:al-effectivename ( ent / blk rep )
    (if (wcmatch (setq blk (cdr (assoc 2 (entget ent)))) "`**")
        (if
            (and
                (setq rep
                    (cdadr
                        (assoc -3
                            (entget
                                (cdr
                                    (assoc 330
                                        (entget
                                            (tblobjname "block" blk)
                                        )
                                    )
                                )
                               '("AcDbBlockRepBTag")
                            )
                        )
                    )
                )
                (setq rep (handent (cdr (assoc 1005 rep))))
            )
            (setq blk (cdr (assoc 2 (entget rep))))
        )
    )
    blk
) ; end of defun

Вложения
Тип файла: dwg
DWG 2010
test.dwg (227.5 Кб, 21 просмотров)

Последний раз редактировалось Red Nova, 28.11.2016 в 08:40.
Red Nova вне форума  
 
Непрочитано 30.11.2016, 09:13
#3158
trushev


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


Всем доброго дня!

Не могу добиться обновленного отображения значений полей edit_box.

При открытом диалоговом окне выполняю последовательно расчет нескольких участков. Данные каждого участка последовательно загружаются в поля edit_box. Для каждого участка выполняется расчет и ход расчета визуально отображается в диалоговом окне. Но не наблюдается обновления картинки полей edit_box диалогового окна после загрузки параметров следующего участка.
Что не так?
Локализированный код проблемы прилагаю:
Файл tect.lsp
Код:
[Выделить все]
(defun vp_gid (
               /
               dlg ;имя файла описания диалоговых окон
               sww ;Список параметров по участкам
                sw ;список исходных данных текущего элемента расчета
               f
                       ;
            f_okvp ;Функция действий при выборе клавиши РАСЧЕТ (поля "ok" в функции vp_gid)
              )
              ;Функция действий при выборе клавиши РАСЧЕТ (поля "ok")
              ;
              (defun f_okvp (sww ;поэлементный список исходных данных
                             /
                             sw ;список исходных данных текущего элемента расчета
                              m
                              n
                            )
                            ;
                     (while (car sww)
                            (setq m 10000000
                                  n 0
                                 sw (car sww)
                            )
                            ;
                            ;Присвоение полям окна значений из текущего элемента 
                            ;списка sw
                            ;
                            (foreach k '("f" "z" "q20")
                                        (set_tile k (car sw))
                                        (setq sw (cdr sw))
                            );foreach k
                            ;
                            ;Выполнение расчета
                            ;
                            (while (> m 0.0)
                                     ;
                                     ;Визуальная индикация хода расчета
                                     ;
                                   (if (> n 1000000)
                                       (progn
                                       (set_tile "tx1" (strcat "Элемент N " (rtos m 2 0)))
                                       (setq n 0)
                                       );progn
                                   );if (> n 100000)
                                   (setq m (1- m)
                                         n (1+ n)
                                   )
                            );while (> m 0.0)
                                   ;
                            (setq sww (cdr sww))
                     );while
                        ;
              );defun f_okvp
              ;
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              ;
              (setq dlg (load_dialog "tect.dcl")
                      f 4
              )
              (while (= f 4)
                          ;
                          ;Список параметров по участкам
                          ;
                     (setq sww (list '("1" "2" "3")
                                     '("10" "20" "30")
                                     '("11" "21" "31")
                                     '("12" "22" "32")
                               )
                     )
                     (if (new_dialog "dvp_gd" dlg)
                         (progn
                         (foreach k '("f" "z" "q20")
                                     (set_tile k "Пусто")
                         );foreach k
                       ;
                       ;Клавиша расчет
                         (action_tile "ok" (strcat "(f_okvp sww) "
                                                  "(done_dialog 4))"
                                           );strcat
                         );action_tile
                       ;                                                    
                         (setq f (start_dialog))
                         );progn
                       ;ИНАЧЕ сбой работы программы 
                         (alert (strcat "Сбой функции открытия диалогового окна"
                                        "\n"
                                        "\n  \"РАСЧЕТ ВОДОТОКА\""
                                )
                         )
                     );if (new_dialog "dvp_gd" dlg)
                       ;
              );while (= f 4)
              (unload_dialog dlg)
);defun vp_gid
Файл tect.dcl
Код:
[Выделить все]
dvp_gd : dialog {label = "РАСЧЕТ ВОДОТОКА";
             alignment = centered;
       spacer_1;
       : boxed_column {label = "ИСХОДНЫЕ ПАРАМЕТРЫ ВОДООТВОДА";            
           : edit_box {edit_width = 5; edit_limit = 5; key = "f";
                            label = "Площадь водосбора, га";
           }
           : edit_box {edit_width = 5; edit_limit = 5; key = "z";
                            label = "Коэффициент покрова разных видов поверхности";
           }
           : edit_box {edit_width = 5; edit_limit = 5; key = "q20";
                            label = "Интенсивность дождя с карты, л/с";
           }
           spacer_1;
       }
       spacer_1;
       : boxed_column {label = "РЕЗУЛЬТАТ РАСЧЕТА ЭЛЕМЕНТА";
              spacer_1;
              : text_part {alignment = left; width = 30; key = "tx1";}
              spacer_1;
       }
       spacer_1;
       : row {
          : spacer {width = 3;}
          : button {
             fixed_width = true;
                   width = 8;
               alignment = centered;
                   label = "РАСЧЕТ";
                     key = "ok";
          }
          : spacer {width = 3;}
          : button {
             fixed_width = true;
                   width = 8;
               alignment = centered;
               is_cancel = true;
                   label = "ВЫХОД";
                     key = "canc";
          }
          : spacer {width = 3;}
       }
       spacer_1;
}
trushev вне форума  
 
Непрочитано 30.11.2016, 17:24
#3159
LcH


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


Добрый день!
Хочу задать вопрос.

----- добавлено через ~6 мин. -----
(defun c:ByTemplateM ()
; Создать лист по шаблону
; Открывается диалоговое окно - Выбор шаблона из файла
;
(initdia) ; !!!! - открывается диалог
(command "._layout" "_template")
(princ)
)

Может подскажете, можно ли задать заранее на каком каталоге откроется диалоговое окно "Выбор шаблона из файла".
Я посмотрела, что путь от предыдущего сеанса работы сохраняется в реестре в профиле пользователя Автокада.

Спасибо, если кто-то откликнется на мой вопрос.
LcH вне форума  
 
Непрочитано 01.12.2016, 08:05
#3160
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от LcH Посмотреть сообщение
что путь от предыдущего сеанса работы сохраняется в реестре в профиле пользователя Автокада.
Как вариант попробовать поменять значение в профиле (vl-registry-read vlax-product-key и vl-registry-write в помощь)
Пример для русского Автокада
Код:
[Выделить все]
(setq current_profile (vl-registry-read (strcat "HKEY_CURRENT_USER\\" (vlax-product-key) "\\Profiles")))
(setq InitialDirectory (vl-registry-read (strcat "HKEY_CURRENT_USER\\" (vlax-product-key) "\\Profiles\\" current_profile "\\Dialogs\\Выбор шаблона из файла") "InitialDirectory"))
(vl-registry-write (strcat "HKEY_CURRENT_USER\\" (vlax-product-key) "\\Profiles\\" current_profile "\\Dialogs\\Выбор шаблона из файла") "InitialDirectory" "D:\\Temp\\")
Но это не надежный путь.
У тебя ключевое
Цитата:
; Создать лист по шаблону
Поэтому имя шаблона и имя листа должно быть заранее известно, тогда его сразу и грузить
Код:
[Выделить все]
(command "_.LAYOUT" "_T" (findfile "ИГО3.dwt") "A4-A3.")
Если листов несколько, грузить все
Код:
[Выделить все]
(command "_.LAYOUT" "_template" (findfile "Форматы МИП ИГО.dwt") "*")
Использовать другой способ, например Steal from Drawing
Цитата:
This program allows the user to import (humourously: 'steal') items from another drawing into the current drawing.
Upon running the program with the command syntax 'Steal' at the AutoCAD command-line, the user is prompted to select a drawing file (dwg/dwt/dws) from which to steal items. Following a valid selection, if the selected drawing contains items not already present in the current drawing, a dialog will appear displaying items available for import.
The user may choose multiple items from a list of:
Blocks
...
Layouts
...
Custom Properties
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум 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