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

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

Вычисление уклона отрезка

Ответ
Поиск в этой теме
Непрочитано 06.02.2012, 22:12 #1
Вычисление уклона отрезка
RЯков
 
Регистрация: 04.05.2006
Сообщений: 37

Доброго вечера!
Я конечно понимаю что на дворе 2012 год и все уважающие себя проектировщики закупили себе крутой софт и строчат многокилометровые профиля за минуты. Однако, случается и такое когда софта нет и нет возможности его установить..., да и материал приходится иногда просто исправлять, что несмотря на автоматизацию быстрее сделать чем построить новый профиль в геониксе. Ну в общем то это все присказка т.к. много искал похожую тему в поиске но не нашел.

Задача следующая: У отрезка в свойствах есть значение дельта х и дельта у, так вот как бы мне нажать на кнопочку на панельке(раз), указать отрезок(два), а там сосчитается формула дельта у / (дельта х * 5 ), разместить в нужном мне месте текст текущего стиля( три)... ну как то так вот...
Спасибо!
Просмотров: 4354
 
Непрочитано 07.02.2012, 01:41
#2
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Возможно, сойдет и подобная байда

Код:
[Выделить все]
 (defun c:LA2T (/ en bp el pt10 pt11)
  (if (and (setq en (entsel))
	   (setq bp (getpoint))
      )
    (progn

      (setq el	 (entget (car en))
	    pt10 (cdr (assoc 10 el))
	    pt11 (cdr (assoc 11 el))
      )
      (command "_text" bp 2.5 0 (rtos (/ (- (cadr pt10) (cadr pt11)  ) (* 5 (- (car pt10) (car pt11)  ))) 2 4) "")
    )
  )
)

Последний раз редактировалось gomer, 07.02.2012 в 20:01. Причина: bp - локальная переменная
gomer вне форума  
 
Непрочитано 07.02.2012, 10:20
#3
VVA

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


Мой вариант
Код:
[Выделить все]
(defun c:TANGENS (/ en el pt10 pt11)
  (and
     (setq ss (ssget "_:L:S:E" '((0 . "LINE"))))
     (setq el (entget(ssname ss 0))
 	    pt10 (cdr (assoc 10 el))
	    pt11 (cdr (assoc 11 el))
           )
    (setq en
       (ru-text-entmake
         (rtos(/(-(cadr pt10)(cadr pt11))(* 5(-(car pt10)(car pt11))))2 4)
         '(0 0 0)
         (getvar "TEXTSIZE")
         0
         nil
         )
      )
     (command "_.copybase" (trans '(0 0 0) 0 1) en "" "_.erase" en "" "_.pasteclip" "_none" pause)
      )
  )
(defun ru-text-entmake (txt pnt height rotation justification / ent_list)
  ;;;ShaggyDoc
  ;;;http://www.caduser.ru/forum/index.php?PAGE_NAME=read&FID=23&TID=30276
  (setq   ent_list (list   '(0 . "TEXT")
      '(100 . "AcDbEntity")
      '(100 . "AcDbText")
      (list 10 (car pnt) (cadr pnt) 0.0)
      (cons 1 txt)
      (cons 40 height)
      ;;(cons 7 "RU_CAD")
      (if justification
        (cond
          ((= justification "C")
           '(72 . 1)
          )
          ((= justification "R")
           '(72 . 2)
          )
          ((= justification "A")
           '(72 . 3)
          )
          ((= justification "M")
           '(72 . 4)
          )
          ((= justification "F")
           '(72 . 5)
          )
          (t
           '(72 . 0)
          )
        ) ;_ end of cond
        '(72 . 0)
      ) ;_ end of if
      (cons 50 rotation)
      (list 11 (car pnt) (cadr pnt) 0.0)
     ) ;_ end of list
   ) ;_ end of setq
   (entmakex ent_list)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.02.2012, 10:21
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Offtop: 2Gomer - bp не локализирован.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 07.02.2012, 12:10
#5
VVA

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


Еще один вариант. Запрашивает уровень для отрисовки текста (графа профиля) и в цикле выбор отрезков
Код:
[Выделить все]
(defun c:TANGENS1 (/ en el pt10 pt11 PTtext)
  (and
     (progn
       (initget 7)
       (setq pttext (getpoint "\nУровень для отрисовки текста: "))
       )
     (princ "\nВыберите отрезок <выход> :")
     (while
       (setq ss (ssget "_:L:S:E" '((0 . "LINE"))))
       (setq el (entget(ssname ss 0))
 	    pt10 (cdr (assoc 10 el))
	    pt11 (cdr (assoc 11 el))
           )
       (setq en
        (ru-text-entmake
         (rtos(/(-(cadr pt10)(cadr pt11))(* 5(-(car pt10)(car pt11))))2 4)
         (list (car(mapcar '+ pt10(mapcar '*(mapcar '- pt11 pt10)(list 0.5 0.5 0.5))))(cadr pttext))
         (getvar "TEXTSIZE")
         0
         "M"
         )
      )
     (princ "\nВыберите отрезок <выход> :")
      )
     )
  (princ)
  )
(defun ru-text-entmake (txt pnt height rotation justification / ent_list)
  ;;;ShaggyDoc
  ;;;http://www.caduser.ru/forum/index.php?PAGE_NAME=read&FID=23&TID=30276
  (setq   ent_list (list   '(0 . "TEXT")
      '(100 . "AcDbEntity")
      '(100 . "AcDbText")
      (list 10 (car pnt) (cadr pnt) 0.0)
      (cons 1 txt)
      (cons 40 height)
      ;;(cons 7 "RU_CAD")
      (if justification
        (cond
          ((= justification "C")
           '(72 . 1)
          )
          ((= justification "R")
           '(72 . 2)
          )
          ((= justification "A")
           '(72 . 3)
          )
          ((= justification "M")
           '(72 . 4)
          )
          ((= justification "F")
           '(72 . 5)
          )
          (t
           '(72 . 0)
          )
        ) ;_ end of cond
        '(72 . 0)
      ) ;_ end of if
      (cons 50 rotation)
      (list 11 (car pnt) (cadr pnt) 0.0)
     ) ;_ end of list
   ) ;_ end of setq
   (entmakex ent_list)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 07.02.2012, 19:00
#6
RЯков


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


Спасибо!
RЯков вне форума  
 
Непрочитано 07.02.2012, 20:02
#7
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
bp не локализирован
ну, я ж написал, что "байда"
gomer вне форума  
 
Непрочитано 09.02.2012, 20:42
#8
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


для интересу, кому нать
Код:
[Выделить все]
(defun C:demo  (/ code data dx dy elist loop p1 p2 pt res)
  (defun dxf (key alist)
  (cdr (assoc key alist))
  )
  (setq loop T)
  (while loop
    (setq code (grread T 2))
    (if
      (and
	(= 5 (car code))
	(setq data (nentselp "\nОбозначить отрезок: " (cadr code)))
	(eq "LINE"
	    (cdr (assoc 0 (setq elist (entget (car data)))))
	)
      )
       (progn
	 (setq p1 (dxf 10 elist))
	 (setq p2 (dxf 11 elist))
	 (setq dy (- (cadr p2) (cadr p1)))
	 (setq dx (- (car p2) (car p1)))
	 (setq res (rtos (/ dy (* dx 5.)) 2 3))
	 ;;; debug only:
;;;	 (alert
;;;	   (strcat "Delta Y: "
;;;		   (rtos dy 2 3)
;;;		   "\nDelta X: "
;;;		   (rtos dx 2 3)
;;;		   "\nResult: " res
;;;		   
;;;	   )
;;;	 )
	 (setvar "dimzin" 0)
	 (setq pt (getpoint "\nТочка вставки текста: "))
	 (if (zerop (cdr (assoc 40 (entget (tblobjname "style" (getvar "textstyle"))))))
	   (command "text" "_J" "MC" "_non" pt "" "0" res)
	   (command "text" "_J" "MC" "_non" pt "0" res)
	 )
	 (setq loop nil)
       )

    )
  )
  (command)
  (princ)
  )
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вычисление уклона отрезка

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование отрезка с помощью ручек KSI AutoCAD 8 01.07.2014 09:22
Определение высот рельефа по близлежащим точкам dextron3 Программирование 21 10.11.2011 13:14
Программное соединение конца одного отрезка с другим отрезком Frigate Программирование 2 07.11.2011 11:11
DwgRuLispLib: Геометрия. Вычисление центра масс (centroid) LW полилинии VVA Библиотека функций 2 16.11.2010 09:49
Помогите создать дин.блок деления отрезка блоками andery Динамические блоки 4 19.01.2010 16:15