Пример получения строки поля (опубликовано http://forum.dwg.ru/showthread.php?p=15 … st1544329)

(vl-load-com)
(defun C:DEMO6 ()
  (setq en (car(nentsel "\nВыберите атрибут ")))
  (princ "\nСтрока поля: ")
  (princ(bg:FieldCode en))(princ)
  )
(defun bg:FieldCode (ent / foo elst xdict dict field str)
  ;; credits gile gc:FieldCode
  (defun ObjIdxStr (fld / pos)
  (setq pos (vl-string-search "ObjIdx " (cdr (assoc 2 fldId)) 0))
  (substr fld (1+ pos) (- (vl-string-search ">%" fld pos) pos))
  )
  (defun foo (field str / pos fldID objID)
    (setq pos 0)
    (if (setq pos (vl-string-search "\\_FldIdx " str pos))
      (while (setq pos (vl-string-search "\\_FldIdx " str pos))
        (setq fldId (entget (cdr (assoc 360 field)))
              field (vl-remove (assoc 360 field) field))
        (setq
              str   (strcat
                      (substr str 1 pos)
                      (if (setq objID (cdr (assoc 331 fldId)))
                        (vl-string-subst
                          ;;; (strcat "ObjId " (itoa (gc:EnameToObjectId objID))) ;;; VVA 2015-12-07
                          (strcat "ObjId " (bg:GetObjectIDString objID))
                          ;;; "ObjIdx" ;;; rem VVA 2015-12-07
                          (ObjIdxStr (cdr (assoc 2 fldId))) ;;; add VVA 2015-12-07
                          (cdr (assoc 2 fldId))
                        )
                        (foo fldId (cdr (assoc 2 fldId)))
                      )
                      (substr str (1+ (vl-string-search ">%" str pos)))
                    )
        )
      )
      str
    )
  )
  
  (setq elst (entget ent))
  (if (vlax-property-available-p (vlax-ename->vla-object ent) 'Textstring)
    (cond ((= (cdr(assoc 0 elst)) "MULTILEADER")
           (setq str (cdr(assoc 304 elst)))
           )
          ((and ;;; MTEXT ATTRIB ADD VVA 2011-20-27
             (member (cdr(assoc 0 elst)) '("ATTRIB"))
             (member '(101 . "Embedded Object") elst)
             )
           (setq str (apply 'strcat (append (bg:massoc 3 elst)(bg:massoc 1 (member '(101 . "Embedded Object") elst)))))
           )
          
          ((member (cdr(assoc 0 elst)) '("TEXT" "MTEXT" "ATTRIB"))
           (setq str (apply 'strcat (append (bg:massoc 3 elst)(bg:massoc 1 elst))))
           )
          (t (setq str (vla-get-TextString (vlax-ename->vla-object ent))))
    )
    )
  (if (and
    (member (cdr (assoc 0 elst)) '("ATTRIB" "MTEXT" "TEXT" "MULTILEADER"))
    (setq xdict (cdr (assoc 360 elst)))
    (setq dict (dictsearch xdict "ACAD_FIELD"))
    (setq field (dictsearch (cdr (assoc -1 dict)) "TEXT"))
      )
    (setq str (foo field (cdr (assoc 2 field))))
  )
    str
)
(defun bg:GetObjectIDString ( obj / *util* )
  (if (eq (type obj) 'ENAME)
    (setq obj (vlax-ename->vla-object obj))
    )
  (setq *util* (vla-get-Utility (vla-get-ActiveDocument (vlax-get-acad-object))))
  (if  (vlax-method-applicable-p *util* 'GetObjectIdString)
    (vla-GetObjectIdString *util* obj :vlax-false)
    (itoa (vla-get-ObjectId obj))
  )
 )
(defun bg:massoc (key alist)(mapcar 'cdr (vl-remove-if-not (function (lambda (x) (= key (car x)))) alist)))
Largo_GT пишет:

при использовании "Вариант программы для корректной работы в 2016 Автокаде" тоже самое.
Поможите люди добрые.

Проверил этот вариант (http://forum.dwg.ru/showpost.php?p=1525 … stcount=14) на 2015 Автокаде.
Все работает. Возможно дело в файле

Вариант программы для корректной работы в 2016 Автокаде
AUTOCAD 2016 не работает программа вырезания фрагмента генплана Помогите внести изменения.

;|====================================================
Фрагмент чертежа по прямоуг.,кругл. или ломаной границе
(программа тестировалась на AutoCAD 2006-2012)

История программы:
https://www.caduser.ru/forum/topic44865.html
Для работы в 2016 Автокаде
http://forum.dwg.ru/showthread.php?p=1497028#post1497028


Программа Дениса Флюстикова "Fragm_Den" от 25.07.12:
Возможность получения результата без обработки блоков.

Макрос для кнопки:
^C^C^P(load "Fragm_Den");Fragm_Den

Замечания и предложения по адресу fd-@mail.ru
====================================================|;

(defun c:Fragm_Den (/ *error* aa1 aa2 aa3 aa4 aa5 aa6 aa7 aa8 aa9
            aa10 aa11 aa12 aa13 aa14 aa15 aa16 aa17 aa18 aa19)

(if (>= (atof (getvar "ACADVER")) 16.2)(progn

(initget 128 "К Л")

(setq aa10 "Размер"    ; Слой построения контура
      aa15 1        ; 1- Расчленение блоков,  2- Через "_.xclip",    0- Блоки без 

редактирования
      aa18 1        ; 1- Результат примитивами,            0- Блоком
      
 ;        При масштабировании результата:
      aa11 1        ; 1- С сохранением масштаба штриховки,        0- Без
      aa12 1        ; 1- С сохранением глоб.толщины полилиний,    0- Без
      aa13 1        ; 1- С сохранением значения размеров,        0- Без
      aa14 145        ; Цвет (1-255) отмасштабированных размеров,    0- Без изменения
      aa8 (ssadd)
      aa2 nil
      aa5 nil
      aa1 (getpoint "\nПервая точка прямоугольной области или [Круглая/Ломаная] 

<Ломаная>:")
      aa17 T
      aa19 nil)

(if (> (+ aa11 aa12 aa13) 0)(setq aa19 (list aa11 aa12 aa13 aa14)))

(vl-load-com)

(cond
((= (type aa1) 'LIST)
   (if (setq aa2 (getcorner aa1 "\nВторая точка области:"))(progn
(setq aa1 (trans aa1 1 0)
      aa2 (trans aa2 1 0)
      aa7 (list (cons 10 aa1)
      (cons 10 (list (car aa1)(cadr aa2)))
      (cons 10 aa2)
      (cons 10 (list (car aa2)(cadr aa1))))
)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(command "_.undo" "_m")

)
))
((= aa1 "К")

(initget 1)
(setq aa1 (getpoint "\nЦентр круглой области:"))

(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(command "_.undo" "_m")
(if aa10 (if (tblsearch "Layer" aa10)(setvar "CLAYER" aa10)))

(princ "\nРадиус области:")

(vl-cmdf "_.circle" aa1)
(while (= (getvar 'cmdactive) 1)
(setq aa2 (vl-cmdf pause)))

(if aa2 (progn
(setq aa2 (cadr (grread 1 1))
      aa2 (trans aa2 1 0)
      aa4 (entlast)
      aa3 (vlax-ename->vla-object aa4)
      aa5 (vlax-curve-getEndParam aa3)
      aa5 (vlax-curve-getDistAtParam aa3 aa5)
      aa5 (/ aa5 256.0)
      aa1 0
      aa7 '())

(repeat 256
(setq aa7 (append aa7 (list (cons 10 (vlax-curve-getpointatdist aa3 aa1))))
      aa1 (+ aa1 aa5))
)

)))
(T

(setq aa1 (getpoint "\nПервая точка ломаной границы или <Выбрать>:"))

(if aa1 (progn

(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(command "_.undo" "_m")

(princ "\nСледующая точка границы:")

(if (vl-cmdf "_.line" aa1 pause)(progn

(setq aa1 (list aa1))
(princ "\nСледующая точка границы или <Прервать>:")

(while (= (getvar 'cmdactive) 1)
(setq aa3 (getvar "lastpoint")
      aa7 (car aa1)
      aa6 aa1
      aa1 (cons aa3 aa1)
      aa8 (ssadd (entlast) aa8))

(if (equal (last aa1) aa3 1e-6)
(vl-cmdf "")(progn

(while (> (length aa6) 2)
(setq aa6 (cdr aa6))
(if (or (inters aa3 aa7 (car aa6)(cadr aa6) t)
    (equal (angle aa3 aa7)(angle (caddr aa1) aa7) 1e-6)
    (equal aa3 aa7 1e-6))(progn
(vl-cmdf "_u")
(princ "\nСамопересечение границы\nСледующая точка границы или <Прервать>:")
(setq aa1 (cdr aa1)
      aa6 nil)))
)
(setq aa3 (vl-cmdf pause))
))
)
))

(if (and aa3 (> (length aa1) 2))
(setq aa2 (trans (getvar "lastpoint") 1 0)
      aa7 '())(progn
(setq aa2 nil)
(command "_.undo" "_b")
))

(mapcar '(lambda (q) (setq aa7 (append aa7 (list (cons 10 (trans q 1 0)))))) aa1)
)(progn

(setq aa1 (entsel "\nВыберите полилинию или <Выход>:"))

(if aa1 (progn

(setq aa2 (trans (cadr aa1) 1 0)
      aa4 (car aa1)
      aa5 (entget aa4)
      aa11 aa4
      aa7 '())

(if (wcmatch (cdr (assoc 0 aa5)) "*POLYLINE")(progn
(if (= (cdr (assoc 0 aa5)) "POLYLINE")(while aa11

(setq aa11 (entnext aa11)
      aa9 (entget aa11))

(if (= (cdr (assoc 0 aa9)) "VERTEX")
(setq aa7 (append aa7 (list (assoc 10 aa9)))
      aa7 (append aa7 (list (assoc 42 aa9))))
)
(if (= (cdr (assoc 0 aa9)) "SEQEND")
(setq aa11 nil
      aa5 aa7
      aa7 '())
)))

(setq aa5 (append aa5 (list '(10)))
      aa9 nil
      aa11 (vlax-ename->vla-object aa4))

(mapcar '(lambda (q)
(if (= (car q) 10)(if aa9 (progn

(if (cdr q)
(setq aa12 (vlax-curve-getDistAtPoint aa11 (cdr q)))
(setq aa12 (vlax-curve-getDistAtParam aa11 (vlax-curve-getEndParam aa11)))
)

(if (null (setq aa13 (vlax-curve-getDistAtPoint aa11 (cdr (last aa7)))))
(setq aa13 0))
(setq aa9 (fix (abs (/ (atan aa9) pi 1e-3)))
      aa12 (/ (- aa12 aa13) aa9))

(repeat aa9
(setq aa13 (+ aa13 aa12)
      aa7 (append aa7 (list (cons 10 (vlax-curve-getPointAtDist aa11 aa13)))))
)
)(if (cdr q)(setq aa7 (append aa7 (list q)))))
(if (= (car q) 42)(if (= (setq aa9 (cdr q)) 0)(setq aa9 nil)
)))) aa5)

(if (< (length aa7) 3)(progn
(setq aa2 nil)
(princ "\nВыбранная полилиния имеет меньше трех вершин")
))
)
(progn
(setq aa2 nil)
(princ "\nВыбранный объект не является полилинией")
))
))

(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(command "_.undo" "_m")

)
)
)
)

(if aa2 (progn

(defun *error* (msg)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(if (< (atof (getvar "ACADVER")) 17.1)
(vla-sendcommand (vla-get-activedocument
(vlax-get-acad-object)) "_.undo 1 ")
(command nil nil nil nil "_.undo" 1))
(princ "\nВыход во время обработки данных\n")
)

(if aa10 (if (tblsearch "Layer" aa10)(setvar "CLAYER" aa10)))

(setq aa3 (list (cons 0 "LWPOLYLINE")(cons 100 "AcDbEntity")(cons 100 "AcDbPolyline"))
      aa7 (append (list (cons 90 (length aa7))(cons 70 1)) aa7)
      aa1 '())

(entmake (append aa3 aa7))

(setq aa16 (entlast))

(mapcar '(lambda (q)

(if (= (car q) 10)
(setq aa1 (cons (trans (cdr q) 0 1) aa1)))

) aa7)

(if aa5
(setq aa8 (ssadd aa16 aa8))
(setq aa4 aa16)
)

(setvar "OSMODE" 0)
(setvar "LTSCALE" 0.0001)

(while (setq aa9 (tblnext "Layer" aa17))
(setq aa17 nil)
(if (= (cdr (assoc 70 aa9)) 4)
(vl-cmdf "_.'layer" "_u" (cdr (assoc 2 aa9)) "")
)
)

(command "_.imageframe" 1
     "_.shademode" 2
     "_.zoom" "_o" aa16 ""
     "_.wipeout" "_f" "_on"
     "_.regen"
     "_.offset" (/ (getvar "VIEWSIZE") 5e3) aa16 (getvar "VSMAX") ""
     "_.zoom" "_o" (setq aa5 (entlast) aa6 aa5) "")

(setvar "EXPLMODE" 1)

(mapcar '(lambda (q)
(if (= (car q) 3)
(command "_-group" "_e" (cdr q)))
)(dictsearch (namedobjdict) "ACAD_GROUP"))

(if (not (equal (last aa1)(car aa1) 1e-6))
(setq aa1 (cons (last aa1) aa1)))

(if (= aa15 2)(progn

(setq aa3 (ssget "_F" aa1 '((0 . "INSERT")))
      aa9 aa6)

(if aa3
(repeat (setq aa7 (sslength aa3))

(setq aa10 (ssname aa3 (setq aa7 (1- aa7)))
      aa11 (entget aa10))

(command "_.xclip" aa10 "" "_n")

(if (and (setq aa11 (member '(102 . "{ACAD_XDICTIONARY") aa11))
     (setq aa11 (cdr aa11))
     (setq aa10 (cdr (assoc 360 aa11)))
     (setq aa11 (entget aa10))
     (assoc 360 (member '(3 . "ACAD_FILTER") aa11))
     )
(command "_y")
)
(command "_p")
(repeat (setq aa10 (length aa1))
(command (nth (setq aa10 (1- aa10)) aa1))
)
(command "")
))

)
(if (= aa15 1)
(while aa3
 ; Блоки расчленить: "_CP" - все в выбранной области, "_F" - на границе:
(setq aa3 (ssget "_F" aa1 '((0 . "INSERT")))
      aa9 aa6)

(if aa3
(repeat (setq aa7 (sslength aa3))

(setq aa10 (ssname aa3 (setq aa7 (1- aa7)))
      aa11 (entget aa10))

(if (= (cdr (assoc 1 (entget (tblobjname "block" (cdr (assoc 2 aa11)))))) "")(progn

(setq aa17 '()
      aa12 (entget (tblobjname "layer" (cdr (assoc 8 aa11))))
      aa17 (cons (list (assoc 370 aa11)
               (assoc 370 aa12)) aa17)
      aa17 (cons (list (assoc 6 aa11)
               (assoc 6 aa12)) aa17)
      aa17 (cons (list (assoc 62 aa11)
               (assoc 62 aa12)) aa17)
      aa12 aa10
      aa13 '())

(if (= (cdr (assoc 66 aa11)) 1)(progn

 ;(command "_.attsync" "_s" aa10 "_y")

(while (/= "SEQEND" (cdr (assoc 0 aa11)))

(if (= (cdr (assoc 0 aa11)) "ATTRIB")(progn

(setq aa14 '())

(foreach aa15 '(2 1 7 8 10 11 39 40 41 50 51 62 71 73 370)(progn
(if (/= (assoc aa15 aa11) nil)
(setq aa14 (append aa14 (list (assoc aa15 aa11)))))))

(setq aa13 (cons aa14 aa13))

))

(setq aa12 (entnext aa12)
      aa11 (entget aa12))

)
))

(command "_.explode" aa10)

(while (entnext aa9)
(setq aa9 (entnext aa9)
      aa11 (entget aa9)
      aa12 (entget (tblobjname "layer" (cdr (assoc 8 aa11)))))

(if (= (setq aa15 (cdr (setq aa14 (assoc 62 aa11)))) 0)
(if (setq aa15 (car (nth 0 aa17)))
(entmod (setq aa11 (subst aa15 aa14 aa11)))
(entmod (setq aa11 (subst (cadr (nth 0 aa17)) aa14 aa11)))
)
(if (null aa15)
(entmod (setq aa11 (append aa11 (list (assoc 62 aa12)))))
))

(if (and (setq aa15 (cdr (setq aa14 (assoc 6 aa11))))(= (strcase aa15) "BYBLOCK"))
(if (setq aa15 (car (nth 1 aa17)))
(entmod (setq aa11 (subst aa15 aa14 aa11)))
(entmod (setq aa11 (subst (cadr (nth 1 aa17)) aa14 aa11)))
)
(if (null aa15)
(entmod (setq aa11 (append aa11 (list (assoc 6 aa12)))))
))

(if (= (setq aa15 (cdr (setq aa14 (assoc 370 aa11)))) -2)
(if (setq aa15 (car (nth 2 aa17)))
(entmod (setq aa11 (subst aa15 aa14 aa11)))
(entmod (setq aa11 (subst (cadr (nth 2 aa17)) aa14 aa11)))
)
(if (null aa15)
(entmod (setq aa11 (append aa11 (list (assoc 370 aa12)))))
))

(if (= (cdr (assoc 0 aa11)) "ATTDEF")(progn

(setq aa8 (ssadd aa9 aa8)
      aa14 (assoc 2 aa11)
      aa15 (cdr (assoc aa14 aa13)))

(if aa15 (if (/= (vl-string-trim " " (cdar aa15)) "")(progn
(if (setq aa14 (assoc 370 aa11))
(if (null (assoc 370 aa15))
(setq aa15 (append aa15 (list aa14)))
))
(entmake (cons '(0 . "TEXT") aa15))
)))
))
))(progn

(command "_.xclip" aa10 "" "_n")

(if (and (setq aa11 (member '(102 . "{ACAD_XDICTIONARY") aa11))
     (setq aa11 (cdr aa11))
     (setq aa10 (cdr (assoc 360 aa11)))
     (setq aa11 (entget aa10))
     (assoc 360 (member '(3 . "ACAD_FILTER") aa11))
     )
(command "_y")
)
(command "_p")
(repeat (setq aa10 (length aa1))
(command (nth (setq aa10 (1- aa10)) aa1))
)
(command "")
))
))

(setq aa3 nil)

(while (entnext aa6)
(setq aa6 (entnext aa6)
      aa3 T)
)
)
)
)

(if (setq aa3 (ssget "_F" aa1 '((-4 . "<OR")
            (0 . "ACAD_TABLE")
;;;            (0 . "*DIMENSION")
;;;            (0 . "LEADER")
            (-4 . "OR>")
)))
(repeat (setq aa7 (sslength aa3))
(command "_.explode" (ssname aa3 (setq aa7 (1- aa7))))
))

(if (setq aa12 (ssadd)
      aa3 (ssget "_CP" aa1 '((0 . "HATCH"))))(progn

(setq aa6 (entlast)
      aa7 (sslength aa3))

(repeat aa7

(setq aa10 (ssname aa3 (setq aa7 (1- aa7)))
      aa9 (assoc 450 (entget aa10)))

(if (= (cdr aa9) 1)
(entmod (subst (cons 450 0) aa9 (entget aa10))))

(command "_-hatchedit" aa10 "_b" "_r" "_n")

(if (null (entnext aa6))(progn
(command "_-hatchedit" aa10 "_b" "_p" "_n"
     "_-hatchedit" aa10 "_di"
     "_-hatchedit" aa10 "_as" "_s")

(while (entnext aa6)
(setq aa6 (entnext aa6)
      aa8 (ssadd aa6 aa8)
      )
(command aa6)
)

(command "" ""
     "_-hatchedit" aa10 "_b" "_r" "_n")
))

(if (entnext aa6)(progn
(setq aa6 (entnext aa6)
      aa8 (ssadd aa6 aa8)
      aa12 (ssadd aa6 aa12)
      )
(command "_-hatchedit" aa10 "_di"
     "_-hatchedit" aa10 "_as" "_s" aa6 "" "")
))

(if (= (cdr aa9) 1)(progn
(setq aa9 (entget aa10))
(entmod (subst (cons 450 1) (assoc 450 aa9) aa9))
))
)
))

(if (setq aa3 (ssget "_CP" aa1 '((0 . "REGION"))))
(repeat (setq aa11 (sslength aa3))
(setq aa11 (1- aa11)
      aa12 (ssadd (ssname aa3 aa11) aa12))
))

(if (> (sslength aa12) 0)(progn
(command "_.copy" aa4 "" '(0 0 0) '(0 0 0)
     "_.region" (entlast) "")

(setq aa7 (sslength aa12)
      aa6 (entlast)
      aa8 (ssadd aa6 aa8))

(repeat aa7
(command "_.copy" aa6 "" '(0 0 0) '(0 0 0))
(setq aa8 (ssadd (entlast) aa8))
(command "_.intersect" (ssname aa12 (setq aa7 (1- aa7))) (entlast) "")
)
))

(if (setq aa3 (ssget "_X" '((0 . "IMAGE,WIPEOUT"))))
;;;(if (setq aa3 (ssget "_CP" aa1 '((0 . "IMAGE,WIPEOUT"))))
(repeat (setq aa7 (sslength aa3))

(setq aa6 (ssname aa3 (setq aa7 (1- aa7)))
      aa9 (entget aa6)
      aa10 (cdr (assoc 10 aa9))
      aa11 (cdr (assoc 11 aa9))
      aa12 (cdr (assoc 12 aa9))
      aa14 (cdr (assoc 13 aa9)))

(if (or (= (logand (cdr (assoc 70 aa9)) 4) 0)(< (cdr (assoc 91 aa9)) 3))
(setq aa9 (list '(14 0 0)
        (list 14 0 (cadr aa14))
        (list 14 (car aa14) (cadr aa14))
        (list 14 (car aa14) 0)
        '(14 0 0))
      aa14 (list 0 (cadr aa14)))
(setq aa14 (list -0.5 (- (cadr aa14) 0.5))))

(setvar "DELOBJ" 1)
 (apply 'command (cons "_.pline"
            (vl-remove nil
              (mapcar ' (lambda (q)
                     (if (= (car q) 14)
                      (progn
                       (setq aa13 (cdr q)
                    aa13 (mapcar '- aa13 aa14)
                    aa13 (mapcar '- (mapcar '* aa11 (list (car aa13)

(car aa13)))
                          (mapcar '* aa12 (list (cadr aa13)(cadr 

aa13))))
                    aa13 (mapcar '+ aa10 aa13))
                       (trans aa13 0 1)
                       ;(command (trans aa13 0 1))
                       );progn
                      );if
                     );lambda
                  aa9);mapcar
              )
            )
     )
;(command "_.pline")

;(mapcar '(lambda (q)

;(if (= (car q) 14)(progn

;(setq aa13 (cdr q)
 ;     aa13 (mapcar '- aa13 aa14)
  ;    aa13 (mapcar '- (mapcar '* aa11 (list (car aa13)(car aa13)))
;           (mapcar '* aa12 (list (cadr aa13)(cadr aa13))))
;              aa13 (mapcar '+ aa10 aa13))

;(command (trans aa13 0 1))
;))

;) aa9)

(command "_u" "_c"
     "_.region" (entlast) "")

(setvar "DELOBJ" 0)
(setq aa10 (entlast))

(if (= (cdr (assoc 0 (entget aa10))) "REGION")(progn

(command "_.region" aa16 ""
     "_.intersect" aa10 (entlast) "")

(if (eq aa10 (entlast))(progn

(command "_.explode" aa10)

(setq aa9 nil
      aa12 (ssadd))

(if (= (cdr (assoc 0 (entget (entlast)))) "REGION")

(while (entnext aa10)
(setq aa12 (ssadd (setq aa10 (entnext aa10)) aa12))
)(progn
(command "_.undo" 1)
(setq aa12 (ssadd aa10 aa12))
))

(repeat (setq aa14 (sslength aa12))

(command "_.explode" (ssname aa12 (setq aa14 (1- aa14)))
     "_.pedit" (setq aa10 (entnext aa10)) "_y" "_j")

(while (setq aa10 (entnext aa10))
(command aa10))

(command "" "")

(setq aa11 (entlast)
      aa10 (entget aa11)
      aa9 '())

(mapcar '(lambda (q)

(if (= (car q) 10)
(setq aa9 (cons (trans (cdr q) 0 1) aa9)))

) aa10)

(if (equal (last aa9) '(0 0 0) 1e-6)
(setq aa9 (reverse aa9)))

(if (= (cdr (assoc 0 (entget aa6))) "IMAGE")(progn
(command "_.copy" aa6 "" '(0 0 0) '(0 0 0)
     "_.imageclip" (entlast) "_d"
     "_.imageclip" (entlast) "_n" "_p")
(repeat (setq aa10 (length aa9))(command (nth (setq aa10 (1- aa10)) aa9)))
(command "_c")
)
(command "_.wipeout" "_p" aa11 "_y"
     "_.matchprop" aa6 (entlast) "")
)

(setq aa8 (ssadd aa11 aa8)
      aa10 (entlast))
)

(setq aa8 (ssadd aa6 aa8))

))
)
(command "_.erase" aa10 "")
)

))

(setq aa3 (ssget "_CP" aa1)
      aa6 '())

(mapcar '(lambda (q)

(if (= (car q) 10)
(setq aa6 (cons (trans (cdr q) 0 1) aa6)))

)(entget aa5))

(setq aa6 (cons (last aa6) aa6))

(if aa3 (command "_.move" aa3 "" '(0 0 0) '(0 0 0)))

(repeat 4
(command "_.trim" aa4 "" "_f")

(repeat (setq aa5 (length aa6))
(command (nth (setq aa5 (1- aa5)) aa6))
)

(while (= (getvar 'cmdactive) 1)(command ""))
)

(setq aa10 (entdel aa4))

(if (setq aa5 (ssget "_CP" aa6 '((0 . "*POLYLINE"))))(progn
(vl-cmdf "_.pedit" "_m" aa5 "" "_w" 0 "")
(setq aa5 (ssget "_F"  aa6 '((0 . "*POLYLINE"))))
(command "_.undo" 1)
))

(setq aa9 (ssget "_F" aa6 '((-4 . "<OR")
                (0 . "LINE")
                (0 . "*DIMENSION");Без размеров
                (-4 . "OR>")
                )))

(entdel aa10)
(command "_.erase" aa8)
(if aa9 (command aa9 ))
(if aa5 (command aa5 ))
(command "")

(if (= aa18 1)
(setq aa3 (ssget "_CP" aa6 '((-4 . "<NOT")(0 . "MTEXT,*LEADER")(-4 . "NOT>")))
      aa11 (ssget "_CP" aa6 '((0 . "MTEXT,*LEADER"))))
(setq aa3 (ssget "_CP" aa6)
      aa11 nil)
)

(setq aa12 '()
      aa10 (getvar "FIELDEVAL")
      aa6 "Fragm_1")

(if aa11 (repeat (setq aa13 (sslength aa11))
(setq aa13 (1- aa13)
      aa14 (entget (ssname aa11 aa13) '("ACAD"))
 ;;;      aa14 (vl-remove (assoc -1 aa14) aa14)
      aa12 (cons aa14 aa12))
))

(while (or (tblsearch "block" aa6)
       (findfile (setq aa1 (strcat (getvar "tempprefix") aa6 ".dwg"))))
(setq aa6 (substr aa6 7)
      aa6 (itoa (1+ (atoi aa6)))
      aa6 (strcat "Fragm_" aa6))
)

(if aa3 (progn

(command "_.draworder" aa4 "" "_f"
     "_.wblock" aa1 "" (trans aa2 0 1) aa3 aa4 ""
     "_.undo" "_b"
     "_fieldeval" 0
     "_.regenall"
     "_.insert" aa1 "_none" (trans aa2 0 1))

(while (= (getvar 'cmdactive) 1)
(command ""))

(vl-file-delete aa1)

(setq aa2 (trans aa2 0 1)
      aa3 1.0
      aa11 (ssadd (entlast) (ssadd)))

(repeat (setq aa13 (length aa12))
(setq aa13 (1- aa13)
      aa1 (nth aa13 aa12))
(if (/= (cdr (assoc 70 (tblsearch "Layer" (cdr (assoc 8 aa1))))) 4)(progn
(entmake aa1)
(entmod (entget (entlast)))
(setq aa11 (ssadd (entlast) aa11))
))
)

;;;(vl-cmdf "_.copyclip" aa11 "")

(while aa2

(vl-cmdf "_.move" aa11 "" "_none" aa2)

(princ "\nУкажите положение фрагмента или <Настроить>:")

(setq aa1 (vl-cmdf pause)
      aa8 (getvar 'lastprompt))

(if aa1
(if (equal aa2 (getvar "LASTPOINT") 1e-6)(progn

(if (setq aa1 (vl-string-search ">:" aa8))
(setq aa1 (substr aa8 (+ aa1 3))))

(if (= aa1 "0")
(setq aa2 nil)(progn
(command "_.move" aa11 "" aa2 '(0 0 0)
     "_.move" aa11 "" aa2 (setq aa2 (cadr (grread 1 1))))

(princ (strcat "\nМасштаб или <" (nth aa18 '("Примитивами" "Блоком")) ", масштаб "))
(princ aa3)(princ ">:")

(initget 128)
(if (vl-catch-all-error-p
(setq aa7 (vl-catch-all-apply 'getkword)))
(setq aa7 ""))

(if (null aa7)(setq aa7 "" aa18 (abs (1- aa18))))

(setq aa7 (vl-string-translate ",:" "./" aa7)
      aa4 (atof aa7))

(if (setq aa5 (vl-string-search "/" aa7))
(if (= (setq aa5 (atof (substr aa7 (+ aa5 2)))) 0)
(setq aa4 aa3)
(setq aa4 (/ aa4 aa5))
))

(if (= aa4 0)(setq aa4 aa3))

(setq aa7 (* (/ 1.0 aa3) aa4)
      aa3 aa4)

(vl-cmdf "_.scale" aa11 "" "_none" aa2 aa7)
)))
(setq aa2 nil)
)
(setq aa2 nil
      aa8 nil)
)
)

(if (= aa18 1)(progn
(setq aa4 (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)))
      aa1 (getvar "EXPLMODE")
      aa5 (entlast)
      aa18 (nth 3 aa19)
      aa7 (ssadd))

(setvar "EXPLMODE" 1)
(command "_.explode" (ssname aa11 0))
(setvar "EXPLMODE" aa1)

(if (eq (type (vl-catch-all-apply 'vla-Item (list aa4 aa6))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa4 aa6))))

(if (and aa19 (/= aa3 1))

(while (entnext aa5)
(setq aa5 (entnext aa5)
      aa1 (entget aa5 '("ACAD"))
      aa2 (cdr (assoc 0 aa1)))

(if (/= (cdr (assoc 70 (tblsearch "Layer" (cdr (assoc 8 aa1))))) 4)(progn

(cond
((and (= aa2 "HATCH")(= (nth 0 aa19) 1))
(if (setq aa2 (assoc 41 aa1))(progn

(entmod (subst (cons 41 (/ (cdr aa2) aa3)) aa2 aa1))

(command "_-hatchedit" aa5 "_p")
(while (= (getvar 'cmdactive) 1)(command ""))

))
)
((and (wcmatch aa2 "*POLYLINE")(= (nth 1 aa19) 1))
(if (setq aa2 (assoc 43 aa1))
(vl-cmdf "_.pedit" "_m" aa5 "" "_w" (/ (cdr aa2) aa3) "")
)
)
((and (wcmatch aa2 "*DIMENSION")(= (nth 2 aa19) 1))
(setq aa1 (entget aa5 '("ACAD"))
      aa2 (cadr (assoc -3 aa1))
      aa2 (member (cons 1070 '144) aa2))

(if aa2
(setq aa2 (cdadr aa2))
(setq aa1 (cdr (assoc 3 aa1))
      aa1 (tblobjname "DIMSTYLE" aa1)
      aa2 (cdr (assoc 144 (entget aa1))))
)

(if (null aa2)(setq aa2 1.))

(command "_.dimoverride" "DIMLFAC" (/ aa2 aa3) "" aa5 "")

(if (and (> aa18 0)(< aa18 256))(setq aa7 (ssadd aa5 aa7)))

)
)
))
)
)

(if (> (sslength aa7) 0)(command "_.change" aa7 "" "_p" "_c" aa18 ""))

))
(setvar "FIELDEVAL" aa10)
)
(command "_.undo" "_b")
)
))

(setvar "CMDECHO" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(if (null aa8)(command "_.undo" 1))

)
(princ "\nДля AutoCAD с 2006 версии")
)
(princ)
)

4

(3 ответов, оставленных в LISP)

Исправлен в SP2

VVA пишет:

Если ты про > VVA (2007-06-20 16:39:05), то в этом коде не обрабатывается случай, когда в текущем текстовом стиле задана высота, отличная от 0.

Вариант с учетом высоты текстового стиля, привязок, ПСК
Автоматическая нумерация поворотных точек участка

6

(14 ответов, оставленных в LISP)

ideal-a пишет:

Приложение скомпилированно в VLX и устанавливается инсталлятором

А если приложение скомпилировать в fas? Далее все то же самое

Шелдон Шелдон пишет:

работает но не хочет выбирать обьект, помогите

В посте #30 есть пояснение к коду

Обрабатывает Rotated или Aligned размеры.

Скорее всего у тебя линейный горизонтальный или вертикальный размер

Нужно, чтобы случайные числа генерировались в пределах от -0,002 до +0,002 с шагом в 0,001. Возможно ли это?

(Lisp) интерактивно выбрать только горизонтальные или вертикальные линейные размеры ?

VVA пишет:

Новые обновления http://autolisp.ru/dwlsp/15

Архив выложен здесь http://forum.dwg.ru/showthread.php?p=11 … ost1173805

11

(5 ответов, оставленных в LISP)

Виталич Круглов пишет:

Дело в том, что у меня объекты есть группы..они состоят из вхождения блока и из нескольких наборов примитивов, типы которых могут быть различны

Можно использовать связку расширенных данные + словари. В фильтре Функции ssget можно использовать группу -3 для выбора примитивов с определенным именем расширенных данных

Пример здесь, начиная с поста #30

Вариант BINC с запросом блока и выбором атрибута

А ничего усовершенствовать не нужно
1. Берем отсюда LISP.Выделение объектов в области контура или отсюда Выделение объектов в области контура, AutoCAD команды SCWP или SCCP
2. Выделяем и их помощью объекты внутри контура
3. Используем MAREA42
[FONT=Arial]!!! Обращаем внимание на то, что системная переменная PICKFIRST должна быть = 1[/FONT]

14

(4 ответов, оставленных в LISP)

Еще вариант

;;; http://www.theswamp.org/index.php?topic=30660.0
;;; Entsel/NEntsel with display of layer name of object on mouse over and optional keyword
;;; #Nested - T for nested selection, nil if not
;;; #Prompt - Prompt string to display, when not displaying object's layer name
;;; #Keywords - Comma delimited key letters or nil to ignore (ie: "A,b" to match A, a, B or b
;;; Alan J. Thompson, 10.20.09
;;; 10.29.09 CAB modified
(defun AT:EntselLayerDisplay
       (#Nested #Prompt #Keywords / *error* #Layer #Prompt #Text #Read #Temp #Final MinPt MaxPt tStr)
  (setq *error* (lambda (x) (and #Text (vl-catch-all-apply 'vla-delete (list #Text))))
        #Layer  (vlax-ename->vla-object (tblobjname "layer" "0"))
  ) ;_ setq
  (or *AcadDoc* (setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  (or #Prompt (setq #Prompt "Select object: "))
  (or (eq (getvar 'clayer) "0") (vla-put-freeze #Layer :vlax-false))
  (vla-put-lock #Layer :vlax-false)
  (vla-put-layeron #Layer :vlax-true)
  (setq #Text (vlax-ename->vla-object
                (entmakex (list '(0 . "MTEXT")
                                '(100 . "AcDbEntity")
                                '(100 . "AcDbMText")
                                '(8 . "0")
                                ;'(62 . 250) ; CAB removed
                                ;'(90 . 1)   ; CAB removed no workie in ACAD2000
                                ;'(63 . 7)   ; CAB removed no workie in ACAD2000
                                ;'(45 . 1.3) ; CAB removed no workie in ACAD2000
                                (cons 40 (* (getvar "viewsize") 0.013))
                                (cons 50 0.0)
                                '(10 0 0 0);(trans (cadr (grread T 15 0)) 1 0)) ; CAB modified
                          ) ;_ list
                ) ;_ entmakex
              ) ;_ vlax-ename->vla-object
  ) ;_ setq
  (vl-catch-all-apply
    '(lambda ()
       (vlax-invoke
         (vla-AddObject
           (vla-GetExtensionDictionary
             (if (or (eq acmodelspace (vla-get-activespace *AcadDoc*))
                     (eq :vlax-true (vla-get-mspace *AcadDoc*))
                 ) ;_ or
               (vla-get-modelspace *AcadDoc*)
               (vla-get-paperspace *AcadDoc*)
             ) ;_ if
           ) ;_ vla-GetExtensionDictionary
           "ACAD_SORTENTS"
           "AcDbSortentsTable"
         ) ;_ vla-AddObject
         'MoveToTop
         (list #Text)
       ) ;_ vlax-invoke
     ) ;_ lambda
  ) ;_ vl-catch-all-apply
  (while (and (setq #Read (grread T 15 2))
              (/= (cadr #Read) 13)
              (/= (car #Read) 25)
              (not (vl-position (cadr #Read) '(13 158)))
              (not #Final)
         ) ;_ and
    (cond
      ((and (eq (car #Read) 2)(eq 9 (cadr #Read)));Click <TAB> to toggle between nested and non-nested
       (setq #Nested (not #Nested))
       )  
      ((eq 5 (car #Read))
       (vla-put-insertionpoint
         #Text
         (vlax-3d-point (polar (trans (cadr #Read) 1 0)
                               (angle '(0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T))) ; CAB modified
                               (* (getvar "viewsize") 0.02)))
       ) ;_ vla-put-insertionpoint
       (vla-put-height #Text (* (getvar "viewsize") 0.013))
       (if (setq #Ent (nentselp (cadr #Read)))
         (if #Nested
       (progn
         (setq QQQ #Ent)
            (vla-GetBoundingBox (vlax-ename->vla-object  (car #Ent)) 'MinPt 'MaxPt)
           (setq MinPt (vlax-safearray->list MinPt) MaxPt (vlax-safearray->list MaxPt))
           (setq tStr
                  (strcat
                    "{\\C4;"         (cdr (assoc 0 (entget (car #Ent)))) "}"
                    "\nHEIGHT:  "     (rtos (abs(- (cadr MaxPt)(cadr MinPt))) 2 5)
            "\nWIDTH:  "     (rtos (abs(- (car MaxPt)(car MinPt))) 2 5)
                    "\nLAYER:  "     (cdr (assoc 8 (entget (car #Ent))))                  )
                )
           (vla-put-textstring #Text tStr)
       )
           (cond
             ((eq (length #Ent) 2) (vla-put-textstring #Text (cdr (assoc 8 (entget (car #Ent))))))
             ((eq (length #Ent) 4)
              (vla-put-textstring #Text (cdr (assoc 8 (entget (car (car (reverse #Ent)))))))
             )
           ) ;_ cond
         ) ;_ if
         (vla-put-textstring #Text #Prompt)
       ) ;_ if
      )
      ((eq 3 (car #Read))
       (if (setq #Temp (nentselp (cadr #Read)))
         (progn
           (or #Nested
               (and (eq 4 (length #Temp))
                    (setq #Temp (list (car (car (reverse #Temp))) (cadr #Temp)))
               ) ;_ and
           ) ;_ or
           (or (eq (vla-get-objectid (vlax-ename->vla-object (car #Temp)))
                   (vla-get-objectid #Text)
               ) ;_ eq
               (setq #Final #Temp)
           ) ;_ or
         ) ;_ progn
       ) ;_ if
      )
      ((and #Keywords (eq (car #Read) 2))
       (if (wcmatch (strcase (chr (cadr #Read))) (strcase #Keywords))
         (setq #Final (chr (cadr #Read)))
       ) ;_ if
      )
    ) ;_ cond
  ) ;_ while
  (*error* nil)
  #Final
) ;_ defun
(defun C:TTT ()(AT:EntselLayerDisplay T NIL NIL))
(princ "\nType TTT in command line")

15

(4 ответов, оставленных в LISP)

https://docs.google.com/open?id=0B-v_7e … UFUT3k4S3M

Модификация из #64 для подсчета ЗАМНКУТЫХ контуров
Пояснение для полилиний:
Полилиния будет считаться замкнутой, если установлено соответствующее свойство или
совпадают начальная и конечная точка с точностью до 1e-6.

;_Команда MAREA42
(defun c:MAREA42 (/ m ss clist temp)
;_Считает площади ЗАМКНУТЫХ контуров  
;https://www.caduser.ru/forum/topic20298.html
; Владимир Азарко aka VVA для caduser.ru
  (defun sort (lst predicate) 
    (mapcar '(lambda (x) (nth x lst)) (vl-sort-i lst predicate)) 
  ) 
  (defun combine (inlist is-greater is-equal / sorted current result) 
    (setq sorted (sort inlist is-greater)) 
    (setq current (list (car sorted))) 
    (foreach item (cdr sorted) 
      (if (apply is-equal (list item (car current))) 
  (setq current (cons item current)) 
  (progn 
    (setq result (cons current result)) 
    (setq current (list item)) 
  ) 
      ) 
    ) 
    (cons current result) 
  ) 
  (defun mlen4_1 (lst / sum_area) 
    (setq sum_area 0) 
    (foreach item (mapcar 'car lst) 
      (setq sum_area  (+ sum_area 
       (if (and
         (vlax-property-available-p item 'area)
         (or
           (vlax-curve-isClosed item)
           (equal
         (vlax-curve-getStartPoint item)
         (vlax-curve-getEndPoint item)
         1e-6
         )
           )
         )
         (vla-get-area item) 
         0 
       ) ;_  if 
    ) ;_  + 
      ) 
    ) 
    (if  (not (zerop sum_area)) 
      (princ 
  (strcat "\n\t" (cdar lst) " = " (rtos (* sum_area m) 2 4)) 
      ) 
    ) 
    (list (cdar lst)(rtos (* sum_area m) 2 4)) 
  ) 
  (vl-load-com) 
  (if (null *M*)(setq *M* 1)) 
  (initget 6) 
  (and 
    (princ "\nВведите маштабный коэффициент <") 
    (princ *M*)(princ ">: ") 
    (or (setq m (getreal)) 
   (setq m *M*) 
   ) 
    (setq *M* m) 
    (setq ss (ssget "_:L")) 
    (setq ss (mapcar 
         (function vlax-ename->vla-object) 
         (vl-remove-if 
     (function listp) 
     (mapcar 
       (function cadr) 
       (ssnamex ss) 
     ) ;_  mapcar 
         ) ;_ vl-remove-if 
       ) 
    ) 
    (mapcar '(lambda (x) 
         (setq temp (cons (cons x (vla-get-Layer x)) temp)) 
       ) 
      ss 
    ) 
    (setq clist  (combine temp 
       '(lambda (a b) 
          (> (cdr a) (cdr b)) 
        ) 
       '(lambda (a b) 
          (eq (cdr a) (cdr b)) 
        ) 
    ) 
    ) 
    (princ 
      "\n\n  Общая площадь всех линейных примитивов по слоям:" 
    ) 
    (setq temp (mapcar 'mlen4_1 clist)) 
    (xls temp '("Слой" "Площадь") nil "mlen41") 
  ) 
  (princ) 
) ;_  defun 
;|================== XLS ======================================== 
* Опубликовано https://www.caduser.ru/forum/topic19920.html 
               https://www.caduser.ru/forum/topic31444.html 
               https://www.caduser.ru/forum/topic31669.html 
* Автор: Владимир Азарко aka VVA 
* Назначение: Печать списка данных Data-list в Excell 
*             Для вывода создается новый лист 
* Аргументы: 
              Data-list — список списков данных (LIST) вида 
                            ((Value1 Value2 ... VlalueN)(Value1 Value2 ... VlalueN)...) 
                            Каждый список вида (Value1 Value2 ... VlalueN) записывается 
                            в отдельную строку в соответствующие столбцы (Value1-A Value2-B и .т.д.) 
                  header —  список (LIST) заголовков или nil вида ("Подпись A" "Подпись B" ...) 
                            Если header nil, принимается ("X" "Y" "Z") 
                 Colhide —  список буквенных названий стоблцов для скрытия или nil — не скрывать 
                            ("A" "C" "D") — скрыть столбцы A, C, D 
                 Name_list — имя нового листа активной книги или nil — новая книга 
* Возврат: nil 
* TIPS!!! : При передачи функции xls числовых вещественных данных нет необходимости проверять текущий системный 
            разделитель целой и дробной части ("HKEY_CURRENT_USER\\Control Panel\\International" "sDecimal") 
            Функцией на время вывода отключается использование в Excele системного разделителя, разделителем 
            целой и дробной части устанавливается точка. После завершения ф-ции все восстанавливается. 
Пример вызова 
(xls '((1.1 1.2 1.3 1.4)(2.1 2.2 2.3 2.4)(3.1 3.2 3.3 3.4)) '("Столбец1" "Столбец2" "Столбец3" "Столбец4") '("B"))|; 
(vl-load-com) 
(defun xls ( Data-list header Colhide Name_list / *aplexcel* *books-colection* Currsep 
*excell-cells* *new-book* *sheet#1* *sheet-collection* col iz_listo row cell cols) 
(defun Letter (N / Res TMP)(setq Res "")(while (> N 0)(setq TMP (rem N 26) 
  TMP (if (zerop TMP)(setq N (1- N) TMP 26) TMP) 
  Res (strcat (chr (+ 64 TMP)) Res)  N   (/ N 26))) Res) 
(if (null Name_list)(setq Name_list "")) 
  (setq  *AplExcel*     (vlax-get-or-create-object "Excel.Application")) 
  (if (setq *New-Book*  (vlax-get-property *AplExcel* "ActiveWorkbook")) 
    (setq *Books-Colection*  (vlax-get-property *AplExcel* "Workbooks") 
          *Sheet-Collection* (vlax-get-property *New-Book* "Sheets") 
               *Sheet#1*     (vlax-invoke-method *Sheet-Collection* "Add")) 
(setq *Books-Colection*  (vlax-get-property *AplExcel* "Workbooks") 
              *New-Book*     (vlax-invoke-method *Books-Colection* "Add") 
          *Sheet-Collection* (vlax-get-property *New-Book* "Sheets") 
               *Sheet#1*     (vlax-get-property *Sheet-Collection* "Item" 1))) 
(setq *excell-cells*     (vlax-get-property *Sheet#1* "Cells")) 
(setq Name_list (if (= Name_list "") 
                  (vl-filename-base(getvar "DWGNAME")) 
                  (strcat (vl-filename-base(getvar "DWGNAME")) "&" Name_list)) 
   col 0 cols nil) 
(if (> (strlen Name_list) 26) 
(setq Name_list (strcat (substr Name_list 1 10) "..." (substr Name_list (- (strlen Name_list) 13) 14)))) 
(vlax-for sh *Sheet-Collection* (setq cols (cons (strcase(vlax-get-property sh 'Name)) cols))) 
(setq row Name_list) 
(while (member (strcase row) cols)(setq row (strcat Name_list " (" (itoa(setq col (1+ col)))")"))) 
(setq Name_list row) 
(vlax-put-property *Sheet#1* 'Name Name_list) 
(setq Currsep (vlax-get-property *AplExcel* "UseSystemSeparators")) 
(vlax-put-property *AplExcel* "UseSystemSeparators" :vlax-false) ;_не использовать системные установки 
(vlax-put-property *AplExcel* "DecimalSeparator" ".")            ;_разделитель дробной и целой части 
(vlax-put-property *AplExcel* "ThousandsSeparator" " ")          ;_разделитель тысячей 
(vla-put-visible *AplExcel* :vlax-true)(setq row 1 col 1) 
(if (null header)(setq header '("X" "Y" "Z"))) 
(repeat (length header)(vlax-put-property *excell-cells* "Item" row col 
(vl-princ-to-string (nth (1- col) header)))(setq col (1+ col)))(setq  row 2 col 1) 
(repeat (length Data-list)(setq iz_listo (car Data-list))(repeat (length iz_listo) 
(vlax-put-property *excell-cells* "Item" row col (vl-princ-to-string (car iz_listo))) 
(setq iz_listo (cdr iz_listo) col (1+ col)))(setq Data-list (cdr Data-list))(setq col 1 row (1+ row))) 
(setq col (1+(length header)) row (1+ row)) 
(setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate" 
    (strcat "A1:" (letter col)(itoa row))))) ;_ end of setq 
(setq cols (vlax-get-property cell  'Columns)) 
(vlax-invoke-method cols 'Autofit) 
(vlax-release-object cols)(vlax-release-object cell) 
(foreach item ColHide (if (numberp item)(setq item (letter item))) 
(setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate" 
    (strcat item "1:" item "1")))) 
(setq cols (vlax-get-property cell  'Columns)) 
(vlax-put-property cols 'hidden 1) 
(vlax-release-object cols)(vlax-release-object cell)) 
(vlax-put-property *AplExcel* "UseSystemSeparators" Currsep) 
(mapcar 'vlax-release-object (list *excell-cells* *Sheet#1* *Sheet-Collection* *New-Book* *Books-Colection* 
*AplExcel*))(setq *AplExcel* nil)(gc)(gc)(princ)) 

Для подсчета площади по слоям на основе #59 Команда MAREA41

;_Команда MAREA41
(defun c:MAREA41 (/ m ss clist temp)
;https://www.caduser.ru/forum/topic20298.html
; Владимир Азарко aka VVA для caduser.ru
  (defun sort (lst predicate)
    (mapcar '(lambda (x) (nth x lst)) (vl-sort-i lst predicate))
  )
  (defun combine (inlist is-greater is-equal / sorted current result)
    (setq sorted (sort inlist is-greater))
    (setq current (list (car sorted)))
    (foreach item (cdr sorted)
      (if (apply is-equal (list item (car current)))
  (setq current (cons item current))
  (progn
    (setq result (cons current result))
    (setq current (list item))
  )
      )
    )
    (cons current result)
  )
  (defun mlen4_1 (lst / sum_area)
    (setq sum_area 0)
    (foreach item (mapcar 'car lst)
      (setq sum_area  (+ sum_area
       (if (vlax-property-available-p item 'area)
         (vla-get-area item)
         0
       ) ;_  if
    ) ;_  +
      )
    )
    (if  (not (zerop sum_area))
      (princ
  (strcat "\n\t" (cdar lst) " = " (rtos (* sum_area m) 2 4))
      )
    )
    (list (cdar lst)(rtos (* sum_area m) 2 4))
  )
  (vl-load-com)
  (if (null *M*)(setq *M* 1))
  (initget 6)
  (and
    (princ "\nВведите маштабный коэффициент <")
    (princ *M*)(princ ">: ")
    (or (setq m (getreal))
   (setq m *M*)
   )
    (setq *M* m)
    (setq ss (ssget "_:L"))
    (setq ss (mapcar
         (function vlax-ename->vla-object)
         (vl-remove-if
     (function listp)
     (mapcar
       (function cadr)
       (ssnamex ss)
     ) ;_  mapcar
         ) ;_ vl-remove-if
       )
    )
    (mapcar '(lambda (x)
         (setq temp (cons (cons x (vla-get-Layer x)) temp))
       )
      ss
    )
    (setq clist  (combine temp
       '(lambda (a b)
          (> (cdr a) (cdr b))
        )
       '(lambda (a b)
          (eq (cdr a) (cdr b))
        )
    )
    )
    (princ
      "\n\n  Общая площадь всех линейных примитивов по слоям:"
    )
    (setq temp (mapcar 'mlen4_1 clist))
    (xls temp '("Слой" "Площадь") nil "mlen41")
  )
  (princ)
) ;_  defun
;|================== XLS ========================================
* Опубликовано https://www.caduser.ru/forum/topic19920.html
               https://www.caduser.ru/forum/topic31444.html
               https://www.caduser.ru/forum/topic31669.html
* Автор: Владимир Азарко aka VVA
* Назначение: Печать списка данных Data-list в Excell
*             Для вывода создается новый лист
* Аргументы:
              Data-list — список списков данных (LIST) вида
                            ((Value1 Value2 ... VlalueN)(Value1 Value2 ... VlalueN)...)
                            Каждый список вида (Value1 Value2 ... VlalueN) записывается
                            в отдельную строку в соответствующие столбцы (Value1-A Value2-B и .т.д.)
                  header —  список (LIST) заголовков или nil вида ("Подпись A" "Подпись B" ...)
                            Если header nil, принимается ("X" "Y" "Z")
                 Colhide —  список буквенных названий стоблцов для скрытия или nil — не скрывать
                            ("A" "C" "D") — скрыть столбцы A, C, D
                 Name_list — имя нового листа активной книги или nil — новая книга
* Возврат: nil
* TIPS!!! : При передачи функции xls числовых вещественных данных нет необходимости проверять текущий системный
            разделитель целой и дробной части ("HKEY_CURRENT_USER\\Control Panel\\International" "sDecimal")
            Функцией на время вывода отключается использование в Excele системного разделителя, разделителем
            целой и дробной части устанавливается точка. После завершения ф-ции все восстанавливается.
Пример вызова
(xls '((1.1 1.2 1.3 1.4)(2.1 2.2 2.3 2.4)(3.1 3.2 3.3 3.4)) '("Столбец1" "Столбец2" "Столбец3" "Столбец4") '("B"))|;
(vl-load-com)
(defun xls ( Data-list header Colhide Name_list / *aplexcel* *books-colection* Currsep
*excell-cells* *new-book* *sheet#1* *sheet-collection* col iz_listo row cell cols)
(defun Letter (N / Res TMP)(setq Res "")(while (> N 0)(setq TMP (rem N 26)
  TMP (if (zerop TMP)(setq N (1- N) TMP 26) TMP)
  Res (strcat (chr (+ 64 TMP)) Res)  N   (/ N 26))) Res)
(if (null Name_list)(setq Name_list ""))
  (setq  *AplExcel*     (vlax-get-or-create-object "Excel.Application"))
  (if (setq *New-Book*  (vlax-get-property *AplExcel* "ActiveWorkbook"))
    (setq *Books-Colection*  (vlax-get-property *AplExcel* "Workbooks")
          *Sheet-Collection* (vlax-get-property *New-Book* "Sheets")
               *Sheet#1*     (vlax-invoke-method *Sheet-Collection* "Add"))
(setq *Books-Colection*  (vlax-get-property *AplExcel* "Workbooks")
              *New-Book*     (vlax-invoke-method *Books-Colection* "Add")
          *Sheet-Collection* (vlax-get-property *New-Book* "Sheets")
               *Sheet#1*     (vlax-get-property *Sheet-Collection* "Item" 1)))
(setq *excell-cells*     (vlax-get-property *Sheet#1* "Cells"))
(setq Name_list (if (= Name_list "")
                  (vl-filename-base(getvar "DWGNAME"))
                  (strcat (vl-filename-base(getvar "DWGNAME")) "&" Name_list))
   col 0 cols nil)
(if (> (strlen Name_list) 26)
(setq Name_list (strcat (substr Name_list 1 10) "..." (substr Name_list (- (strlen Name_list) 13) 14))))
(vlax-for sh *Sheet-Collection* (setq cols (cons (strcase(vlax-get-property sh 'Name)) cols)))
(setq row Name_list)
(while (member (strcase row) cols)(setq row (strcat Name_list " (" (itoa(setq col (1+ col)))")")))
(setq Name_list row)
(vlax-put-property *Sheet#1* 'Name Name_list)
(setq Currsep (vlax-get-property *AplExcel* "UseSystemSeparators"))
(vlax-put-property *AplExcel* "UseSystemSeparators" :vlax-false) ;_не использовать системные установки
(vlax-put-property *AplExcel* "DecimalSeparator" ".")            ;_разделитель дробной и целой части
(vlax-put-property *AplExcel* "ThousandsSeparator" " ")          ;_разделитель тысячей
(vla-put-visible *AplExcel* :vlax-true)(setq row 1 col 1)
(if (null header)(setq header '("X" "Y" "Z")))
(repeat (length header)(vlax-put-property *excell-cells* "Item" row col
(vl-princ-to-string (nth (1- col) header)))(setq col (1+ col)))(setq  row 2 col 1)
(repeat (length Data-list)(setq iz_listo (car Data-list))(repeat (length iz_listo)
(vlax-put-property *excell-cells* "Item" row col (vl-princ-to-string (car iz_listo)))
(setq iz_listo (cdr iz_listo) col (1+ col)))(setq Data-list (cdr Data-list))(setq col 1 row (1+ row)))
(setq col (1+(length header)) row (1+ row))
(setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate"
    (strcat "A1:" (letter col)(itoa row))))) ;_ end of setq
(setq cols (vlax-get-property cell  'Columns))
(vlax-invoke-method cols 'Autofit)
(vlax-release-object cols)(vlax-release-object cell)
(foreach item ColHide (if (numberp item)(setq item (letter item)))
(setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate"
    (strcat item "1:" item "1"))))
(setq cols (vlax-get-property cell  'Columns))
(vlax-put-property cols 'hidden 1)
(vlax-release-object cols)(vlax-release-object cell))
(vlax-put-property *AplExcel* "UseSystemSeparators" Currsep)
(mapcar 'vlax-release-object (list *excell-cells* *Sheet#1* *Sheet-Collection* *New-Book* *Books-Colection*
*AplExcel*))(setq *AplExcel* nil)(gc)(gc)(princ))

Кирилл, Во первых, программа не моя, я только привел ее здесь. Разбираться в чужом коде нет ни времени, ни желания.
Удалить "ненужные" вершины можно командой PL-VxDel из комплекта [URL=http://dwg.ru/dnl/607]pltools[/URL]
Блоки вроде бы там есть

(setq ss (ssget '((0 . "point,[B пишет:

insert[/B]"))))


У блоков в качестве анализируемой точки берется точка вставки, поэтому нужно проверять, чтобы она не оказалась около луны.

Кирилл]
не получилось отобарзить как у Вас


В гугле по запросу "хостинг картинок" найдешь много сайтов, куда можно закачать картинку, а здесь привести код. Я использовал [URL=http://fastpic.ru/]этот[/URL]
PS Ты закачал так же на хостинг, но копировать сюда нужно было не первую ссылку, а 2-ю или 3-ю ([B]Полная картинка[/B] или [B]Превью - увеличение по клику[/B])

Что-то наподобие этого?

(Challenge) To draw the shortest lwpolyline

http://i40.fastpic.ru/big/2012/0928/7e/dc8b931c298a4d4467de6cbd1028687e.gif

;;;------------------------TSP------------------------------------------------------------;;;
;;;---------------------------------------------------------------------------------------;;;
(defun c:test (/ foo f2 ptl lst l n i d0 l0 l1 d1)
  ;;by GSLS(SS)
  ;;refer ElpanovEvgeniy's method from  http://www.theswamp.org/index.php?topic=30434.75
  ;;2012-8-10
  (defun foo (l / D D0 D1)
    (setq l0 (mapcar (function list) (cons (last l) l) l)) ;_  setq
 ;_  defun
    (setq d0 (get-closedpolygon-length l))
    (while
      (> d0
     (progn
       (foreach a l0
         (setq d (get-closedpolygon-length l))
         (setq l1 (vl-remove (car a) (vl-remove (cadr a) l)))
         (setq l1 (f1 (car a) l1))
         (setq l1 (f1 (cadr a) l1))
         (if (> d
            (setq d1 (get-closedpolygon-length l1))
         )
           (setq d d1
             l l1
           ) ;_  setq
         ) ;_  if
         (setq l1 (vl-remove (car a) (vl-remove (cadr a) l)))
         (setq l1 (f1 (cadr a) l1))
         (setq l1 (f1 (car a) l1))
         (if (> d
            (setq d1 (get-closedpolygon-length l1))
         )
           (setq d d1
             l l1
           )
         )
       )
       d
     ) ;_  progn
      ) ;_  <
       (setq d0 d)
    ) ;_  while    
    (setq d (get-closedpolygon-length l))    
    l
  )
  (defun f1 (a l)
    (ins-lst a (get-closest-i l a) l)
  )
  (defun f2 (lst)
    (mapcar (function (lambda (p0 p p1 / a)
            (setq a (- (angle p p0) (angle p p1)))
            (if (< a (- pi))
              (abs (+ a pi pi))
              (if (> a pi)
                (abs (- a pi pi))
                (abs a)
              )
            )
              )
        )
        (cons (last lst) lst)
        lst
        (reverse (cons (car lst) (reverse (cdr lst))))
    )
  )
  (setq    ptl (my-getpt)
    ptl (mapcar (function (lambda (p) (list (car p) (cadr p)))) ptl)
  )
  (setq t1 (getvar "MilliSecs"))
  (setq lst (Graham-scan ptl))
  (foreach a lst
    (setq ptl (vl-remove a ptl))
  )
  (while (and (> (length ptl) 2) (setq l (Graham-scan ptl)))
    (foreach p l
      (setq ptl (vl-remove p ptl))
      (setq n (get-minadddist-i lst p))
      (setq lst (ins-lst p n lst))
    )
  )
  (if ptl
    (foreach p ptl
      (setq n (get-minadddist-i lst p))
      (setq lst (ins-lst p n lst))
    )
  )
  (setq lst (foo lst))
  (setq l (f2 lst))
  (setq    i  0
    l0 lst
    n  (length lst)
    d0 (get-closedpolygon-length lst)
  )
  (foreach a l
    (if    (and (< a _pi3) (= (setq p (nth i lst)) (nth i l0)))
      (progn
    (if (= i 0)
      (setq p0 (last lst))
      (setq p0 (nth (1- i) lst))
    )
    (if (= i (1- n))
      (setq p1 (car lst))
      (setq p1 (nth (1+ i) lst))
    )
    (setq m    (list (list p0 p1 p)
              (list p1 p p0)
              (list p1 p0 p)
              (list p p0 p1)
              (list p p1 p0)
        )
    )
    (setq l1
           (car (vl-sort (mapcar (function (lambda (x)
                         (ch-para-lst x i lst)
                           )
                     )
                     m
                 )
                 (function (lambda (e1 e2)
                     (< (get-closedpolygon-length e1)
                        (get-closedpolygon-length e2)
                     )
                       )
                 )
            )
           )
    )
    (setq d1 (get-closedpolygon-length l1))
    (if (< d1 d0)
      (setq    d0  d1
        lst l1
      )
    )
      )
    )
    (setq i (1+ i))
  )
  (setq l (f2 lst))
  (setq    i  0
    l0 lst
    d0 (get-closedpolygon-length lst)
  )
  (foreach a l
    (if    (and (< a _pi2) (setq p (nth i l0)))
      (progn
    (setq l1 (f1 p (vl-remove p lst)))
    (setq d1 (get-closedpolygon-length l1))
    (if (< d1 d0)
      (setq    d0  d1
        lst l1
      )
    )
      )
    )
    (setq i (1+ i))
  )
  (entmake
    (append (list '(0 . "LWPOLYLINE")
          '(100 . "AcDbEntity")
          '(8 . "temp")
          '(62 . 1)
          '(100 . "AcDbPolyline")
          (cons 90 (length lst))
          '(70 . 1)
        )
        (mapcar (function (lambda (p) (cons 10 p))) lst)
    )
  )
  (setq t2 (getvar "MilliSecs"))
  (princ (strcat "\nTSP Length :" (rtos d0 2 0) "."))
  (princ (strcat "\nUse Time :" (rtos (- t2 t1) 2 0) "ms."))
  (princ)
)
;;;Use Funtions
;;;--------------------------------------------------------------
;; Convex hull of pts , Graham scan method
;; by Highflybird
  (defun Graham-scan (ptl / hPs rPs PsY Pt0 sPs P Q)
    (if    (< (length ptl) 4)        ;3??? 
      ptl                ;???? 
      (progn
    (setq rPs (mapcar (function (lambda (x)
                      (if (= (length x) 3)
                    (cdr x)    x)))
              (mapcar 'reverse ptl));_???X?Y?? 
          PsY (mapcar 'cadr ptl) ;_???Y??? 
          Pt0 (reverse (assoc (apply 'min PsY) rPs)) ;_?????       
          sPs (sort-ad ptl Pt0) ;_????????? 
          hPs (list (caddr sPs) (cadr sPs) Pt0) ;_????? 
    )
    (foreach n (cdddr sPs)        ;??4??? 
      (setq    hPs (cons n hPs)    ;?Pi????? 
        P   (cadr hPs)        ;Pi-1 
        Q   (caddr hPs)        ;Pi-2 
      )
      (while (and q (> (det n P Q) -1e-6)) ;???? 
        (setq hPs (cons n (cddr hPs)) ;??Pi-1? 
          P   (cadr hPs)    ;????Pi-1? 
          Q   (caddr hPs)    ;????Pi-2? 
        )))
    hPs                ;???? 
      ))
  )
;;;?????????,??????????? 
(defun sort-ad (pl pt)
  (vl-sort pl
       (function (lambda (e1 e2 / an1 an2)
           (setq an1 (angle pt e1)
             an2 (angle pt e2))
           (if (equal an1 an2 1e-6);_??????,???????
         (< (distance pt e1) (distance pt e2))
         (< an1 an2)
           ))))
)
;;????????,??????? 
(defun det (p1 p2 p3)
  (- (* (- (car p2) (car p1)) (- (cadr p3) (cadr p1)))
     (* (- (car p3) (car p1)) (- (cadr p2) (cadr p1)))
  ))
;;;
;;;------------------------
(defun my-getpt    (/ ss i en l)
  (setq ss (ssget '((0 . "point,insert"))))
  (setq i -1)
  (while (setq en (ssname ss (setq i (1+ i))))
    (setq l (cons (cdr (assoc 10 (entget en))) l))
  )
)
;;;------------------------
;;;
;;(ins-lst 10 5 '(1 2 3 4 5))
;; i ?????????
(defun ins-lst (new i lst / len fst)
  (cond
    ((minusp i)
     lst
    )
    ((> i (setq len (length lst)))
     lst
    )
    ((> i (/ len 2))
     (reverse (ins-lst new (- len i) (reverse lst)))
    )
    (t
     (append
       (progn
     (setq fst nil)
     (repeat (rem i 4)
       (setq fst (cons (car lst) fst)
         lst (cdr lst)
       )
     )
     (repeat (/ i 4)
       (setq fst (cons (cadddr lst)
               (cons (caddr lst)
                 (cons
                   (cadr lst)
                   (cons
                     (car lst)
                     fst
                   )
                 )
               )
             )
         lst (cddddr lst)
       )
     )
     (reverse fst)
       )
       (list new)
       lst
     )
    )
  )
)
;;;------------------------
;;
;;(ch-para-lst '(7 8 9) 3 '(1 2 3 4 5))
(defun ch-para-lst (para i lst / len fst)
  (setq len (length lst))
  (cond
    ((minusp i)
     lst
    )
    ((> i (1- len))
     lst
    )
    ((= i 0)
     (cons (cadr para)
       (cons (caddr para)
         (reverse (cons (car para) (cdr (reverse (cddr lst)))))
       )
     )
    )
    ((= i (1- len))
     (reverse
       (append (cdr (reverse para))
           (cddr (reverse (cons (last para) (cdr lst))))
       )
     )
    )
    ((> i (/ len 2))
     (reverse
       (ch-para-lst (reverse para) (- len i 1) (reverse lst))
     )
    )
    (t
     (append
       (progn
     (setq fst nil)
     (repeat (rem i 4)
       (setq fst (cons (car lst) fst)
         lst (cdr lst)
       )
     )
     (repeat (/ i 4)
       (setq fst (cons (cadddr lst)
               (cons (caddr lst)
                 (cons
                   (cadr lst)
                   (cons
                     (car lst)
                     fst
                   )
                 )
               )
             )
         lst (cddddr lst)
       )
     )
     (reverse
       (cons (caddr para)
         (cons (cadr para) (cons (car para) (cdr fst)))
       )
     )
       )
       (cdr lst)
     )
    )
  )
)
;;;------------------------
;;
(defun get-minadddist-i    (lst p)
  (car
    (vl-sort-i
      (mapcar (function    (lambda    (p1 p2)
              (- (+ (distance p p1) (distance p p2))
                 (distance p1 p2)
              )
            )
          )
          (cons (last lst) lst)
          lst
      )
      '<
    )
  )
)
;;;------------------------
(defun get-closest-i (lst p)
  (car
    (vl-sort-i
      (mapcar
    (function
      (lambda (p1 p2 / pt d d1 d2)
        (setq pt (inters p
                 (polar p (+ (/ pi 2.) (angle p1 p2)) 1.)
                 p1
                 p2
                 nil
             )
          d  (distance p1 p2)
          d1 (distance p p1)
          d2 (distance p p2)
        )
        (if    pt
          (if (equal (+ (distance pt p1) (distance pt p2)) d 1e-8)
        (distance p pt)
        d2
          )
          1e99
        )
      )
    )
    (cons (last lst) lst)
    lst
      )
      '<
    )
  )
)
;;;------------------------
;;
(defun get-closedpolygon-length    (l)
  (apply (function +)
     (mapcar (function (lambda (p1 p2)
                 (distance p1 p2)
               )
         )
         (cons (last l) l)
         l
     )
  )
)

В этой теме 2 ссылки. Во второй как раз и меняются пути xref и растров

(vl-load-com) 
  (setq doc (vla-get-activedocument (vlax-get-acad-object)) xreflist nil) 
   (vlax-for item (vla-get-Blocks doc) 
      (if (= (vla-get-IsXref item) :vlax-true) 
         (setq xreflist (cons (list(vla-get-name item)(vla-get-path item)) xreflist)) 
        ) 
     ) 
(princ "\nСписок внешних ссылок " )(princ xreflist) 

и

(mapcar
  '(lambda(a)
     (cond ((= (car a) 3)(cdr a))
           ((= (car a) 350)
            (cdr(assoc 1 (entget (cdr a))))
            )
           (t nil)
           )
     )
(vl-remove-if-not
  (function (lambda (x) (member (car x) '(3 350))))
  (dictsearch (namedobjdict) "ACAD_IMAGE_DICT")
  )
)

функция вывода списка всех внешних файлов текущего чертежа
Акад2006-пропадают внешние ссылки

22

(6 ответов, оставленных в LISP)

Ольга пишет:

Вставила уже готовый блок в котором есть полярный параметр
...
как получить доступ к этому параметру?

LISP. Изменение свойств(а) динамических блоков.

23

(1 ответов, оставленных в AutoCAD)

Здесь читал? HPDRAWORDER

HPDRAWORDER
Связанные разделы
Тип:    Целый
Сохранен в:    Не сохранен
Начальное значение:    3
Управляет порядком прорисовки штриховки или заливки.
Управление отображением объектов штриховки и заливки: впереди или позади всех других объектов либо впереди или позади связанных с ними контуров.
0 - "Нет. Для порядка прорисовки не назначается штриховка или заливка.
1 - На задний план. Штриховка или заливка помещается на задний план всех остальных объектов.
2 - На передний план. Штриховка или заливка помещается на передний план всех остальных объектов.
3 - За контуром. Штриховка или заливка помещается за объектами контуров.
4 - Перед контуром. Штриховка или заливка помещается перед объектами контуров штриховки.

24

(3 ответов, оставленных в LISP)

Когда-то помогал делать курсовую. Программно распознаются:
1. Параллелограмм (и его разновидности ромб, квадрат, прямоугольник)
2. Трапеция
3. Треугольник (и его разновидности равносторонний, равнобедренный, прямоугольный)
4. Круг (состоящий из 2-х дуговых сегментов полилинии)
Сдабдил достаточно подробными (надеюсь) коментариями

;;;Тексты отрисовываются текущей высотой
;;;Чтобы изменить высоту текста, нужно в командной строке набрать
;;; TEXTSIZE и задать нужную высоту текста
(defun C:DZ8 (/ el pt en lst dst)
  (setvar "CMDECHO" 0)
  (if (getvar "PLINETYPE")
    (setvar "PLINETYPE" 2)
  ) ;_ end of if
  (while (and
       (setq el (entlast)) ;_ Запоминаем последний примитив
       (setq pt (getpoint "\nУкажите точку внутри области <выход>: "))
     ) ;_ end of and
    (command "_-BOUNDARY" "_A" "_I" "_N" "_N" "_O" "_P"    "" pt "") ;_ end of command
 ;_ end of command
    (while (> (getvar "CMDACTIVE") 0) (command ""))
    (setq en (entlast))
    (cond
      ((equal el en)
       ;;Контур не создан
       (alert "Точка вне контура")
      )
      ((and (not (equal en el)) ;_ Контур создан
        (= (cdr (assoc 0 (entget en))) "LWPOLYLINE") ;_ Контур полилиния
       ) ;_ end of and
;;;Анализируем контур
;;;В lst координаты полилинии
       (setq lst (massoc 10 (entget en)))
       (cond
     ((= (length lst) 4)
;;;Какой-то 4 угольник
;;;Какой?
      (cond
;;;Параллелограмм?
;;;Признак параллелограмма - 4 угольник, у которого противолежащие стороны параллельны
        ((and (parallelp (nth 0 lst)
                 (nth 1 lst)
                 (nth 2 lst)
                 (nth 3 lst)
          ) ;_ end of parallelp
          (parallelp (nth 1 lst)
                 (nth 2 lst)
                 (nth 0 lst)
                 (nth 3 lst)
          ) ;_ end of parallelp
         ) ;_ end of and
;;;Провереряем не является ли параллелограмм ромбом или квадратом
         (if
;;;Ромб - параллелограмм, диагонали которого пересекаются под прямым углом
           (equal
         (3d_angw1w2
           (mapcar '- (nth 0 lst) (nth 2 lst)) ;_ Формируем 1-й вектор
           (mapcar '- (nth 1 lst) (nth 3 lst)) ;_ Формируем 2-й вектор
         ) ;_ end of 3d_angw1w2
         (* PI 0.5)
         1e-6 ;_ С точностью до 6 знаков после запятой
           ) ;_ end ofequal
;;;Да, это ромб (квадрат частный случай ромба)
;;;Квадрат - это ромб, все стороны которого равны
        (if
          (and
            (setq dst ;_ Список длин сторон
               (mapcar 'distance
                   (append lst (list (car lst)))
                   (cdr (append lst (list (car lst))))
               ) ;_ end of mapcar
            ) ;_ end of setq
            (apply
              'and
              (mapcar '(lambda (x) (equal (car dst) x 1e-6)) dst)
            ) ;_ end of apply
            ;;Равны ли расстояния

;;;============================================================================================================
;;; Ниже идет проверка, что все углы равны 90 градусам
;;; - диагонали пересекаются под прямым углом
;;; - стороны равны
;;; - угол между сторонми 90 градусов
;;;============================================================================================================
                                 (setq dst  ;_ Список углов между сторонами
                                        (mapcar '(lambda(x y)
                                                   (3d_angw1w2 x y)
                                                   )
                                                (append
                                               (setq dst  ;;;Вектора  
                                                 (mapcar '(lambda(x y)
                                                            (mapcar '- x y)
                                                            ;(cons x (list y))
                                                            )  
                                                   (append lst (list(car lst))) (cdr (append lst (list(car lst))))
                                                         )
                                                     )
                                               (list (car dst))
                                               )
                                                (cdr (append dst (list (car dst))))
                                                )
                                       )
                                 (apply 'and (mapcar '(lambda(x)(equal x (* PI 0.5) 1e-6)) dst))
;;;============================================================================================================
          ) ;_ end ofand

           (text-draw "КВАДРАТ" pt (getvar "TEXTSIZE") 0 "_M") ;_ Это квадрат
           (text-draw "РОМБ" pt (getvar "TEXTSIZE") 0 "_M") ;_ Это ромб
        ) ;_ end of if
               ;;;Проверяем, не является ли он прямоугольником
               (if (and
;;;============================================================================================================
;;; Ниже идет проверка, что все углы равны 90 градусам
;;;============================================================================================================
                    (setq dst (get-angle-between-side lst))  ;_ Список углов между сторонами
                    (apply 'and (mapcar '(lambda(x)(equal x (* PI 0.5) 1e-6)) dst))
;;;============================================================================================================
                     )
                 (text-draw "ПРЯМОУГОЛЬНИК"
               pt
               (getvar "TEXTSIZE")
               0
               "_M"
        ) ;_ Это параллелограмм
        (text-draw "ПАРАЛЛЕЛОГРАММ"
               pt
               (getvar "TEXTSIZE")
               0
               "_M"
        ) ;_ Это параллелограмм
                 )
         ) ;_ end of if
        )
;;;Трапеция ли? Признак трапеции - 4 угольник, у которого одна пара паралленьных сторон
        ((or (parallelp (nth 0 lst)
                (nth 1 lst)
                (nth 2 lst)
                (nth 3 lst)
         ) ;_ end of parallelp
         (parallelp (nth 1 lst)
                (nth 2 lst)
                (nth 0 lst)
                (nth 3 lst)
         ) ;_ end of parallelp
         ) ;_ end of or
         (text-draw "ТРАПЕЦИЯ" pt (getvar "TEXTSIZE") 0 "_M")
        )
        (t (alert "Не обрабатываемый 4 угольгик"))
      ) ;_ end of cond
     )
         ((= (length lst) 3)  ;;;Треугольник
          (setq dst (append lst (list (car lst))))
          (setq dst (mapcar 'distance dst (cdr dst)))
          (cond ((apply 'and (mapcar '(lambda(x)(equal (car dst) x 1e-6)) dst))
                 (text-draw "ТРЕУГОЛЬНИК РАВНОСТОРОННИЙ" pt (getvar "TEXTSIZE") 0 "_M")
                 )
                ((or (equal (nth 0 dst)(nth 1 dst) 1e-6)
                     (equal (nth 0 dst)(nth 2 dst) 1e-6)
                     (equal (nth 1 dst)(nth 2 dst) 1e-6)
                     )
                 (text-draw "ТРЕУГОЛЬНИК РАВНОБЕДРЕННЫЙ" pt (getvar "TEXTSIZE") 0 "_M")
                 )
                ((and (setq dst (get-angle-between-side lst))  ;_ Список углов между сторонами
                      (apply 'or (mapcar '(lambda(x)(equal x (* pi 0.5) 1e-6)) dst))
                      )
                      (text-draw "ТРЕУГОЛЬНИК ПРЯМОУГОЛЬНЫЙ" pt (getvar "TEXTSIZE") 0 "_M")
                 ) 
                (t (text-draw "ТРЕУГОЛЬНИК" pt (getvar "TEXTSIZE") 0 "_M"))
                )
            )
          
;;; Может это круг?
;;; У полилинии 2 дуговых сегмента
;;; кривизна дуговых сегментов (поле 42) будет постоянна и равна 1
     ((and (setq lst (massoc 42 (entget en)))
           (= (length lst) 2)
           (apply '= lst)
      ) ;_ end of and
      (text-draw "КРУГ" pt (getvar "TEXTSIZE") 0 "_M")
     )
     (t (alert "Не обрабатываемый контур"))
       ) ;_ end of cond
       (if (and en (entget en))
     (entdel en)
       ) ;_ end of if
      )
      (t
       (if (and en (not (equal en el)) (entget en))
     (entdel en)
       ) ;_ end of if
       (alert "Не обрабатываемый контур")
      )
    ) ;_ end of cond
  ) ;_ end of while
) ;_ end of defun
;;;Дополнительные функции
(defun get-angle-between-side ( lst / dst )
  ;;; Список углов между сторонами
  ;;;  lst - Список координат вершин многоугольника
  
                        (mapcar '(lambda(x y)
                           (3d_angw1w2 x y)
                         )
                         (append
                            (setq dst  ;;;Вектора  
                              (mapcar '(lambda(x y)
                                (mapcar '- x y)
                                  ;(cons x (list y))
                                 )  
                                (append lst (list(car lst))) (cdr (append lst (list(car lst))))
                            )
                        )
                       (list (car dst))
                     )
                  (cdr (append dst (list (car dst))))
                  )
            )
  

(defun text-draw (txt pnt height rotation justification)
;;;Ф-ция отрисовывает текст txt
;;; в точке pnt
;;; высотой heigth
;;; углом повотора rotation
;;; выравниванием justification
  (if (null pnt)
    (vl-cmdf "_.-TEXT" "" txt)
    (if    (= (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE"))))
       0.0
    ) ;_ end of =
      (progn
    ;; нулевая высота текста
    (if justification
      (vl-cmdf "_.-TEXT"   "_J"       justification
           "_non"      pnt       height      rotation
           txt
          ) ;_ end of vl-cmdf
      (vl-cmdf "_.-TEXT" "_non" pnt height rotation txt)
    ) ;_ end of if
      ) ;_ end of progn
      (progn
    ;; фиксированнная высота
    (if justification
      (vl-cmdf "_.-TEXT" "_J" justification    "_non" pnt rotation txt) ;_ end of vl-cmdf
 ;_ end ofvl-cmdf
      (vl-cmdf "_.-TEXT" "_non" pnt rotation txt)
    ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end ofif
  (entlast)
) ;_ end ofdefun

(defun massoc (key alist / x nlist)
;;; Возвращает все вхождения ключа в списке
;;; ! Argument : 'key'     - DXF код
;;; !            'alist' -    Список
;;; ! Returns  : Список всех значений ключа key, если есть или nil

  (foreach x alist
    (if    (eq key (car x))
      (setq nlist (cons (cdr x) nlist))
    ) ;_ end of if
  ) ;_ end offoreach
  (reverse nlist)
) ;_ end of defun

(defun 3d_angw1w2 (Wekt1 Wekt2 / CosA)
;;; Угол между векторами (скалярное произведение векторов)
;;;--------------------------------------------------------
;;; Параметры:
;;; Wekt1, Wekt2 - вектора
;;; Возвращает  угол между векторами в радианах
;;; http://www.elecran.com.ua/index.php?pagename=programer.php
;;;--------------------------------------------------------
  (if (equal (setq CosA    (/ (apply '+ (mapcar '* Wekt1 Wekt2))
               (distance '(0 0 0) Wekt1)
               (distance '(0 0 0) Wekt2)
            ) ;_ end of
         ) ;_ end of setq
         -1.0
         1e-6
      ) ;_ end of equal
    Pi
    (if    (equal CosA 0.0 1e-6)
      (* 0.5 PI)
      (atan (sqrt (- 1 (* CosA CosA))) CosA)
    ) ;_ end of if
  ) ;_ end of if
) ;_ end of defun
(defun parallelp (p1 p2 p3 p4)
;;; PARALLELP
;;; Высисляет, параллелен ли сегмент
;;; заданный точками p1 p2 сегменту, заданному точками p3 p4
;;;
;;; Аргумент = 4 точки

  (and
    (not (inters p1 p2 p3 p4 nil))
    (or    (inters p1 p4 p3 p2 nil)
    (inters p1 p3 p4 p2 nil)
    ) ;_ end of or
  ) ;_ end of and
) ;_ end of defun
Дмитрий Космос пишет:

Но у вас к сожалению нет возможности сначала выбора полилинии.

Теперь есть такая возможность :)