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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > breakline

breakline

Ответ
Поиск в этой теме
Непрочитано 22.08.2007, 14:08 #1
breakline
Hans667
 
сети
 
SPb
Регистрация: 12.04.2007
Сообщений: 539

Счастливчики,обладающие меню Express имеют возможность пользоваться и сей командой.Вопрос следущий:как поменять параметры?Т.е. ну чтобы масштаб там допустим и цвет может...я так понимаю что вставляется блок какой то?
Просмотров: 11712
 
Непрочитано 22.08.2007, 15:15
#2
Кочетков Андрей

Java/Kotlin/Go
 
Регистрация: 03.02.2006
Сообщений: 5,786


Запусти команду и смотри в комстроке ее опции.
Кочетков Андрей вне форума  
 
Автор темы   Непрочитано 22.08.2007, 18:00
#3
Hans667

сети
 
Регистрация: 12.04.2007
SPb
Сообщений: 539


ну,и....там только полилинии есть свойства..а мне чтоб самого "изделия" маштаб,причем уже навсегда..да и вообще чтоб сразу загружалось уже по вызову команды,зеленая линия такого то размера и толщины..лисп?
Hans667 вне форума  
 
Непрочитано 22.08.2007, 20:39
#4
Кулик Алексей aka kpblc
Moderator

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


Я бы планировал лисп.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.08.2007, 21:44 Re: breakline
#5
PL


 
Регистрация: 23.11.2006
California
Сообщений: 4,750


Цитата:
Сообщение от Hans667
Счастливчики,обладающие меню Express имеют возможность пользоваться и сей командой.Вопрос следущий:как поменять параметры?Т.е. ну чтобы масштаб там допустим и цвет может...я так понимаю что вставляется блок какой то? :(
Я себе вот так сделал:
Код:
[Выделить все]
(defun c:ob()
(setq cl (getvar "clayer"))
(setq ln "s-misc-thin")
(setq r1 (tblsearch "layer" ln))
(if (= r1 nil)
    (vl-cmdf "-LAYER" "M" "s-misc-thin" "C" "9" "" "")
  )
  (setvar "clayer" "s-misc-thin")
(c:breakline)
(setvar "clayer" cl)
)
масштаб - сама эта команда автоматически реагирует на изменение значения dimscale
Что еще желать?
Странный глюк на саите, должно быть c : ob а без пробелов не получается
PL вне форума  
 
Непрочитано 22.08.2007, 21:52
#6
Кулик Алексей aka kpblc
Moderator

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


Я пост подправил, так нормально?
P.S. Это не глюк на сайте. Если текст обрамить тегами code, то смайлы показываться не будут. Кроме того, ниже поля текста есть "галочки" - поставь "Отключить в этом сообщении смайлики".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.08.2007, 22:14
#7
PL


 
Регистрация: 23.11.2006
California
Сообщений: 4,750


понял, спасибо
PL вне форума  
 
Непрочитано 23.08.2007, 07:08
#8
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Попробуйте это, я от него балдею. Вызывается Dragbrk
Код:
[Выделить все]
; DRAGBRK.LSP    Breaklines, " Z " Breaks
; Tip 1028 Cadalyst Oct 1994

(defun C:DRAGBRK (/ PT1 PT2 PT3 PT4 PT5 PT6 PT7 _ORTHO ANG LEG)
   (defun _ortho (PT1 PT / ANG)
      (setq ANG (angle PT1 PT))
      (cond 
         ((or (<= ANG 0.7853) (> ANG 5.4977))
            (polar PT1 0 (distance PT1 PT)) 
         )
         ((and (> ANG 0.7853) (<= ang 2.3561))
            (polar PT1 1.5707 (distance PT1 PT)) 
         )
         ((AND (> ANG 2.3561) (<= ANG 3.9269))
            (polar PT1 3.14159 (distance PT1 PT)) 
         )
         ((and (> ANG 3.9269) (<= ANG 5.4977))
            (polar PT1 4.7124 (distance PT1 PT)) 
         )
      )
   )   
   (setq PT2 nil PT6 nil)
   (while 
      (not
         (setq PT1 (getpoint "\nPick starting point for break: "))
      )
      (prompt "\nInvalid point")
   )   
   (prompt "\nDrag to indicate size and angle of break: ")
   (while 
      (/= (car (setq GR (grread T 19))) 3) 
      (cond
         ((= (car GR) 5)
            (if (/= (car GR) PT1)
               (progn
                  (if PT2
                     (progn
                        (grdraw PT2 PT3 -1)
                        (grdraw PT3 PT4 -1)
                        (grdraw PT2 PT5 -1)
                     )
                  )  
                  (if
                     (= (getvar "orthomode") 0)
                     (setq GR_PT (cadr GR))
                     (setq GR_PT (_ortho PT1 (cadr GR)))
                  )
                  (setq
                     ANG (angle PT1 GR_PT)
                     LEG (distance gr_pt pt1)
                     PT2 (polar PT1 ANG LEG)
                     PT3 (polar PT1 (+ ANG 3.14159) LEG)
                     PT4 (polar PT1 (+ ANG 1.5707) (* LEG 0.4))
                     PT5 (polar PT1 (- ANG 1.5707) (* LEG 0.4))
                  )
                  (grdraw PT2 PT3 -1)
                  (grdraw PT3 PT4 -1)
                  (grdraw PT2 PT5 -1)
               )
            )
         )
         ((= (car GR) 2)
            (if
               (= (cadr GR) 194)
               (if 
                  (= (getvar "orthomode") 1)
                  (progn
                     (setvar "orthomode" 0)
                     (prompt "<Ortho off> ")
                  )   
                  (progn
                     (setvar "orthomode" 1)
                     (prompt "<Ortho on> ")
                  )   
               )   
            )   

         ) 
      )
   )
   (prompt "\nDrag to indicate length of lines: ")
   (while 
      (/= (car (setq GR (grread T))) 3) 
      (if
         (= (car GR) 5)
         (if (/= (car GR) PT1)
            (progn
               (if PT6
                  (progn
                     (grdraw PT4 PT7 -1)
                     (grdraw PT5 PT6 -1)
                  )
                )  
               (setq
                  GR_PT (cadr GR)
                  ANG (angle PT1 PT5)
                  LEG (* (distance GR_PT PT1) 1.4)
                  PT7 (polar PT4 (+ ANG 3.14159) LEG)
                  PT6 (polar PT5 ANG LEG)
               )
               (grdraw PT4 PT7 -1)
               (grdraw PT5 PT6 -1)
            )
         )
      ) 
   )
   ;create new pline using the dragged points
   (entmake 
      '(
         (0 . "POLYLINE")
      )
   )
   (foreach
      vertex
      (list PT7 PT4 PT3 PT2 PT5 PT6)  
      (entmake 
         (list
            '(0 . "VERTEX")
            (cons 10 (list (car VERTEX) (cadr VERTEX)))
         )
      )
   )
   (entmake '((0 . "SEQEND")))
   (princ)
); end dragbrk.lsp
Vova вне форума  
 
Непрочитано 23.08.2007, 08:38
#9
Кулик Алексей aka kpblc
Moderator

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


еще варианты: http://www.autocad.ru/cgi-bin/f1/board.cgi?t=21447of
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.09.2007, 11:47
#10
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,918
<phrase 1=


Еще можно вот так
Создать кнопку и прописать макрос
Код:
[Выделить все]
^C^C_-Insert;Breakline;\;;;_Scale;_Last;;@;\_Rotate;_Last;;@;\_Explode;_Last;Lengthen;_Dy;\\\\;Pedit;_Last;_Join;Pr;;;_Laycur;Last;;
В папку Support закинуть прилагаемый файлик breakline.dwg
(Спасибо В.Свету)
[ATTACH]1189583218.rar[/ATTACH]
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 12.09.2007, 15:33
#11
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Между прочим, макрос из N10 родился глядя как работает лисп из NO 8. У того лиспа одна проблема: надо заранее выставлять Ortho в нужное положение. Можно-ли сделать так, чтобы выставлять ORTHO в процессе?
Vova вне форума  
 
Непрочитано 12.09.2007, 15:56
#12
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,918
<phrase 1=


Цитата:
Сообщение от Vova
Между прочим, макрос из N10 родился глядя как работает лисп из NO 8. У того лиспа одна проблема: надо заранее выставлять Ortho в нужное положение.
не знаю откуда родился, :roll: делал в соотвествии с книгой В. Света.
А еще у лиспа есть проблема неработы в LT-ных версиях. :!:
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 12.09.2007, 16:02
#13
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от zenon
<...>А еще у лиспа есть проблема неработы в LT-ных версиях. :!:
Которая более-менее успешно решается LT-Extender'ом
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.09.2007, 16:13
#14
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Кулик Алексей aka kpblc
Которая более-менее успешно решается LT-Extender'ом
А это законно?

Ну и до кучи, динблок разрыва:
[ATTACH]1189599221.dwg[/ATTACH]
Krieger вне форума  
 
Непрочитано 12.09.2007, 16:27
#15
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Krieger
Цитата:
Сообщение от Кулик Алексей aka kpblc
Которая более-менее успешно решается LT-Extender'ом
А это законно?<...>
Пока вроде да.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.09.2007, 16:30
#16
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


Еще вариант с Wipeout.
Тряпками прошу не кидаться - делал под свои извратные цели.. :roll:
[ATTACH]1189600454.dwg[/ATTACH]
Nike вне форума  
 
Непрочитано 12.09.2007, 17:36
#17
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,918
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc
Цитата:
Сообщение от zenon
<...>А еще у лиспа есть проблема неработы в LT-ных версиях. :!:
Которая более-менее успешно решается LT-Extender'ом
Эээээээ панимаеш. Моя мало мало неумей.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 12.09.2007, 19:51
#18
Кулик Алексей aka kpblc
Moderator

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


http://dwg.ru/forum/viewtopic.php?p=166851
Если какие-то "иные" вопросы - пиши в мыло или личку.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.09.2007, 20:48
#19
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от zenon
Цитата:
Сообщение от Vova
Между прочим, макрос из N10 родился глядя как работает лисп из NO 8. У того лиспа одна проблема: надо заранее выставлять Ortho в нужное положение.
не знаю откуда родился, :roll: делал в соотвествии с книгой В. Света.
...:!:
А мне об этом сам автор рассказал (я с ним знаком).
Vova вне форума  
 
Непрочитано 13.09.2007, 23:19
#20
Yura

ЦТП, котельные, отопление, вентиляция
 
Регистрация: 21.02.2007
Кишинев
Сообщений: 548
<phrase 1= Отправить сообщение для Yura с помощью Skype™


Вообще, если я понял тему, то насчет brakeline могу сказать следующее:
Её настройки я запомнил в шаблоне (*.dwt), там разные размерные стили, различающиеся числом, которое в настройке размерного стиля, в строчке Use overall scale of... Дык вод, эта brakeline зависима от размерного стиля величиной ее элементов (масштабом ее элементов в зависимости от значения вышеуказанной строчки). Там играет роль вышеуказанная строчка в настройке размерного стиля. Уверен, что за это отвечает какая-то переменная, но я ее не знаю. Если я захочу поменять параметры этой линии разрыва, то ввожу данные в миллиметрах, как бы я ее хотел видеть на листе, тока при этом ставлю размерный стиль, чтоб размеры при соответствующем масштабе выглядели соответственно по высоте..
Yura вне форума  
 
Непрочитано 14.09.2007, 14:20
#21
dextron3

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


Вот на такую brakeline кто бы дал лисп (см. скриншот)(но чтоб на масштабы СПДС реагировала)
Которая есть в express tools при большом файле отказывается быстро работать
[ATTACH]1189765194.JPG[/ATTACH]
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 14.09.2007, 14:58
#22
Yura

ЦТП, котельные, отопление, вентиляция
 
Регистрация: 21.02.2007
Кишинев
Сообщений: 548
<phrase 1= Отправить сообщение для Yura с помощью Skype™


Цитата:
Сообщение от dextron3
(но чтоб на масштабы СПДС реагировала)
Дык в СПДСе же есть своя линия разрыва, которая прекрасно реагирует на масштабы СПДС. Или она коим-то образом не похожа на то, что ты нарисовал?
Yura вне форума  
 
Непрочитано 14.09.2007, 15:32
#23
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Гораздо лучше, когда енту breakline не надо настраивать по размеру в зависимости от текущего размерного или текстового стиля, а просто регулировать ее величину легким движением мыша. Это делает пост 8 и пост 10.
Vova вне форума  
 
Непрочитано 14.09.2007, 15:46
#24
dextron3

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


Цитата:
Сообщение от Yura
Цитата:
Сообщение от dextron3
(но чтоб на масштабы СПДС реагировала)
Дык в СПДСе же есть своя линия разрыва, которая прекрасно реагирует на масштабы СПДС. Или она коим-то образом не похожа на то, что ты нарисовал?
Он там с каким то геморойным обрывом, потом из за этого обрыва глюки начинаются, хочется простую линию обрыва, состоящую из отдельных линий

Цитата:
Гораздо лучше, когда енту breakline не надо настраивать по размеру в зависимости от текущего размерного или текстового стиля, а просто регулировать ее величину легким движением мыша. Это делает пост 8 и пост 10.
Вот и получается что все обрывы разные хочется чтоб чисто по масштабам без движений мышей
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 14.09.2007, 15:52
#25
dextron3

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


вот скрин спдсный бреклин
[ATTACH]1189770726.JPG[/ATTACH]
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 14.09.2007, 15:54
#26
Yura

ЦТП, котельные, отопление, вентиляция
 
Регистрация: 21.02.2007
Кишинев
Сообщений: 548
<phrase 1= Отправить сообщение для Yura с помощью Skype™


>dextron3:
Че за геморойный обрыв там у тебя? Стояла у меня раньше СПДСка, я от нее не в восторге, но эти разрывы делал четко, только там слегка приноровицца надо...

Везде нужна сноровка, закалка, тренировка... [sm2001]
Yura вне форума  
 
Непрочитано 14.09.2007, 16:00
#27
Yura

ЦТП, котельные, отопление, вентиляция
 
Регистрация: 21.02.2007
Кишинев
Сообщений: 548
<phrase 1= Отправить сообщение для Yura с помощью Skype™


И чего мешает? Точки эти, которые ты обвел? По-моему в этом и есть предназначение линии обрыва, чтоб обрывать. Ну ладно, если тебе этот обрыв мешает, нельзя эти точки придвинуть к самой линии разрыва, или даже совместить их с линией? Я просто не помню, давно уже делал...
Yura вне форума  
 
Непрочитано 14.09.2007, 19:02
#28
kha

BIM, С#, AutoCAD, LISP
 
Регистрация: 15.03.2006
Дуброво
Сообщений: 657


А меня больше всего радует линия обрыва из VetCAD
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е.
kha вне форума  
 
Непрочитано 14.09.2007, 20:05
#29
dextron3

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


Код:
[Выделить все]
;;---------<<<< Прорисовка обрезной линии (----/|/-----) >>>>
;;
(defun c:cutline (/	 alfa1	lafa2  pt1    pt2    pt3    pt4
		  pt5	 pt6	pt7    pt8    pt9    pt10   pt11
		  osm	 dimscl	cmd1   blm    beta1  beta2)
  (initget 3)				;запрет пустого ввода
  (setq osm (getvar "OSMODE"))
  (setq dimscl (getvar "dimscale"))
  (setq	pt1 (getpoint "\nПервая точка секущей линии : ")
	pt2 (getpoint pt1 "\nВторая точка секущей линии : "))
  (setq	cmd1 (getvar "CMDECHO")
	blm  (getvar "BLIPMODE"))
  (setq	alfa1 (angle pt1 pt2))
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (setvar "OSMODE" 0)
  (setq alfa2 (+ alfa1 pi))
  (setq pt3 (polar pt1 alfa1 (* 0.5 (distance pt1 pt2))))
  (setq pt4 (polar pt1 alfa2 (* dimscl 1)))
  (setq pt5 (polar pt2 alfa1 (* dimscl 1)))
  (setq pt6 (polar pt3 alfa2 (* dimscl 1)))
  (setq pt7 (polar pt3 alfa1 (* dimscl 1)))
  (setq beta1 (+ alfa1 (/ pi 2)))
  (setq beta2 (- alfa1 (/ pi 2)))
  (setq pt8 (polar pt3 beta1 (* dimscl 2.5)))
  (setq pt9 (polar pt3 beta1 (* dimscl 1)))
  (setq pt10 (polar pt3 beta2 (* dimscl 2.5)))
  (setq pt11 (polar pt3 beta2 (* dimscl 1)))
  (command "line" pt4 pt6 "")
  (command "line" pt7 pt5 "")
  (command "line" pt8 pt10 "")
  (command "line" pt6 pt9 "")
  (command "line" pt7 pt11 "")
;------ заключительные операции (восстановление системных переменных ---------
  (setvar "CMDECHO" cmd1)
  (setvar "BLIPMODE" blm)
  (setvar "OSMODE" osm)
)	;конец функции

вот если бы из этого лиспа сделать по типу из поста #21
а то что то убогая брек лин получается
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 15.09.2007, 08:30
#30
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


dextron3
Вот наваял, отличие от других здесь указанных в том что расположение зигзага указывается пользователем как в express tools. Масштаб зависит от переменной dimscale, если СПДС её меняет, то будет работать от масшатаба СПДС.
Запускать в скобках:
Код:
[Выделить все]
^C^C(Kr_LineOfBreak)
Код:
[Выделить все]
;;;Функция Kr_LineOfBreak
;;;Вычерчивает линию разрыва с зигзагом
(defun Kr_LineOfBreak (/ P1 P2 P3 P4 P5 P6 P7 P8 P9 p10 P1_1 P2_1 dsc key *error*)
(defun *error* (msg)
    (entdel temp_line)
    (setvar "CMDECHO" cmd)
    (princ "\nФункция Kr_LineOfBreak отменена (не указано расположение зигзага)")
    )
  (if
  (setq P1 (getpoint "\nПервая точка линии разрыва:"))
  (if
    (setq P2 (getpoint p1 "\nКонечная точка линии разрыва:"))
    (progn
      (setq cmd (getvar "CMDECHO"))
      (setvar "CMDECHO" 0)
      (entmake
	(list
		'(0 . "LWPOLYLINE")
		'(100 . "AcDbEntity")
		'(8 . "0")
		'(100 . "AcDbPolyline")
		'(90 . 2)
		(cons 10 (setq p1 (trans p1 1 0)))
		(cons 10 (setq p2 (trans p2 1 0)))
	)
	)
      (princ (strcat "\nТекущий масштаб: " (rtos (Kr_ScaleOfVP) 2 2)))
      (setq temp_line (entlast)
	    dsc (Kr_ScaleOfVP)
	    P1_1 (polar P1 (angle p1 p2) dsc)
	    P2_1 (polar P2 (angle p2 p1) dsc)
	    P9 nil
	    p10 nil
	    key T
      );setq
      (while (eq key T)
      (setq P9 (getpoint "\nУкажите расположение зигзага <По центру>:"))
            (if (not P9)
		(setq P9 (polar P1 (angle p1 p2) (/ (DISTANCE p1 p2) 2))
		      key nil)
	      (progn
		(setq P9 (trans P9 1 0)
		      p10 (polar P9 (+ (angle p1 p2) (angtof "90" 0)) 10))
		(if (not (inters P1_1 P2_1 p9 p10)) (setq p9 (inters P1_1 P2_1 p9 p10 nil)))
		(if (setq p9 (inters P1_1 P2_1 p9 p10)) (setq key nil)
		  (progn
		    (setq key t)
		    (princ "\nЗнак зигзага должен располагаться между указанными точками")
		    );progn

		    )
		)
	      );if
	);while
      (entdel temp_line)

        (setq
	  	P3 (polar P1 (angle p2 p1) (* 2 dsc))
		P4 (polar P2 (angle p1 p2) (* 2 dsc))
		P5 (polar P9 (angle p2 p1) (* dsc 1))
		P6 (polar P9 (angle p1 p2) (* dsc 1))
		P7 (polar P5
		  	(+ (angle p1 p2) (angtof "80.5" 0))
		  	(* dsc 3.0414)
	   		)
		P8 (polar P6
		  	(+ (angle p2 p1) (angtof "80.5" 0))
		  	(* dsc 3.0414)
	   		)
  );setq
  (entmake
	(list
		'(0 . "LWPOLYLINE")
		'(100 . "AcDbEntity")
		'(8 . "Разрывы")
		'(100 . "AcDbPolyline")
		'(90 . 6)
		(cons 10 p3)
		(cons 10 p5)
		(cons 10 p7)
		(cons 10 p8)
		(cons 10 p6)
		(cons 10 p4)
	)
)
    );end progn
    (princ "\nФункция Kr_LineOfBreak отменена (не указана конечная точка)")
    );if
  (princ "\nФункция Kr_LineOfBreak отменена (не указана начальная точка)")
  
  );end if
  (setvar "CMDECHO" cmd)
  (princ)
);defun


;|---------------------------------------------------------------
Функция; Kr_ScaleOfVP
-----------------------------------------------------------------
Вычисляет масштаб в зависимоти от переменной dimscale, если dimscale=0 коэф-т = 1 или относительно vport
|;

(defun Kr_ScaleOfVP ( / )
  			(if (= (getvar "dimscale") 0) (setq dsc 1) (setq dsc (getvar "dimscale")))
		   (if (and (= (Getvar "CVPORT") 2)
			    (= (vla-get-ActiveSpace (vla-get-ActiveDocument (vlax-get-Acad-Object))) 0)
			    (= (getvar "dimscale") 0))
		     	(setq dsc (/ dsc (vla-get-CustomScale (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-Acad-Object))))))
			);end if
 dsc
    )
Krieger вне форума  
 
Непрочитано 15.09.2007, 12:44
#31
dextron3

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


  • Command: _appload Kr_LineOfBreak.lsp successfully loaded.


    Command:
    Command:
    Command: Kr_LineOfBreak
    Unknown command "KR_LINEOFBREAK". Press F1 for help.



Krieger
не работает почему то
автокад 2008 англ
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 15.09.2007, 13:28
#32
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Яж сказал, это функция, надо в скобках запускать "(Kr_LineOfBreak)"
Код:
[Выделить все]
Command: (Kr_LineOfBreak)

Первая точка линии разрыва:
Конечная точка линии разрыва:
Текущий масштаб: 1
Укажите расположение зигзага <По центру>:
Krieger вне форума  
 
Непрочитано 15.09.2007, 16:48
#33
dextron3

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


заработало!

Krieger
1. где можно подправить, чтобы рисовалась в текущем слое
2. где можно подправить чтобы она была меньше малость
если масштаб 100 то вычерчивалась в 50
т.е. в 2 раза меньше, ато что то слишком большая, масштаб приходиться перебивать
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 15.09.2007, 17:27
#34
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Тогда так.
Все волнующие параметры вынес в параметры функции, меняй чего хош (см.описание и примеры).
Для тебя запуск такой:
Код:
[Выделить все]
(Kr_LineOfBreak (getvar "clayer") 0.5 2)
Код:
[Выделить все]
;|Функция Kr_LineOfBreak
Вычерчивает линию разрыва с зигзагом
Параметры:
layer - слой
Zscale - масштаб для зигзага
extend - удлинение кончиков (мм)
Примеры
(Kr_LineOfBreak (getvar "clayer") 0.5 2) - в текущем слое, в 2 раза меньше, кончики 2мм
(Kr_LineOfBreak "Разрывы" 1 2) - в слое "Разрывы",
|;

(defun Kr_LineOfBreak (layer Zscale extend / P1 P2 P3 P4 P5 P6 P7 P8 P9 p10 P1_1 P2_1 dsc key *error*)
(defun *error* (msg)
    (entdel temp_line)
    (setvar "CMDECHO" cmd)
    (princ "\nФункция Kr_LineOfBreak отменена")
    )
  (if
  (setq P1 (getpoint "\nПервая точка линии разрыва:"))
  (if
    (setq P2 (getpoint p1 "\nКонечная точка линии разрыва:"))
    (progn
      (setq cmd (getvar "CMDECHO"))
      (setvar "CMDECHO" 0)
      (entmake
	(list
		'(0 . "LWPOLYLINE")
		'(100 . "AcDbEntity")
		'(100 . "AcDbPolyline")
		'(90 . 2)
		(cons 10 (setq p1 (trans p1 1 0)))
		(cons 10 (setq p2 (trans p2 1 0)))
	)
	)
      (princ (strcat "\nТекущий масштаб: " (rtos (Kr_ScaleOfVP) 2 2)))
      (setq temp_line (entlast)
	    dsc (Kr_ScaleOfVP)
	    P1_1 (polar P1 (angle p1 p2) dsc)
	    P2_1 (polar P2 (angle p2 p1) dsc)
	    P9 nil
	    p10 nil
	    key T
      );setq
      (while (eq key T)
      (setq P9 (getpoint "\nУкажите расположение зигзага <По центру>:"))
            (if (not P9)
		(setq P9 (polar P1 (angle p1 p2) (/ (DISTANCE p1 p2) 2))
		      key nil)
	      (progn
		(setq P9 (trans P9 1 0)
		      p10 (polar P9 (+ (angle p1 p2) (angtof "90" 0)) 10))
		(if (not (inters P1_1 P2_1 p9 p10)) (setq p9 (inters P1_1 P2_1 p9 p10 nil)))
		(if (setq p9 (inters P1_1 P2_1 p9 p10)) (setq key nil)
		  (progn
		    (setq key t)
		    (princ "\nЗнак зигзага должен располагаться между указанными точками")
		    );progn

		    )
		)
	      );if
	);while
      (entdel temp_line)

        (setq
	  	P3 (polar P1 (angle p2 p1) (* extend dsc))
		P4 (polar P2 (angle p1 p2) (* extend dsc))
		P5 (polar P9 (angle p2 p1) (* dsc 1 Zscale))
		P6 (polar P9 (angle p1 p2) (* dsc 1 Zscale))
		P7 (polar P5
		  	(+ (angle p1 p2) (angtof "80.5" 0))
		  	(* dsc 3.0414 Zscale)
	   		)
		P8 (polar P6
		  	(+ (angle p2 p1) (angtof "80.5" 0))
		  	(* dsc 3.0414 Zscale)
	   		)
  );setq
  (entmake
	(list
		'(0 . "LWPOLYLINE")
		'(100 . "AcDbEntity")
		(cons 8 layer)
		'(100 . "AcDbPolyline")
		'(90 . 6)
		(cons 10 p3)
		(cons 10 p5)
		(cons 10 p7)
		(cons 10 p8)
		(cons 10 p6)
		(cons 10 p4)
	)
)
    );end progn
    (princ "\nФункция Kr_LineOfBreak отменена (не указана конечная точка)")
    );if
  (princ "\nФункция Kr_LineOfBreak отменена (не указана начальная точка)")
  
  );end if
  (setvar "CMDECHO" cmd)
  (princ)
);defun


;|---------------------------------------------------------------
Функция; Kr_ScaleOfVP
-----------------------------------------------------------------
Вычисляет масштаб в зависимоти от переменной dimscale, если dimscale=0 коэф-т = 1 или относительно vport
|;

(defun Kr_ScaleOfVP ( / )
  			(if (= (getvar "dimscale") 0) (setq dsc 1) (setq dsc (getvar "dimscale")))
		   (if (and (= (Getvar "CVPORT") 2)
			    (= (vla-get-ActiveSpace (vla-get-ActiveDocument (vlax-get-Acad-Object))) 0)
			    (= (getvar "dimscale") 0))
		     	(setq dsc (/ dsc (vla-get-CustomScale (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-Acad-Object))))))
			);end if
 dsc
    )
Krieger вне форума  
 
Непрочитано 15.09.2007, 20:15
#35
dextron3

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


Krieger спасибо!

можно скаезать что тема изчерпана
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 16.09.2007, 18:04
#36
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
можно скаезать что тема изчерпана
Нифига 8) Я только разошелся. Благодаря функции Крыса "_kpblc-block-dyn-change-values" можно объеденить лисп и динамоблоки.

Данная функция отрисовывает разрывную линию и при необходимости скрыть обрезаемую часть вставляет динамический блок с wipeout. Файл с блоком в приложенном файле и должен находится в путях доступа када (не переименовывать) .
Код:
[Выделить все]
;|Функция Kr_LineOfBreakAddBlock
Вычерчивает линию разрыва с зигзагом
Параметры:
layer - слой
Zscale - масштаб для зигзага
extend - удлинение кончиков (мм)
frame 	- nil - отключить границы wipeout
	- T (не nil) - ничего не делать
Примеры
(Kr_LineOfBreakAddBlock (getvar "clayer") 0.5 2 nil) - в текущем слое, в 2 раза меньше, кончики 2мм
(Kr_LineOfBreakAddBlock "Разрывы" 1 2 nil) - в слое "Разрывы",
|;
(defun Kr_LineOfBreakAddBlock (layer Zscale extend frame / P1 P2 P3 P4 P5 P6 P7 P8 P9 p10 P1_1 P2_1 dsc key *error*)
(defun *error* (msg)
    (entdel temp_line)
    (setvar "CMDECHO" cmd)
    (vla-endundomark adoc)
    (princ "\nФункция Kr_LineOfBreak отменена")
    )
  (if
  (setq P1 (getpoint "\nПервая точка линии разрыва:"))
  (if
    (setq P2 (getpoint p1 "\nКонечная точка линии разрыва:"))
    (progn
      (setq cmd (getvar "CMDECHO")
	    adoc (vla-get-activedocument (vlax-get-acad-object)))
      (vla-startundomark adoc)
      (setvar "CMDECHO" 0)
      (entmake
	(list
		'(0 . "LWPOLYLINE")
		'(100 . "AcDbEntity")
		'(100 . "AcDbPolyline")
		'(90 . 2)
		(cons 10 (setq p1 (trans p1 1 0)))
		(cons 10 (setq p2 (trans p2 1 0)))
	);list
	);entmake
      (princ (strcat "\nТекущий масштаб: " (rtos (Kr_ScaleOfVP) 2 2)))
      (setq temp_line (entlast)
	    dsc (Kr_ScaleOfVP)
	    P1_1 (polar P1 (angle p1 p2) dsc)
	    P2_1 (polar P2 (angle p2 p1) dsc)
	    P9 nil
	    p10 nil
	    key T
      );setq
      (while (eq key T)
      (setq P9 (getpoint "\nУкажите расположение зигзага <По центру>:"))
            (if (not P9)
		(setq P9 (polar P1 (angle p1 p2) (/ (DISTANCE p1 p2) 2))
		      key nil)
	      (progn
		(setq P9 (trans P9 1 0)
		      p10 (polar P9 (+ (angle p1 p2) (angtof "90" 0)) 10))
		(if (not (inters P1_1 P2_1 p9 p10)) (setq p9 (inters P1_1 P2_1 p9 p10 nil)))
		(if (setq p9 (inters P1_1 P2_1 p9 p10)) (setq key nil)
		  (progn
		    (setq key t)
		    (princ "\nЗнак зигзага должен располагаться между указанными точками")
		    );progn

		    );if
		);progn
	      );if
	);while
      (entdel temp_line)

        (setq
	  	P3 (polar P1 (angle p2 p1) (* extend dsc))
		P4 (polar P2 (angle p1 p2) (* extend dsc))
		P5 (polar P9 (angle p2 p1) (* dsc 1 Zscale))
		P6 (polar P9 (angle p1 p2) (* dsc 1 Zscale))
		P7 (polar P5
		  	(+ (angle p1 p2) (angtof "80.5" 0))
		  	(* dsc 3.0414 Zscale)
	   		)
		P8 (polar P6
		  	(+ (angle p2 p1) (angtof "80.5" 0))
		  	(* dsc 3.0414 Zscale)
	   		)
  );setq
  (entmake
	(list
		'(0 . "LWPOLYLINE")
		'(100 . "AcDbEntity")
		(cons 8 layer)
		'(100 . "AcDbPolyline")
		'(90 . 6)
		(cons 10 p3)
		(cons 10 p5)
		(cons 10 p7)
		(cons 10 p8)
		(cons 10 p6)
		(cons 10 p4)
	);list
);entmake
      (setq temp_line (entlast))

      (if (not (tblobjname "block" "Kr_BreakWipeout"))
	(progn
	  	(setq path (findfile "Kr_D_BreakWipeout.dwg"))
  		(command "_-insert" path)
  		(command)
  		(vl-cmdf "_-purge" "_blocks" "Kr_D_BreakWipeout" "_n")
	  	(princ)
	  );progn
	);if
	
	(if (tblobjname "block" "Kr_BreakWipeout")
	  	(progn
		      (if (setq p11 (getpoint (trans p3 0 1) "\nС какой стороны и докуда скрыть объекты <не надо скрывать>:"))
			(progn
			  (setq P11 (trans P11 1 0)
				p10 (inters P3 (polar P3 (+ (angle p1 p2) (angtof "90" 0)) 10) p11 (polar P11 (angle p3 p4) 10) nil)
				DistZig (Distance p1 p9)
				);setq
			  (if (inters p3 (polar P3 (+ (angle p1 p2) (angtof "90" 0)) (distance p3 p10)) p11 p10)
			    (setq DistWipeout (- (* 100 dsc) (distance p3 p10)))
			    (setq DistWipeout (+ (* 100 dsc) (distance p3 p10))))
			  (if (< DistWipeout 0) (setq DistWipeout 1))

		      (vl-cmdf "_insert" "Kr_breakWipeout" (trans p1 0 1) dsc dsc (/ (* (angle (trans p1 0 1) (trans p2 0 1)) 180) pi))
			  	(setq	pr (entget (entlast))
				  	pr (subst (cons 8 layer) (assoc 8 pr) pr))
			  (entmod pr)
			  (setq BreakBlock (entlast))
			  (if (equal 2.0 (/ (Distance p1 p2) (Distance p1 p9)) 0.1)
		      		(_kpblc-block-dyn-change-values BreakBlock (list (cons "Distance" (distance p1 p2)) (cons "DistanceHide" DistWipeout)
										 (cons "ExtendedLeft" (* extend dsc)) (cons "ExtendedRight" (* extend dsc))
										 (cons "SizeVertical" (* 6 Zscale dsc)) (cons "SizeHorizontal" (* 2 Zscale dsc))))
			    	(_kpblc-block-dyn-change-values BreakBlock (list (cons "Distance" (distance p1 p2)) (cons "DistanceHide" DistWipeout)
										 (cons "ZigDistance" DistZig) '("ZigLocation" . "other")
										 (cons "ExtendedLeft" (* extend dsc)) (cons "ExtendedRight" (* extend dsc))
										 (cons "SizeVertical" (* 6 Zscale dsc)) (cons "SizeHorizontal" (* 2 Zscale dsc))))
			    );if
			  (entdel temp_line)
			  );progn
			);if
      
				      (if (and (eq  frame nil) (= 1 (cdr (assoc 70 (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS")))))
					(progn
					(setq	pr (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS")
						pr (subst (cons 70 0) (assoc 70 pr) pr))
					(entmod pr)
					(vl-cmdf "_regen")
					);progn
					);if
	      
	      );progn
	  (princ "\nБлок не найден")
      );if
	
    );end progn
    (princ "\nФункция Kr_LineOfBreak отменена (не указана конечная точка)")
    );if
  (princ "\nФункция Kr_LineOfBreak отменена (не указана начальная точка)")
  
  );end if
  (setvar "CMDECHO" cmd)
  (vla-endundomark adoc)
  (princ)
);defun


;|---------------------------------------------------------------
Функция Kr_ScaleOfVP
-----------------------------------------------------------------
Вычисляет масштаб в зависимоти от переменной dimscale, если dimscale=0 коэф-т = 1 или относительно vport
|;

(defun Kr_ScaleOfVP ( / )
  			(if (= (getvar "dimscale") 0) (setq dsc 1) (setq dsc (getvar "dimscale")))
		   (if (and (= (Getvar "CVPORT") 2)
			    (= (vla-get-ActiveSpace (vla-get-ActiveDocument (vlax-get-Acad-Object))) 0)
			    (= (getvar "dimscale") 0))
		     	(setq dsc (/ dsc (vla-get-CustomScale (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-Acad-Object))))))
			);end if
 dsc
    );defun

(defun _kpblc-block-dyn-change-values (ent              lst
                                       /                prop_lst
                                       _kpblc-conv-vla-to-list
                                       )
                                      ;|
	ent	указатель на вхождение блока
	lst	список вида:
      '((<property> . <value>)
	(<property> . <value>)
	)
*    примеры вызова:
(_kpblc-block-dyn-change-values (car(entsel))'(("dist*" . 162.56) ("ang*" . 5.)))
;; Углы надо задавать в радианах!
(_kpblc-block-dyn-change-values (car (entsel)) '(("type" . "minimum")))
|;

  (defun _kpblc-conv-vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (cond
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (vlax-safearray->list value)
         ) ;_ end of if
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun

  (vl-load-com)

  (vl-catch-all-apply
    '(lambda ()
       (setq
         ent (cond
               (ent)
               (t (car (entsel "\nУкажите вхождение дин.блока <Отмена> : ")))
               ) ;_ end of cond
         ) ;_ end of setq
       ) ;_ end of lambda
    ) ;_ end of vl-catch-all-apply
  (if (and ent
           (setq ent (cond
                       ((= (type ent) 'ename) (vlax-ename->vla-object ent))
                       ((= (type ent) 'vla-object) ent)
                       (t nil)
                       ) ;_ end of cond
                 ) ;_ end of setq
           (= (strcase (vla-get-objectname ent) t) "acdbblockreference")
           (= (vla-get-isdynamicblock
                (vla-item
                  (vla-get-blocks
                    (vla-get-activedocument (vlax-get-acad-object))
                    ) ;_ end of vla-get-blocks
                  (vla-get-effectivename ent)
                  ) ;_ end of vla-item
                ) ;_ end of vla-get-isdynamicblock
              :vlax-true
              ) ;_ end of =
           ) ;_ end of and
    (progn
      (setq
        prop_lst (vlax-safearray->list
                   (vlax-variant-value (vla-getdynamicblockproperties ent))
                   ) ;_ end of vlax-safearray->list
        ) ;_ end of setq
      (foreach item (mapcar '(lambda (a) (cons (strcase (car a)) (cdr a))) lst)
        (if (setq prop
                   (car
                     (vl-remove-if-not
                       '(lambda (x)
                          (wcmatch (strcase (vla-get-propertyname x)) (car item))
                          ) ;_ end of lambda
                       prop_lst
                       ) ;_ end of vl-remove-if-not
                     ) ;_ end of car
                  ) ;_ end of setq
          ;; Имя совпало
          (vl-catch-all-apply
            '(lambda ()
               (vla-put-value
                 prop
                 (vlax-make-variant
                   (cdr item)
                   (vlax-variant-type (vla-get-value prop))
                   ) ;_ end of vlax-make-variant
                 ) ;_ end of vla-put-value
               (vla-update ent)
               ) ;_ end of lambda
            ) ;_ end of vl-catch-all-apply
          ) ;_ end of if
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
[ATTACH]1189951463.rar[/ATTACH]
Krieger вне форума  
 
Непрочитано 17.09.2007, 11:13
#37
VVA

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


> Vova №8, 11 с небольшим опозданием
Цитата:
У того лиспа одна проблема: надо заранее выставлять Ortho в нужное положение. Можно-ли сделать так, чтобы выставлять ORTHO в процессе?
Если я правильно понял
Код:
[Выделить все]
; DRAGBRK.LSP    Breaklines, " Z " Breaks 
; Tip 1028 Cadalyst Oct 1994
;http://forum.dwg.ru/showthread.php?t=13249&page=2
;VOVA # 8
(defun C:DRAGBRK (/ PT1 PT2 PT3 PT4 PT5 PT6 PT7 _ORTHO ANG LEG SS B_ENT ANG VxGetEndPoints VxGetTangentAtPoint RTD *error* SA OM)
  (defun *error* (msg)(princ msg)(setvar "SNAPANG" SA)(setvar "ORTHOMODE" OM)(princ))
   (defun _ortho (PT1 PT / ANG da)
      (setq da (getvar "SNAPANG"))
      (setq ANG (+ (angle PT1 PT) da))
      (cond 
         ((or (<= ANG (+ 0.7853 da)) (> ANG (+ 5.4977 da))) 
            (polar PT1 da (distance PT1 PT)) 
         ) 
         ((and (> ANG (+ 0.7853 da)) (<= ang (+ da 2.3561)))
            (polar PT1 (+ da 1.5707) (distance PT1 PT)) 
         ) 
         ((AND (> ANG (+ da 2.3561)) (<= ANG (+ da 3.9269))) 
            (polar PT1 (+ da 3.14159) (distance PT1 PT)) 
         ) 
         ((and (> ANG (+ da 3.9269)) (<= ANG (+ da 5.4977))) 
            (polar PT1 (+ da 4.7124) (distance PT1 PT)) 
         ) 
      ) 
   )
(defun VxGetTangentAtPoint (Obj Pnt / CurPar PntLst TmpPnt)
 (setq PntLst (VxGetEndPoints Obj)
       CurPar (cond
               ((equal Pnt (car PntLst) 1E-5)
                (vlax-curve-getStartParam Obj)
               )
               ((equal Pnt (cadr PntLst) 1E-5)
                (vlax-curve-getEndParam Obj)
               )
               ((setq TmpPnt (vlax-curve-getClosestPointTo Obj Pnt))
                 (vlax-curve-getParamAtPoint Obj TmpPnt)
               )
               (T nil)
              )
 )
 (if CurPar
  (angle
  '(0.0 0.0 0.0)
   (vlax-curve-getFirstDeriv Obj CurPar)
  )
 )
)
(defun VxGetEndPoints (Obj)
 (list
  (vlax-curve-getStartPoint Obj)
  (vlax-curve-getEndPoint Obj)
 )
)
(defun RTD (a)(/ (* a 180.0) pi))
(setq SA (getvar "SNAPANG"))
(setq OM (getvar "ORTHOMODE"))
  (vl-load-com)
   (setq PT2 nil PT6 nil) 
   (while 
      (not 
         (setq PT1 (getpoint "\nPick starting point for break: ")) 
      ) 
      (prompt "\nInvalid point") 
   )
  (setq ss nil ss (ssget PT1)
            b_ent   (if ss (ssname ss 0) nil)
           ss nil
          )
  (if (and b_ent
           (wcmatch (strcase (cdr(assoc 0 (entget b_ent)))) "*POLYLINE,SPLINE,ELLIPSE,LINE,ARC")
           )
    (progn
      (setq b_ent (vlax-ename->vla-object b_ent)
            PT1 (trans PT1 1 0)
            PT1 (vlax-curve-getClosestPointTo b_ent PT1)
            PT1 (trans PT1 0 1)
            )
      (setq ang (VxGetTangentAtPoint b_ent  (trans PT1 1 0)))
      (if (null ang)(setq ang 0))
      (if (> ang pi)(setq ang (- ang pi)))
      (setvar "SNAPANG" ang)(setvar "ORTHOMODE" 1)
      )
    )
   (prompt "\nDrag to indicate size and angle of break: ") 
   (while 
      (/= (car (setq GR (grread T 19))) 3)
     (if (and (= (car GR) 2)(= (cadr GR) 15))
       (setvar "ORTHOMODE" (boole 2 1 (getvar "ORTHOMODE")))
       )
      (cond 
         ((= (car GR) 5) 
            (if (/= (car GR) PT1) 
               (progn 
                  (if PT2 
                     (progn 
                        (grdraw PT2 PT3 -1) 
                        (grdraw PT3 PT4 -1) 
                        (grdraw PT2 PT5 -1) 
                     ) 
                  )  
                  (if 
                     (= (getvar "orthomode") 0) 
                     (setq GR_PT (cadr GR)) 
                     (setq GR_PT (_ortho PT1 (cadr GR))) 
                  ) 
                  (setq 
                     ANG (angle PT1 GR_PT) 
                     LEG (distance gr_pt pt1) 
                     PT2 (polar PT1 ANG LEG) 
                     PT3 (polar PT1 (+ ANG 3.14159) LEG) 
                     PT4 (polar PT1 (+ ANG 1.5707) (* LEG 0.4)) 
                     PT5 (polar PT1 (- ANG 1.5707) (* LEG 0.4)) 
                  ) 
                  (grdraw PT2 PT3 -1) 
                  (grdraw PT3 PT4 -1) 
                  (grdraw PT2 PT5 -1) 
               ) 
            ) 
         ) 
         ((= (car GR) 2) 
            (if 
               (= (cadr GR) 194) 
               (if 
                  (= (getvar "orthomode") 1) 
                  (progn 
                     (setvar "orthomode" 0) 
                     (prompt "<Ortho off> ") 
                  )    
                  (progn 
                     (setvar "orthomode" 1) 
                     (prompt "<Ortho on> ") 
                  )    
               )    
            )    
 
         ) 
      ) 
   ) 
   (prompt "\nDrag to indicate length of lines: ") 
   (while 
      (/= (car (setq GR (grread T))) 3)
     (if (and (= (car GR) 2)(= (cadr GR) 15))
       (setvar "ORTHOMODE" (boole 2 1 (getvar "ORTHOMODE")))
       )
      (if 
         (= (car GR) 5) 
         (if (/= (car GR) PT1) 
            (progn 
               (if PT6 
                  (progn 
                     (grdraw PT4 PT7 -1) 
                     (grdraw PT5 PT6 -1) 
                  ) 
                )  
               (setq 
                  GR_PT (cadr GR) 
                  ANG (angle PT1 PT5) 
                  LEG (* (distance GR_PT PT1) 1.4) 
                  PT7 (polar PT4 (+ ANG 3.14159) LEG) 
                  PT6 (polar PT5 ANG LEG) 
               ) 
               (grdraw PT4 PT7 -1) 
               (grdraw PT5 PT6 -1) 
            ) 
         ) 
      ) 
   )
  (setvar "SNAPANG" SA)(setvar "ORTHOMODE" OM)
   ;create new pline using the dragged points
   (entmake 
      '( 
         (0 . "POLYLINE") 
      ) 
   ) 
   (foreach 
      vertex 
      (list PT7 PT4 PT3 PT2 PT5 PT6)  
      (entmake 
         (list 
            '(0 . "VERTEX") 
            (cons 10 (list (car VERTEX) (cadr VERTEX))) 
         ) 
      ) 
   ) 
   (entmake '((0 . "SEQEND")))
   (command "_REDRAWALL")
   (princ) 
); end dragbrk.lsp

Последний раз редактировалось VVA, 01.12.2010 в 10:48. Причина: Обработка Орто (по F8)
VVA вне форума  
 
Непрочитано 14.11.2007, 13:35
#38
Владимир Егорьев


 
Сообщений: n/a


Krieger,

К посту №30

1)Скопировал код в редактор Lisp
2)Запустил из редактора Lisp
3)command: (Kr_LineOfBreak)->"задайте первую точку"->"задайте вторую точку"->"вставьте зигзаг"-вроде всё получается пока.
4)Сервис->Приложения... и т.д.
5)Закрываю всё на свете.
6)Открываю редактор Автокада
7)command: (Kr_LineOfBreak)->"задайте первую точку"->"задайте вторую точку"... и на этом всё заканчивается,только отрисовывается линия.Должен был предложить "вставьте зигзаг".

В чём моя ошибка?
 
 
Непрочитано 14.11.2007, 17:17
#39
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Фиг знает. Скопируй из комстроки, все что пишет. Линия не удаляется?
Попробуй код из 36 постинга. Я там кажется исправлял что-то...
Krieger вне форума  
 
Непрочитано 24.11.2007, 17:09
#40
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


K посту № 37 от VVA
О, теперь класс. Почему-же первый автор этой проги не догадался так сделать?
To All> Готов поспорить, что данная линия разрыва есть чемпион по удобству пользования среди всего, представленного здесь (имхо, так как остальное не пробавал по-ленности)
Vova вне форума  
 
Непрочитано 25.11.2007, 06:27
#41
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Vova
Цитата:
Готов поспорить, что данная линия разрыва есть чемпион по удобству пользования среди всего, представленного здесь
Ну давай. Чем же она удобна? Одни неудобства. Разрывные линии получаются неодинаковые, зигзаг по центру не поставить, только примерно (или приходится использовать дополнительную привязку через ctrl), а не по центру вообще дохлый номер, угол 90град к линиям обрываемой конструкции выдержать невозможно. Вообщем все получается криво и не красиво, а значит неудобно.

Цитата:
остальное не пробавал
Как ты можешь утверждать если остальное не пробовал? Однако я не утверждаю, что мой код будет для тебя удобнее, так как не знаю твою специфику. Каждому свое.

Вот примерчик сделал, оборвал узелок, первый вариант по коду из поста #37 (кстати, у меня орто не включается), второй и третий по коду из поста #36.
Вложения
Тип файла: dwg
DWG 2007
breakline.dwg (87.8 Кб, 723 просмотров)

Последний раз редактировалось Krieger, 25.11.2007 в 12:54. Причина: орфография, неграмотные мы, в отличие от Profan
Krieger вне форума  
 
Непрочитано 25.11.2007, 07:30
#42
Profan


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


Пробавал, пробывал - не правильно.
Надо пробовал.
Profan вне форума  
 
Непрочитано 25.11.2007, 07:32
#43
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Да ладно... Это я чтобы подогреть тему и выразить благорарность VVA, который уже второй лисп успешно чинит. А разве зигзаг должен стоять строго по центру? Часто бывает,что сознательно надо уйти из центра. И почему привязка через Ctrl? У меня их много навешено одновременно. Увы, твой чертеж is not valid

Последний раз редактировалось Vova, 25.11.2007 в 07:37.
Vova вне форума  
 
Непрочитано 25.11.2007, 07:40
#44
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от Profan Посмотреть сообщение
Пробавал, пробывал - не правильно.
Надо пробовал.
Это я Хазанова вспомнил, калинарный техникум. Там на экзамене спросили, чего в супе не хватает. Он и ответил: не распробАвал, налейте еще
Только что заметил, все мои и ваши сообщения получаются по Нью-Йоркскому времени. Сейчас на часах 23-40. Сообщение от Profan выше от 23-30. Но в Москве-то утро. А что у вас показывает?

Последний раз редактировалось Vova, 25.11.2007 в 07:46.
Vova вне форума  
 
Непрочитано 25.11.2007, 13:05
#45
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Vova Посмотреть сообщение
А разве зигзаг должен стоять строго по центру? Часто бывает,что сознательно надо уйти из центра.
Всяко бывает. И вот как раз твой вариант сделать не по центру не может. Я об этом говорил:
Цитата:
а не по центру вообще дохлый номер
Цитата:
Сообщение от Vova Посмотреть сообщение
И почему привязка через Ctrl?
Чтобы выбрать привязку "между двумя точками"
Цитата:
Сообщение от Vova Посмотреть сообщение
Увы, твой чертеж is not valid
Чего там у тебя за AutoCAD? Уже не впервый раз это... Сохранил в 2004-м:
Вложения
Тип файла: dwg
DWG 2004
breakline.dwg (75.0 Кб, 711 просмотров)
Krieger вне форума  
 
Непрочитано 25.11.2007, 17:10
#46
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


To Krieger> Сдаюсь, твой лучше и универсальнее. Мне действительно не приходилось делать разрывы рядом и под углом, когда они должны быть одинаковыми. А одиночные быстро и легко строились моим вариантом. Комбинация с дин блоком-wipeout очень удачна. У меня есть аналогичные, употрбляемые для схем, где динамика меняет конфигурацию wipeout, они значительно ускоряют черчение. Проблема только может проявится в том, что wipeout провалится вниз и обрываемые линии вылезут наружу. Для той цели у меня есть кнопочка, одним махом поднимающая wipeouts наверх
Код:
[Выделить все]
^C^CGETSEL;\;DRAWORDER;P;;F;
Но я не смог запустить лисп:
Код:
[Выделить все]
Command: (LOAD "C:/Documents and Settings/user1/My 
Documents/Vladimir/Lisp/mylisp/brk-krieger.lsp") nil
Мой автокад 2006
Vova вне форума  
 
Непрочитано 26.11.2007, 09:33
#47
VVA

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


Цитата:
Вот примерчик сделал, оборвал узелок, первый вариант по коду из поста #37 (кстати, у меня орто не включается),
В проге из поста #37 для отслеживания используется grread, поэтому обрабатывается включение орто только по F8. Соответственно и ctrl надо обрабатывать.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.12.2009, 08:32
#48
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Krieger, чЁй-то у меня линия обрыва не хочет подчитяться аннотативности. Только dimscale признает. Так и должно, или у меня старая версия лиспа?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 02.12.2009, 08:57
#49
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Тогда у меня еще не было аннотативности. За масштаб отвечает функция Kr_ScaleOfVP. Её нужно поменять в листинге или просто загрузить последней (тогда старая версия переопределится). Чтобы была реакция на аннотативный масштаб обязательно должен быть установлен текущим аннотативный размерный стиль. Если размерный стиль не аннотативный, то будет браться dimscale.

Код:
[Выделить все]
;|---------------------------------------------------------------
Функция Kr_ScaleOfVP
-----------------------------------------------------------------
Вычисляет масштаб в зависимоти от переменной dimscale или CANNOSCALEVALUE, если dimscale=0 коэф-т = 1 или относительно vport
|;
(defun Kr_ScaleOfVP ( / )
  ;если текущим установлен аннотативный размерный стиль, масштаб берем с аннотативного масштаба
  (if (= (getvar "dimanno") 1)
    (setq dsc (/ 1 (getvar "CANNOSCALEVALUE")))
    (progn
  ;если dimscale=0 принимаем dsc=1, если нет dsc=dimscale
              (if (= (getvar "dimscale") 0) (setq dsc 1) (setq dsc (getvar "dimscale")))
  ;если мы находимся в пространстве листа:
            (if (= (Getvar "TILEMODE") 0)
  ;если видовое окно не ативно dsc=1, если активно, то берем масштаб с видового экрана
              (if (= (Getvar "CVPORT") 1)
                (setq dsc 1)
                (setq dsc (/ 1 (vla-get-CustomScale (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-Acad-Object))))))
              );if
             );if
      );progn
    );if
    dsc
    )
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 02.12.2009, 09:04
#50
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Krieger, супер!
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 02.12.2009, 09:47
#51
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


У меня эта функция во всех программках и кнопках используется. Поэтому при появлении аннотативности я подредактировал всего одну функцию и теперь все работает с аннотациями. Чего и тебе желаю. Например в макросе для вставки неаннотативного блока можно написать так:
Код:
[Выделить все]
_-insert;"имя блока";_s;(Kr_ScaleOfVP);_r;0;
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 01.12.2010, 09:44
#52
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


Krieger, код из #36 в 2011 не работает. Сообщает
Код:
[Выделить все]
(Kr_LineOfBreakAddBlock "Разрывы" 1 2 nil)

Первая точка линии разрыва:
Конечная точка линии разрыва:; error: An error has occurred inside the *error* 
functionbad argument type: lentityp nil
Win7х64

Последний раз редактировалось Хмурый, 01.12.2010 в 10:32.
Хмурый вне форума  
 
Непрочитано 01.12.2010, 14:58
#53
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


А в 2010-м работал?
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 01.12.2010, 15:01
#54
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


Krieger, в 2008-ом работал, ни в 2009, ни 2010- не пробовал работать
Хмурый вне форума  
 
Непрочитано 01.12.2010, 15:16
#55
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Тогда я затрудняюсь ответить. Сам тестил только на ACAD2010, Win7 - работает. Только если профи подскажут...
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 01.12.2010, 15:31
#56
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


Krieger, будем искать.
Ничего не понял, но вдруг заработало после очередного вылета AutoCAD'а.
Спасибо.

Последний раз редактировалось Хмурый, 01.12.2010 в 16:09.
Хмурый вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > breakline