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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Посчитать количество наложенных отрезков в точке

Посчитать количество наложенных отрезков в точке

Ответ
Поиск в этой теме
Непрочитано 21.11.2016, 11:15 #1
Посчитать количество наложенных отрезков в точке
LAmyk
 
Регистрация: 05.02.2009
Сообщений: 37

Приветствую
искал на форуме что-нибудь про подсчет наложенных отрезков в точке. не нашел
прокладываю кабеля для ОПС на плане
нужно делать выноски по количеству кабелей в пучке
то есть полилинии идут одна на другой по трассе. мне нужно сделать выноски, сколько в пучках кабелей. возможно ли это делать с помощью скрипта?
Просмотров: 2225
 
Непрочитано 21.11.2016, 11:43
#2
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,090


Цитата:
Сообщение от LAmyk Посмотреть сообщение
полилинии идут одна на другой по трассе
Месье знает толк...

Цитата:
Сообщение от LAmyk Посмотреть сообщение
про подсчет наложенных отрезков в точке
Хотя у Ssget есть режим выбора "в точке", он работает довольно паскудно, лучше использовать метод "секущая рамка" (Crossing selection, ключ "_C") очень малого размера.
kp+ вне форума  
 
Непрочитано 21.11.2016, 13:07
#3
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от kp+ Посмотреть сообщение
"секущая рамка" (Crossing selection, ключ "_C") очень малого размера
или Fense (ключ _F) такого же малого размера. Но малый размер должен быть не абы-какой. Например, он должен быть больше 0,5 ширины полилинии в указанной точке, если точки будешь брать на полилинии и в перпендикулярном направлении.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.11.2016, 13:57
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Интересно, а если взять все полилинии чертежа и выбрать среди них только те, которые проходят через точку с помощью vlax-curve-get..., это сильно дольше будет, чем SSGET с ключами _C или _F?
P.S. Полилинии выбрать с помощью SSGET, ключа _X и фильтра (0 . "LWPOLYLINE")
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 21.11.2016, 14:27
#5
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,090


Цитата:
Сообщение от Do$ Посмотреть сообщение
выбрать среди них только те, которые проходят через точку
Начерчены они могут быть неидеально, поэтому все равно надо задавать допуск. Единственное - vlax-curve-... вроде бы не требует видимости объекта на экране, в отличие от ssget
kp+ вне форума  
 
Непрочитано 21.11.2016, 17:49
#6
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Сделать то можно (не скриптом), только вот окажется что нужно по другому... чтобы учитывались слои, имена слоёв, длина линий, на каждый отрезок своя выноска, в тексте дописки и т.д... Без нормального ТЗ результат хз.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 21.11.2016, 18:18
#7
LAmyk


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


помогите пожалуйста, достаточно чтобы просто скрипт выводил количество линий которые я выделил
сам я такой скрипт не напишу
LAmyk вне форума  
 
Непрочитано 21.11.2016, 18:24
#8
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


А так не устроит ?

----- добавлено через ~2 мин. -----
и приложите образец.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 39
Размер:	10.5 Кб
ID:	179436  
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 22.11.2016, 07:28
#9
LAmyk


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


Цитата:
Сообщение от maratovich Посмотреть сообщение
А так не устроит ?

----- добавлено через ~2 мин. -----
и приложите образец.
так я умею
LAmyk вне форума  
 
Непрочитано 22.11.2016, 07:33
#10
baksconstructor


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


Цитата:
Сообщение от LAmyk Посмотреть сообщение
так я умею
тогда чем это отличается от
Цитата:
чтобы просто скрипт выводил количество линий которые я выделил
Собственно задача решена.
Количество считает и показывает.

maratovich правильно написал:
Цитата:
Сообщение от maratovich Посмотреть сообщение
только вот окажется что нужно по другому...
Цитата:
Сообщение от maratovich Посмотреть сообщение
и приложите образец.
Цитата:
Сообщение от maratovich Посмотреть сообщение
Без нормального ТЗ результат хз.
baksconstructor вне форума  
 
Автор темы   Непрочитано 22.11.2016, 07:57
#11
LAmyk


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


спасибо всем за помощь и отзывчивость))
тогда помогите с другим скриптом
где в нем цвет меняется?
выводит длину желтым
Код:
[Выделить все]
 (defun c:plLen  (/ cEnt tStr tBox tHgt tWid gr sPt cPt lAng bPt tPt pt1 pt2 pt3 pt4)
  (vl-load-com)
  (if (and (setq cEnt (car (entsel "\nSelect Object: ")))
           (member (cdr (assoc 0 (entget cEnt)))
                   '("LWPOLYLINE" "POLYLINE" "LINE")))
    (progn
      (setq tStr (rtos (vla-get-length
                         (vlax-ename->vla-object cEnt)))
            tBox (textbox (list (cons 1 tStr) (cons 40 (getvar "TEXTSIZE"))))
            tHgt (- (cadadr tBox) (cadar tBox))
            twid (- (caadr tBox) (caar tBox)))
      (princ "\nPosition Text...")
      (while (eq 5 (car (setq gr (grread t 5 0))))
        (redraw)
        (if (listp (setq sPt (cadr gr)))
          (progn
            (setq cPt  (vlax-curve-getClosestPointto cEnt sPt)
                  lAng (angle cPt sPt)
                  bpt  (polar cPt lAng (/ (getvar "TEXTSIZE") 2.))
                  tpt  (polar bpt lAng tHgt)
                  mPt  (polar bPt lAng (/ tHgt 2.))
                  pt1  (polar bpt (+ lAng (/ pi 2.)) (/ tWid 2.))
                  pt2  (polar bPt (- lAng (/ pi 2.)) (/ tWid 2.))
                  pt3  (polar tpt (+ lAng (/ pi 2.)) (/ tWid 2.))
                  pt4  (polar tPt (- lAng (/ pi 2.)) (/ tWid 2.)))
            (grvecs (list -3 pt1 pt2 pt3 pt4 pt1 pt3 pt2 pt4)))))
      (if (eq 3 (car gr))
        (progn
          (setq lAng (- lAng (/ pi 2.)))
          (cond ((and (> lAng (/ pi 2)) (<= lAng pi))
                 (setq lAng (- lAng pi)))
                ((and (> lAng pi) (<= lAng (/ (* 3 pi) 2)))
                 (setq lAng (+ lAng pi))))
          (Make_Text mPt tStr lAng))))
    (princ "\n<!> Incorrect Selection <!>"))
  (redraw)
  (princ))

(defun Make_Text  (pt val rot)
  (entmake
    (list
      (cons 0 "TEXT")
      (cons 8 (getvar "CLAYER"))
      (cons 62 2)
      (cons 10 pt)
      (cons 40 (getvar "TEXTSIZE"))
      (cons 1 val)
      (cons 50 rot)
      (cons 7 (getvar "TEXTSTYLE"))
      (cons 71 0)
      (cons 72 1)
      (cons 73 2)
      (cons 11 pt))))
LAmyk вне форума  
 
Непрочитано 22.11.2016, 08:05
1 | #12
baksconstructor


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


Цитата:
Сообщение от LAmyk Посмотреть сообщение
где в нем цвет меняется?
(cons 62 2)

надо вместо 2 вписать своё, например
(cons 62 3)

----- добавлено через ~1 мин. -----
И кстати, это не скрипт, это lisp (лисп). Скрипт совершенно по другому пишется и работает.
baksconstructor вне форума  
 
Непрочитано 22.11.2016, 08:23
1 | 1 #13
Кулик Алексей aka kpblc
Moderator

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


Один вопрос - одна тема!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.11.2016, 09:37
#14
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Do$ Посмотреть сообщение
это сильно дольше будет, чем SSGET с ключами _C или _F?
Сильно - сканирование идёт по всей базе, а не по кэшированному по виду перечню примитивов. Конечно зависит от размеров чертежа, количества полилиний в нём, и т.д.
Александр Ривилис вне форума  
 
Непрочитано 26.11.2016, 14:45
1 | #15
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


По такому принципу:
Цитата:
Сообщение от kp+ Посмотреть сообщение
лучше использовать метод "секущая рамка" (Crossing selection, ключ "_C") очень малого размера
Если все правильно понял (этот "очень малый размер" здесь - 0.01 в 5-й строке):
Код:
[Выделить все]
 (defun C:TEST ( / pt ss count)
	(setq pt (getpoint "\nУкажите точку:"))
	(cond 
	  (	pt 
		(setq ss (ssget "_C" (polar pt (/ pi 4) 0.01) (polar pt (/ (* 5 pi) 4) 0.01) (list (cons 0 "LINE"))))
		(if ss 
			(setq count (sslength ss))
			(progn 
				(princ "\nВ указанной точке нет отрезков")
				(princ)
				(C:TEST)
			)
		)
		(if count 
			(draw-mleader 
				pt
				(getpoint pt "\nУкажите положение полки выноски:") 
				(list (vl-princ-to-string count))
				2.5
				0.87
				0.2
			)
		)
		(princ)
	  )
	  (	T 
		(princ "\nОтменено")
		(princ)
	  )
	)
)

(defun draw-mleader (pt1 pt2 strlist Htxt koeff abz / dic mlst i)
  ;;; pt1 - начальная точка UCS
  ;;; pt2 - конечная точка UCS
  ;;; strlist - список строк
  ;;; Htxt - высота текста
  ;;; koeff - коэфф форматирования pxe или nil
  ;;; abz - коэфф форматирования абзаца \\pa или Nil
  ;;;(draw-mleader (setq pt1(getpoint))(getpoint pt1)(list "Пример" "Минскинжпроект" "Третья строка") 1.5 0.9 nil)
  ;;; Стиль мультивыноски текущий
  (setq i 0)
  (command
    "_mleader"
    "_h"
    "_none"
    pt1
    "_none"
    pt2
  (strcat (if koeff (strcat "\\px"
                              (if abz (strcat "a"(VL-STRING-RIGHT-TRIM "0" (MIP-CONV-TO-STR abz))",") "")
                              "se" (VL-STRING-RIGHT-TRIM "0" (MIP-CONV-TO-STR koeff))";") "")   ;;;"\\pxse0.87;"
;;;            "\\pa0.15;" (car strlist) "\\pa0;"
              (car strlist)
    )
    )
  (while (> (getvar "CMDACTIVE") 0) (command ""))
  (setq dic (vlax-ename->vla-object (entlast)))
  (vla-put-TextString dic
    (strcat (if koeff (strcat "\\px"
                              (if abz (strcat "a"(VL-STRING-RIGHT-TRIM "0" (MIP-CONV-TO-STR abz))",") "")
                              "se" (VL-STRING-RIGHT-TRIM "0" (MIP-CONV-TO-STR koeff))";") "")   ;;;"\\pxse0.87;"
;;;            "\\pa0.15;" (car strlist) "\\pa0;"
              (car strlist)
;;;              (if abz "\\pa0;" "")
            (apply 'strcat
                   (mapcar '(lambda (x) (strcat "\\P" (if (= (setq i (1+ i)) 1)(if abz "\\pa0;" "")   "")  x)) (cdr strlist))
            ) ;_ end of apply
    ) ;_ end of strcat
  )
    (vla-put-TextHeight dic Htxt)
    dic
  )
  (defun mip-conv-to-str (dat)
      (cond ((= (type dat) 'INT) (setq dat (itoa dat)))
            ((= (type dat) 'REAL) (setq dat (rtos dat 2 12)))
            ((null dat) (setq dat ""))
            (t (setq dat (vl-princ-to-string dat)))
      ) ;_ end of cond
    ) ;_ end of defun
Использованы функции draw-mleader и mip-conv-to-str от VVA (взял здесь).
Команда построит мультивыноску текущего стиля, в ней будет отображено число отрезков в указанной точке. Если в этой точке отрезков нет, то команда вызовет саму себя еще раз до тех пор пока пользователь не нажмет Enter или Esc, или пока не укажет точку, где есть хотя бы один отрезок. Поэтому при именовании команды на свой лад надо исправить ее имя также и в 11-й строке, либо, если эта функция не нужна, то удалить 11-ю строку совсем. Высота текста указывается в строке 19. Строки 20, 21 - читаем комментарии VVA к функции draw-mleader.
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Посчитать количество наложенных отрезков в точке

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Геометрически изменяемая система (Лира) Кулик Алексей aka kpblc Лира / Лира-САПР 679 01.12.2023 08:48
Нужен lisp, показывающий все ли линии сходятся в одной точке. ВоваН LISP 8 01.05.2014 14:25
Как посчитать количество Мтекстов? Борисыч123 AutoCAD 6 25.01.2014 18:38
Как посчитать количество слов в чертеже? alex5908 AutoCAD 1 22.07.2010 19:52
Как посчитать количество требующихся эвакуационных лестниц? Hannyrik Архитектура 10 09.03.2010 16:53