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

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

breakline

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

Счастливчики,обладающие меню Express имеют возможность пользоваться и сей командой.Вопрос следущий:как поменять параметры?Т.е. ну чтобы масштаб там допустим и цвет может...я так понимаю что вставляется блок какой то?
Просмотров: 11708
 
Непрочитано 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 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > breakline