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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нужен LISP на "обычный" размер n х ШАГ= ПРОИЗВЕДЕНИЕ в Autocad 2016

Нужен LISP на "обычный" размер n х ШАГ= ПРОИЗВЕДЕНИЕ в Autocad 2016

Ответ
Поиск в этой теме
Непрочитано 24.07.2020, 12:42
Нужен LISP на "обычный" размер n х ШАГ= ПРОИЗВЕДЕНИЕ в Autocad 2016
sergius7900
 
Регистрация: 09.04.2011
Сообщений: 45

Может кто сможет написать и поделиться Lisp по такой задаче (низкий поклон):

Есть размер в котором будет отображаться количество шагов , шаг и результат произведения - 20х200=4000
4000 - не перебитый размер и меняется при перемещении ручки
200 (шаг) - который можно менять на любое другое положительное число.

ЦЕЛЬ: сделать так что бы при изменении числа 4000 менялось количество шагов

к примеру было: 20х200=4000 перетащили ручку размера и величина размера теперь 4800 и автоматически выражение принимает вид 24х200=4800, а также
что бы можно было ещё и поменять величину 200(шаг) на например на 400 и автоматически выражение принимает вид 12х400=4800

P.S. Предполагаю, как вариант, что размер будет создаваться уже из под кнопки LISP для размера с заведомо запрограммированными действиями, описанные выше. Но может будет легче реализовать сие кликнув уже по готовому размеру (тогда можно редактировать ранее выполненные чертежи)
Просмотров: 9957
 
Автор темы   Непрочитано 27.07.2020, 09:06
#21
sergius7900


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


Цитата:
Сообщение от StupidDuck Посмотреть сообщение
GET-OBJECTID-x86-x64 нужно скачать на форуме
Не затруднит ли участников рабочей группы поделиться ссылкой ? (поиск по форуму не выдал результатов по запросу GET-OBJECTID)
sergius7900 вне форума  
 
Непрочитано 27.07.2020, 12:52
#22
skkkk


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


https://forum.dwg.ru/showpost.php?p=566244&postcount=8
skkkk вне форума  
 
Непрочитано 27.07.2020, 14:25
#23
Dr.Smiley

Инженер-конструктор ПГС
 
Регистрация: 17.08.2011
Сообщений: 110


Код:
[Выделить все]
 (defun C:DimSSF (/ adoc ss shg fld str)
;;;Dim Step Size to Field
;;;VVA for dwg.ru
;;;http://forum.dwg.ru/showthread.php?t=103609
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  ) ;_ end of vla-startundomark
  (while (not (eq shg "Выход"))
    (if (not (numberp *DimSSF_SHG*))
      (initget 8 "Выход")
      (initget 6 "Выход")
    ) ;_ end of if
    (if (not (numberp *DimSSF_SHG*))
      (setq shg (getint "\nШаг [Выход]: "))
      (setq
        shg (getint
              (strcat "\nШаг [Выход] < " (itoa *DimSSF_SHG*) " >: ")
            ) ;_ end of getint
      ) ;_ end of setq
    ) ;_ end of if
    (if (null shg)
      (setq shg *DimSSF_SHG*)
    ) ;_ end of if
    (setq *DimSSF_SHG* shg)
    (if (not (eq shg "Выход"))
      (progn
        (while (= (type (setq ss (vl-catch-all-apply
                                (function
                                  (lambda ()
                                    (ssget "_:L" '((0 . "DIMENSION"))) ;_ end of ssget
                                  ) ;_ end of lambda
                                ) ;_ end of function
                              ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
               'pickset
            ) ;_ end of =
          (foreach en
                   (mapcar
                     (function vlax-ename->vla-object)
                     (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
                   ) ;_ end of mapcar
            (setq fld (strcat
                        "%<\\AcExpr ("
                        "%<\\AcObjProp Object(%<\\_ObjId "
                        (vl-princ-to-string
                          (Get-ObjectID-x86-x64 en)
                        ) ;_ vl-princ-to-string
                        ">%).Measurement \\f \"%lu2\">%"
                        "/"
                        (itoa shg)
                        ") \\f \"%lu2%pr0\">%"
                      ) ;_ strcat
            ) ;_ setq
            (setq str (strcat fld "x" (itoa shg) "=<>"))
            (vl-catch-all-apply
              (function
                (lambda ()
                  (vla-put-textoverride en str)
                ) ;_ end of lambda
              ) ;_ end of function
            ) ;_ end of vl-catch-all-apply
            (vl-cmdf "_updatefield" (vlax-vla-object->ename en) "")

          ) ;_ end of foreach
        ) ;_ end of while
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of while
  (vla-endundomark adoc)
  (princ)
) ;_ end of defun

;;--------------------------------------------------------
;; Функция получает строковое представление ObjectID
;; вне зависимости от того AutoCAD x86 или x64
;; Источник: "Field and objectid problem"

;;http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/Field-and-objectid-problem/m-p/2478592/highlight/true#M276818
;; http://forum.dwg.ru/showthread.php?t=51822
;;--------------------------------------------------------
(defun Get-ObjectID-x86-x64 (obj / util)
  (setq util (vla-get-utility
               (vla-get-activedocument (vlax-get-acad-object))
             ) ;_ end of vla-get-Utility
  ) ;_ end of setq
  (if (= (type obj) 'ENAME)
    (setq obj (vlax-ename->vla-object obj))
  ) ;_ end of if
  (if (= (type obj) 'VLA-OBJECT)
    (if (> (vl-string-search "x64" (getvar "platform")) 0)
      (vlax-invoke-method
        util
        "GetObjectIdString"
        obj
        :vlax-false
      ) ;_ end of vlax-invoke-method
      (rtos (vla-get-objectid obj) 2 0)
    ) ;_ end of if
  ) ;_ end of if
) ;_ end of defun
Вот плагин написанный тем же уважаемым VVA, который на мой взгляд самодостаточен .
Единственное в нем есть проблемка одна, дважды команду на один и тот же размер (если вдруг нужно шаг поменять) лучше не использовать, а удалять и ставить новый размер.
после изменения размера, для смены количества шагов нужно регенерировать чертеж. Так же можно задавать неограниченное количество размеров под одну команду.
Вложения
Тип файла: lsp NхШаг.lsp (3.6 Кб, 47 просмотров)
Dr.Smiley вне форума  
 
Непрочитано 27.07.2020, 14:54
#24
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,113


Цитата:
Сообщение от Dr.Smiley Посмотреть сообщение
удалять и ставить новый размер
Зачем удалять? Выделить кучку размеров и очистить поле "текстовая строка", я писал выше...
v.psk вне форума  
 
Автор темы   Непрочитано 27.07.2020, 17:42
#25
sergius7900


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


Можно сказать что цель достигнута.
Всем спасибо, как и обещал - Низкий поклон за помощь !
sergius7900 вне форума  
 
Непрочитано 24.09.2020, 08:15
#26
DMSskop


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


Можно и в ручную установить для одного размера параметры поле со ссылкой на сам размер, что бы в нем все высчитывалось по нужной формуле. И копировать этот размер
DMSskop вне форума  
 
Непрочитано 10.05.2022, 18:03
#27
yaego


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


А что нужно изменить в лиспе из поста 23, чтобы размер имел вид "ШАГ х n= ПРОИЗВЕДЕНИЕ"? Зачем, не спрашивайте. Традиция.
yaego вне форума  
 
Непрочитано 11.05.2022, 10:19
1 | #28
VVA

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


Цитата:
Сообщение от yaego Посмотреть сообщение
А что нужно изменить в лиспе из поста 23, чтобы размер имел вид "ШАГ х n= ПРОИЗВЕДЕНИЕ"? Зачем, не спрашивайте. Традиция.
Строка 056
Код:
[Выделить все]
(setq str (strcat (itoa shg)  "x" fld  "=<>"))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нужен LISP на "обычный" размер n х ШАГ= ПРОИЗВЕДЕНИЕ в Autocad 2016

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autocad 2019. Не работает справка по Visual LISP (Autocad 2019 Help: Developer Documentation) modest-bp AutoCAD 3 24.07.2020 00:02
Максимальный возможный размер экрана интерфейса AutoCAD Малюк AutoCAD 7 01.07.2019 14:26
Проблема создания связи таблиц в AutoCAD 2016 с MS Excel 2016 alterfiesta AutoCAD 15 27.06.2019 12:29
lisp из autocad 2004 некорректно выполняется в autocad 2008 sid_geo LISP 13 11.10.2012 11:20
Произведение нескольких чисел на чертеже? Нужен Lisp по типу sum.lsp UnAtom LISP 2 24.11.2010 20:18