Тема: Как посчитать общую длину нескольких линий?
Скажите, пожалуйста, как посчитать общую длину нескольких линий?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Autodesk → AutoCAD → Как посчитать общую длину нескольких линий?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Скажите, пожалуйста, как посчитать общую длину нескольких линий?
Сделай из линий полилинию и увсё!
(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
Как загружать и запускать лиспы знаешь?
______________
Удачи.
Когда я загрузил эту программу, ввел entlen,
затем выбрал линии, но мне выдало
; error: no function definition: VLAX-ENAME->VLA-OBJECT
(vl-load-com) добавь
в начало функции entlen или просто набери в командной строке перед тем, как выполнять entlen.
______________
Удачи.
;| 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)
> Александр
Все, что в этой рутине вычисляется функциями 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. Если ими еще кто-нибудь пользуется, конечно.
______________
Удачи.
Абсолютно согласен с > 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)))) )
Калькулятор Оконечникова FOCALL.
Как загружать и запускать VBA знаешь?
http://www.geocities.com/tintmichael/MT … ECTION.htm
Или вот такой макрос (правда, я не уверен, что в этом
топике называется "общей длиной линий"..):
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
Привет ребята! Что посоветуете прочитать чтоб разобраться запустить хотя бы это
Кто ответит почему если в ячейки таблицы вставлять поле длин линий, после некоторого времени все длины слетают и остаются решетки
https://www.caduser.ru/forum/topic26866.html
Загружаем...
Выделяем линии, жмем кнопку, и всего делов
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Autodesk → AutoCAD → Как посчитать общую длину нескольких линий?
Форум работает на PunBB, при поддержке Informer Technologies, Inc