Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

Как удалить все внутри(снаружи) замкнутого контура

Тема в разделе "Autocad", создана пользователем Klodik, 21 апр 2019.

  1. Klodik

    Форумчанин

    Регистрация:
    23 июн 2011
    Сообщения:
    254
    Симпатии:
    6
    Адрес:
    vladivostok
    Привет всем есть дилема которую не могу решить. На скриншоте зеленым то что нужно оставить , остальное обрезать. Стандартными инструментами автокада это ОООчень долго. Есть ли что-нибудь полегче инструмента "Обрезать"?
     

    Вложения:

    • Screenshot_1.jpg
      Screenshot_1.jpg
      Размер файла:
      212,7 КБ
      Просмотров:
      268
    #1
  2. Ламаград

    Форумчанин

    Регистрация:
    19 мар 2012
    Сообщения:
    1.522
    Симпатии:
    336
    Адрес:
    Москва Россия
    Может заметочка эта поможет:
     

    Вложения:

    #2
    AGF, Qvinto и dda нравится это.
  3. sergtor

    Форумчанин

    Регистрация:
    23 сен 2012
    Сообщения:
    1.716
    Симпатии:
    604
    Адрес:
    Ухта
  4. АлексЮстасу

    Форумчанин

    Регистрация:
    28 май 2012
    Сообщения:
    1.970
    Симпатии:
    694
    Адрес:
    Маськва
    Специальная команда MAPTRIM из Map 3D.

    Альтернативный вариант - накрыть ненужное маской - _WIPEOUT.
    В т.ч. был lisp, позволяющий пачкой сделать маски для всех указанных контуров.
     
    #4
  5. Klodik

    Форумчанин

    Регистрация:
    23 июн 2011
    Сообщения:
    254
    Симпатии:
    6
    Адрес:
    vladivostok
    Уже нашел этот лисп вчера. Он выделил все объекты внутри контура. НО горизонтали цельные, они не выделяются.
    --- Сообщения объединены, 22 апр 2019, Оригинальное время сообщения: 22 апр 2019 ---
    Это потом сдавать нужно, там маски увы не принимают. Все по их стандартам (((
    --- Сообщения объединены, 22 апр 2019 ---
    Нашел тул пак, скажем так "Купил" за 435 баксов. ( ну и цены же). Захожу по пути как написано, он мне предлагает Y/N , жму N , и ничего не происходит... может мой "купленный" тул пак с браком ? ::biggrin24.gif::
    --- Сообщения объединены, 22 апр 2019 ---
    Весь файл не загружается к сожалению, пишет что слишком большой.
     

    Вложения:

    #5
  6. АлексЮстасу

    Форумчанин

    Регистрация:
    28 май 2012
    Сообщения:
    1.970
    Симпатии:
    694
    Адрес:
    Маськва
    Предложить принимающим товарищам улучшение - маски. Улучшение, т.к. сохраняются данные, в т.ч. цельные горизонтали и пр.
    Попробуйте сначала сделать Break, а потом уже удалять.

    Обрезал MAPTRIM. На юго-западе замкнул формально - не знал, как нужно.
    Блоки не резал.
    MAPTRIM.png
     

    Вложения:

    #6
    Последнее редактирование: 22 апр 2019
    geo_rva и Klodik нравится это.
  7. Klodik

    Форумчанин

    Регистрация:
    23 июн 2011
    Сообщения:
    254
    Симпатии:
    6
    Адрес:
    vladivostok
    Результат прям нравится.
    Ушел качать мап 3 д.
    А можно полный путь куда зайти и что нажать?
     
    #7
  8. АлексЮстасу

    Форумчанин

    Регистрация:
    28 май 2012
    Сообщения:
    1.970
    Симпатии:
    694
    Адрес:
    Маськва
    Вы чуть ли не первый, кто повелся. :) Остальные железобетонно упираются на базовом Автокаде! Как будто это форум не геодезистов, а конструкторов или проектировщиков...

    MAPTRIM в комстроке и нажать. :)
    А в меню здесь:
    MAPTRIM_call.png
     
    #8
    Teodolitr, flareon, Klodik и ещё 1-му нравится это.
  9. by_kortez

    Форумчанин

    Регистрация:
    8 май 2009
    Сообщения:
    36
    Симпатии:
    39
    _EXTRIM
     
    #9
    Vict0r, AGF и X-Y-H нравится это.
  10. kheylan66

    Форумчанин

    Регистрация:
    28 мар 2012
    Сообщения:
    311
    Симпатии:
    189
    Адрес:
    kheylan@mail.ru
    Обрезать и Стереть
    Обрезает, а при желании, удаляет примитивы внутри или снаружи относительно выбранного объекта
    ^C^C^P(if (not C:CC) (load "CookieCutter2"));^PCC;


    PS. Файл.lsp разместить в путях доступа AutoCAD
     

    Вложения:

    #10
    AGF нравится это.
  11. Alex_Shaton

    Форумчанин

    Регистрация:
    30 июл 2013
    Сообщения:
    258
    Симпатии:
    260
    Адрес:
    Беларусь Гомель
    Хорошая штука, но очень внимательно смотрите мультилинии, они удаляются.
     
    #11
  12. АлексЮстасу

    Форумчанин

    Регистрация:
    28 май 2012
    Сообщения:
    1.970
    Симпатии:
    694
    Адрес:
    Маськва
    Очень даже ничего штука!
    Но также удаляются попавшие на границы штриховки, тексты, и разбиваются блоки.
     
    #12
  13. agajohn

    Форумчанин

    Регистрация:
    3 апр 2013
    Сообщения:
    480
    Симпатии:
    214
    Адрес:
    Москва
  14. Alex_Shaton

    Форумчанин

    Регистрация:
    30 июл 2013
    Сообщения:
    258
    Симпатии:
    260
    Адрес:
    Беларусь Гомель
    Никто ж и не спорит - лисп стоящий, но внимательно нужно смотреть мультилинии, по остальным примитивам вопросов нет. Я еще в качестве резерва использую такой лисп. Правда, плохо обрезает прерывистые линии, но зато с мультилиниями без проблем.
     

    Вложения:

    • trimouter.lsp
      Размер файла:
      1,4 КБ
      Просмотров:
      114
    #14
  15. kheylan66

    Форумчанин

    Регистрация:
    28 мар 2012
    Сообщения:
    311
    Симпатии:
    189
    Адрес:
    kheylan@mail.ru
    по нежнее будут команды, чем предыдущая
    Обрезать окном
    Вырезка окном, обрезает и удаляет
    ^C^C^P(setq *error* CadalystErr)(load "Trim-In-Out") ti;
    и
    Обрезать полосой
    Вырезка полосой вокруг рамки, шириной, которую укажем
    ^C^C^P(setq *error* CadalystErr)(load "Trim-In-Out") to;

    PS. Файл.lsp разместить в путях доступа AutoCAD
     

    Вложения:

    • Trim-In-Out.lsp
      Размер файла:
      5,3 КБ
      Просмотров:
      135
    #15
    agajohn и Alex_Shaton нравится это.
  16. АлексЮстасу

    Форумчанин

    Регистрация:
    28 май 2012
    Сообщения:
    1.970
    Симпатии:
    694
    Адрес:
    Маськва
    В смысле - "вопросов нет"?
    Кроме удаления мультилиний
     
    #16
  17. BlowSmoke

    Регистрация:
    17 июн 2019
    Сообщения:
    2
    Симпатии:
    0
    При отрисовке топосъёмки появилась необходимость вырезать из уже готового чертежа часть хаотичной формы, и именно вырезать, не просто скрыть, а обрезать объекты по контуру и удалить. Есть ли какие-нибудь lispф?
     
    #17
  18. agajohn

    Форумчанин

    Регистрация:
    3 апр 2013
    Сообщения:
    480
    Симпатии:
    214
    Адрес:
    Москва
    fragm_den
     
    #18
    Иоан4 нравится это.
  19. burvil

    Форумчанин

    Регистрация:
    15 июл 2013
    Сообщения:
    258
    Симпатии:
    73
    Адрес:
    Москва
    #19
  20. Patron

    Patron Бронебойный Старожил
    Форумчанин

    Регистрация:
    28 июн 2007
    Сообщения:
    2.068
    Симпатии:
    2.095
    Адрес:
    Москва
    Под acad:

    1. Оконтурить участок замкнутым полигоном

    2. С помощью лиспа (спойлер)
    lisp (раскрыть)


    (defun SelectContour ( opt / en ss lst)
    (defun DTR (a)(* pi (/ a 180.0)))
    (defun lib:pt_extents (vlist / tmp)
    (setq tmp (mapcar '(lambda (x) (vl-remove-if 'null x))
    (mapcar '(lambda (what) (mapcar '(lambda (x) (nth what x)) vlist))
    '(0 1 2))));_setq
    (list (mapcar '(lambda(x)(apply 'min x)) tmp)(mapcar '(lambda(x)(apply 'max x)) tmp)))
    (defun lib:IsPtInView (pt / VCTR Y_Len SSZ X_Pix Y_Pix X_Len Lc Uc)
    (setq pt (trans pt 0 1))
    (setq VCTR (getvar "VIEWCTR") Y_Len (getvar "VIEWSIZE")
    SSZ (getvar "SCREENSIZE")
    X_Pix (car SSZ) Y_Pix (cadr SSZ)
    X_Len (* (/ X_Pix Y_Pix) Y_Len)
    Lc (polar VCTR (dtr 180.0) (* 0.5 X_Len))
    Uc (polar Lc 0.0 X_Len)
    Lc (polar Lc (dtr 270.0) (* 0.5 Y_Len))
    Uc (polar Uc (dtr 90.0) (* 0.5 Y_Len)))
    (if (and (> (car pt) (car Lc))(< (car pt) (car Uc))
    (> (cadr pt) (cadr Lc))(< (cadr pt) (cadr Uc)))
    T nil))
    (defun lib:Zoom2Lst( vlist / bl tr Lst OS)
    (setq Lst (lib:pt_extents vlist) bl (car Lst) tr (cadr Lst))
    (if (not (and (lib:IsPtInView bl) (lib:IsPtInView tr)))
    (progn (setq OS (getvar "OSMODE"))(setvar "OSMODE" 0)
    (command "_.Zoom" "_Window" (trans bl 0 1)(trans tr 0 1)
    "_.Zoom" "0.95x")
    (setvar "OSMODE" OS) T) NIL))
    (defun TraceObject (obj / typlst typ TracePline TraceACE TraceLine
    TraceSpline TraceType1Pline
    TraceType23Pline)
    (defun ZClosed (lst)
    (if (and (vlax-curve-isClosed obj)
    (not(equal (car lst)(last lst) 1e-6)))
    (append lst (list (car lst)))
    lst))
    (defun TracePline (obj / param endparam anginc tparam pt blg
    ptlst delta inc arcparam flag)
    (setq param (vlax-curve-getStartParam obj)
    endparam (vlax-curve-getEndParam obj)
    anginc (* pi (/ 7.5 180.0)))
    (setq tparam param)
    (while (<= param endparam)
    (setq pt (vlax-curve-getPointAtParam obj param))
    (if (not (equal pt (car ptlst) 1e-12))
    (setq ptlst (cons pt ptlst)))
    (if (and (/= param endparam)
    (setq blg (abs (vlax-invoke obj 'GetBulge param)))
    (/= 0 blg))
    (progn
    (setq delta (* 4 (atan blg)) ;included angle
    inc (/ 1.0 (1+ (fix (/ delta anginc))))
    arcparam (+ param inc))
    (while (< arcparam (1+ param))
    (setq pt (vlax-curve-getPointAtParam obj arcparam)
    ptlst (cons pt ptlst)
    arcparam (+ inc arcparam))))
    )
    (setq param (1+ param)))
    (if (and (apply 'and ptlst)
    (> (length ptlst) 1))
    (ZClosed (reverse ptlst)))) ;end
    (defun TraceACE (obj / startparam endparam anginc
    delta div inc pt ptlst)
    (setq startparam (vlax-curve-getStartParam obj)
    endparam (vlax-curve-getEndParam obj)
    anginc (* pi (/ 5.0 180.0)))
    (if (equal endparam (* pi 2) 1e-12)
    (setq delta endparam)
    (setq delta (NormalAngle (- endparam startparam))))
    (setq div (1+ (fix (/ delta anginc)))
    inc (/ delta div))
    (while (or
    (< startparam endparam)
    (equal startparam endparam 1e-12))
    (setq pt (vlax-curve-getPointAtParam obj startparam)
    ptlst (cons pt ptlst)
    startparam (+ inc startparam)))
    (reverse ptlst)) ;end
    (defun TraceLine (obj)(list (vlax-get obj 'StartPoint)
    (vlax-get obj 'EndPoint)))
    (defun TraceSpline (obj / startparam endparam ncpts inc param
    fd ptlst pt1 pt2 ang1 ang2 a)
    (setq startparam (vlax-curve-getStartParam obj)
    endparam (vlax-curve-getEndParam obj)
    ncpts (vlax-get obj 'NumberOfControlPoints)
    inc (/ (- endparam startparam) (* ncpts 7))
    param (+ inc startparam)
    fd (vlax-curve-getfirstderiv obj param)
    ptlst (cons (vlax-curve-getStartPoint obj) ptlst))
    (while (< param endparam)
    (setq pt1 (vlax-curve-getPointAtParam obj param)
    ang1 fd
    param (+ param inc)
    pt2 (vlax-curve-getPointAtParam obj param)
    fd (vlax-curve-getfirstderiv obj param)
    ang2 fd
    a (abs (3d_angw1w2 ang1 ang2)))
    (if (> a 0.00218166)(setq ptlst (cons pt1 ptlst))))
    (if (not (equal
    (setq pt1 (vlax-curve-getEndPoint obj)) (car ptlst) 1e-8))
    (setq ptlst (cons pt1 ptlst)))
    (reverse ptlst)) ;end
    (defun TraceType1Pline (obj / ptlst objlst lst)
    (setq ptlst (list (vlax-curve-getStartPoint obj))
    objlst (vlax-invoke obj 'Explode))
    (foreach x objlst
    (setq lst (TraceACE x))
    (if (not (equal (car lst) (last ptlst) 1e-8))
    (setq lst (reverse lst)))
    (setq ptlst (append ptlst (cdr lst)))
    (vla-delete x))(ZClosed ptlst)) ;end
    (defun TraceType23Pline (obj / objlst ptlst lastpt)
    (setq objlst (vlax-invoke obj 'Explode)
    lastpt (vlax-get (last objlst) 'EndPoint))
    (foreach x objlst
    (setq ptlst (cons (vlax-get x 'StartPoint) ptlst))
    (vla-delete x))(ZClosed (reverse (cons lastpt ptlst)))) ;end
    (defun Trace3DPline (obj / coord ptlst)
    (setq coord (vlax-get obj 'Coordinates))
    (repeat (/ (length coord) 3)
    (setq ptlst (cons (list (car coord) (cadr coord)(caddr coord)) ptlst))
    (setq coord (cdddr coord)))(ZClosed (reverse ptlst))) ;end
    (defun NormalAngle (a)(if (numberp a)(angtof (angtos a 0 14) 0)))
    (defun 3d_angw1w2 (Wekt1 Wekt2 / CosA)
    (if (equal (setq CosA (/ (apply '+ (mapcar '* Wekt1 Wekt2))
    (distance '(0 0 0) Wekt1) (distance '(0 0 0) Wekt2))) -1.0 1e-6)
    Pi
    (if (equal CosA 0.0 1e-6) (* 0.5 PI)(atan (sqrt (- 1 (* CosA CosA))) CosA))))
    (setq typlst '("AcDb2dPolyline" "AcDbPolyline" "AcDb3dPolyline" "AcDbCircle"
    "AcDbArc" "AcDbEllipse" "AcDbSpline" "AcDbLine"))
    (or (eq (type obj) 'VLA-OBJECT)
    (setq obj (vlax-ename->vla-object obj)))
    (setq typ (vlax-get obj 'ObjectName))
    (if (vl-position typ typlst)
    (cond ((or (eq typ "AcDb2dPolyline") (eq typ "AcDbPolyline"))
    (cond ((or
    (not (vlax-property-available-p obj 'Type))
    (= 0 (vlax-get obj 'Type)))
    (TracePline obj))
    ((or (= 3 (vlax-get obj 'Type)) (= 2 (vlax-get obj 'Type)))
    (TraceType23Pline obj))
    ((= 1 (vlax-get obj 'Type))
    (TraceType1Pline obj))))
    ((eq typ "AcDbLine")(TraceLine obj))
    ((or (eq typ "AcDbCircle") (eq typ "AcDbArc") (eq typ "AcDbEllipse"))
    (TraceACE obj))
    ((eq typ "AcDbSpline")(TraceSpline obj))
    ((eq typ "AcDb3dPolyline")(Trace3DPline obj))
    )))
    (vl-load-com)
    (setq en (car(entsel "\nУкажите контур: ")))
    (if (and en (wcmatch (cdr(assoc 0 (entget en))) "*POLYLINE,SPLINE,CIRCLE,ARC,ELLIPSE"))
    (progn
    (setq lst (TraceObject (vlax-ename->vla-object en)))
    (lib:Zoom2Lst lst);_Гарантированно полилиния на экране
    (setq lst (mapcar '(lambda(x)(trans x 0 1)) lst))
    (setq lst (mapcar '(lambda(x)(list (car x)(cadr x))) lst))
    (if (setq ss (ssget opt lst))(SSSETFIRST ss ss))
    (setq ss nil)))(princ))
    ;_Select Contour Window Polygon
    (defun C:SCWP ()(SelectContour "_WP"))
    ;_Select Contour Crossing Polygon
    (defun C:SCCP ()(SelectContour "_CP"))
    (princ "\nНаберите в командной строке SCWP или SCCP")

    и команды SCWP или SCCP соответственно выбрать все попадающие в полигон полностью или частично объекты

    3. Выкопировать выбранное в отдельный файл. Там завершить обрезку по полигону
     
    #20

Поделиться этой страницей

  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление