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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как (лучше) запрограммировать построение фланца сложной формы?

Как (лучше) запрограммировать построение фланца сложной формы?

Ответ
Поиск в этой теме
Непрочитано 20.04.2011, 19:44 #1
Как (лучше) запрограммировать построение фланца сложной формы?
gumel
 
Регистрация: 20.04.2011
Сообщений: 402

Всем привет! Скажу сразу, в LISP-е и в VBA не особо силен. С динамическими блоками, тоже не супер...

У меня есть задача построения фланцев в AutoCAD'е (для ЧПУ машины). Фланец рисуется по строго определенным параметрам:


Нарисовать руками, конечно его не сложно. Но каждый раз, рисуя одно и тоже, понимаю что это не совсем правильно....

p.s. Вообще пишу на Delphi. LISP и VBA уж очень тяжело даются за их специфический и непривычный для меня синтаксис.

Вложения
Тип файла: dwg
DWG 2004
Фланец.dwg (54.5 Кб, 860 просмотров)

Просмотров: 4431
 
Непрочитано 20.04.2011, 20:18
#2
Кулик Алексей aka kpblc
Moderator

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


gumel, ты определись - что надо: или запрограммировать создание полилинии, или создать блок.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.04.2011, 20:31
#3
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Ну так и пиши на дельфи, вопрос то в чем?
Sleekka вне форума  
 
Автор темы   Непрочитано 20.04.2011, 20:50
#4
gumel


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


Вот я и спрашиваю, как ЛУЧШЕ сделать?

По идее динамический блок, - то что нужно. Как его только сделать - я не пойму...

Делать в Delphi не вижу особого смысла. ИМХО, это типа как котлеты с вареньем кушать ))

на VBA я умею строить линии, полилинии и т.п. Как например сделать TRIM (всего лишнего), потом слепить PEDIT'ом все оставшееся в одну полилиниию, вообще ума не приложу...

LISP меня вообще пугает своим количеством скобок..

_______________

порядок построения я бы организовал так:

Последний раз редактировалось gumel, 20.04.2011 в 21:08.
gumel вне форума  
 
Непрочитано 20.04.2011, 21:20
#5
Кулик Алексей aka kpblc
Moderator

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


Как лучше... А что надо получить в результате? DXF-файл? Или просто созданную в пространстве модели полилинию?
Если DXF, то (по крайней мере теоретически) AUtoCAD не особо-то и нужен. Можно просто писать в обычный текстовый файл, соблюдая требования диалекта DXF, который понимается станком. Максимум, для чего понадобится AutoCAD - это для тестирования.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.04.2011, 21:40
#6
gumel


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


Как раз нужно получить в автокаде. В идеале должна быть одна полилиния.
Потом через спец. надстройку в автокаде происходит некоторая обработка данных и формируется файл (зашифрованный), который понимает чпу машина.

По идее можно тупо вычислить все узловые точки и построить полилинию. Формулы выводить лень... ))
gumel вне форума  
 
Непрочитано 20.04.2011, 22:08
#7
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от gumel Посмотреть сообщение
порядок построения я бы организовал так:
Т.е ты хочешь идти по пути построений...
А не задумывался, что будет проще вычислить все сегменты полилинии математически, по отдельности, чтоб сразу создать полилинию?
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 21.04.2011, 07:33
#8
gumel


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


Если путь построений - сложный, то конечно координаты узловых точек можно и посчитать вручную. Меня, правда напрягает вычисление координат точек где получаются радиусы скруглений... Это конечно школьный курс геометрии ))) Просто я предполагал что путь построений проще в данном случае, но как его запрограммировать я чет не могу понять.
Пойду выводить формулы
______________________________

В общем сидел думал как можно сделать полилинию с дуговыми элементами.
Для кого нибудь это покажется слишком простым, а для меня это открытие ,
может кому пригодится:

Код:
[Выделить все]
Public Sub TestDrawArcPolyline() ' рисование полилилинии с элементом дуги
  
  Dim PLN As AcadLWPolyline ' полилиния
  Dim pnts(9) As Double     ' координаты (массив 0..9) x,y,x,y..x,y
  
  '         X             Y
  pnts(0) = 0:  pnts(1) = 0
  pnts(2) = 10: pnts(3) = 0
  pnts(4) = 10: pnts(5) = 5
  pnts(6) = 5:  pnts(7) = 10
  pnts(8) = 0:  pnts(9) = 10
    
  Set PLN = ThisDrawing.ModelSpace.AddLightWeightPolyline(pnts) ' добавим полилинию в область модели
  PLN.Closed = True ' замкнем полилинию (например)
  
' А эта штука позволяет установить кривизну сегменту полилинии (можно заменить отрезок на дугу и наоборот):
  PLN.SetBulge 2, Tan(3.14159265358979 / 2 / 4) ' тут указыватся номер сегмента полилинии и его КРИВИЗНА
                                                ' нумерация сегментов начинается с нуля
                                                ' КРИВИЗНА это тангенс четверти угла, м.б. положительной и отрицательной
End Sub
кстати, почему я не могу написать pi вместо 3.14159265358979 ???? вроде есть такая константа в VB...

Последний раз редактировалось gumel, 21.04.2011 в 09:32.
gumel вне форума  
 
Непрочитано 21.04.2011, 13:55
#9
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Набросал лиспик, может пригодится. Доработай, если что не нравится.

Код:
[Выделить все]
(setq vne_d   (getreal "\nВнешний диаметр:")
      vnu_d   (getreal "\nВнутренний диаметр:")
      otv_d   (getreal "\nДиаметр отверстий:")
      cen_d   (getreal "\nДиаметр по центрам отверстий:")
      kol_o   (getint "\nКоличество отверстий:")
      zazor   (getreal "\nЗазор:")
      skr_r   (getreal "\nРадиус скругления:")
      cen     (getpoint "\nТочка вставки:")
      n_ug    (* pi 0.5)
      ug_pov  (/ (* 2 pi) kol_o)
      dop_ug1 (atan (/ (+ skr_r (* 0.5 zazor))
		       (sqrt (-	(* (- (* 0.5 vne_d) skr_r) (- (* 0.5 vne_d) skr_r))
				(* (+ skr_r (* 0.5 zazor)) (+ skr_r (* 0.5 zazor)))
			     ) ;_ конец -
		       ) ;_ конец sqrt
		    ) ;_ конец /
	      ) ;_ конец atan
      dop_ug2 (atan (/ (+ skr_r (* 0.5 zazor))
		       (sqrt (-	(* (+ (* 0.5 otv_d) skr_r) (+ (* 0.5 otv_d) skr_r))
				(* (+ skr_r (* 0.5 zazor)) (+ skr_r (* 0.5 zazor)))
			     ) ;_ конец -
		       ) ;_ конец sqrt
		    ) ;_ конец /
	      ) ;_ конец atan
) ;_ конец setq
(vl-cmdf "_circle" cen (* 0.5 vnu_d))
(repeat	kol_o
  (setq	pt1  (polar cen
		    (- n_ug dop_ug1)
		    (* vne_d 0.5)
	     ) ;_ конец polar
	pt2  (polar cen
		    (- n_ug dop_ug1)
		    (- (* vne_d 0.5) skr_r)
	     ) ;_ конец polar
	pt3  (polar pt2 (+ n_ug (* 0.5 pi)) skr_r)
	pt7  (polar cen n_ug (* 0.5 cen_d))
	pt6  (polar pt7 (- n_ug dop_ug2) (* 0.5 otv_d))
	pt4  (polar pt6 (- n_ug dop_ug2) skr_r)
	pt5  (polar pt4 (+ n_ug (* 0.5 pi)) skr_r)
	pt11 (polar cen
		    (+ n_ug dop_ug1)
		    (* vne_d 0.5)
	     ) ;_ конец polar
	pt12 (polar cen
		    (+ n_ug dop_ug1)
		    (- (* vne_d 0.5) skr_r)
	     ) ;_ конец polar
	pt13 (polar pt12 (- n_ug (* 0.5 pi)) skr_r)

	pt16 (polar pt7 (+ n_ug dop_ug2) (* 0.5 otv_d))
	pt14 (polar pt16 (+ n_ug dop_ug2) skr_r)
	pt15 (polar pt14 (- n_ug (* 0.5 pi)) skr_r)
	n_ug (+ n_ug ug_pov)
	pt21 (polar cen
		    (- n_ug dop_ug1)
		    (* vne_d 0.5)
	     ) ;_ конец polar
  ) ;_ конец setq
  (vl-cmdf "_pline" "_non" pt16 "_a" "_ce" "_non" pt14 "_non" pt15 "")
  (vl-cmdf "_pline" "_non" pt15 "_non" pt13 "")
  (vl-cmdf "_pline" "_non" pt13 "_a" "_ce" "_non" pt12 "_non" pt11 "")
  (vl-cmdf "_pline" "_non" pt11 "_a" "_ce" "_non" cen "_non" pt21 "")
  (vl-cmdf "_pline" "_non" pt16 "_a" "_ce" "_non" pt7 "_non" pt6 "")
  (vl-cmdf "_pline" "_non" pt1 "_a" "_ce" "_non" pt2 "_non" pt3 "")
  (vl-cmdf "_pline" "_non" pt3 "_non" pt5 "")
  (vl-cmdf "_pline" "_non" pt5 "_a" "_ce" "_non" pt4 "_non" pt6 "")
) ;_ конец repeat

Последний раз редактировалось E-degtyarev, 21.04.2011 в 14:19.
E-degtyarev вне форума  
 
Автор темы   Непрочитано 21.04.2011, 14:50
#10
gumel


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


Ёлки палки, спасибо огромнейшее!!!

Попытаюсь понять этот код, хочу попробовать объединить внешний контур в одну полилинию.

Блин, как красиво все исполнено! Не ожидал, что LISP может такое! Я планировал на VB делать, формулы уже все вывел ))) Но код, думаю, был бы в несколько раз больше.

E-degtyarev, еще раз спасибо тебе большое! Хорошо что есть еще такие люди, которые помогают совершенно незнакомым людям.

Сорри за оффтоп, я тоже стараюсь делать добрые и полезные дела (правда, немножко в другой области). Сейчас делаю одну программу для болельщиков Формулы 1: картинка из программы, а это форум, где обсуждается написание этой проги
gumel вне форума  
 
Непрочитано 28.04.2011, 09:08
#11
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Цитата:
Сообщение от gumel Посмотреть сообщение
Не ожидал, что LISP может такое!
AutoLisp для AutoCAD-а самый родной язык. Жаль только, что Автодеск "забил болт" на это дело и вот уже с десяток лет никакой модернизации
в этом направлении нет. И фирма эта ИМХО стелется под создателя Windows.
E-degtyarev вне форума  
 
Непрочитано 28.04.2011, 10:56
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от E-degtyarev Посмотреть сообщение
AutoLisp для AutoCAD-а самый родной язык.
Я всегда думал, что самый родной язык - это C++, поскольку ObjectARX (читать как "AutoCAD") написан именно на нём
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 28.04.2011, 12:10
#13
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Но тем не менее AutoLisp появился пораньше, и DXF (хотя в современных версиях - она уже не всегда является первичной структурой, но изначально все интерпретрировалось с нее) уж точно заточен под лисп. А что на чем написанно - так мы до ассемблера дойдем.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как (лучше) запрограммировать построение фланца сложной формы?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стальная обойма сложной формы dermoon Металлические конструкции 18 22.03.2011 06:56
Возможнали такая крыша (вальмовая, сложной формы с разными уклонами)? chon Конструкции зданий и сооружений 10 11.05.2010 21:46
Построение развертки фигуры из листового материала сложной формы в Advance Steel Utraz Advance Steel 7 28.02.2010 12:02
SW 2007: Построение штамповоной детали сложной формы IvanKaban SolidWorks 16 14.04.2009 12:50
Помогите!! - твердое тело сложной формы Dima CMM AutoCAD 34 05.08.2006 05:19