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

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

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

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

Подскажите можно ли как то решить следующую проблему.
Регулярно приходится чертить линии которые должны быть короче или длиннее заданного растояния на определенное количество единиц, обычно на 100. Например, есть стена до нее черчу линию, а потом ее нужно удилннять либо укорачивать на 100 единиц. Можно ли как-то автоматизировать этот процесс.
С сеткой всего скорее не получиться, т.к. работать приходится на архитектурных планах, которые трудно подогнать под сетку.
Просмотров: 10188
 
Непрочитано 20.06.2008, 10:02
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Посмотри сюда:
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=19521dI
Profan вне форума  
 
Автор темы   Непрочитано 20.06.2008, 11:16
#3
Seryj_Wolk

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


Цитата:
Сообщение от Profan Посмотреть сообщение
Благодарю, а как это все в автокаде реализовать, не подскажешь, а то я в этом деле полный Profan =)))
Seryj_Wolk вне форума  
 
Непрочитано 20.06.2008, 11:21
#4
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Все хорошо расписано здесь:
http://dwg.ru/art/8
P.S. Только не надо себя отождествлять с Profan.
Profan вне форума  
 
Автор темы   Непрочитано 20.06.2008, 11:28
#5
Seryj_Wolk

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


благодарю, с этим я уже разобрался. Интерисует, как все это дело сделать в виде кнопочки.
и еще одна проблема. Эта команда удлиняет линию на заданное значение сразу с двух сторон, а нужно только с одной, это возможно?
С кнопкой тоже разобрался. С командой помогите.

Последний раз редактировалось Seryj_Wolk, 20.06.2008 в 11:41.
Seryj_Wolk вне форума  
 
Непрочитано 20.06.2008, 11:41
#6
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Только с одной стороны:
Код:
[Выделить все]
 
(defun C:L_L ( / delta flag ob line)
    (setvar "CMDECHO" 0)
    (setq delta (getreal "\n Величина удлинения линии (ENTER-отказ): "))
    (if delta
        (progn
        (setq flag T)
        (while flag
        (setq ob (entsel "\n Выберите отрезок (ENTER-завершить): "))
        (if ob
            (progn
            (setq line (entget (car ob)))
                  (if (= (cdr (assoc 0 line)) "LINE")
                  (command "_LENGTHEN" "_delta" delta ob "")
                  ); if
             ); progn
                  (setq flag nil)
          ); if
        ); while
        ); progn
        (princ "\n Отказ.")
    ); if
(princ)
)
Profan вне форума  
 
Автор темы   Непрочитано 20.06.2008, 11:58
#7
Seryj_Wolk

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


Это, к сожалению не то. Удлиняется готовый отрезок заданной длины, что гораздо быстрее сделать мышкой. А нужно чтобы при начертании отрезка он удлинялся (или укорачивался) на заданную длину в одном направлении (в котором он чертится). Вообщем все как по первой ссылке, но там отрезок удлинняется сразу с 2ух сторон. А с одной реально?
Seryj_Wolk вне форума  
 
Автор темы   Непрочитано 20.06.2008, 12:09
#8
Seryj_Wolk

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


Код:
[Выделить все]
;***********l_line.lsp — Отрисовка отрезка с последующим
;                        удлинением его на заданную величину.
;   Freeware. Автор Владимир Громов. Август 2005 г.
;             Небольшая правка. Александр Ривилис.
;   Если величину удлинения задать со знаком минус (-), то
;   вместо удлинения получим укорочение.

(defun C:L_LINE ( / p1 p2 flag_begin delta)
  (setvar "CMDECHO" 0)
  (if (null (numberp L_LINE_DELTA_EXTEND)) (progn
    ;; Задаем начальное значение для удлинения
    (setq L_LINE_DELTA_EXTEND 3.0)
  )) ;; (if (progn
  (while (null flag_begin)
    (initget 128 "У U _ U U")
    (setq p1 (getpoint (strcat "\nНачальная точка линии [Удлинение <"
          (rtos L_LINE_DELTA_EXTEND 2 0)
          ">] (ENTER — завершение): "))
    )
    (cond
      ((= p1 "U")
        (setq delta (getdist (strcat "\nУдлинение <" (rtos L_LINE_DELTA_EXTEND 2 0) ">: ")))
        (if delta (setq L_LINE_DELTA_EXTEND delta))
      )
      ((and (= (type p1) 'STR) (distof p1))
       (setq L_LINE_DELTA_EXTEND (distof p1))
      )
      (T
       (setq flag_begin T)
      )
    ) ;; (cond

  ) ;; endof (while

  (if p1 (progn
    (initget 6)
    (setq p2 (getpoint p1 "\nКонечная точка линии: "))
    (command "_.LINE" "_none" p1 "_none" p2 "")
    (command "_.LENGTHEN" "_delta" L_LINE_DELTA_EXTEND
              "_none" (list (entlast) p1)
              "_none" (list (entlast) p2) "")
  ))
  (princ)
)
вот, но это с 2ух сторон

http://www.caduser.ru/cgi-bin/f1/board.cgi?t=19521dI отсюда

Последний раз редактировалось Кулик Алексей aka kpblc, 20.06.2008 в 13:24.
Seryj_Wolk вне форума  
 
Непрочитано 20.06.2008, 12:14
#9
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Мой вариант (отрисовка линии с удлинением с конечной стороны):
Код:
[Выделить все]
 
(defun C:L_LINE ( / tn tk delta flag)
    (setvar "CMDECHO" 0)
    (setq delta (getreal "\n Величина удлинения линии (ENTER-отказ): "))
    (if delta
        (progn
        (setq flag T)
        (while flag
        (initget 6)
        (setq tn (getpoint "\n Начальная точка линии (ENTER-завершение): "))
              (if tn
                  (progn
                  (setq tk (getpoint tn "\n Конечная точка линии: "))
                  (command "_LINE" tn tk "")
                  (command "_LENGTHEN" "_delta" delta tk "")
                  ); progn
                  (setq flag nil)
              ); if
        ); while
        ); progn
        (princ "\n Отказ.")
    ); if
(princ)
)
Profan вне форума  
 
Автор темы   Непрочитано 20.06.2008, 12:19
#10
Seryj_Wolk

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


благодарю, работает пока отлично, а усовершенствовать можешь?
Seryj_Wolk вне форума  
 
Непрочитано 20.06.2008, 12:23
#11
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Не гарантирую.
Profan вне форума  
 
Автор темы   Непрочитано 20.06.2008, 12:33
#12
Seryj_Wolk

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


Если тебе не трудно, попробуй сделать так чтобы было как в примере. Вводилась сначала длина при нажатии буквы У, и потом она сохранялась по умолчанию. А не так чтобы ее нужно было прописывать каждый раз.
И возможноли сделать, чтобы не нужно было каждый раз вводить команду, а за начальную точку принималась конечная точка предыдущего отрезка. Вобщем как стандартная команда отрезок. Попытаться не мог бы?
Seryj_Wolk вне форума  
 
Непрочитано 20.06.2008, 13:03
#13
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Не знаю. Ленивый я стал...
Profan вне форума  
 
Автор темы   Непрочитано 20.06.2008, 13:28
#14
Seryj_Wolk

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


Народ, кто-нибудь еще сталкивался с это й проблемой, есть у кого-то что-нибудь?
Seryj_Wolk вне форума  
 
Непрочитано 20.06.2008, 17:17
#15
alex_AW

КЖ
 
Регистрация: 23.03.2005
С-Пб
Сообщений: 79


Я в таких случаях пользуюсь объектной привязкой со смещением.

Опа... Пардон. С первого разу не разглядел, что вопрос по програмированию.

Последний раз редактировалось alex_AW, 20.06.2008 в 17:35.
alex_AW вне форума  
 
Автор темы   Непрочитано 23.06.2008, 09:10
#16
Seryj_Wolk

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


Цитата:
Сообщение от alex_AW Посмотреть сообщение
Я в таких случаях пользуюсь объектной привязкой со смещением.

Опа... Пардон. С первого разу не разглядел, что вопрос по програмированию.
а это как? может и без программирования обойтися можно
Seryj_Wolk вне форума  
 
Непрочитано 23.06.2008, 09:30
#17
SMI

конструктор Лего
 
Регистрация: 14.04.2008
Санкт-Петербург
Сообщений: 104
Отправить сообщение для SMI с помощью AIM


Цитата:
Сообщение от Seryj_Wolk Посмотреть сообщение
а это как? может и без программирования обойтися можно
а простая кнопочка в панели с командами автокада...хотя нет, там еще линию надо чертить до которой это все чертить надо....
есть вариант с кнопочкой удлинить.....работает и не только для отрезков....
ну еще можно просто потянуть за конец и ввести нужную длину полную для полилинии, а для отрезка просто длину на которую надо увеличить или уменьшить....

ЗЫ. Названий официальных этих команд не знаю, так что объянила как смогла.....пыталась попонятнее написать)))))
__________________
Нет ничего такого, что может быть лучше чем нормально.....
SMI вне форума  
 
Непрочитано 23.06.2008, 10:01
#18
zamtmn

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


По моему в идеале было бы -
рисуем линию как обычно;
нажимаем контрол, тыкаем вторую точку - получаем удлинненную линию, следующая линия начинается из удлиненной точки;
нажимаем контрол+чето еще, тыкаем вторую точку - получаем укороченную линию, следующая линия начинается из укороченной точки;
если ниче не жмем, линии рисуются как обычно
или бругие кнопки заюзать, которые в лиспе удобней обрабатывать. ну и чтоб длину вылета\недострела можно было не выходя из команды менять

Последний раз редактировалось zamtmn, 23.06.2008 в 10:16.
zamtmn вне форума  
 
Автор темы   Непрочитано 23.06.2008, 12:24
#19
Seryj_Wolk

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


Цитата:
Сообщение от SMI Посмотреть сообщение
а простая кнопочка в панели с командами автокада...хотя нет, там еще линию надо чертить до которой это все чертить надо....
есть вариант с кнопочкой удлинить.....работает и не только для отрезков....
ну еще можно просто потянуть за конец и ввести нужную длину полную для полилинии, а для отрезка просто длину на которую надо увеличить или уменьшить....

ЗЫ. Названий официальных этих команд не знаю, так что объянила как смогла.....пыталась попонятнее написать)))))
да вообщето суть вопроса и стоит в том, чтобы каждый раз вот так вот не делать =)))
Цитата:
Сообщение от zamtmn Посмотреть сообщение
По моему в идеале было бы -
рисуем линию как обычно;
нажимаем контрол, тыкаем вторую точку - получаем удлинненную линию, следующая линия начинается из удлиненной точки;
нажимаем контрол+чето еще, тыкаем вторую точку - получаем укороченную линию, следующая линия начинается из укороченной точки;
если ниче не жмем, линии рисуются как обычно
или бругие кнопки заюзать, которые в лиспе удобней обрабатывать. ну и чтоб длину вылета\недострела можно было не выходя из команды менять
да, это было бы вообще круто, только ктобы это еще смог в жизнь воплотить...
Seryj_Wolk вне форума  
 
Непрочитано 23.06.2008, 13:02
#20
alex_AW

КЖ
 
Регистрация: 23.03.2005
С-Пб
Сообщений: 79


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

В результате получим первую точку линии, отстоящую от указанной точки на заданную величину.
и т.д.
Изображения
 

Последний раз редактировалось alex_AW, 23.06.2008 в 13:15.
alex_AW вне форума  
Ответ
Вернуться   Форум 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