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

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

Создание более длинных линий

Ответ
Поиск в этой теме
Непрочитано 20.06.2008, 09:49
Создание более длинных линий
Seryj_Wolk
 
Инженер-электрик
 
Псков
Регистрация: 04.03.2008
Сообщений: 59

Подскажите можно ли как то решить следующую проблему.
Регулярно приходится чертить линии которые должны быть короче или длиннее заданного растояния на определенное количество единиц, обычно на 100. Например, есть стена до нее черчу линию, а потом ее нужно удилннять либо укорачивать на 100 единиц. Можно ли как-то автоматизировать этот процесс.
С сеткой всего скорее не получиться, т.к. работать приходится на архитектурных планах, которые трудно подогнать под сетку.
Просмотров: 10409
 
Автор темы   Непрочитано 23.06.2008, 13:23
#21
Seryj_Wolk

Инженер-электрик
 
Регистрация: 04.03.2008
Псков
Сообщений: 59


Цитата:
Сообщение от alex_AW Посмотреть сообщение
Если без програмирования, то порядок дейсвий такой:
1- Выбираем команду (_line)
2- На панели объектных привязок или в контекстном меню (shift+ правая кнопка) выбираем привязку со смещением
3- Указываем щелчком базовую точку, смещаем курсор в требуемом направлении и вводим с клавиатуры величину смещения (100).

В результате получим первую точку линии, отстоящую от указанной точки на заданную величину.
и т.д.
респект, не знал такого
Seryj_Wolk вне форума  
 
Непрочитано 23.06.2008, 18:00
#22
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>да, это было бы вообще круто, только ктобы это еще смог в жизнь воплотить...
Уважаемые лисповцы и арикссовцы, не не проходите мимо, этим вы здорово облегчите жизнь тем кто кладет свои коммуникации вдоль стенок, вам будет респект и уважуха))
zamtmn вне форума  
 
Непрочитано 25.06.2008, 00:28
#23
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


zamtmn, Если я правильно все понял
Код:
[Выделить все]
;;;
;;;Теперь на запрос " Конечная точка линии или (+ - 0) [уДлинить/уКоротить/Ноль] <выход>: "
;;;Можно набирать с клавиатуры:+ (удлинить); - (укоротить); 0 (сбросить на 0)
(defun C:LL ( / tn tk delta flag)
  (setvar "CMDECHO" 0)
  (if (null *LL_LENGTH*)(setq *LL_LENGTH* (getvar "USERR5")))
  (princ "\nАбсолютная величина удлинения линии < ")
  (princ *LL_LENGTH*)(princ " >: ")
  (initget "Удлинение Length _L L")
  (if (null(setq delta (getdist)))(setq delta *LL_LENGTH*))
  (setvar "USERR5" (setq *LL_LENGTH* delta))
  (initget 1)
  (setq tn (getpoint "\n Начальная точка линии : "))
  (setvar "USERR4" 0)
  (initget "уДлинить уКоротить Ноль + - 0 = _+ - 0 + - 0 +")
  (while
    (progn
      (princ "\nТекущее удлинение = ")(princ (getvar "USERR4"))(princ " ")
    (setq tk (getpoint tn " Конечная точка линии или (+ - 0) [уДлинить/уКоротить/Ноль] <выход>: "))
    )
    (cond
      ((= tk "0")(setvar "USERR4" 0))
      ((or (= tk "+")(= tk "="))(setvar "USERR4" (abs(getvar "USERR5"))))
      ((= tk "-")(setvar "USERR4" (* -1.0 (abs(getvar "USERR5")))))
      ((listp tk)
       (setq tk (polar tn (angle tn tk)(+ (distance tn tk) (getvar "USERR4"))))
       (command "_.LINE" "_non" tn "_non" tk "")
       (setq tn tk)
       )
       (t nil)
      )
  (initget "уДлинить уКоротить Ноль + - 0 = _+ - 0 + - 0 +")
    )
  (princ)
  )
По поводу "нажал ctrl - +100" "отпустил ctrl - 0" можно задействовать клавиши временной замены. Там можно вставлять макросы на нажатие и отпускание клавиши. В команде абсолютное значение хранится в пользовательской переменной USERR5 (например 100), а текущее - в переменной USERR4 (например 100, 0 , -100)
Макросы могут быть такого вида:
для увеличения нажатие - (setvar "USERR4" (abs(getvar "USERR5")))
для увеличения отпуск - (setvar "USERR4" 0)
для уменьшения нажатие - (setvar "USERR4" (* -1.0 (abs(getvar "USERR5"))))
для уменьшения отпуск - (setvar "USERR4" 0)
Завтра попробую. Должно получится
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 25.06.2008 в 12:25. Причина: Модификация
VVA вне форума  
 
Непрочитано 25.06.2008, 01:18
#24
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


С помощью клавиш временной замены не получилось, остается с помощью опций
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 25.06.2008, 09:05
#25
Seryj_Wolk

Инженер-электрик
 
Регистрация: 04.03.2008
Псков
Сообщений: 59


Цитата:
Сообщение от VVA Посмотреть сообщение
С помощью клавиш временной замены не получилось, остается с помощью опций
большущий респект тебе. Ты не представляешь как помог. Этот код уже супер, там в принципе и клавиши не нужны. С клавишами цены ему не будет =)))

Последний раз редактировалось Seryj_Wolk, 25.06.2008 в 09:10.
Seryj_Wolk вне форума  
 
Непрочитано 25.06.2008, 09:44
#26
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


VVA
Огромное спасибо! работает.
В лиспе больше нет возможности организовать диалог с пользователем во время работы кроме как командная строка? может можно не модальное окошко вывести с парой чекбоксов если с клавиатурой невыходит?
zamtmn вне форума  
 
Непрочитано 25.06.2008, 12:09
#27
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Немного модифицировал #23 Теперь в ответ на запрос
" Конечная точка линии или (+ - 0) [уДлинить/уКоротить/Ноль] <выход>: "
Можно набирать с клавиатуры:
  • + (удлинить)
  • - (укоротить)
  • 0 (сбросить на 0)
Если задействовать numpad получается быстрее
zamtmn, Организовать диалог в Лиспе можно с помощью диалоговых окон (DCL). Однако в плане организации диалога DCL остался на примитивном уровне. Как говорится: "Овчинка выделки не стоит".
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 25.06.2008, 12:14
#28
Seryj_Wolk

Инженер-электрик
 
Регистрация: 04.03.2008
Псков
Сообщений: 59


Цитата:
Сообщение от VVA Посмотреть сообщение
Немного модифицировал #23 Теперь в ответ на запрос
" Конечная точка линии или (+ - 0) [уДлинить/уКоротить/Ноль] <выход>: "
Можно набирать с клавиатуры:
  • + (удлинить)
  • - (укоротить)
  • 0 (сбросить на 0)
Если задействовать numpad получается быстрее
zamtmn, Организовать диалог в Лиспе можно с помощью диалоговых окон (DCL). Однако в плане организации диалога DCL остался на примитивном уровне. Как говорится: "Овчинка выделки не стоит".
вообще круто =)))
а можешь сделать версию где вместо + нужно нажимать =, так удобнее для меня. Или лучше скажи что нужно поменять. Просто везде заменить + на =???
Seryj_Wolk вне форума  
 
Непрочитано 25.06.2008, 12:18
#29
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Seryj_Wolk, Нужный текст в #23 выделил красным. Осталось везде аккуратно заменить + на =. Но мне кажется использовать NumPAD (это там, где клавиша Num Lock) гораздо удобнее.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 25.06.2008, 12:21
#30
Seryj_Wolk

Инженер-электрик
 
Регистрация: 04.03.2008
Псков
Сообщений: 59


Цитата:
Сообщение от VVA Посмотреть сообщение
Seryj_Wolk, Нужный текст в #23 выделил красным. Осталось везде аккуратно заменить + на =. Но мне кажется использовать NumPAD (это там, где клавиша Num Lock) гораздо удобнее.
благодарю.
Насчет нумпада согласен, но если работаешь не на ноутбуке
Seryj_Wolk вне форума  
 
Непрочитано 25.06.2008, 12:27
#31
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Seryj_Wolk Посмотреть сообщение
благодарю.
Насчет нумпада согласен, но если работаешь не на ноутбуке
Еще раз модифицировал #23. Тепеть + и = воспринимаются как +
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 25.06.2008, 13:24
#32
Seryj_Wolk

Инженер-электрик
 
Регистрация: 04.03.2008
Псков
Сообщений: 59


Цитата:
Сообщение от VVA Посмотреть сообщение
Еще раз модифицировал #23. Тепеть + и = воспринимаются как +
еще раз благодарю
Seryj_Wolk вне форума  
 
Непрочитано 25.06.2008, 18:23
#33
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


VVA
т.е. от нажатия enter никак не уйти?
zamtmn вне форума  
 
Непрочитано 25.06.2008, 19:40
#34
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


По крайней мере я не знаю как. Есть еще вариант с grread, но признанный мастер в этой области Евгений Елпанов.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 25.06.2008, 23:26
#35
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


Попробовал соорудить нечто с grread. В принципе у меня работает.
Код:
[Выделить все]
;;;Теперь на запрос " Конечная точка линии или (+ - 0) [уДлинить/уКоротить/Ноль] <выход>: "
;;;Можно набирать с клавиатуры:+ (удлинить); - (укоротить); 0 (сбросить на 0); Enter - выйти, без подтверждения опции вводом
;;;Минус - работает только привязка к узлам. Привязка не визуализируется.
(defun C:LL ( / tn tk delta flag)
  (setvar "CMDECHO" 0)
  (if (null *LL_LENGTH*)(setq *LL_LENGTH* (getvar "USERR5")))
  (princ "\nАбсолютная величина удлинения линии < ")
  (princ *LL_LENGTH*)(princ " >: ")
  (initget "Удлинение Length _L L")
  (if (null(setq delta (getdist)))(setq delta *LL_LENGTH*))
  (setvar "USERR5" (setq *LL_LENGTH* delta))
  (initget 1)
  (setq tn (getpoint "\n Начальная точка линии : "))
  (setvar "USERR4" 0)
  (while
    (progn
      (princ "\nТекущее удлинение = ")(princ (getvar "USERR4"))(princ " ")
      (princ "\n Конечная точка линии или (+ - 0) [уДлинить/уКоротить/Ноль] <выход>: ")
      (while
	(progn
	  (setq tk (grread t 4 0))
	  (redraw)
	  (cond
	    ((= (cadr tk) 13) (not (setq tk "enter")))
	    ((= (cadr tk) 43) (not (setq tk "+")))
	    ((= (cadr tk) 45) (not (setq tk "-")))
	    ((= (cadr tk) 48) (not (setq tk "0")))
	    ((and (listp (cadr tk)) (= (car tk) 3)) (not (setq tk (if (osnap (cadr tk) "_end")
					                            (osnap (cadr tk) "_end")
					                            (cadr tk)
					                          ))))
	    (t (not (grdraw tn (cadr tk) 3 1)))
	  )
	)
      )
      (if (= "enter" tk) nil t)
    )
    (cond
      ((= tk "0")(setvar "USERR4" 0))
      ((or (= tk "+")(= tk "="))(setvar "USERR4" (abs(getvar "USERR5"))))
      ((= tk "-")(setvar "USERR4" (* -1.0 (abs(getvar "USERR5")))))
      ((listp tk)
       (setq tk (polar tn (angle tn tk)(+ (distance tn tk) (getvar "USERR4"))))
       (command "_.LINE" "_non" tn "_non" tk "")
       (setq tn tk)
       )
       (t nil)
      )
  (initget "уДлинить уКоротить Ноль + - 0 = _+ - 0 + - 0 +")
    )
  (princ)
  )
Donhuan вне форума  
 
Непрочитано 26.06.2008, 02:29
#36
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Donhuan, Все верно, только на мой взгляд потерь больше (визуализация привязки, полярная трассировка, горячие клавиши F8 например) чем приобретений (не нужно жать enter)
Возникла идея задействовать для этих целей левую руку, и клавишу пробел вместо enter. Для того, чтобы не тянуться за определенными кнопками для позиций + - 0 выделены ряды кнопок (на клаве из как раз 3)
Итак:
+ - равносильно нажатию любой кнопки из ряда QWERTY в любой раскладке
- - равносильно нажатию любой кнопки из ряда ZXCVBN в любой раскладке
0 - все остальное (ASDFGH и цифры)
И сама реализация
Код:
[Выделить все]
;;;
;;;Теперь на запрос " Конечная точка линии или (+ - 0) [уДлинить/уКоротить/Ноль] <выход>: "
;;;Можно набирать с клавиатуры:+ (удлинить); - (укоротить); 0 (сбросить на 0)
(defun C:LL ( / tn tk delta lst_+ lst_- )
  (setvar "CMDECHO" 0)
  (setq lst_+ '("+" "=" "Q" "W" "E" "R" "T" "Y" "U" "I" "O" "P" "{" "}" "[" "]"
		"Й" "Ц" "У" "К" "Е" "Н" "Г" "Ш" "Щ" "З" "Х" "Ъ"))
  (setq lst_- '("-" "Z" "X" "C" "V" "B" "N" "M" "," "." "/" "<" ">" "?" 
		"Я" "Ч" "С" "М" "И" "Т" "Ь" "Б" "Ю"))
  (if (null *LL_LENGTH*)(setq *LL_LENGTH* (getvar "USERR5")))
  (princ "\nАбсолютная величина удлинения линии < ")
  (princ *LL_LENGTH*)(princ " >: ")
  (initget "Удлинение Length _L L")
  (if (null(setq delta (getdist)))(setq delta *LL_LENGTH*))
  (setvar "USERR5" (setq *LL_LENGTH* delta))
  (initget 1)
  (setq tn (getpoint "\n Начальная точка линии : "))
  (setvar "USERR4" 0)
  (initget 128 "уДлинить уКоротить Ноль + - 0 = _+ - 0 + - 0 +")
  (while
    (progn
      (princ "\nТекущее удлинение = ")(princ (getvar "USERR4"))(princ " ")
    (setq tk (getpoint tn " Конечная точка линии или (+ - 0) [уДлинить/уКоротить/Ноль] <выход>: "))
    )
    (cond ((and (= (type tk) 'STR) ;_  +
		(setq tk (substr (strcase tk) 1 1))
		(member tk lst_+)
		)
	   (setvar "USERR4" (abs(getvar "USERR5")))
	   )
	  ((and (= (type tk) 'STR) ;_  -
		(setq tk (substr (strcase tk) 1 1))
		(member tk lst_-)
		)
	   (setvar "USERR4" (* -1.0 (abs(getvar "USERR5")))))
	  ((listp tk)
	   (setq tk (polar tn (angle tn tk)(+ (distance tn tk) (getvar "USERR4"))))
	   (command "_.LINE" "_non" tn "_non" tk "")
	   (setq tn tk)
	   )
	  (t (setvar "USERR4" 0)))
  (initget 128 "уДлинить уКоротить Ноль + - 0 = _+ - 0 + - 0 +")
    )
  (princ)
  )
PS Старый вариант через опции или 0 + - тоже остался
PPS Потестировал с левой рукой. Получалось работать не глядя на клавиатуру.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 26.06.2008 в 02:31. Причина: Добавление
VVA вне форума  
 
Непрочитано 26.06.2008, 08:11
#37
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


VVA, я прочитал посты, мне показалось что этот лисп нужен для прорисовки осей элементов, но почему первая точка линии не удлиняется, после выполнения удлинения со второй точкой, мы можем знать направление удлинения первой, хотел спросить можно ли привязать к масштабу чертежа это удлиннение, если да, то лисп имеет место быть, если не, то не имеет

Что я имел ввиду что для каждого масштаба свое удлинение, можно просто вставить коэфициент удлинения к примеру...
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 26.06.2008, 08:12
#38
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


Seryj_Wolk, а в электрике где можно использовать данный лисп?
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 26.06.2008, 08:55
#39
Seryj_Wolk

Инженер-электрик
 
Регистрация: 04.03.2008
Псков
Сообщений: 59


2 dextron3
не нужно ничего удлинять с 2ух сторон. Цель изначально была: удлинение с одной стороны без всяких масштабов на заданное количество единиц.
Благодаря этому лиспу скорость работы по начертанию электропроводок вдоль стен возрастет, считаю, раза в 2 как минимум (особенно если много поворотов). Если ты никогда не сталкивался с такой задачей, то ты врятли поймешь все удобство этого лиспа =))). Если нужно, то на удлинение начальной точки есть ссылка в начале темы.

2 VVA
вообще отлично!!!
Seryj_Wolk вне форума  
 
Непрочитано 26.06.2008, 09:06
#40
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Donhuan
спасибо, но действительно без трассировки/привязки неполучится работать
VVA
последний вариант самый приемлимый, получается быстро переключать режимы
dextron3
В электрике - класть кабеля вдоль стенок с отступом
zamtmn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание более длинных линий



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового типа линий Apelsinov AutoCAD 915 08.07.2022 12:36
Армирование монолитных колонн Assol Железобетонные конструкции 38 08.09.2016 19:10
Виснет компьютер при обработке длинных списков mmax Программирование 17 28.10.2010 12:17
Создание типа линий для обозначения кабелей связи Geon AutoCAD 1 04.11.2007 10:02