Automati c Определение размеров для блоков в Autocad - PullRequest
0 голосов
/ 02 мая 2020

Добрый день,

Я хочу, чтобы присоединенный код запускался как QDIM в Autocad. Моя проблема в моем коде - я выбираю расположение размерной линии после того, как это измерение появляется. Я хочу увидеть все размеры, а затем выбрать местоположение, как в команде QDIM. У меня есть идея выполнить команду перемещения в конце моего кода.

Спасибо

    '''

    (vl-load-com)

    (defun C:FH ( / *error* doc oVAR ss i pts ptsx ptsy d d0 filter)

    (defun *error* (errmsg)

    (if (not (wcmatch errmsg "Function cancelled,quit / exit abort,console break"))

    (princ (strcat "\nError: " errmsg)))

    (foreach e oVAR (setvar (car e) (cdr e)))

(vla-endundomark doc)

(princ))

 (vla-startundomark (setq doc (vla-get-activedocument (vlax-get-acad-object))))

(foreach e '(CMDECHO ORTHOMODE)

(setq oVAR (cons (cons e (getvar e)) oVAR)))

(setvar 'CMDECHO    0)

(setvar 'ORTHOMODE  0)

(if (and (princ "\nNeed blocks, ")

(setq ss (ssget (list '(0 . "INSERT"))))

   (< 1 (setq i (sslength ss)))

   (while (not (minusp (setq i (1- i))))

     (setq pts (cons (cdr (assoc 10 (entget (ssname ss i)))) pts)))

   (setq ptsx (vl-sort pts '(lambda (p q) (< (car  p) (car  q)))))

   (setq ptsy (vl-sort pts '(lambda (p q) (< (cadr p) (cadr q)))))

   (setq d (abs (/ (- (car  (last ptsx)) (caar  ptsx))      ;xmax-xmin
           (if (zerop (setq d0 (- (cadr (last ptsy)) (cadar ptsy)))) ;ymax-ymin
             0.001
             d0))))


   (setq pt (getpoint "\nSpecify dimension line location: "))

   (or *DimTypeBDA
       (setq *DimTypeBDA "Aligned"))
   (not (initget "Horizontal Vertical Aligned"))
   (setq *DimTypeBDA (cond ((getkword (strcat "\nType of dimension ["
                          (cond ((> d 1000.) (if (= *DimTypeBDA "Vertical") (setq *DimTypeBDA "Horizontal")) "Horizontal")
                            ((< d 0.001) (if (= *DimTypeBDA "Horizontal") (setq *DimTypeBDA "Vertical")) "Vertical")
                            ("Horizontal/Vertical"))
                          "/Aligned] <" *DimTypeBDA ">: ")))
               (*DimTypeBDA)))

   (setq pts (if (or (= *DimTypeBDA "Horizontal")
             (and (= *DimTypeBDA "Aligned")
              (> (- (car (last ptsx))  (caar ptsx))
                 (- (cadr (last ptsy)) (cadar ptsy)))))
           ptsx
           ptsy))



   (setq i 0)

   )


(repeat (1- (length pts))  

  (cond ((= *DimTypeBDA "Horizontal")
     (command "_.DIMLINEAR"
        "_none" (nth i pts)
        "_none" (nth (1+ i) pts)
        "_H"
        "_none" pt))

    ((= *DimTypeBDA "Vertical")
       (command "_.DIMLINEAR"
        "_none" (nth i pts)
        "_none" (nth (1+ i) pts)
        "_V"
        "_none" pt))

    (T ;Aligned
       (command "_.DIMALIGNED"
        "_none" (nth i pts)
        "_none" (nth (1+ i) pts)
        "_none" pt)))



  (setq i (1+ i)))

(princ (strcat "\nError: Wrong selection of at least 2 BLOCKS.")))

(foreach e oVAR (setvar (car e) (cdr e)))

(vla-endundomark doc)

(princ)

)'''
...