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

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

multibreak - отрисовка линий разрыва

Ответ
Поиск в этой теме
Непрочитано 05.03.2010, 17:45 #1
multibreak - отрисовка линий разрыва
baaba
 
архитектор
 
Москва
Регистрация: 07.07.2007
Сообщений: 644

Известна программа "Break_Den.lsp", для отрисовки линий разрыва, при выполнении чертежей деталей. Я написал свой вариант, "под себя". Мне нужно что бы было несколько засечек, сколько угодно, при построении линейных разрывов. И что бы начертание - как мне нравится
Прошу не пинать за английский, это вынужденная мера

Код:
[Выделить все]
; You should type "mbreak"
;===============================================================================
(defun c:mbreak (/ pt1 pt2 sf ang zz brw brh tot n ptlist)
  	(setq
		pt1 (getpoint "\nEnter start point:")
		pt2 (getpoint pt1 "\nEnter end point:")
		sf (getvar "DIMSCALE")
		ang (angle pt1 pt2)
		zz 1.8
		brw 2.0
		brh 4.0
		tot 0
		n (1+ (getint "\nEnter quantity of markers:")))
	(setq ptlist (list (setvar "LASTPOINT" (polar pt1 (+ ang pi) (* zz sf)))))
	(while (< (setq tot (1+ tot)) n)
		(progn 
			(setq ptlist (cons (abcfun ang
				(/ (- (+ (* 2 zz sf) (distance pt1 pt2)) (* sf (1- n) brw)) n)) ptlist))
			(setq ptlist (cons (abcfun (+ (/ pi -2) ang) (* sf (/ brh 2))) ptlist))
			(setq ptlist (cons (abcfun
				(+ (angle '(0 0) (list (princ brw) (princ brh))) ang)
				(* sf (sqrt (+ (expt brw 2) (expt brh 2))))) ptlist))
			(setq ptlist (cons (abcfun (+ (/ pi -2) ang) (* sf (/ brh 2))) ptlist))))
	(setq ptlist (cons (abcfun ang (/ (- (+ (* 2 zz sf) (distance pt1 pt2)) (* sf (1- n) brw)) n)) ptlist))
	(reverse ptlist)
	(command "_.UNDO" "_begin") ; Begin command group
	(setq old_osnap (getvar "OSMODE")) ; Save current osnap status
	(setvar "OSMODE" 0) ;  Turn off osnap when drawing
	(draw_pline ptlist) ; Draw pline
	(setvar "OSMODE" old_osnap) ; Turn on osnap when finished
	(command "_.UNDO" "_end") ; End command group
)

; draw from point ..
(defun abcfun (ang leight) ; Some routine operation place in function
	(setvar "LASTPOINT" (polar (getvar "LASTPOINT") ang leight)))

; http://faqs.org.ru/progr/graph/autolisp3.htm	
(defun draw_pline (pts) ; Draw pline by getting list
	(command "_.PLINE")
	(mapcar 'command pts)
	(command ""))
(princ "\n You should type \"MBREAK\"!") (princ)

Последний раз редактировалось baaba, 10.03.2010 в 00:57.
Просмотров: 3505
 
Непрочитано 05.03.2010, 23:58
#2
Кулик Алексей aka kpblc
Moderator

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


Критику? Или предложения по улучшению? Что хочется-то?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.03.2010, 00:01
#3
baaba

архитектор
 
Регистрация: 07.07.2007
Москва
Сообщений: 644
<phrase 1= Отправить сообщение для baaba с помощью Skype™


критику? да, критику хочу. но не хочу понапрасну отнимать времени.
вообще то выложил в общий доступ, вдруг кому то нужно (в прошлый раз один чел сказал мол моя выноска понравилась, мне было жутко приято)
baaba вне форума  
 
Непрочитано 09.03.2010, 00:15
#4
Кулик Алексей aka kpblc
Moderator

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


Ну, вопросов несколько:
1. Почему бы не использовать просто тип линии? Такое подходит не всегда, но - почему бы нет?
2. dimscale может быть равной 0, например.
3. Я бы подумал об отказе от использования командных методов.
4. Код практически не защищен от неверных действий пользователя (например, нажатия Esc в самый неподходящий момент). Или в ответ на запрос "Enter quantity of markers:" поставить, например, -10. Ну так, "по приколу". Точно так же, "по приколу" не проверяется совпадение начальной и конечной точек.
5. Глубинного смысла в
Код:
[Выделить все]
(list (princ brw) (princ brh))
я не усек. Почему нельзя использовать
Код:
[Выделить все]
(list brw brh)

6. Точно так же непонятно, что делает строка
Код:
[Выделить все]
(reverse ptlist)
. Никакая переменная этим делом не меняется.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.04.2010, 17:49
#5
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


Так, а высота разрывов не меняется в зависимости от , например, DIMTXSTY ??
А как же пользоваться, когда рисуешь разрыв на большой или маленькой детале
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Автор темы   Непрочитано 24.04.2010, 19:32
#6
baaba

архитектор
 
Регистрация: 07.07.2007
Москва
Сообщений: 644
<phrase 1= Отправить сообщение для baaba с помощью Skype™


Высота засечки постоянна при выводе на печать, около 3 мм (я точно не помню), то есть около высоты шрифта надписи. Это меня как раз и устраивает. Доработать программу под DIMTXSTY, я полагаю, можно, идея годная. Только прямо сейчас я не могу В принципе я делал под себя, доволен теперь как слон. Мне нравится что может быть много засечек, и сама форма засечки

(list (princ brw) (princ brh)) - да, сейчас уже я понимаю как это коряво )

(reverse ptlist) - нее это нужно
baaba вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > multibreak - отрисовка линий разрыва

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение дуг, линий в единый объект, Как объединить? Vladimir.P AutoCAD 41 25.01.2015 08:03
Нужен LISP для разрыва линий в точках пересечений ilka_t LISP 18 15.03.2013 16:35
Проблема с подсчетом линий... Kostinok AutoCAD 32 26.12.2012 09:42
Отрисовка типов линий noiseless AutoCAD 3 30.04.2009 06:33
Близко расположенные линии в чертеже сливаются. Wowik53 AutoCAD 50 01.11.2008 21:40