Тема: Как посчитать общую длину нескольких линий?

Скажите, пожалуйста, как посчитать общую длину нескольких линий?

Re: Как посчитать общую длину нескольких линий?

Сделай из линий полилинию и увсё!

Re: Как посчитать общую длину нескольких линий?

(defun entLen (/ set:OfEnts int:l rea:LengthOfEnts)
  (setq    set:OfEnts (ssget)
    int:l 0
    rea:LengthOfEnts
     0.0
  ) ;_ setq
  (while (< int:l (sslength set:OfEnts))
    (setq rea:LengthOfEnts
       (+ rea:LengthOfEnts
          (vlax-curve-getDistAtParam
        (vlax-ename->vla-object (ssname set:OfEnts int:l))
        (vlax-curve-getEndParam (ssname set:OfEnts int:l))
          ) ;_ vlax-curve-getDistAtParam
       ) ;_ +
    ) ;_ setq
    (setq int:l (1+ int:l))
  ) ;_ while
  (princ (strcat "\nПримитивов: - "
         (itoa (sslength set:OfEnts))
         "\nОбщая длина: - "
         (rtos rea:LengthOfEnts)
     ) ;_ strcat
  ) ;_ princ
  (prin1)
) ;_ defun

Как загружать и запускать лиспы знаешь?
______________
Удачи.

Re: Как посчитать общую длину нескольких линий?

Когда я загрузил эту программу, ввел entlen,
затем выбрал линии, но мне выдало
; error: no function definition: VLAX-ENAME->VLA-OBJECT

Re: Как посчитать общую длину нескольких линий?

(vl-load-com) добавь

Re: Как посчитать общую длину нескольких линий?

(vl-load-com) добавь

в начало функции entlen или просто набери в командной строке перед тем, как выполнять entlen.
______________
Удачи.

Re: Как посчитать общую длину нескольких линий?

;| TOTLEN.LSP    c.2000  Rob Herr    robherr@hotmail.com
 'Add selected lines, plines, lwplines, splines, and arcs for total length'
 Revisions:
1.0        Originally created            02/10/2000 Rob Herr
1.1        Added support for 4 Units        02/29/2000 Jeff Tippit        
        Arch, Deci-Arch, Engr, Deci-Engr
  ___________________________________________________________________
  |     PERMISSION HEREBY GRANTED BLA, BLA, BLA, TO MODIFY ETC.     |
  |   As long as name and email remain with the original program    |
  | unaltered. However I would like to know of any bugs or problems |
  |   that arise with the actual program. And of course I take no   |
  |  responsibility for lost limbs, auto repair bills, mechanical   |
  |         or electronic difficulties, or snake venom.             |
  -------------------------------------------------------------------
------------------------------------------------------------------------
 Modified by J. Tippit, SPAUG President
    E-mail:                     jefft@iglobal.net
    Web Site:                http://www.spaug.org
------------------------------------------------------------------------
|;
(defun tlines ()
  (setq lbeg (cdr (assoc '10 ent)))
  (setq lend (cdr (assoc '11 ent)))
  (setq llen (distance lbeg lend))
  (setq tlen (+ tlen llen))
  (ssdel sn ss1)
)
(defun tarcs ()
 (setq cen (cdr (assoc '10 ent)))
 (setq rad (cdr (assoc '40 ent)))
 (setq dia (* rad 2.0))
 (setq circ (* (* rad pi) 2.0))
 (setq sang (cdr (assoc '50 ent)))
 (setq eang (cdr (assoc '51 ent)))
 (if (< eang sang)
  (setq eang (+ eang (* pi 2.0)))
 )
 (setq tang (- eang sang))
 (setq tang2 (* (/ tang pi) 180.0))
 (setq circ2 (/ tang2 360.0))
 (setq alen (* circ2 circ))
 (setq tlen (+ tlen alen))
 (princ)
 (ssdel sn ss1)
)
(defun tplines ()
 (command "area" "e" sn)
 (setq tlen (+ tlen (getvar "perimeter")))
 (ssdel sn ss1)
)
(defun tsplines ()
 (command "area" "e" sn)
 (setq tlen (+ tlen (getvar "perimeter")))
 (ssdel sn ss1)
)
(DEFUN C:TOTLEN (/ tlen ss1 sn sn2 et)
 (setq cmdecho (getvar "cmdecho"))
 (setvar "cmdecho" 0)
 (setq tlen 0)
 (prompt "\nSelect only those entities you want for total length: ")
 (setq ss1 (ssget))
 (while (> (sslength ss1) 0)
  (setq sn (ssname ss1 0))
  (setq ent (entget sn))
  (setq et (cdr (assoc '0 ent)))
  (cond
   ((= et "LINE") (tlines))
   ((= et "ARC") (tarcs))
   ((= et "LWPOLYLINE") (tplines))
   ((= et "POLYLINE") (tplines))
   ((= et "SPLINE") (tsplines))
   ((or
     (/= et "LINE")
     (/= et "ARC")
     (/= et "LWPOLYLINE")
     (/= et "POLYLINE")
     (/= et "SPLINE")
    )
    (ssdel sn ss1)
   )
  )
 )
     (alert
        (strcat
           "The Total Length of Selected Lines, Polylines, and Arcs is: "
           "\n\n" "Arch\t->\t" (rtos tlen 4 6)
           "\n\n" "Engr\t->\t" (rtos (/ tlen 12) 2 3) "'"
           "\n\n" "Deci-Arch\t->\t" (rtos (* tlen 12) 4 6)
           "\n\n" "Deci-Engr\t->\t" (rtos tlen 2 3)
        )
     )
     (prompt
        (strcat
           "\nThe Total Length of Selected Lines, Polylines, and Arcs is: "
           "\n" "Arch\t\t->\t" (rtos tlen 4 6)
           "\t\t\t" "Engr\t\t->\t" (rtos (/ tlen 12) 2 3) "'"
           "\n" "Deci-Arch\t->\t" (rtos (* tlen 12) 4 6)
           "\t\t\t" "Deci-Engr\t->\t" (rtos tlen 2 3)
        )
     )
; (alert (strcat "\nThe Total Length of Selected Lines, Polylines, and Arcs is: " (rtos tlen 2 2)))
 (setvar "cmdecho" cmdecho)
 (princ)
)
(prompt "\nBy Rob Herr   robherr@hotmail.com  ")
(prompt "\nType TOTLEN to run.\tVersion 1.1 - Total Length routine ")
(princ)

Re: Как посчитать общую длину нескольких линий?

> Александр
Все, что в этой рутине вычисляется функциями tlines, tarcs, tplines, tsplines в моем примере делается гораздо короче и универсальней:

(vlax-curve-getDistAtParam
  (vlax-ename->vla-object  (ssname set:OfEnts int:l))
  (vlax-curve-getEndParam (ssname set:OfEnts int:l))
) ;_ vlax-curve-getDistAtParam

Справедливости ради хочу сказать, что в функциях г. Rob Herr не используется технология ActiveX (функции vl-, vla-, vlax-, vlr-), поэтому сей метод применим и для версий AutoCAD ранее 2000. Если ими еще кто-нибудь пользуется, конечно.
______________
Удачи.

Re: Как посчитать общую длину нескольких линий?

Абсолютно согласен с > kos (2003-12-16 11:16:56).
Налицо явное преимущество activeX.

(defun C:length()
  (vl-load-com)
  (setq nabor (vl-remove-if 'listp
        (mapcar 'cadr (ssnamex (ssget))
            )
        )
    )
  (setq length-lin (mapcar '(lambda (x)
                  (vlax-curve-getDistAtParam x
            (vlax-curve-getendparam x)
                )
                  )
        (mapcar 'vlax-ename->vla-object nabor)
               )
    )
  (princ (strcat "Total length=" (rtos(apply '+ length-lin))))
  )
                

Re: Как посчитать общую длину нескольких линий?

Калькулятор Оконечникова FOCALL.

Re: Как посчитать общую длину нескольких линий?

Как загружать и запускать VBA знаешь?
http://www.geocities.com/tintmichael/MT … ECTION.htm

Re: Как посчитать общую длину нескольких линий?

Или вот такой макрос (правда, я не уверен, что в этом
топике называется "общей длиной линий"..):

Sub Re0()
On Error Resume Next
Dim ss As AcadSelectionSet, i, LengthSum
Set ss = ThisDrawing.SelectionSets.Add("ss")
LengthSum = 0
If MsgBox("Выберите линии и нажмите Enter..", vbOKCancel) = vbOK Then
 ss.SelectOnScreen
     For i = 0 To ss.Count - 1
        LengthSum = LengthSum + ss.Item(i).Length
     Next
 MsgBox "Сумма длин линий равна " & LengthSum
End If
ThisDrawing.SelectionSets("ss").Delete
End Sub

Re: Как посчитать общую длину нескольких линий?

Привет ребята! Что посоветуете прочитать чтоб разобраться запустить хотя бы это

Re: Как посчитать общую длину нескольких линий?

Кто ответит почему если в ячейки таблицы вставлять поле длин линий, после некоторого времени все длины слетают и остаются решетки

Re: Как посчитать общую длину нескольких линий?

https://www.caduser.ru/forum/topic26866.html
Загружаем...
Выделяем линии, жмем кнопку, и всего делов