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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Как показать стрелкой направление уклона в коде AutoCAD 2012 ?

LISP. Как показать стрелкой направление уклона в коде AutoCAD 2012 ?

Ответ
Поиск в этой теме
Непрочитано 11.04.2012, 13:26 #1
LISP. Как показать стрелкой направление уклона в коде AutoCAD 2012 ?
yuryx
 
геодезия
 
г. Москва
Регистрация: 08.04.2012
Сообщений: 8

Как показать стрелкой направление уклона в коде. Модеь 2D.
Рисует стрелку уклона по ходу от задней точки к передней .
Как настроить чтобы не зависимо от хода сткелка показывала направление уклона.
Всё необходимое настроить, добавить,обернуть можно без труда.
Очень простой код. Как выкладывать в сообщении я не умею. Мне бы видео как пользоватся.
Вот этот код:

Код:
[Выделить все]
 (defun C:test_Slope_2D () 
(while
  (setvar "cmdecho" 0)
 (setq a (atof (cdr (assoc 1 (entget (car
          (entsel "\Select text pt1:"))))))) 
 (setq b (atof (cdr (assoc 1 (entget (car
          (entsel "\Select text pt2:"))))))) 
 (setq pt1 (getpoint "\nSelect pt1:"))
 (setq pt2 (getpoint pt1 "\nSelect pt2:"))
  (setvar "osmode" 0)
 (setq ugol (angle pt1 pt2))
 (setq alfa (* (/ 180 pi) ugol))
    (if (> alfa 180) 
 (setq alfat (+ alfa 180))
 (setq alfat alfa)) 
 (setq d (abs (distance pt1 pt2)))
 (setq place (polar pt1 ugol (/ d 2)))
 (setq a 15)
     (vl-cmdf "_.pline"
              (polar place (+ ugol pi) (* 4 a))
              (polar place ugol (* 4 a)) "") 
     (vl-cmdf "_.pline"
              (polar (polar place ugol (* 4 a))
              (+ ugol (* (/ 180 pi) 30)) (* 1.5 a))
              (polar place ugol (* 4 a))
              (polar (polar place ugol (* 4 a))
              (- ugol (* (/ 180 pi) 30)) (* 1.5 a)) "")
 (setq ti (* (/ (- a b) d) 1000))
 (setq stri (if (>= ti 0)
             (strcat "\n"  "+" (rtos ti 2 0))
             (strcat "\n"      (rtos ti 2 0))))
 (vl-cmdf "_text" "_J" "_bl" place a alfat stri)
 (setq strd (strcat "\n" (rtos  d 2 0))) 
 (vl-cmdf "_text" "_J" "_tl" place a alfat strd)
 ) ;_  while
 (setvar "cmdecho" 1)
 (princ)
) ;_  defun
(princ "\n Type then:   test_Slope_2D  ")
Просмотров: 3300
 
Непрочитано 11.04.2012, 13:36
1 | #2
Do$

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


Цитата:
Сообщение от yuryx Посмотреть сообщение
Мне бы видео как пользоватся.
Offtop: Вот оно:
Видео
Do$ вне форума  
 
Непрочитано 12.04.2012, 11:21
1 | #3
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Если я правильно понял, то отметки в текстах, который указываешь, тогда:
добавь в локальные переменные flagc, вместо строк 04-07:
Код:
[Выделить все]
 (or    (> (setq a (atof (cdr (assoc 1 (entget (car (entsel "\Select text pt1:")))))))
       (setq b (atof (cdr (assoc 1 (entget (car (entsel "\Select text pt2:"))))))))
      (setq flagc a a b b flagcc))
и после строки 09:
Код:
[Выделить все]
 (and flagc (setq flagc pt1 pt1 pt2 pt2 flagc))
для правильного направления стрелки необходимо попарное соответствие a - pt1, b - pt2.
И, yuryx, объявляй переменные, которые используешь в коде, локальными, иначе при совпадении имен, тебя ждет масса неприятных сюрпризов в работе, то есть для этой функции:
Код:
[Выделить все]
 (defun C:test_Slope_2D (/ a b flagc pt1 pt2 ugol alfa alfat d place ti stri strd) ...

Последний раз редактировалось ciril, 12.04.2012 в 12:31.
ciril вне форума  
 
Автор темы   Непрочитано 12.04.2012, 23:47 LISP. Как показать стрелкой направление уклона в коде AutoCAD 2012 ?
#4
yuryx

геодезия
 
Регистрация: 08.04.2012
г. Москва
Сообщений: 8


Что такое flagc и для чего я пока незнаю.

Указанные отметки в текстах- это загруженные с точкой на 2D модели абсолюдные или
относительные высотные отметки поверхности = координате Z данной точки.

"Для правильного направления стрелки необходимо попарное соответствие a - pt1, b - pt2."- Как это понимать?

Если а < в < c как написать на языке lisp. Аналогов я не видел. Наверное мне это поможет.

Код

(defun C:test2_Slope_2D
(/ ta tb flagc pt1 pt2 ugol alfa alfat d place ti stri strd)
(setq a (getstring "\nSelect высоту текста <15>"))
(if (= a " ")
(setq a "15")) ;_ if
(setq a (atof a))
(while ;(or
(setq ta (atof (cdr (assoc 1 (entget (car (entsel "\Select text pt1:")))))))
(setq tb (atof (cdr (assoc 1 (entget (car (entsel "\Select text pt2:")))))))
; (setq flagc ta ta tb tb flagcc))
(setvar "osmode" 8)
(setq pt1 (getpoint "\nSelect pt1:"))
(setq pt2 (getpoint pt1 "\nSelect pt2:"))
; (and flagc (setq flagc pt1 pt1 pt2 pt2 flagc))
(setvar "osmode" 0)
(setq ugol (angle pt1 pt2))
(setq alfa (* (/ 180 pi) ugol))
(if (> alfa 0)
(setq alfat alfa)
(setq alfat (+ alfa 180)))
(setq d (abs (distance pt1 pt2)))
(setq pl (polar pt1 ugol (/ d 2)))
(vl-cmdf "_.pline"
(polar pl (+ ugol pi) (* 4 a))
(polar pl ugol (* 4 a))
"")
(vl-cmdf "_.pline"
(polar (polar pl ugol (* 4 a)) (+ ugol (* (/ 180 pi) 30)) (* 1.5 a))
(polar pl ugol (* 4 a))
(polar (polar pl ugol (* 4 a)) (- ugol (* (/ 180 pi) 30)) (* 1.5 a))
"")
(setq ti (* (/ (- ta tb) d) 1000))
(setq stri (if (>= ti 0)
(strcat "\n" "+" (rtos ti 2 0))
(strcat "\n" (rtos ti 2 0))))
(setq strd (strcat "\n" (rtos d 2 0)))
(vl-cmdf "_-style" "250" "Arial" "" "" "" "" "")
(setq placei (polar (polar pt1 ugol (/ d 2)) (+ ugol (/ pi 2)) (* 0.75 a)))
(vl-cmdf "_text" "_J" "_mc" placei a alfat stri)
(setq placed (polar (polar pt1 ugol (/ d 2)) (- ugol (/ pi 2)) (* 0.75 a)))
(vl-cmdf "_text" "_J" "_mc" placed a alfat strd)) ;_ while
(setvar "cmdecho" 1)
(princ)) ;_ defun
(princ "\n Type then: test2_Slope_2D ")
yuryx вне форума  
 
Непрочитано 13.04.2012, 11:07
#5
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


flagc - переменная, которой сохраняется значение а для последующего присвоения ее b.
[quote=ciril;904535]
Код:
[Выделить все]
 (or    (> (setq a (atof (cdr (assoc 1 (entget (car (entsel "\Select text pt1:")))))))
       (setq b (atof (cdr (assoc 1 (entget (car (entsel "\Select text pt2:"))))))))
      (setq flagc a a b b flagcc))
Так как в коде ниже у тебя а - меньшая отметка, то смысл этого кода в том, что производится сравнение отметок a и b, и если а<b, то a приравнивается b через переменную flagc, b приравнивается a.
Попарное соответствие: твои pt1 и pt2 - точки, задающие начало и конец стрелки, изначально тебе было необходимо, чтобы направление стрелки не зависело от порядка указания точек, для этого и нужно, чтобы при указании pt1 располагалось рядом с а, pt2 - с b, тогда:
Код:
[Выделить все]
 (and flagc (setq flagc pt1 pt1 pt2 pt2 flagc))
при наличии значения у flagc, а ей присваивается значение, если a<b, точки pt1=pt2, pt2=pt1 через flagc, таким образом у тебя направление стрелки всегда в сторону уклона.
ciril вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Как показать стрелкой направление уклона в коде AutoCAD 2012 ?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интеграция Autodesk СПДС в AutoCAD 2012 bolotov Прочее. Программное обеспечение 24 07.01.2013 20:22
Autocad 2012 перевод надписи рамки R8D8 AutoCAD 3 06.05.2011 04:38
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. hwd Баги и пожелания в Autodesk 21 21.04.2010 20:27
Информация по идентификационным кодам программ в сетевых лицензиях Autodesk KSI AutoCAD 1 14.09.2009 15:59