Тема: команда offset
где-то видел прогр., с помощью кот. командой offset рисуются параллельные линии одновременно в обе стороны от исходной,
теперь нужна, кто знает где ее искать
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Разное → Другое → команда offset
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
где-то видел прогр., с помощью кот. командой offset рисуются параллельные линии одновременно в обе стороны от исходной,
теперь нужна, кто знает где ее искать
Сунулся, гдето только что видал!!
Хрясь и часа полтора по Инету шарил!!
Благо выделенка и халява :))
Нашел, но не то что встречал, смотри может подойдет:
http://www.autokad.ru/zip/dof.zip
работеает как то непонятно..то две линии нарисует, то одну...иногда исходную не удаляет
Для отрисовки нескольких параллельных линий относительно исходной можете воспользоваться инструментом Multyline
> Vladimir
Функция отрисовывается корректно, если указать направление отступа внутрь об'екта (если он имеет некоторуй радиус искривления) если указать внешнюю сторону,то отступ отрисовываеться только в одну сторону, с сохранением исходной линии, дуги или об'единеной полилинии.
У меня есть код функции отрисовывающий Offset в обе стороны с выделением группы об'ектов, но она работает по заданным в коде слоям и оставляет исходящий набор не удаляя его
Рисование параллельных линий не так просто, как кажется. Это была первая программа, которую я когда-то делал. С тех пор написал множество вариантов. Тут множество нюансов, связанных с особенностями формирования вторичных примитивов по OFFSET
MultiLine хороша, но это совсем другое.
Вот пример одного варианта низкоуровневой функции, использующейся при рисовании двойных
(defun ic_MkTrassLstFromAxes (Os LastPnt LastAng Width DelOs LineWidth / LST1 LSTVER LSTVER1 LSTVER2 NEWLINE TL TP )
;; Параметры
;;Os - осевая линия (примитив)
;;LastPnt - последняя точка осевой
;;LastAng - угол последнего сегмента осевой
;;Width - полуширина трассы от осевой
;;DelOs - T - стирать осевую
;; возвращает список координат новой плинии
(setq LstVer NIL)
(setq tp (polar LastPnt (pravo LastAng) Width))
(setq tl (polar LastPnt (levo LastAng) Width))
(command "_.OFFSET"
Width
(list Os LastPnt)
tp
""
) ;_ end of command
(if (setq Lst1 (ic_GetPolyList (entlast)))
(setq LstVer1 (car Lst1))
) ;_ end of if
(command "_.ERASE" (entlast) "")
(command "_.OFFSET"
Width
(list os LastPnt)
tl
""
) ;_ end of command
(if (setq Lst1 (ic_GetPolyList (entlast)))
(setq LstVer2 (car Lst1))
) ;_ end of if
(command "_.ERASE" (entlast) "")
(if DelOs
(command "_.ERASE" Os "")
) ;_ end of if
(setq lstver (append lstver1 (reverse lstver2)))
(setq NewLine (ic_MakeNewPoly LstVer T NIL LineWidth))
Lstver
) ;_ end of defun
Хороший пример был в Акад-11-12(DLINE). Здоровенная программа, от которой потом отказались.
;;; Разработано инженером с АвтоВАЗа в 1999году
;;;
;;; Функция выполняет Offset в обе стороны от
;;; выбранных примитивов с сохранением исходного контура
;;;
;;; Функция поддерживает типы примитивов:
;;; "LWPOLYLINE"
;;; "LINE"
;;; "ARC"
;;; Код облегчен для дальнейшей адаптации
;;; 07.05.2002.
;;; Pacman
;;;
(defun c:off_set ( / off pl li arc filter_me due_n dis i j e a p1 p2)
(setq off (getvar "OSMODE"))(setvar "OSMODE" 0)
(setq pl (cons 0 "LWPOLYLINE")
li (cons 0 "LINE")
arc (cons 0 "ARC")
)
;;;фильтр выбора типов приметивов
(setq filter_me (list (cons -4 "")
);_list
)
(setq due_n (ssget filter_me))
(setq dis (getreal "\nВведите расстояние между раздвоенными линиями: ")
dis (/ dis 2.)
)
(setq i (sslength due_n)
j 0)
(while (< j i)
(setq a (ssname due_n j)
j (1+ j)
e (entget a)
)
(setq p1 nil p2 nil)
(if (equal (assoc 0 e) pl)
(progn
(setq p1 (cdr (assoc 10 e))
e (subst '(x x) (assoc 10 e) e)
)
(setq p2 (cdr (assoc 10 e)))
);_progn
);_if
(if (equal (assoc 0 e) li)
(progn
(setq p1 (cdr (assoc 10 e)))
(setq p2 (cdr (assoc 11 e)))
);_progn
);_if
(if (and (/= p1 nil)(/= p2 nil))
(progn
(command "offset" dis a (polar p1 (+ (angle p1 p2) (/ pi 2)) 3)
a (polar p1 (- (angle p1 p2) (/ pi 2)) 3) "" )
);_progn
);_if
(if (equal (assoc 0 e) arc)
(progn
(setq p1 (cdr (assoc 10 e)))
(setq p2 (polar (cdr (assoc 10 e))
(cdr (assoc 50 e))
(* 2 (cdr (assoc 40 e)))
)
);_setq p2
(command "offset" dis a p1 a p2 "")
);_progn
);_if
);_while (< j i)
(setvar "OSMODE" off)
);_defun c:off_set
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Разное → Другое → команда offset
Форум работает на PunBB, при поддержке Informer Technologies, Inc