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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Размер в формате "NхШаг"

Размер в формате "NхШаг"

Ответ
Поиск в этой теме
Непрочитано 12.09.2013, 15:43
Размер в формате "NхШаг"
sam_n
 
Регистрация: 04.06.2013
Сообщений: 34

В очередной раз хочу поднять тему о добавлении к размерам шага в формате "NхШаг=". После долгого прочесывания самым толковым показался такой лисп

Код:
[Выделить все]
 (defun C:shag (/ *error* adoc name_ent list_ent dim_value n1)
  (vl-load-com)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ "Работа программы прервана пользователем")
  )
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  )
  (initget 6)
  (if (not _var_n)
    (setq _var_n0 100)
  )
  (setq	_var_n
	 (getint (strcat "\nВведите положительное целое число <"
			 (rtos _var_n0)
			 ">: "
		 )
	 )
  )
  (if (not _var_n)
    (setq _var_n _var_n0)
    (setq _var_n0 _var_n)
  )
  (setq name_ent (entsel "\nВыберите размер: "))
  (if name_ent
    (progn
      (setq list_ent (entget (car name_ent)))
      (while (not
	       (= (cdr (assoc 0 list_ent)) "DIMENSION")
	     )
	(setq name_ent (entsel "\nВыберите размер: "))
      )
      (setq list_ent  (entget (car name_ent))
	    dim_value (cdr (assoc 42 list_ent))
	    n1	      (rtos (/ dim_value _var_n) 2 0)
      )
      (entmod
	(subst
	  (cons	1
		(strcat	n1
			"x"
			(itoa _var_n)
			"=<>"
		)
	  )
	  (assoc 1 list_ent)
	  list_ent
	)
      )
    )
    (princ "Размер не выбран!")
  )
  (vla-endundomark adoc)
  (princ))
Сам в лиспе слаб и поэтому не могу устранить недостатки:
- надо выделять каждый размер отдельно
- если в самом размере было перебитое, а не истинное значение, лисп это не учитывает
Не найдется на форуме доброго человека?

Последний раз редактировалось sam_n, 15.09.2013 в 11:51. Причина: Описка
Просмотров: 13816
 
Непрочитано 10.06.2019, 15:38
#21
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


Цитата:
Что за дополнительную панель вы используете?
http://forum.dwg.ru/showthread.php?t=150579

справа - свой модуль для ЖБК
p_sh вне форума  
 
Непрочитано 17.06.2019, 09:09
#22
Зодчий1989


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Вариант с зацикливанием выбора
Уважаемый ,VVA, как Вас отблагодарить?
Интересная особенность лиспа: при применении его на размер 750 с желанием получить 150х5=750 поле ставится на место первой цифры 5 т.е. получается: 150х5=750 и корректируется соответственно(увеличиваешь размер на 150мм и получаешь 160х5=900) чем это вызвано ума не приложу.
__________________
Не ошибается только тот, кто ничего не делает.
Зодчий1989 вне форума  
 
Непрочитано 17.06.2019, 12:52
#23
VVA

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


Цитата:
Сообщение от Зодчий1989 Посмотреть сообщение
Уважаемый ,VVA, как Вас отблагодарить?
Пожертвуй сумму, которую считаешь возможной РПЦ, детскому дому или помощь бездомным животным

Цитата:
Сообщение от Зодчий1989 Посмотреть сообщение
Интересная особенность лиспа:
Приложи пример в виде dwg файла
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.06.2019, 15:20
#24
Зодчий1989


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Пожертвуй сумму, которую считаешь возможной
Ок, принято.

Цитата:
Сообщение от VVA Посмотреть сообщение
Приложи пример в виде dwg файла
Пример по DimSSF.dwg
Попробуйте 2 раза на размер применить данный лисп (только обязательно с шагом 150).
Данная особенность образуется всегда, когда совпадают данные цифры: 133=390 или 233=690 1055=5250 1050х50=52500
__________________
Не ошибается только тот, кто ничего не делает.

Последний раз редактировалось Зодчий1989, 17.06.2019 в 15:28.
Зодчий1989 вне форума  
 
Непрочитано 17.06.2019, 16:17
#25
Dr.Smiley

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


Доброго дня всем. А подскажите как сделать наоборот что бы было "количество Х шаг = результат"
Dr.Smiley вне форума  
 
Непрочитано 17.06.2019, 17:59
#26
Зодчий1989


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


Цитата:
Сообщение от Dr.Smiley Посмотреть сообщение
Доброго дня всем. А подскажите как сделать наоборот что бы было "количество Х шаг = результат"
строку (setq str (strcat (itoa shg) "X" fld "=<>"))
представить в виде : (setq str (strcat fld "X" (itoa shg) "=<>"))
__________________
Не ошибается только тот, кто ничего не делает.
Зодчий1989 вне форума  
 
Непрочитано 17.06.2019, 20:53
#27
Dr.Smiley

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


Цитата:
Сообщение от Зодчий1989 Посмотреть сообщение
строку (setq str (strcat (itoa shg) "X" fld "=<>"))
представить в виде : (setq str (strcat fld "X" (itoa shg) "=<>"))
Большое, человеческое спасибо вам.
Dr.Smiley вне форума  
 
Непрочитано 18.06.2019, 07:34
#28
DMSskop


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


Цитата:
Сообщение от p_sh Посмотреть сообщение
http://forum.dwg.ru/showthread.php?t=150579

справа - свой модуль для ЖБК
Ого сколько кнопочек Дадите посмотреть?
DMSskop вне форума  
 
Непрочитано 18.06.2019, 14:01
#29
VVA

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


Зодчий1989, Обновил #18
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.06.2019, 14:58
#30
Зодчий1989


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Обновил #18
Увы проблема осталась, но порядок её вызова поменялся.
1) Ставим размер
2) Применяем лисп
3) Заходим в размер двойным нажатием, ничего не меняем и выходим
4) Получаем 130х3=390
__________________
Не ошибается только тот, кто ничего не делает.
Зодчий1989 вне форума  
 
Непрочитано 18.06.2019, 17:46
1 | #31
VVA

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


Цитата:
Сообщение от Зодчий1989 Посмотреть сообщение
3) Заходим в размер двойным нажатием, ничего не меняем и выходим
4) Получаем 130х3=390
Проблему подтверждаю, но лисп здесь не причем.
Если в п.3 скопировать значение в буфер обмена и по выходу вставить в редакторе в текст/мтест, то формула не ломается и остается.
Решение - применить DIMSSF повторно. Другого варианта пока не вижу
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.06.2019, 07:23
#32
Зодчий1989


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


Подсказали как решить проблему. Знак "х" увести в поля.

Код:
[Выделить все]
 (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%ps[x,]\">%"
                      ) ;_ strcat
            ) ;_ setq
            (setq str (strcat (itoa shg) fld "=<>"))
            (vl-catch-all-apply
              (function
                (lambda ()
                  (vla-put-textoverride en "")
                  (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
__________________
Не ошибается только тот, кто ничего не делает.
Зодчий1989 вне форума  
 
Непрочитано 30.06.2019, 17:50
#33
VVA

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


Зодчий1989, Автокад 2013 поля после выхода из редактора все равно ломаются на примере из #24
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Размер в формате "NхШаг"

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вертикальный размер wizds AutoCAD 3 02.05.2013 21:35
Как вставить символ "диаметр" в линейный размер Serghei AutoCAD 9 04.05.2010 11:42
Размер в листе показывает не размер детали! Witalij AutoCAD 6 24.06.2008 07:56
Пользовательский размер листа bimari AutoCAD 2 26.10.2006 18:14