Schöck
Показать сообщение отдельно
 
Непрочитано 07.06.2019, 19:52
1 | 1 #18
VVA

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


Вариант с зацикливанием выбора
Код:
[Выделить все]
(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 (itoa shg) "X" 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
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 18.06.2019 в 13:59. Причина: Замечания #24
VVA вне форума  
 
Расчет зданий и сооружений в сейсмоопасных районах
Размещение рекламы