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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите с программой контактная площадка

Помогите с программой контактная площадка

Ответ
Поиск в этой теме
Непрочитано 06.04.2019, 15:16 #1
Помогите с программой контактная площадка
Stailz
 
Регистрация: 06.04.2019
Сообщений: 1

Всем доброго времени суток. Сразу по делу. Есть более 600 координат цента в файле .txt, формата
10045.950 10815.255
10120.950 10815.255
80.445 3997.950
80.445 5272.950
15266.555 10046.050
10570.950 10815.255
14116.050 191.745
Требуется на LISP написать программу, которая берет координаты из файла и чертит по ним контактные площадки в виде квадрата с ребром равным 50 мкм, в идеале добавить возможность менять длину ребра квадрата выборочных координат.
О наболевшем: в программировании чуть больше чем ноль, в целях производственной необходимости изучаю LISP два месяца, но связать одно с другим не получается, пробовал менять другие программы, получается только ломать. Очень рассчитываю на вашу помощь!
Просмотров: 3205
 
Непрочитано 06.04.2019, 15:51
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Если это не учебная задача, то самый простой путь - сделайте блок квадрата нужного вам размера и в excel сформируйте файл сценария со вставкой блока в нужные точки. И лисп и программирование тут не шибко то и нужно...
Ну а если учебная, то "Пилите Шура, пилите"(с)
Boxa вне форума  
 
Непрочитано 06.04.2019, 16:57
#3
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


ну или открыть в экселе, добавить столбец "длина ребра" и через COM-интерфейс создавать площадки в акаде. Если за два месяца не смогли продвинуться в лиспе - возможно, он не для вас.. есть и другие языки программирования для акада, более привычные)
Сергей812 вне форума  
 
Непрочитано 06.04.2019, 17:51
#4
Семёныч


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


Какой exel, какие другие программы, когда в AutoLisp все элементарно получается.
Код:
[Выделить все]
;;; Частная задача отрисовки массива прямоугольников с координатами центров,
;;; взятых из текстового файла (например, "коорд.txt")

(defun C:ПЛЩ ( / echo *error* fl ff st str ptx pty ptc pt1 pt2)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
;;; Обработчик ошибок
(defun *error* (msg)
(setvar "CMDECHO" echo)
(princ "\nДостигнут конец файла.")
(princ)
) ; *error*
;;; (setq fl (getfiled "Выбор файла" "коорд" "txt" 0))  ;; в общем случае
(setq fl (findfile "коорд.txt")) ;;; Если файл с координатами находится на доступном пути 
(setq ff (open fl "r"))
(initget 6)
(setq st (getint "\nСторона квадрата <50>: "))
(if (= st nil) (setq st 50))
(setq st (/ st 2))
(setq str T)
(while str
    (setq str (read-line ff))
    (princ "\n") (princ str)
    (setq ptx (read str))
    (setq pty (read (vl-string-left-trim (rtos ptx 2 4) str)))
    (setq ptc (list ptx pty))
    (setq pt1 (list (- (nth 0 ptc) st) (- (nth 1 ptc) st)))
    (setq pt2 (list (+ (nth 0 ptc) st) (+ (nth 1 ptc) st)))
    (vl-cmdf "_RECTANG" "_none" pt1 "_none" pt2)
) ; while
(close fl)
(setvar "CMDECHO" 0)
(princ)
)
Учитесь, Шура Stailz, учитесь.
Семёныч вне форума  
 
Непрочитано 06.04.2019, 17:52
#5
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от Stailz Посмотреть сообщение
Требуется на LISP написать программу, которая берет координаты из файла и чертит по ним контактные площадки в виде квадрата с ребром равным 50 мкм,
Любой вопрос начинай с Поиска по форуму! И будет тебе счастье
В этой теме http://forum.dwg.ru/showthread.php?t=20808 я в п.17 задавал аналогичный вопрос,
а в п.18 был ответ
Двух месяцев опыта Лиспа должно хватить для реализации.
P.S. >Семёныч Взгляни тоже. kpblc предложил там красивое решение. Да и Блок более экономное решение при больших количествах примитивов
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 06.04.2019, 18:37
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Цитата:
Сообщение от Семёныч Посмотреть сообщение
Какой exel, какие другие программы, когда в AutoLisp все элементарно получается.
Вы сначала научитесь читать полностью, прежде чем пальцы гнуть)
Цитата:
Сообщение от Stailz Посмотреть сообщение
в идеале добавить возможность менять длину ребра квадрата выборочных координат.
Т.е. либо в файле будет в строчке третье число - длина ребра, либо тот же третий столбец в экселе.
Сергей812 вне форума  
 
Непрочитано 06.04.2019, 19:22
| 1 #7
Семёныч


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Вы сначала научитесь читать полностью
А вам не мешало научиться не только читать, но и писать:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну или открыть в экселе, добавить...
Даже школьникам известно, что новое предложение начинается с заглавной буквы.
Теперь в отношении "читать". В тексте моей программы русским языком написано, что это частная задача. А это значит, что возможно как развитие самой моей программы, так и другие решения, предложенные другими участниками форума. Пример: сообщение от Alan. Он, конечно, не знает, что я наблюдаю за форумом много-много лет и некоторых товарищей знаю достаточно хорошо. И я знаю, что, как правило, Alan предлагает конструктивные решения. В отношении вас же и еще некоторых товарищей я могу сказать, что вы думаете, будто "даете удочку", а не "рыбу". Но это не так. Вы ничего не даете, вы забалтываете проблему и даете невыполнимые и часто издевательские советы. Здесь открытый форум, темы читают не только авторы, но и другие пользователи, поэтому предлагаемые работоспособные решения могут помочь заинтересованным людям в изучении того же AutoLisp'а. А в идеале, конечно, интереснее такие задачи, решение которых было бы не стыдно поместить в раздел "Готовые программы". Когда-то он активно пополнялся, но теперь некоторые предпочитают отправить спрашивающих в "Поиск исполнителей", нежели предложить простое, но работающее решение задачи.
Семёныч вне форума  
 
Непрочитано 06.04.2019, 19:35
#8
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Offtop:
Цитата:
Сообщение от Семёныч Посмотреть сообщение
А вам не мешало научиться не только читать, но и писать:
Опять вы форум с тотальным диктантом перепутали) Здесь надо писать понятно, а понты по правописанию лучше в другом месте демонстрировать)


Цитата:
Сообщение от Семёныч Посмотреть сообщение
Теперь в отношении "читать". В тексте моей программы русским языком написано, что это частная задача.
Если это частная задача, то размер грани равен
Цитата:
Сообщение от Stailz Посмотреть сообщение
в виде квадрата с ребром равным 50 мкм,
и зачем делать ввод константы, если это об этом не говорилось в исходных условиях? Ну понятное дело, ведь это я
Цитата:
Сообщение от Семёныч Посмотреть сообщение
Вы ничего не даете, вы забалтываете проблему
пока кто-то занимается проверкой правописания вместо внимательного чтения исходных данных)

----- добавлено через ~1 ч. -----
Offtop: Дополнение к посту№3 - простенькая функция для экселя:
Код:
[Выделить все]
' Создание массива площадок. Аргументы:
' aInputRange - входной диапазон данных (если два столбца, то берется
'               значение ребра по умолчанию. Если три - в случае ненулевого
'               значения берется вместо значения ребра по умолчанию)
' aDefSize - размер ребра площадки по умолчанию
' Возврат: true - операция создания прошла успешно, false - нет
Public Function CreateAreas(aInputRange As Range, _
  ByVal aDefSize As Double) As Boolean
  ' По умолчанию ошибка создания площадок
  CreateAreas = False
  Dim lHalfSize As Double, lSize As Double, lCX As Double, lCY As Double
  Dim lAcadPL As AcadLWPolyline, lAcadApp As AcadApplication
  Dim lMS As AcadModelSpace, lVertices(0 To 9) As Double
  ' Обработчик ошибок
  On Error GoTo ErrCreateAreas
  ' Подключаемся к акаду и получаем пространство модели
  Set lAcadApp = GetObject(, "AutoCAD.Application")
  Set lMS = lAcadApp.ActiveDocument.ModelSpace
  ' Получаем флаг наличия кастомного размера ребра
  Dim lIsCustomSize As Boolean: lIsCustomSize = aInputRange.Columns.Count > 2
  ' Получаем количество строк данных
  Dim lCountRows As Long: lCountRows = aInputRange.Rows.Count
  ' Получаем массив входных данных
  Dim lInputData As Variant: lInputData = aInputRange
  ' В цикле по входным данным
  Dim I1 As Long
  For I1 = 1 To lCountRows
    ' Получаем размер половины грани площадки
    lHalfSize = aDefSize / 2
    If (lIsCustomSize) Then
      lSize = lInputData(I1, 3)
      ' Если больше минимального зазора
      If (lSize > 0.1) Then lHalfSize = lSize / 2
    End If
    ' Получаем координаты центра
    lCX = lInputData(I1, 1)
    lCY = lInputData(I1, 2)
    ' Задаем массив координат вершин
    lVertices(0) = lCX - lHalfSize: lVertices(1) = lCY - lHalfSize
    lVertices(2) = lCX + lHalfSize: lVertices(3) = lCY - lHalfSize
    lVertices(4) = lCX + lHalfSize: lVertices(5) = lCY + lHalfSize
    lVertices(6) = lCX - lHalfSize: lVertices(7) = lCY + lHalfSize
    lVertices(8) = lVertices(0): lVertices(9) = lVertices(1)
    ' Добавляем квадрат в пространство модели
    Set lAcadPL = lMS.AddLightWeightPolyline(lVertices)
    lAcadPL.Closed = True
    lAcadPL.Update
  Next I1
  ' Возвращаем успешное создание площадок
  CreateAreas = True
ErrCreateAreas:
  ' Освобождаем ссылки на объекты
  If (Not (lMS Is Nothing)) Then Set lMS = Nothing
  If (Not (lAcadApp Is Nothing)) Then Set lAcadApp = Nothing
  ' Освобождаем массив входных данных
  If (IsArray(lInputData)) Then Erase lInputData
End Function

Использование:
CreateAreas(%Диапазон данных листа - 2 или 3 столбца%, %Размер грани по умолчанию%)

Последний раз редактировалось Сергей812, 06.04.2019 в 20:48.
Сергей812 вне форума  
 
Непрочитано 06.04.2019, 22:02
#9
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от Семёныч Посмотреть сообщение
Вы ничего не даете, вы забалтываете проблему и даете невыполнимые и часто издевательские советы.
Ну да, "все .... , а я Д’Артаньян". Видимо то, что было написано в этой http://forum.dwg.ru/showthread.php?t=151893 теме прошло мимо... бывает. Со временем проходит, но не у всех.

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

В любом случае, ИМХО, программирование для решения этой задачи - оверскилл, а значит задача, в такой постановке, очень похожа на учебную, а если вспомнить, что на дворе апрель, и Студіозусъ рубят хвосты, то медвежья услуга обществу прям таки на лицо.

ЗЫ.
С нетерпением жду сообщения об ошибках в тексте.

Последний раз редактировалось Boxa, 06.04.2019 в 22:09.
Boxa вне форума  
 
Непрочитано 07.04.2019, 09:07
#10
trushev


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


Boxa, Дополню:
Системные переменные в конце работы программы обычно восстанавливаются.
trushev вне форума  
 
Непрочитано 07.04.2019, 10:11
#11
Семёныч


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
но даже такой лапоть как я помнит, про то, что привязки надо бы отключать на время использования командных методов с указанием точек
Видимо вы действительно лапоть, раз не заметили временного отключения привязок во время отрисовки прямоугольника.
Все остальные ваши соображения, так же ка и соображения Сергей812, я отметаю, как демагогические, волюнтаристские и отрицающие гуманизм. Советы давать мне у вас нет никаких резонов. Пацаны вы еще.
Цитата:
Сообщение от Boxa Посмотреть сообщение
С нетерпением жду сообщения об ошибках в тексте.
Это я должен ждать каких-то сообщений от автора темы. Я использовал текстовый файл всего с 7 строками. Работает программа быстро. Если же поверить Alan'у, то при текстовых файлах большого размера время работы программы, основанной на командных методах, значительно возрастает. Но его ссылка уводит нас на несколько лет назад и, возможно, у автора темы настолько мощный современный компьютер, что даже файл с 700 строками обработается быстро. В противном случае возможны другие решения. Словом, сообщений должен ждать я, а не Boxa с его намерением позлорадствовать и который здесь не привел ни одной строчки кода. Сообщения, повторяю, жду я, но не о каких-то мифических ошибках, которые при подобном примитивном коде маловероятны. Я жду сообщений о реальных результатах и реальных пожеланий от автора темы, а не от желающих растопырить пальцы и выпятить впалую грудь.
Вот такие диалоги я и называю забалтыванием темы.
Семёныч вне форума  
 
Непрочитано 07.04.2019, 10:23
#12
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Цитата:
Сообщение от Семёныч Посмотреть сообщение
Видимо вы действительно лапоть, раз не заметили временного отключения привязок во время отрисовки прямоугольника.
Ну если в коде поста №4 отключение CMDECHO является отключение привязок.. Сразу видно гуру в программировании)
Offtop:
Цитата:
Сообщение от Семёныч Посмотреть сообщение
Советы давать мне у вас нет никаких резонов. Пацаны вы еще.
А хамить не надо, и тем более ведете себя как пацан с гормональным сдвигом в честь весны только вы тут в ветке)
Сергей812 вне форума  
 
Непрочитано 07.04.2019, 10:32
#13
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Сергей812,
Цитата:
Сообщение от Семёныч Посмотреть сообщение
(vl-cmdf "_RECTANG" "_none" pt1 "_none" pt2)
koMon вне форума  
 
Непрочитано 07.04.2019, 10:57
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Цитата:
Сообщение от koMon Посмотреть сообщение
(vl-cmdf "_RECTANG" "_none" pt1 "_none" pt2)
а, не заметил - был неправ, сорри) Когда пробовал лисп - очень быстро на ActiveX методы перешел, чтобы не возиться со всем этим - подавлением привязки, вывода в комстроку и т.п.

----- добавлено через ~12 мин. -----
Ну или entmake использовать. А засылать данные в комстроку - это как понимаю: каждый раз приостанавливается выполнение самой программы, передается управление обратно акаду на время выполнения переданной команды, и потом обратный процесс. Критичная операция, особенно если сбой произойдет.
Сергей812 вне форума  
 
Непрочитано 07.04.2019, 12:49
#15
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от Семёныч Посмотреть сообщение
лапоть, раз не заметили временного отключения привязок во время отрисовки прямоугольника.
Да, не заметил, спасибо показали. Что на счёт коллинеарности сторон квадрата осям и с системами координат? Или это я тоже не заметил? Или это нафиг не нужно?
Впрочем отвечать не нужно, а вот подумать почему ТС два месяца изучая Лисп буквально только на днях зарегистрировался на самом крупном форуме в рунете имеющему Лисп сообщество стоит.
Цитата:
Сообщение от Семёныч Посмотреть сообщение
Пацаны вы еще.
Видимо это не лечится. Добавлю в соответствующий список.... Всего доброго.

Последний раз редактировалось Boxa, 07.04.2019 в 12:56.
Boxa вне форума  
 
Непрочитано 07.04.2019, 15:59
#16
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Offtop: не мог я подумать, что у Виконта де бражелОна будет дуХа не ответствовАть)))
Цитата:
Сообщение от Boxa Посмотреть сообщение
Что на счёт коллинеарности сторон квадрата осям и с системами координат? Или это я тоже не заметил? Или это нафиг не нужно?
могу предположить, что здесь идёт речь о мкроэлетронике. причём это одна из скорее всего, прав Boxa, учебных подзадач. далее пойдут проводники и т.д. но поскольку таким образом, мы имеем дело с микроэлектронной топологией, то контактные площадки в таковой не МОГУТ иметь направленность сторон (не рёбер) отличную от неискажённых абсциссы и ординаты. поэтому да, на фиг не нужно)
koMon вне форума  
 
Непрочитано 07.04.2019, 16:08
#17
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Цитата:
Сообщение от koMon Посмотреть сообщение
далее пойдут проводники и т.д.
Топология микросхем - сложная пространственная задача. Дойдет ли учебная задача..)
Сергей812 вне форума  
 
Непрочитано 07.04.2019, 16:46
#18
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от koMon Посмотреть сообщение
не МОГУТ иметь направленность сторон (не рёбер) отличную от неискажённых абсциссы и ординаты. поэтому да, на фиг не нужно)
Локальная система координат может быть и несколько повернута... ладно, мелочи это.
Boxa вне форума  
 
Непрочитано 07.04.2019, 18:03
#19
Кулик Алексей aka kpblc
Moderator

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


А если еще вспомнить про особенности command, vl-cmdf и command-s, то использование командных методов становится совсем печальным
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.04.2019, 09:43
#20
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Топология микросхем - сложная пространственная задача. Дойдет ли учебная задача..)
это запросто может быть курсовой работой, причём если топология делается в специализированном софте, который не позволяет выгнать результат напрямую в форматы, то тут возникает такая вот задача по переносу полученных данных в форматную графику.
koMon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите с программой контактная площадка

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ребята, помогите, плиз, нужна типовая приемная (разгрузочная, погрузочная) площадка на этажах для ПМГ Destany_216 Поиск литературы, чертежей, моделей и прочих материалов 0 25.10.2012 00:50
Площадка для вертолета. помогите Серий Поиск литературы, чертежей, моделей и прочих материалов 1 30.03.2012 16:27
Помогите проверить выбранный тип фундамента! lady_sumerki Основания и фундаменты 9 08.05.2007 11:56
Помогите программой либо принципом автоматизации ссылок Diman111 Программирование 8 08.11.2006 08:32
помогите с программой на лиспе lestate LISP 6 17.10.2006 17:26