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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Контур с округлением кратным 5

Контур с округлением кратным 5

Ответ
Поиск в этой теме
Непрочитано 20.11.2009, 11:52 #1
Контур с округлением кратным 5
Positron
 
Регистрация: 25.06.2009
Сообщений: 147

Восновном для прямоугольников:
1. Выделить прямоугольник или выбрать
2. Извлеч длинну сторон прмоугольника
3. Округлить последнюю цифру с кратностю 5
например: 888=890, 333=335
4. Ввести отступ (по типу Offset или построить прямоугольник с учотом отступа) от скруглённых сторон
5. Построить прямоугольник от центра старого но с заданым отсупом+округление.

(желательно чтоб команда состояла из 1 ввода отступа и всё, без указания стороны как в offset, или зделать штоб она отбивалась только на внешний контур по умолчанию)

Во вложении пример...

Миниатюры
Нажмите на изображение для увеличения
Название: Контур с округлением.jpg
Просмотров: 137
Размер:	32.2 Кб
ID:	29284  

Просмотров: 4019
 
Непрочитано 20.11.2009, 21:41
#2
Кулик Алексей aka kpblc
Moderator

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


Что это было?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.11.2009, 12:21
#3
Positron


 
Регистрация: 25.06.2009
Сообщений: 147


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Что это было?
Это ежедневная работа робота по созданию контура заготовки на центр столярных изделий... резьба по дереву на станке ЧПУ...
А именно, резьба бывает разных размеров...
Сейчас благодаря людям которые помогли -1 проблема... http://forum.dwg.ru/showthread.php?t=43089
и если будет решение и этой, тогда бомба...
Просто заготовки столярам давать с цифрами например 11,5мм или 1382,3мм неправильно, или глупо, некто так делать не будет... поэтому округление будет просто находкой т.к. эти действия производятся в ручную, и в больших количествах ...
Миниатюры
Нажмите на изображение для увеличения
Название: пример.jpg
Просмотров: 94
Размер:	23.9 Кб
ID:	29557  
Positron вне форума  
 
Непрочитано 25.11.2009, 12:57
#4
VVA

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


Positron, Я как то одному студенту писал (не бесплатно ) лабораторную по лиспу. Условие было такое: полилинией начерчен некий контур, нужно ткнуть мышкой внутри и программа должна распознать внутрь какого контура ткнули и подписать его текстом. Распознаются следуюшие контура:
1. Треугольник (в том числе прямоугольный, равносторонний и равнобедренный)
2. Ромб
3. Квадрат
4. Трапеция
5. Параллелограмм
6. Прямоугольник
7. Круг
В твоем случае квадрат можно считать частным случаем прямоугольника, а можно и ромб с паралллелограммом туда присобачить.
Так как это лабораторная, то код обильно снабжен комментариями.
Это я к тому, что вся математика там есть, можно выкинуть ненужное и п.1 и 2 по твоему Т.З. практически готовы. У меня пока нет на это времени. Может кто-нибудь возьмется
Вложения
Тип файла: lsp dz8.lsp (10.6 Кб, 89 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 25.11.2009, 13:38
#5
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Вот насочинял, для нормальных прямоугольников работает...
Код:
[Выделить все]
(defun c:test (/ offs prim sp t1 t2 t3 tc a b t1n t2n t3n t4n)
  (setq	offs (getint "\nОфсет: ")
	prim
	     (entget
	       (car
		 (entsel
		   "\Прямоугольник: "
		 )
	       )
	     )
	sp   (mapcar
	       'cdr
	       (vl-remove-if-not
		 '(lambda (x) (= (car x) 10))
		 prim
	       )
	     )
	t1   (car sp)
	t2   (cadr sp)
	t3   (caddr sp)
	tc   (polar t1 (angle t1 t3) (/ (distance t1 t3) 2))
	a    (+ (* (fix (/ (* 2 (distance t2 t1)) 10)) 2.5) offs)
	b    (+ (* (fix (/ (* 2 (distance t2 t3)) 10)) 2.5) offs)
	t1n  (polar (polar tc (angle t2 t1) a) (angle t3 t2) b)
	t2n  (polar (polar tc (angle t1 t2) a) (angle t3 t2) b)
	t3n  (polar (polar tc (angle t1 t2) a) (angle t2 t3) b)
	t4n  (polar (polar tc (angle t2 t1) a) (angle t2 t3) b)
  )
  (entmakex
    (list
      '(0 . "LWPOLYLINE")
      '(100 . "AcDbEntity")
      '(370 . 0)
      '(100 . "AcDbPolyline")
      '(90 . 4)
      '(70 . 1)
      (cons 10 t1n)
      (cons 10 t2n)
      (cons 10 t3n)
      (cons 10 t4n)
    ) ;_ list
  ) ;_  entmakex
)
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 26.11.2009, 15:15
#6
Positron


 
Регистрация: 25.06.2009
Сообщений: 147


Цитата:
Сообщение от Disney Посмотреть сообщение
Вот насочинял, для нормальных прямоугольников работает...
Спасибо, работает хорошо!
Вот есть еще вопрос какие цифре в лиспе поменять шоб кратность округления менять? типа не 5, а например 10...(к примеру 1385,3=1390, а не 1385)
Может это мелочь но иногда будет полезно, вить 10 это 1 см...

Если сложно и долго тогда не стоит мучатся, чуть пожее сам разберусь, дето после нового года думаю книгу по лиспам дочитаю

для тех кому надо, комбинация макросов...
^C^C_obvod;\\\_test;5;l;
-тут отступ 5
^C^C_obvod;\\\_test;10;l;
-тут отступ 10
Positron вне форума  
 
Непрочитано 26.11.2009, 20:01
#7
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Positron Посмотреть сообщение
какие цифре в лиспе поменять шоб кратность округления менять? типа не 5, а например 10
Добавил:
1) ввод кратности округления
2) запоминает и ввод по умолчанию предыдущего значения
3) зацикливание после ввода
(defun c:geo_offset
(/ offs okr prim sp t1 t2 t3 tc a b t1n t2n t3n t4n)
(setq geo_offs (if geo_offs
geo_offs
5
)
offs (getint (strcat "\nОтступ<" (itoa geo_offs) ">: "))
geo_offs (if offs
offs
geo_offs
)
geo_okr (if geo_okr
geo_okr
5
)
okr (getint (strcat "\nОкруглять до<" (itoa geo_okr) ">:"))
geo_okr (if okr
okr
geo_okr
)
)
(while
(setq
prim
(entget
(car
(entsel
"\nУкажите прямоугольник: "
)
)
)
)
(setq
sp (mapcar
'cdr
(vl-remove-if-not
'(lambda (x) (= (car x) 10))
prim
)
)
t1 (car sp)
t2 (cadr sp)
t3 (caddr sp)
tc (polar t1 (angle t1 t3) (/ (distance t1 t3) 2))
a (*
(fix (+ 0.5 (/ (+ (distance t2 t1) (* 2 geo_offs)) geo_okr)))
(/ geo_okr 2)
)
b (*
(fix (+ 0.5 (/ (+ (distance t2 t3) (* 2 geo_offs)) geo_okr)))
(/ geo_okr 2)
)
t1n (polar (polar tc (angle t2 t1) a) (angle t3 t2) b)
t2n (polar (polar tc (angle t1 t2) a) (angle t3 t2) b)
t3n (polar (polar tc (angle t1 t2) a) (angle t2 t3) b)
t4n (polar (polar tc (angle t2 t1) a) (angle t2 t3) b)
)
(entmakex
(list
'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
'(90 . 4)
'(70 . 1)
(cons 10 t1n)
(cons 10 t2n)
(cons 10 t3n)
(cons 10 t4n)
)
)
)
)
(princ "\nВызов команды: Geo_offset")
Вложения
Тип файла: lsp Geo_offset.LSP (1.5 Кб, 53 просмотров)
__________________
Почему все вдруг становятся умными, когда уже не надо?

Последний раз редактировалось Disney, 01.12.2009 в 20:36. Причина: убрал 0-ой вес линии
Disney вне форума  
 
Автор темы   Непрочитано 01.12.2009, 15:54
#8
Positron


 
Регистрация: 25.06.2009
Сообщений: 147


Цитата:
Сообщение от Disney Посмотреть сообщение
Добавил:
1) ввод кратности округления
2) запоминает и ввод по умолчанию предыдущего значения
3) зацикливание после ввода
(defun c:geo_offset
(/ offs okr prim sp t1 t2 t3 tc a b t1n t2n t3n t4n)
(setq geo_offs (if geo_offs
geo_offs
5
)
offs (getint (strcat "\nОтступ<" (itoa geo_offs) ">: "))
geo_offs (if offs
offs
geo_offs
)
geo_okr (if geo_okr
geo_okr
5
)
okr (getint (strcat "\nОкруглять до<" (itoa geo_okr) ">:"))
geo_okr (if okr
okr
geo_okr
)
)
(while
(setq
prim
(entget
(car
(entsel
"\nУкажите прямоугольник: "
)
)
)
)
(setq
sp (mapcar
'cdr
(vl-remove-if-not
'(lambda (x) (= (car x) 10))
prim
)
)
t1 (car sp)
t2 (cadr sp)
t3 (caddr sp)
tc (polar t1 (angle t1 t3) (/ (distance t1 t3) 2))
a (*
(fix (+ 0.5 (/ (+ (distance t2 t1) (* 2 geo_offs)) geo_okr)))
(/ geo_okr 2)
)
b (*
(fix (+ 0.5 (/ (+ (distance t2 t3) (* 2 geo_offs)) geo_okr)))
(/ geo_okr 2)
)
t1n (polar (polar tc (angle t2 t1) a) (angle t3 t2) b)
t2n (polar (polar tc (angle t1 t2) a) (angle t3 t2) b)
t3n (polar (polar tc (angle t1 t2) a) (angle t2 t3) b)
t4n (polar (polar tc (angle t2 t1) a) (angle t2 t3) b)
)
(entmakex
(list
'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(370 . 0)
'(100 . "AcDbPolyline")
'(90 . 4)
'(70 . 1)
(cons 10 t1n)
(cons 10 t2n)
(cons 10 t3n)
(cons 10 t4n)
)
)
)
)
(princ "\nВызов команды: Geo_offset")
Спс огромное работает на ура!
токо 1-н момент немогу понять чото оно линии даёт толщину 0.00 в 2-х лиспах?(луче б по слою)
Positron вне форума  
 
Непрочитано 01.12.2009, 20:39
#9
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Positron Посмотреть сообщение
токо 1-н момент немогу понять чото оно линии даёт толщину 0.00 в 2-х лиспах?(луче б по слою)
Точно, забыл удалить, скопировал из др. места, где был нужен 0-ой вес.
Всё исправил перескачай
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 07.12.2009, 19:15
#10
Positron


 
Регистрация: 25.06.2009
Сообщений: 147


Цитата:
Сообщение от Disney Посмотреть сообщение
Точно, забыл удалить, скопировал из др. места, где был нужен 0-ой вес.
Всё исправил перескачай
Спс, теперь работает превосходно.
Positron вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Контур с округлением кратным 5



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Невозможно заштриховать контур, полученный сечением 3Д-тела T-Yoke AutoCAD 7 21.09.2009 12:14
Как получить контур полилинии с различной шириной Marina AutoCAD 5 26.12.2008 09:16
как с помощью vba восстановить контур штриховки vasyavip Программирование 1 05.11.2008 21:36
Тела пересекаются, как нарисовать контур пересечения BM60 AutoCAD 12 08.09.2008 11:09
При копир-ии или перемещ исчез контур детали ACAD2007eng rus22 AutoCAD 1 10.09.2007 00:22