Тема: Как заполнить поля Properties?

Какой должен быть макрос на кнопке, чтобы одновременно заполнить поля Properties? Например из раздела Tolerances: Tolerance Display=Devitation, Tolerance limit lover=0, Tolerance limit upper=0,02 и Tolerance text height=0.6.

Re: Как заполнить поля Properties?

> BigScrew
Сначала разберемся с переменными.
1. Для установки способа "Deviation" ("Отклонения") для допусков (Tolerance) необходимо установить
переменную "DIMTOL" в 1, а "DIMLIM" в 0.
2. Для максимального значения (Upper Value) установим "DIMTP" = 0.02
3. Для минимального значения (Lower value) установим "DIMTM" = 0.
4. Для установки масштаба высоты текста допусков (Scaling for Height) установим "DIMTFAC" = 0.6.
Можно представить себе такой макрос:

^C^C_setvar;dimtol;1;;dimlim;0;;dimtp;0.02;;dimtm;0;;dimtfac;0.6;

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

Re: Как заполнить поля Properties?

> Владимир Громов
А ввести или поменять свойства в заселектированный размер нельзя?

Re: Как заполнить поля Properties?

> BigScrew
Ну, пожалуй, одним макросом тут не обойдешься. Изменение переменных сказываются только на новых размерах. Я думаю, что можно создать новый размерный стиль с настройками допусков и для уже существующих размеров менять только стиль. Думаю, также, что на AutoLisp'е можно написать соответствующую программу (создания нового стиля и замены стиля в существующем размере).

Re: Как заполнить поля Properties?

> Владимир Громов
Жаль...Здесь одна тонкость. А именно: мне нужно штук двадцать кнопок с наиболее применяемыми допусками. Реализовать более менее безболезненно можно было только макросами на кнопках. Средствами на LISP или VBA это сделать, насколько я понимаю, достаточно хлопотно. И в результате получится сомнительный выигрыш в производительности.

Re: Как заполнить поля Properties?

> BigScrew
Да, создавать 20 и более размерных стилей как-то нехорошо. Но я другого пути не вижу, поскольку параметры размеров управляются системными переменными.

Re: Как заполнить поля Properties?

> Владимир Громов
А может как то подойти с другой стороны? Я имею в виду то обстоятельство, что эти переменные до сих пор изменяются вручную.

Re: Как заполнить поля Properties?

> Владимир Громов
Эти значения можно и поменять для конкретных размеров, меняя соответствующие dxf-группы или vla-свойства

Re: Как заполнить поля Properties?

> kpblc
Да, наверное, раз их можно менять в палитре свойств. Я и ждал, что кто-то более опытный в программировании подключится.

Re: Как заполнить поля Properties?

;|
*    Параметры вызова:
*    lst    список изменяемых параметров вида:
      '(("show" . t)        ; ToleranceDisplay. nil -> скрывать. acTolNone | acTolSymmetrical | acTolDeviation | acTolLimits | acTolBasic
    ("height" . 0.65)    ; ToleranceHeightScale. nil -> 0.65
    ("just" . 1)        ; ToleranceJustification : acTolTop | acTolMiddle | acTolBottom
                ; nil -> acTolMiddle
    ("low" . 0.5)        ; ToleranceLowerLimit. nil -> 0.0
    ("up" . 0.5)        ; ToleranceUpperLimit. nil -> "low".
    ("prec" . 2)        ; TolerancePrecision. nil -> (getvar "luprec")
    ("lead" . :vlax-true)    ; ToleranceSuppressLeadingZeros. nil -> :vlax-false
    ("trail" . :vlax-true)    ; ToleranceSuppressTrailingZeros. nil -> :vlax-false
    )
*    Примеры вызова:
LISP:
;; Поставить несимметричные tolerance, высота текста 0,5, нижний лимит - 0,65; верхний - 0,758, точность отображения - 3 символа после запятой.
;; Нули не подавлять - ни начальные, ни конечные.
(chdim (list (cons "show" acTolDeviation) '("height" . 0.5) '("low" . 0.65) '("up" . 0.758) '("prec" . 3)))
;; Поставить симметричные Tolerance. Высота текста 0,5, лимит 0,65, точность отображения 3
(chdim (list (cons "show" acTolSymmetrical) '("height" . 0.5) '("low" . 0.65) '("prec" . 3)))
;; Снять tolerance
(chdim nil)
DIESEL:
^C^C^P(chdim (list (cons "show" acTolDeviation) '("height" . 0.5) '("low" . 0.65) '("up" . 0.758) '("prec" . 3)))
^C^C^P(chdim (list (cons "show" acTolSymmetrical) '("height" . 0.5) '("low" . 0.65) '("prec" . 3)))
^C^C^P(chdim nil)
|;
(defun chdim (lst /)
  (foreach ent (mapcar 'vlax-ename->vla-object
                       (vl-remove-if
                         'listp
                         (mapcar 'cadr (ssnamex (ssget '((0 . "DIMENSION")))))
                         ) ;_ end of vl-remove-if
                       ) ;_ end of mapcar
    (if (cdr (assoc "show" lst))
      (if (vlax-property-available-p ent "ToleranceDisplay" t)
        (progn
          (vl-catch-all-apply
            '(lambda () (vla-put-tolerancedisplay ent (cdr (assoc "show" lst))))
            ) ;_ end of vl-catch-all-apply
          (vl-catch-all-apply
            '(lambda ()
               (vla-put-toleranceheightscale
                 ent
                 (cond
                   ((cdr (assoc "height" lst)))
                   (t 0.65)
                   ) ;_ end of cond
                 ) ;_ end of vla-put-toleranceheightscale
               ) ;_ end of lambda
            ) ;_ end of vl-catch-all-apply
          (vl-catch-all-apply
            '(lambda ()
               (vla-put-tolerancejustification
                 ent
                 (cond
                   ((cdr (assoc "just" lst)))
                   (t actolmiddle)
                   ) ;_ end of cond
                 ) ;_ end of vla-put-tolerancejustification
               ) ;_ end of lambda
            ) ;_ end of vl-catch-all-apply
          (vl-catch-all-apply
            '(lambda ()
               (vla-put-tolerancelowerlimit
                 ent
                 (cond ((cdr (assoc "low" lst)))
                       (t 0.0)
                       ) ;_ end of cond
                 ) ;_ end of vla-put-ToleranceLowerLimit
               ) ;_ end of lambda
            ) ;_ end of vl-catch-all-apply
          (vl-catch-all-apply
            '(lambda ()
               (vla-put-toleranceupperlimit
                 ent
                 (cond ((cdr (assoc "up" lst)))
                       (t (vla-get-tolerancelowerlimit ent))
                       ) ;_ end of cond
                 ) ;_ end of vla-put-ToleranceUpperLimit
               ) ;_ end of lambda
            ) ;_ end of vl-catch-all-apply
          (vl-catch-all-apply
            '(lambda ()
               (vla-put-toleranceprecision
                 ent
                 (cond ((cdr (assoc "prec" lst)))
                       (t (getvar "luprec"))
                       ) ;_ end of cond
                 ) ;_ end of vla-put-TolerancePrecision
               ) ;_ end of lambda
            ) ;_ end of vl-catch-all-apply
          (vl-catch-all-apply
            '(lambda ()
               (vla-put-tolerancesuppressleadingzeros
                 ent
                 (cond ((cdr (assoc "lead" lst)))
                       (t :vlax-false)
                       ) ;_ end of cond
                 ) ;_ end of vla-put-ToleranceSuppressLeadingZeros
               ) ;_ end of lambda
            ) ;_ end of vl-catch-all-apply
          (vl-catch-all-apply
            '(lambda ()
               (vla-put-tolerancesuppresstrailingzeros
                 ent
                 (cond ((cdr (assoc "trail" lst)))
                       (t :vlax-false)
                       ) ;_ end of cond
                 ) ;_ end of vla-put-ToleranceSuppressTrailingZeros
               ) ;_ end of lambda
            ) ;_ end of vl-catch-all-apply
          ) ;_ end of progn
        ) ;_ end of if
      (vl-catch-all-apply
        '(lambda () (vla-put-tolerancedisplay ent actolnone))
        ) ;_ end of vl-catch-all-apply
      ) ;_ end of if
    ) ;_ end of foreach
  ) ;_ end of defun

Re: Как заполнить поля Properties?

Забыл сообщить. Писалось "на коленке", и поэтому коротко и изячно не получилось. Дальнейшую доработку уж сами, господа :)

Re: Как заполнить поля Properties?

> kpblc
А как эту программу запустить? Макрос на кнопке я так понял, будет такой: "^C^C^P(chdim (list (cons "show" acTolDeviation) '("height" . 0.5) '("low" . 0.65) '("up" . 0.758) '("prec" . 3)))" А дальше?

Re: Как заполнить поля Properties?

Если лисп загружен, то просто нажать кнопку, выбрать размеры и посмотреть на результат

Re: Как заполнить поля Properties?

> kpblc
А как лисп загрузить? Я в этих делах слабо разбираюсь. Как оформить эту программу в виде законченного текста? Какое имя дать? И как ее запустить автоматически? Повесить в автозагрузку?...Прошу сильно надо мной не смеяться, но для меня это все сродни программированию микроконтроллеров :) Пробел,запятую не туда поставил- ничего не работает :)

Re: Как заполнить поля Properties?

https://www.caduser.ru/oldlink/faq/?part=23
И там "Как сохранить программный код на своем компьютере?"
После этого через _appload нажать на портфель, в нем - Add (Добавить) и выбрать сохраненный файл. Нажимать ОК до тех пор, пока не закроются все окна.
О создании кнопок и прописывании макросов на них см. В.Свет, "AutoCAD язык макрокоманд и создание кнопок", а также www.dwg.ru/art/2

Re: Как заполнить поля Properties?

> kpblc
Большое спасибо за сцылки. И особенно за книжку В.Свет, "AutoCAD язык макрокоманд и создание кнопок".  :):):)

Re: Как заполнить поля Properties?

> BigScrew
Я знал :D

Re: Как заполнить поля Properties?

> kpblc
:) Ладно, проехали...Повеселились бы- да работы невпроворот...:):):) или :(:(:(

Re: Как заполнить поля Properties?

> BigScrew
В таком варианте пришли мне на почту картинку для своей кнопки, я тебе сделаю инсталл для этого (только завтра, наверное). И версию обязательно укажи, в которой работать будешь.

Re: Как заполнить поля Properties?

> kpblc
OK

Re: Как заполнить поля Properties?

> kpblc
Так у него же 20 кнопок...

Re: Как заполнить поля Properties?

> Владимир Громов
1 flyout и всех делов. Писать dcl на такую работу я пас.

Re: Как заполнить поля Properties?

> kpblc
Почту получил. Инсталляцию ты, конечно, круто сделал. Для таких чайников, как я, самое то. Но программа, или лучше назвать- комплекс средств, не работает. Пишет:  " ; error: no function definition: CHDIM "
p.s. Где удобнее общаться: на форуме или в личке?

Re: Как заполнить поля Properties?

Давай в личку - наверное, будет попроще, и админ не будет резать ветку (кстати, достаточно обоснованно). Странно, что не подгрузилось приложение - вчера проверял, вроде было все нормально. Сегодня еще разок пройдусь.

Re: Как заполнить поля Properties?

> BigScrew
см.почту