Тема: Массивная обрезка линий по тексту?

Здравствуйте, есть ли что-нибудь автоматизированное для выполнения данной задачи?
Задача: Имеются множество линий на которых нанесён текст, необходимо одной командой оборвать все линии вокруг, нанесённого текста? (-----T1----)

Re: Массивная обрезка линий по тексту?

Если по-тупому, без ЛИСПа, то рисуем прямоугольник вокруг текста и обрезаем все линии внутри прямоугольника командой Trim.
Второй вариант: текст наносить на Wipeout-непрозрачный блок, и ставь его хоть куда, хоть на то же множество линий.
Или я не понял задачу...

Re: Массивная обрезка линий по тексту?

(vl-load-com)
(SETVAR "PLINETYPE" 2)
(vl-cmdf "_convert" "_P" "_all")
;(vla-get-color(vlax-ename->vla-object(entlast))) => определение цвета:
; 0 для цвета ПоБлоку, 256 для цвета ПоСлою.
(defun dtr(q)(* pi(/ q 180.0)) )   ;gr--->rad
(defun rtd(q)(/ (* q 180.0)pi) )  ;rad--->gr
(DEFUN UST(ed);(ED / LAA COLL)
(SETQ LAA(cdr(assoc 8 ed)))
(SETQ COLL(cdr(assoc 62 ed)))
(IF(= COLL NIL)(SETVAR"CECOLOR""BYLAYER")(SETVAR"CECOLOR"(ITOA COLL)))
(COMMAND"_LAYER""_S"LAA"")
);DEFUN
;определение габаритов текста
(defun GAB00(sset / )
  (vl-load-com)
;;;;;;;;;;(if (setq sset (ssget))
(if sset
(setq lst
       (mapcar
        (function vlax-ename->vla-object)
        (vl-remove-if
         (function listp)
         (mapcar (function cadr) (ssnamex sset))
        ) ;_ vl-remove-if
       ) ;_  mapcar
) ;_  setq
)
  (if (and lst (listp lst))
    ((lambda (x)
       (list
         (apply
           (function mapcar)
           (cons (function min) (mapcar (function car) x))
         ) ;_  apply
         (apply
           (function mapcar)
           (cons (function max) (mapcar (function cadr) x))
         ) ;_  apply
       ) ;_  list
     ) ;_  lambda
      (vl-remove-if (function null)
        (mapcar
          (function
            (lambda (x / minp maxp)
              (if (not (vl-catch-all-error-p
                         (vl-catch-all-apply
                           (function vla-getboundingbox)
                          (list x 'minp 'maxp)
                         ) ;_  vl-catch-all-apply
                       ) ;_  vl-catch-all-error-p
                  ) ;_  not
               (list (vlax-safearray->list minp)
                     (vlax-safearray->list maxp)
                ) ;_  list
              ) ;_  if
            ) ;_  lambda
          ) ;_  function
          lst
        ) ;_  mapcar
      ) ;_  vl-remove-if
    )
  ) ;_  if
);end
;текст на плюшках
(defun c:mask_4();( / lay col os pll lt nad nam sset len ang ppp ggg ss pl t1 t2 a2 a22 ED m2 nnn ima pz1 pz2 az1 az2 wdt i ii yy)
(setvar"menuecho" 0)(setvar "cmdecho"0)
(setq col(getvar"cecolor"))(setq lay(getvar"clayer"))  (setq os(getvar"osmode"))(setvar"osmode"0)
(setq pll(getvar "PLINEWID"))(setq lt(getvar"celtype"))
(initget 0)
;;;(IF(= NAD NIL)(setq nad(getreal"\nТолщина забелки от грани: ")) )
(setq NAD(getdist(strcat"Расстояние между штрихами: < "(if(/= SHAG01# nil)(rtos SHAG01#) "" )" > "   )))
(if(= NAD nil)(setq NAD SHAG01#)(setq SHAG01# NAD))
(while(= NAD nil)(repeat 2(terpri))(setq NAD(getdist(strcat"Расстояние между штрихами: < "(if(/= SHAG01# nil)(rtos SHAG01#) "" )" > "   ))))
(if(= NAD nil)(setq NAD SHAG01#)(setq SHAG01# NAD))
(setq sset(ssget))
(setq len(sslength sset))(setq  i 0 ii 0)
(while (< i len)
(setq nam(ssname sset i))(setq ED(entget nam))
;;;(vla-get-color(vlax-ename->vla-object(entlast)))
(setq m2(cdr ED))
(IF(equal(cdr(assoc 0 ed))"TEXT")(PROGN
(setq ang(cdr(assoc 50 ED)))
(setq ppp(cdr(assoc 10 ED)))
(command"_rotate"nam""ppp(-(rtd ang)))(setq ss(ssadd))(SETQ SS(SSADD nam SS))
(setq ggg(gab00 ss))
(setq t1(list(caar ggg)(cadar ggg)))(setq t2(list(caadr ggg)(cadadr ggg)))
(setq t1(list(-(car t1)nad) (-(cadr t1)nad)))(setq t2(list(+(car t2)nad)(+(cadr t2)nad)))
(setq pl(distance t1 (list(car t1)(cadr t2))))(setvar "PLINEWID" pl)
(setvar "cecolor" "255")
(setq yy(/ pl 2.0))(command"_pline"(list(car t1)(+(cadr t1)yy)) (list(car t2)(+(cadr t1)yy))"")(setq a2(ssget"_L"))
(SETQ A02(SSNAME A2 0))
(UST ED)
(setq m2(cdr ED))(entmake m2)(setq a22(ssget"_L"))
(SETQ IMA(CDR(ASSOC -1(ENTGET(SSNAME  A22 0)))))
;EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
(COMMAND"_DRAWORDER"A2 "" "_U"A22 "")
(setq ss(ssadd))(SETQ SS(SSADD IMA SS))
(command"_erase"nam"")
(setq t1(list(-(car t1)1) (-(cadr t1)1) ) )
(setq t2(list(+(car t2)1)(+(cadr t2)1)))
(setq nnn(ssget "_w"t1 t2))
(command"_rotate"a2 "" ppp(rtd ang))
(command "группа" "с" "*" "" a2 a22 "")
(setq a2(ssget"_L"))(command"_move" a2""(list 0 0)(list 0 0))
);PROGN_"TEXT"
(PROGN
    (setvar "celtype""continuous")(setvar "cecolor" "255")
(COND
    (    (equal(cdr(assoc 0 ed))"LWPOLYLINE")
        (setvar "celtype" lt) (UST ED);;;(setvar "cecolor""6")
(setq m2(cdr ED))(entmake m2)(setq a22(ssget"_L"))
   
        (setq wdt(+(* NAD 2.0)(cdr(assoc 40 ed))))
        (COMMAND"_CHPROP" NAM "" "_C" 255 "")(command "_PEDIT"NAM "_w" wdt "")
        (command"_select"nam"")(setq a2(ssget"_p"))
       
        (SETQ IMA(CDR(ASSOC -1(ENTGET(SSNAME  A22 0)))))(setq ss(ssadd))(SETQ SS(SSADD IMA SS))
        (command "группа" "с" "*" "" a2 a22 "")(setq a2(ssget"_L"))(command"_move" a2""(list 0 0)(list 0 0))
               
    );cond_lwpolyline
    (    (equal(cdr(assoc 0 ed))"LINE")
        (setq     PZ1(cdr(assoc 10 ed))
             PZ2(cdr(assoc 11 ed))
             wdt NAD
        ) ;setq
               
        (command "_PLINE" PZ1 "_w"wdt wdt PZ2(command))
        (setq a2(ssget"_L"))
        (setvar "celtype" lt)(UST ED);;;(setvar "cecolor""6")
(setq m2(cdr ED))(entmake m2)(setq a22(ssget"_L"))
        (SETQ IMA(CDR(ASSOC -1(ENTGET(SSNAME  A22 0)))))(setq ss(ssadd))(SETQ SS(SSADD IMA SS))(command"_erase"nam"")
       
        (command "группа" "с" "*" "" a2 a22 "")
        (setq a2(ssget"_L"))(command"_move" a2""(list 0 0)(list 0 0))
    );cond_line
    (    (equal(cdr(assoc 0 ed))"ARC")
        (setq    PZ1(cdr(assoc 10 ed))
            PZ2(cdr(assoc 40 ed))
            AZ1(cdr(assoc 50 ed))
            AZ2(cdr(assoc 51 ed))
            wdt NAD
        ) ;setq
        (command "_PLINE" (polar PZ1 AZ1 PZ2) "_w"wdt wdt "_arc" "_ce" PZ1(polar PZ1 AZ2 PZ2)(command))
        (setq a2(ssget"_L"))
        (setvar "celtype" lt)(UST ED);;;(setvar "cecolor""6")
(setq m2(cdr ED))(entmake m2)(setq a22(ssget"_L"))
        (SETQ IMA(CDR(ASSOC -1(ENTGET(SSNAME  A22 0)))))(setq ss(ssadd))(SETQ SS(SSADD IMA SS))(command"_erase"nam"")
        (command "группа" "с" "*" "" a2 a22 "")(setq a2(ssget"_L"))(command"_move" a2""(list 0 0)(list 0 0))
    );cond_arc
    (    (equal(cdr(assoc 0 ed))"CIRCLE")
        (setq    PZ1(cdr(assoc 10 ed))
            PZ2(cdr(assoc 40 ed))
            wdt NAD
           
        ) ;setq
        (command "_PLINE" (polar PZ1 pi PZ2) "_w"wdt wdt "_arc" "_ce" PZ1(polar PZ1 0 PZ2)"_cl")
        (setq a2(ssget"_L"))
        (setvar "celtype" lt)(UST ED);;;(setvar "cecolor""6")
(setq m2(cdr ED))(entmake m2)(setq a22(ssget"_L"))
        (SETQ IMA(CDR(ASSOC -1(ENTGET(SSNAME  A22 0)))))(setq ss(ssadd))(SETQ SS(SSADD IMA SS))(command"_erase"nam"")
        (command "группа" "с" "*" "" a2 a22 "")(setq a2(ssget"_L"))(command"_move" a2""(list 0 0)(list 0 0))
    );cond_circle
   
    (T nil)
);COND
);PROGN_ELSE
);IF
        (setq i(1+ i))(setq ii(1+ ii))(print ii)
);while
(prompt"\n\nВсего выбрано: ")(princ ii)
(setvar "cecolor"col)(setvar "clayer"lay)(setvar "PLINEWID" pll)(setvar"osmode"os)(setvar "celtype" lt)
(prin1)
);end

Re: Массивная обрезка линий по тексту?

попробуй команду "extrim" , но сначала
прямоугольник вокруг текста.

Re: Массивная обрезка линий по тексту?

Спасибо за Лисп, еще нашел функцию TEXTMASK из express tools, жаль она не работает в обратном порядке сначала выделил потом выполнил.

Re: Массивная обрезка линий по тексту?

А, я в таких случаях использую МТекст со скрытием заднего плана(маской заднего плана).