Разделение полилинии
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Разделение полилинии

Разделение полилинии

Ответ
Поиск в этой теме
Непрочитано 08.02.2010, 12:40 #1
Разделение полилинии
ALEXGVOZ
 
Регистрация: 23.08.2008
Сообщений: 38

У меня есть полилиния которую надо поделить на 2 полилинии причем первая полилиния должна иметь заданую длину подскажите есть такая команда в автокаде 2007? если нет то подскажите как это сделать
Просмотров: 11653
 
Непрочитано 08.02.2010, 12:48
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Если известна точка разрыва, то по идее _.break. А так, для варианта "с заранее заданной длиной" - лично я вижу только программное решение...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.02.2010, 12:51
#3
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Стандартными методами
1 - команда _measure
2 - команда _break
ps см. внимательно командную строку
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 08.02.2010, 12:59
#4
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Если известна точка разрыва
А если не известно то _measure её найдёт, т.е. для разрыва одной полилинии придётся использовать 3 команды _measure->_break->_erase если иногда и мало, то ручками, если часто и много, то
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
программное решение...
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 08.02.2010, 13:03
#5
ALEXGVOZ


 
Регистрация: 23.08.2008
Сообщений: 38


а можно создать такую команду?
ALEXGVOZ вне форума  
 
Непрочитано 08.02.2010, 13:37
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


zenon, _.measure, например, при указанной длине сегмента 650 и общей длине полилинии 6890 понарасставляет точек / блоков по всей длине. Запаришься потом удалять. Конечно, вывернуться и тут можно, кто бы спорил Но лично мне было бы лениво
Код:
[Выделить все]
(vl-load-com)

(defun c:break-at-dist (/          adoc       *error*    ent
                        pt         dist       start      end
                        len_pt_start          len_pt_end break_point
                        )

  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (= (type
           (setq
             ent (vl-catch-all-apply
                   (function
                     (lambda ()
                       (entsel
                         "\nВыберите полилинию или отрезок <Отмена> : "
                         ) ;_ end of entsel
                       ) ;_ end of lambda
                     ) ;_ end of function
                   ) ;_ end of vl-catch-all-apply
             ) ;_ end of setq
           ) ;_ end of type
         'list
         ) ;_ end of =
      (wcmatch (cdr (assoc 0 (entget (car ent)))) "*LINE")
      (= (type
           (setq
             dist
              (vl-catch-all-apply
                (function
                  (lambda ()
                    (initget 7)
                    (getdist "\nВведите длину сегмента <Отмена> : ")
                    ) ;_ end of lambda
                  ) ;_ end of function
                ) ;_ end of vl-catch-all-apply
             ) ;_ end of setq
           ) ;_ end of type
         'real
         ) ;_ end of =
      (setq pt           (cadr ent)
            ent          (car ent)
            pt           (vlax-curve-getclosestpointto ent pt)
            start        (vlax-curve-getstartpoint ent)
            end          (vlax-curve-getendpoint ent)
            len          (vlax-curve-getdistatpoint ent end)
            len_pt_start (vlax-curve-getdistatpoint ent pt)
            len_pt_end   (- len (vlax-curve-getdistatpoint ent pt))
            ) ;_ end of setq
      (<= dist len)
      (= (type (setq break_point
                      (cond
                        ((equal len_pt_end len_pt_start 1e-3)
                         (princ
                           "\nВы попали точно на середину объекта! Вызовите команду еще раз и укажите другую точку."
                           ) ;_ end of princ
                         )
                        ((< len_pt_start len_pt_end)
                         (vlax-curve-getpointatdist ent dist)
                         )
                        (t (vlax-curve-getpointatdist ent (- len dist)))
                        ) ;_ end of cond
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      ) ;_ end of and
     (vl-catch-all-apply
       (function
         (lambda (/)
           (vl-cmdf "_.break" ent "_none" break_point "_none"
                    break_point) ;_ end of vl-cmdf
           ) ;_ end of lambda
         ) ;_ end of function
       ) ;_ end of vl-catch-all-apply
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.02.2010, 13:52
#7
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Вот зверский код от Fantomas'а ({Smirnoff}) :


Код:
[Выделить все]
 
(defun c:делин(/ ACTDOC ACTLAY ACTSP CURPT CURVELAY CURVELEN
         DDIST ABSDIS DPNT ENDLN FILEN FIRSTSUMDIS
         INSLN LAYSTATE notClosed MIDPT MSGTEX NEWSPH
         NEXTDIS NEXTPT OBJLST OLDABSDIS OLDBLOCK
         OLDDELTADIS OLDDIST OLDDIVD OLDMODE OLDNEXTDIS
         OLDOSMODE OLDPT OLDSPH PTNDIRECT READIST
         REVFLAG SCURVE SELBL SELFLAG STLEN STPT
         DELTADIS UDIST UPNT *ERROR*)
  (vl-load-com)
  (defun Error_And_Quit(/)
    (if sCurve
      (vla-Highlight sCurve :vlax-false)
      ); end if
    (if stPt
      (vla-Delete stPt)
      ); end if
    (if newSph
      (vla-Delete newSph)
      ); end if
    (if layState
      (foreach lay layState
  (vla-put-Lock(car lay)(cadr lay))
  ); end foreach
      ); end if
    (if oldOsmode
      (setvar "OSMODE" oldOsmode)
      ); end if
    (if(and curveLen objLst AbsDis)
      (progn
  (if(= odiv:Divd "Точка-точка")
      (setq stLen(apply '+(mapcar '(lambda(x)(nth 4 x))objLst))
      fiLen(- stLen(nth 4(last objLst)))
      ); end setq
    ); end if
      (princ
        (strcat
    "\n++++++++++++++++++++ Репортаж ++++++++++++++++++++\n\n"
    "Текущий режим разметки: "
     (if(= odiv:Divd "Точка-точка") "Точка-Точка" "Старт-точка")"\n"
    "Длинна объекта: " (rtos curveLen) "\n"
                "Точек размечено: "(itoa(length objLst)) "\n"
    (if(= odiv:Divd "Точка-точка")
      (progn
        (princ
          (strcat
    "Длинна от стартовой до последней точки: "(rtos stLen) "\n"
    "Длинна от первой до последней точки: "(rtos fiLen) "\n"
           ); end strcat
          ); end princ
        ); end progn
      ""
       ); end if
    "\n+++++++++++++++++ Конец репортажа ++++++++++++++++\n"
     ); end strcat
    ); end princ
        ); end progn
      (princ "\n*** Выход из ДЕЛИН ***")
      ); end if
    (vla-EndUndoMark actDoc)
    (princ)
    ); end of Error_And_Quit
  (defun *error* (msg)
    (Error_And_Quit)
    (princ)
    ); end of *error*
  (setq actDoc(vla-get-ActiveDocument
    (vlax-get-acad-object))); end setq
  (vla-StartUndoMark actDoc)
  (if(not odiv:Mode)(setq odiv:Mode "Точки"))
  (if(not odiv:Block)(setq odiv:Block "не определен"))
  (if(not odiv:Divd)(setq odiv:Divd "Точка-точка"))
  (initget "Точки Блоки")
  (setq oldMode odiv:Mode
  odiv:Mode
   (getkword
     (strcat "\nВыберите тип разметки [Точки/Блоки] <"odiv:Mode">: "))
  ); end setq
  (setq oldOsmode(getvar "OSMODE"))
  (if(= 1(vla-get-ActiveSpace actDoc))
    (setq actSp(vla-get-ModelSpace actDoc))
    (setq actSp(vla-get-PaperSpace actDoc))
    ); end if
  (if(null odiv:Mode)(setq odiv:Mode oldMode))
  (if(= "Блоки" odiv:Mode)
    (progn
      (while(not selFlag)
      (setq oldBlock odiv:Block
      odiv:Block
       (getstring
         (strcat "\nНазвание блока или [Выбрать на экране] <"odiv:Block">: "))
      ); end setq
      (if(= "" odiv:Block)(setq odiv:Block oldBlock))
      (if(or(= "В" odiv:Block)(= "в" odiv:Block))
  (progn
    (setq odiv:Block nil)
    (while(not selBl)
      (setq selBl(entsel "\nВыберите блок "))
      (if
        (and selBl
       (/=(cdr(assoc 0(entget(car selBl)))) "INSERT")
       ); end and
    (setq selBl nil)
          (setq odiv:Block(cdr(assoc 2(entget(car selBl)))))
    ); end if
      ); end while
    ); end progn
  ); end if
  (if(tblsearch "BLOCK" odiv:Block)
    (setq selFlag T)
    (princ(strcat "\nБлок с названием: " odiv:Block " не найден! "))
    ); end if
   ); end while
  ); end progn
      ); end if
  (initget "Точка-точка Старт-точка")
  (setq oldDivd odiv:Divd
  odiv:Divd
   (getkword
     (strcat
       "\nВыберите режим разметки [Точка-точка/Старт-точка] <"odiv:Divd">: ")))
  (if(null odiv:Divd)(setq odiv:Divd oldDivd))
  (while(not uPnt)
    (setvar "OSMODE" 571)
    (setq uPnt
     (getpoint
       (strcat "\nВыберите точку на отрезке или кривой ")))
    (if(and uPnt
      (setq sCurve(ssget uPnt '((-4 . "<OR")(0 . "LINE")(0 . "LWPOLYLINE")
             (0 . "3DPOLYLINE")(0 . "POLYLINE")
             (0 . "SPLINE")(0 . "ARC")(0 . "ELLIPSE")
             (0 . "CIRCLE")(-4 . "OR>")))
      ); end setq
      ); end and
      (progn
  (setq sCurve(vlax-ename->vla-object(ssname sCurve 0))
        curveLen(vlax-curve-getDistAtParam sCurve
          (vlax-curve-getEndParam sCurve))
        actLay(vla-get-ActiveLayer actDoc)
        curveLay(vla-Item
      (vla-get-Layers actDoc)
      (vla-get-Layer sCurve))
        layState(list
      (list actLay(vla-get-Lock actLay))
      (list curveLay(vla-get-Lock actLay))
      ); end list
        ); end setq
  (vla-put-Lock actLay :vlax-false)
  (vla-put-Lock curveLay :vlax-false)
  (vla-Highlight sCurve :vlax-true)
  (if(vlax-curve-isClosed sCurve)
    (progn
      (princ "\n*** Замкнутый контур ***")
      (setq notClosed nil)
      ); end progn
    (progn
      (if
       (> 0.1(distance
         (vlax-curve-getStartPoint sCurve)
         (vlax-curve-getEndPoint sCurve)
         ); end distance
       )
       (princ "\n*** ВНИМАНИЕ! Возможно \"зрительно замкнутый\" (незамкнутый) контур ***")
       ); end if
            (setq notClosed T)
       ); end progn
    ); end if
  (setq stPt(vla-AddSphere actSp
        (vlax-3d-point uPnt)
            (/(getvar "VIEWSIZE")120))
        ); end setq
  (vla-put-Color stPt 1)
       (if notClosed
   (progn
  (cond
    ((equal uPnt(vlax-curve-getStartPoint sCurve))
     (setq revFlag 0)
     ); end condition #1
    ((equal uPnt(vlax-curve-getEndPoint sCurve))
     (setq revFlag 1)
     ); end condition #2
    (t
     (setq revFlag 2)
     ); end condition #3
    ); end cond
  ); end progn
   (setq revFlag 2)
   ); end if
  ); end progn
    (setq uPnt nil)
      ); end if
  ); end while
  (if(= revFlag 2)
    (progn
          (while(not dPnt)
       (if
   (setq dPnt
    (getpoint
      (strcat "\nУкажите точку в направлении разметки ")))
   (progn
   (if
     (not
       (setq dDist(vlax-curve-getDistAtPoint sCurve dPnt)))
     (progn
     (princ "\nТочка не пренадлежит линии!")
     (setq dPnt nil)
     ); end progn
     ); end if
   ); end progn
   (princ "\nТочка не выбрана!")
   ); end if
       );end while
     ); end progn
    ); end if
(setq uDist(vlax-curve-getDistAtPoint sCurve uPnt))
  (if(and uDist dDist)
    (progn
      (if(>= uDist (/ curveLen 2))
  (progn
    (setq midPt(vlax-curve-getPointAtDist sCurve
           (- uDist
       (/ curveLen 2)))
    ); end setq
    (if(and
         (>= dDist(vlax-curve-getDistAtPoint sCurve midPt))
         (<= dDist uDist)
     ); end and
      (setq ptnDirect T)
      ); end if
    ); end progn
  (progn
    (setq midPt(vlax-curve-getPointAtDist sCurve
           (+ uDist
       (/ curveLen 2))))
    (if(or
         (and
     (>= dDist 0.0)
     (<= dDist uDist)
     ); end and
         (and
     (>= dDist(vlax-curve-getDistAtPoint sCurve midPt))
     (<= dDist curveLen)
     ); and
         ); or
      (setq ptnDirect T)
      ); end if
    ); end progn
  ); end if
      ); end progn
    ); end if
  (setq objLst '()
  nextDis "0.0"
  AbsDis 0.0
  ); end setq
  (cond
    ((= revFlag 2)
       (setq DeltaDis uDist)
      ); end condition #1
    ((= revFlag 0)
     (setq DeltaDis 0.0)
     ); end condition #2
    ((= revFlag 1)
     (setq DeltaDis curveLen)
     ); end condition #3
     ); end cond
  (setq firstSumDis DeltaDis)
  (while(not(member nextDis '("в" "В")))
    (setq oldAbsDis AbsDis
    oldDeltaDis DeltaDis
          oldDist nextDis
    repCount 1
          nextDis
     (getstring
       (strcat"\nВведите расстояние или [Отменить/Выйти] <"nextDis"> : "))
    ); end setq
    (if(= "" nextDis)(setq nextDis oldDist))
    (if
      (vl-string-search "," nextDis)
      (setq nextDis(vl-string-subst "." "," nextDis))
      ); end if
    (cond
      ((and
   (setq reaDist(distof nextDis))
   (not(member nextDis '("в" "В" "о" "О")))
   ); end and
       (progn
   (if(minusp reaDist)
     (setq reaDist(- reaDist))
     ); end if
   (setq oldDist DeltaDis)
   (cond
     ((not notClosed)
      (if(= odiv:Divd "Точка-точка")
        (progn
      (if(not ptnDirect)
        (progn
    (if(>= curveLen(+ DeltaDis reaDist))
          (setq DeltaDis(+ DeltaDis reaDist))
    (setq DeltaDis(-(+ DeltaDis reaDist)curveLen))
      ); end if
    ); end progn
        ); end if
     (if ptnDirect
        (progn
    (if(<= 0.0 (- DeltaDis reaDist))
          (setq DeltaDis(- DeltaDis reaDist))
    (setq DeltaDis(+(- DeltaDis reaDist)curveLen))
      ); end if
    ); end progn
        ); end if
      (setq AbsDis(+ AbsDis reaDist))
      ); end progn
        (progn
      (if(not ptnDirect)
        (progn
    (if(>= curveLen(+ uDist reaDist))
          (setq DeltaDis (+ uDist reaDist))
    (setq DeltaDis(-(+ uDist reaDist)curveLen))
      ); end if
    ); end progn
        ); end if
     (if ptnDirect
        (progn
    (if(<= 0.0 (- uDist reaDist))
          (setq DeltaDis(- uDist reaDist))
    (setq DeltaDis(+(- uDist reaDist)curveLen))
      ); end if
    ); end progn
        ); end if
      (setq AbsDis reaDist)
      ); end progn
        ); end if
      ); end condition #1
     ((= revFlag 0)
      (if(= odiv:Divd "Точка-точка")
        (progn
      (setq DeltaDis(+ DeltaDis reaDist)
      AbsDis(+ AbsDis reaDist)
      ); end setq
        ); end progn
        (progn
      (setq DeltaDis reaDist
      AbsDis reaDist
      ); end setq
    ); end progn
        ); end if
      ); end condition #2
     ((= revFlag 1)
       (if(= odiv:Divd "Точка-точка")
         (progn
      (if(= reaDist 0.0)
        (setq reaDist 0.00001)
        ); end if
      (setq DeltaDis(- DeltaDis reaDist)
      AbsDis(+ AbsDis reaDist)
      ); end setq
      ); end progn
         (progn
      (setq DeltaDis(- curveLen reaDist)
      AbsDis reaDist
      ); end setq
     ); end progn
         ); end if
      ); end condition #3
     ((and notClosed(= revFlag 2))
      (if(<= uDist dDist)
      (progn
     (if(= odiv:Divd "Точка-точка")
       (progn
     (setq DeltaDis(+ DeltaDis reaDist)
     AbsDis(+ AbsDis reaDist)
     ); end setq
        ); end progn
       (progn
     (setq DeltaDis (+ reaDist uDist)
     AbsDis reaDist); end setq
      ); end progn
       ); end if
        ); end progn
      (progn
    (if(= odiv:Divd "Точка-точка")
      (progn
     (setq DeltaDis(- DeltaDis reaDist)
     AbsDis(+ AbsDis reaDist)
     ); end setq
        ); end progn
      (progn
     (setq DeltaDis (- uDist reaDist)
     AbsDis reaDist); end setq
      ); end progn
               ); end if
        ); end progn
        ); end if
      ); end conditon #4
     ); end cond
       (if
    (or
      (and(not notClosed)(>= curveLen AbsDis))
      (and(/= revFlag 2)(>= curveLen AbsDis))
      (and
        notClosed(= revFlag 2)(<= uDist dDist)
        (>= curveLen(+ uDist AbsDis))
        ); end and
      (and
        notClosed(= revFlag 2)(> uDist dDist)
        (<= AbsDis uDist)
        ); end and
      ); end or
       (progn
         (if nextPt(setq oldPt nextPt))
           (setq nextPt
        (vlax-curve-getPointAtDist sCurve DeltaDis)
          ); end setq
         (if
     (and
       oldPt
       (= odiv:Divd "Старт-точка")
       (equal oldPt nextPt)
       ); end and
     (alert
       (strcat
            "ТОЧКА ИЛИ БЛОК С ДУБЛИРУЮЩИМИСЯ КООРДИНАТАМИ                 \n\n"
      "Вы работаете в режиме Старт-Точка и расстояния откладываются\n"
      "от выбранного вами конца отрезка или кривой. Точка на таком\n"
      "расстоянии от конца линии уже существует. Вы можете удалить ее\n"
      "командой Отменить."
         ); end strcat
      ); end alert
     ); end if
         (if(= odiv:Mode "Точки")
     (progn
          (setq curPt(vla-AddPoint actSp
           (vlax-3d-point nextPt)))
    (if(member(getvar "PDMODE") '(0 1))
      (progn
        (if newSph
          (progn
          (setq oldSph newSph)
          (vla-Delete oldSph)
          ); end progn
         ); end if
         (setq newSph(vla-AddSphere actSp
           (vlax-3d-point nextPt)
                         (/(getvar "VIEWSIZE")120))
          ); end setq
        (vla-put-Color newSph 3)
         ); end progn
        ); end if
       ); end progn
     (setq curPt
      (vla-InsertBlock actSp (vlax-3d-point nextPt)
        odiv:Block 1.0 1.0 1.0 0))
          ); end if
          (setq objLst(append
                   (list(list curPt DeltaDis AbsDis nextPt reaDist))objLst)
         ); end setq
         (if(= odiv:Divd "Точка-точка")
         (princ(strcat "\nСуммарная длинна разметки = " (rtos AbsDis)))
     ); end if
         ); end progn
       (progn
       (cond
         ((or(and(not notClosed)(= odiv:Divd "Точка-точка"))(/= revFlag 2))
    (setq insLn(- AbsDis curveLen)
          endLn(- curveLen(- AbsDis reaDist))
          ); end setq
    ); end condition #1
         ((and(not notClosed)(= odiv:Divd "Старт-точка"))
    (setq endLn curveLen
          insLn (- AbsDis curveLen)
          ); end setq
    ); end condition #2
((and notClosed(= revFlag 2))
     (if(<= uDist dDist)
       (progn
       (setq insLn(-(+ AbsDis uDist)curveLen)
       endLn(- reaDist insLn)
       ); end setq
       ); end progn
       (progn
       (setq insLn(- AbsDis uDist)
       endLn(- reaDist insLn)
       ); end setq
       ); end progn
       ); end if
    ); end condition #3
         ); end cond
       (setq AbsDis oldAbsDis
       DeltaDis oldDeltaDis); end setq
       (alert
         (strcat "НЕДОСТАТОЧНО ДЛИННЫ ДЛЯ РАЗМЕТКИ          \n\n"
           "Текущий режим разметки: "
           (if(= odiv:Divd "Точка-точка") "Точка-Точка" "Старт-точка")"\n"
           "Требуемая длинна участка: " (rtos reaDist) "\n"
           "Длинна неразмеченной части: " (rtos endLn) "\n"
           "Нехватает для разметки: " (rtos insLn) "\n"
           "Длинна объекта: " (rtos curveLen) "\n"
           "Точек размечено: "(itoa(length objLst)) "\n"
           ); end strcat
         ); end alert
    ); end progn
   ); end if
   (setq oldNextDis nextDis)
        ); end progn
       ); end condition #1
      ((member nextDis '("о" "О"))
       (progn
        (if objLst
   (progn
     (vla-Delete(caar objLst))
     (if(> 1(length objLst))
       (progn
       (setq AbsDis(nth 2(cadr objLst))
       DeltaDis(cadar objLst)
       ); end setq
       ); end progn
       (progn
       (setq AbsDis 0.0
       DeltaDis firstSumDis
       ); end setq
       ); end progn
       ); end if
     (if newSph
       (progn
         (vla-Delete newSph)
         (setq newSph nil)
         (if(/= 1(length objLst))
     (progn
       (setq newSph(vla-AddSphere actSp
    (vlax-3d-point(nth 3(cadr objLst)))
      (/(getvar "VIEWSIZE")120))
          ); end setq
       (vla-put-Color newSph 3)
            ); end progn
     ); end if
       ); end progn
       ); end if
     (setq objLst(cdr objLst))
    ); end progn
    (princ "\nНечего отменять!")
    ); end if
     ); end progn
       ); end condition #2
      ((member nextDis '("в" "В"))
       (Error_And_Quit)
       ); end condition #3
      (t
       (progn
   (if(< 15(strlen nextDis))
     (setq msgTex
      (strcat(substr nextDis 1 15)"..."))
     (setq msgTex nextDis)
     ); end if
   (alert
     (strcat "ВВЕДЕНЫ ОШИБОЧНЫЕ ДАННЫЕ: " msgTex "                \n\n"
       "ВНИМАНИЕ!\n\n"
       "Если вы используете массив данных скопированный через\n"
       "буфер обмена из  MS Excel или другой программы, выйдите\n"
       "из программы и исправьте ошибку.\n\n"
       "Если ввод данных осуществляется вручную, можете продолжить\n"
       "работу программы.")
     ); end alert
   ); end progn
       ); end condition #6
      ); end cond
    ); end while
  (princ)
  ); end of defun
(princ "\n*** ДЕЛИН для запуска ***")

Обсуждение было здесь:
http://www.caduser.ru/forum/index.ph...ID=2&TID=20718
Profan вне форума  
 
Автор темы   Непрочитано 08.02.2010, 13:56
#8
ALEXGVOZ


 
Регистрация: 23.08.2008
Сообщений: 38


я воспользовался этой команды после запроса длины сегмента он пишет неверная точка как ей пользоваться????
ALEXGVOZ вне форума  
 
Непрочитано 08.02.2010, 14:00
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


ALEXGVOZ, ты про какой код? Я свой проверял, работало. Смотри на запросы в ком.строке.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.02.2010, 14:19
#10
ALEXGVOZ


 
Регистрация: 23.08.2008
Сообщений: 38


я про первый после введения длины отрезка он просит указать первую точку разрыва т.е. он не делит на нужную длину
ALEXGVOZ вне форума  
 
Непрочитано 08.02.2010, 14:33
#11
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


А ты точно все скопировал? Вот лог выполнения в моем AutoCAD 2008 Eng:
Код:
[Выделить все]
Command: break-at-dist

Выберите полилинию или отрезок <Отмена> :
Введите длину сегмента <Отмена> : 2500

Command:
И при указании длины "мышой":
Код:
[Выделить все]
Command: break-at-dist
Выберите полилинию или отрезок <Отмена> :
Введите длину сегмента <Отмена> :  Specify second point:
P.S. С Фантомасом тягаться - пупок развяжется. Код даже не стал подробно анализировать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.02.2010, 14:36
#12
ALEXGVOZ


 
Регистрация: 23.08.2008
Сообщений: 38


вот у меня в автокаде 2007
Команда: break-at-dist
Выберите полилинию или отрезок <Отмена> :
Введите длину сегмента <Отмена> : 50
Режим не определен для заданной точки.
Неверная точка.
Режим не определен для заданной точки.
Неверная точка.
ALEXGVOZ вне форума  
 
Непрочитано 08.02.2010, 14:43
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


У меня нет 2007
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.02.2010, 14:50
#14
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Нормально работает программа Алексея. Только вот не мешало бы определиться, от какой точки отсчитывать расстояние.
Profan вне форума  
 
Непрочитано 08.02.2010, 14:57
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Она у меня пытается сама определить - если кликнуть ближе к начальной точке полилинии / отрезка, разбивать будет от начала. Короче, сам пользователь кликом определяет, с какой стороны выполнять обрезку.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.02.2010, 15:04
#16
ALEXGVOZ


 
Регистрация: 23.08.2008
Сообщений: 38


а можно написать на 2007 автокад?
ALEXGVOZ вне форума  
 
Непрочитано 08.02.2010, 15:12
#17
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Кулик Алексей aka kpblc, а в коде ошибок нет, с учетом rus/eng версии??
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 08.02.2010, 15:13
#18
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Она у меня пытается сама определить - если кликнуть ближе к начальной точке полилинии / отрезка, разбивать будет от начала. Короче, сам пользователь кликом определяет, с какой стороны выполнять обрезку.
Действительно, отрезает там, где надо.
ALEXGVOZ , я проверял на 2006 и на 2008. Не думаю, что для 2007 надо писать код специально. Что-то у тебя не то с чертежом.
Profan вне форума  
 
Непрочитано 08.02.2010, 15:19
#19
LSN


 
Регистрация: 19.04.2007
Сообщений: 197


попробуйте PL-tools В примере поделил полилинию длинной 100, первую часть задал 75.
Цитата:
Command: PL-DIV

Выберите сегмент полилинии для добавления вершин [отмени U/выход X] <выход>:
Число - -длина сегмента + -количество сегментов
[Длина (-) /Количество (+) ] сегментов : -75
LSN вне форума  
 
Автор темы   Непрочитано 08.02.2010, 15:23
#20
ALEXGVOZ


 
Регистрация: 23.08.2008
Сообщений: 38


пишет в командной строке на новом чертеже
Команда: break-at-dist
Выберите полилинию или отрезок <Отмена> :
Введите длину сегмента <Отмена> : 10000
_.break Выберите объект:
Первая точка разрыва: _none
Режим не определен для заданной точки.
Неверная точка.
Первая точка разрыва: _none
Режим не определен для заданной точки.
Неверная точка.


может надо для 2007 руской версии ченибудь исправить в коде?

Последний раз редактировалось ALEXGVOZ, 08.02.2010 в 16:32.
ALEXGVOZ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Разделение полилинии



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Новые команды для работы с полилинией VVA Программирование 647 18.09.2023 11:16
Интерполяция отметок вершин полилинии между двумя заданными точками Кочетков Андрей Программирование 7 22.07.2019 20:14
lisp: Длина по полилинии до точки vosh LISP 19 15.07.2013 15:10
выноски к полилинии gizmo_zx Программирование 6 01.03.2010 12:17
Поворот полилинии krusty AutoCAD 9 10.11.2009 15:28