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

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

Проблемы с маленьким кодом.

Ответ
Поиск в этой теме
Непрочитано 26.01.2010, 01:59 #1
Проблемы с маленьким кодом.
Chapter
 
Инженер-проектировщик автомобильных дорог
 
Южно-Сахалинск
Регистрация: 21.10.2009
Сообщений: 245

Всем здравствуйте.
Я попытался переписать макрос на Autolisp. И не владея данным языком программирования столкнулся с проблемой которую, я надеюсь, вы поможете мне решить. Как правильно писать визуально я тоже не знаю.
Но смотря на примеры на этом форуме видно деление на подуровни и последующее возвращение к первым скобкам.

Код:
[Выделить все]
(defun C:pipe (/ p1 p2 p3)
              (setq CMD ( getvar     "Cmdecho")                                                              
               OSM ( getvar "Osmode"))
              ( setvar "Cmdecho" 0)
              ( setvar "Osmode" 512)
              ( setq p1 (getpoint "\nПервая точка: "))
              ( setvar "osmode" 128)
              ( setq p2 (getpoint p1 "\nВторая точка: "))
              ( setvar "osmode" 0)
              ( setq p3 (list (car p1) (/ (+ (car (cdr p1)) (car (cdr p2))) 2)))
              ( command "_pline" p1 "_A" "_A" "70" p3 p2 "_A" "-70" p3 ^C)
              ( setvar "cmdecho" CMD )
              ( setvar "osmode" OSM )
  )
Наверное не очень корректно, но суть проблемы в том что меня интересует построение данной полилинии во все стороны,а не только по оси Y, а как это сделать я не знаю.

Вложения
Тип файла: dwg
DWG 2007
Труба.dwg (104.5 Кб, 508 просмотров)


Последний раз редактировалось Chapter, 26.01.2010 в 02:28.
Просмотров: 4132
 
Непрочитано 26.01.2010, 02:09
#2
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Уточни, что должно получиться в результате действия программы
Vova вне форума  
 
Непрочитано 26.01.2010, 08:42
#3
Кулик Алексей aka kpblc
Moderator

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


Chapter, а название поинформативнее?
Насчет написания кодов - посмотри http://autolisp.ru/2009/09/10/vlide-misc-01/ и http://autolisp.ru/2009/09/12/vlide-misc-02/ - там кое-что было.
Кстати, что у тебя там за ^C? В lisp'e такого нет. По идее код должен быть наподобие
Код:
[Выделить все]
(defun c:pipe (/ p1 p2 p3)
  (setq cmd (getvar "Cmdecho")
        osm (getvar "Osmode")
        ) ;_ end of setq
  (setvar "Cmdecho" 0)
  (setvar "Osmode" 512)
  (setq p1 (getpoint "\nПервая точка: "))
  (setvar "osmode" 128)
  (setq p2 (getpoint p1 "\nВторая точка: "))
  (setvar "osmode" 0)
  (setq p3 (list (car p1) (/ (+ (car (cdr p1)) (car (cdr p2))) 2)))
  (command "_pline" p1 "_A" "_A" "70" p3 p2 "_A" "-70" p3)
  (command)
  (setvar "cmdecho" cmd)
  (setvar "osmode" osm)
  ) ;_ end of defun
P.S. Командные методы уже забыл, так что за работоспособность кода не отвечаю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.01.2010, 09:34
#4
Chapter

Инженер-проектировщик автомобильных дорог
 
Регистрация: 21.10.2009
Южно-Сахалинск
Сообщений: 245
<phrase 1=


Алексей спасибо большое что откликнулись.

Теперь о написанном.
1. Я вообще никакой в программировании и во всем что с ним связано.
2. Я прочел методичку под названием "8 уроков Autolisp".
3. Она не большая и все что есть в этом коде я взял оттуда.
4. Я просто попытался приложить крупицу знания взятую из этой методички к чему то реальному.


^C-если бы я знал что это за хрень. Могу сказать почему написал. Я не знал как в принципе должно закончится все то что было написано. Вот и написал вот это.

P.S.

Решения изложенной проблемы в написанном вами коде не наблюдается.
Chapter вне форума  
 
Непрочитано 26.01.2010, 10:09
#5
Кулик Алексей aka kpblc
Moderator

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


Ну тогда вот еще вариант. Правда, без команд:
Код:
[Выделить все]
(vl-load-com)

(defun c:brline (/ ent *error* adoc ang pt1 pt2 mid)
  (defun *error* (msg)
    (if ent
      (entdel ent)
      ) ;_ end of if
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (and (= (type (setq pt1 (vl-catch-all-apply
                                (function
                                  (lambda ()
                                    (getpoint "\nÏåðâàÿ òî÷êà <Îòìåíà> : ")
                                    ) ;_ end of lambda
                                  ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'list
              ) ;_ end of =
           (= (type
                (setq pt2
                       (vl-catch-all-apply
                         (function
                           (lambda ()
                             (getpoint pt1 "\nÂòîðàÿ òî÷êà <Îòìåíà> : ")
                             ) ;_ end of lambda
                           ) ;_ end of function
                         ) ;_ end of vl-catch-all-apply
                      ) ;_ end of setq
                ) ;_ end of type
              'list
              ) ;_ end of =
           ) ;_ end of and
    (progn

      (setq ang (/ (* 17.5 pi) 180.)
            mid (mapcar
                  (function
                    (lambda (a b)
                      (* (+ a b) 0.5)
                      ) ;_ end of lambda
                    ) ;_ end of function
                  pt1
                  pt2
                  ) ;_ end of mapcar
            ent (entmakex (list '(0 . "LWPOLYLINE")
                                '(100 . "AcDbEntity")
                                '(100 . "AcDbPolyline")
                                '(90 . 4)
                                '(70 . 0)
                                '(43 . 0.0)
                                (cons 10 pt1)
                                (cons 42 ang)
                                (cons 10 mid)
                                (cons 42 (- ang))
                                (cons 10 pt2)
                                (cons 42 (- ang))
                                (cons 10 mid)
                                (cons 42 ang)
                                ) ;_ end of list
                          ) ;_ end of entmakex
            ) ;_ end of setq
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.01.2010, 13:09
#6
Chapter

Инженер-проектировщик автомобильных дорог
 
Регистрация: 21.10.2009
Южно-Сахалинск
Сообщений: 245
<phrase 1=


Алексей спасибо вам большое. Код работает как надо. Теперь буду разбирать его что да зачем пользуясь имеющейся литературой.

Спасибо вам большое за ссылки, что есть в вашем первом посте. Полезная информация.

P.S.

Скажите пожалуйста а вот в этом месте

Код:
[Выделить все]
(getpoint "\nÏåðâàÿ òî÷êà <Îòìåíà> : ")
Что это такое? Просто на сколько хватает моего "гигантского" опыта программирования в Autolisp тут пишется что то вроде подсказки к действию. Вы наверное просто перепутали.

P.S.S.

Вы сказали командные методы. Я интуитивно предполагал что поставленную задачу можно решить различными способами в lisp. Наверное что написали вы можно решить и командно, но суть не в этом.

Меня заинтересовала фраза насчет командных методов. То есть методы бывают разные как я понял. И как вы показали на примере выше.

Я не претендую на персональные объяснения. В этом нет смысла, а вот на рекомендации источников, которые бы позволили ознакомится я бы очень положительно отреагировал)

Последний раз редактировалось Chapter, 26.01.2010 в 13:15.
Chapter вне форума  
 
Непрочитано 26.01.2010, 13:29
#7
Кулик Алексей aka kpblc
Moderator

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


Опять у меня Vista нахамила при копировании - вставке. Там написано "Укажите точку <Отмена> : ". Второй запрос, конечно, должен быть "Укажите вторую точку <Отмена> : " (что я напрочь забыл сделать).
Насчет методов... Есть несколько вариантов выполнения работы в AutoCAD. Они все рассматриваются в любой литературе по программированию под AutoCAD и, например, здесь: http://cad.kurganobl.ru/1171.html. Ну и кое-какие исследования я на сайте делал: http://autolisp.ru/2009/09/22/programming-style/
И по поводу источников: на форуме была тема "Книги по LISP" (кажется, так называлась). Там ресурсов было немеряно, многие из них живы по сию пору Из книг я бы порекомендовал 3 штуки:
  • В.Свет "AutoCAD язык макрокоманд и создание макросов" (была в download)
  • Д.Эббот "Секреты AutoCAD, которые должен знать каждый пользователь" (вроде в свое время пытались выложить на форум, но там возник вопрос с авторскими правами. Дальнейшую судьбу книги не отслеживал)
  • С.А.Зуев, Н.Н.Полещук при участии П.В.Лоскутова "САПР на базе AutoCAD - как это делается". Вообще библия разработчика
P.S. Меня все еще один
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.01.2010, 13:44
#8
Alan

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ну тогда вот еще вариант. Правда, без команд:
Код:
[Выделить все]
(vl-load-com)

(defun c:brline
...........
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Алексей, подожди с такими предложениями.
Вспомни знаменитую тему "Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)",
помнишь с КАКОГО текста она начиналась...

>Chapter внимательно прочитайте, думаю многое проясниться
http://forum.dwg.ru/showthread.php?t=22894
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...

Последний раз редактировалось Alan, 26.01.2010 в 13:56.
Alan вне форума  
 
Непрочитано 26.01.2010, 13:51
#9
Кулик Алексей aka kpblc
Moderator

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


Offtop: Господи, да я уж сам про нее забыл!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.01.2010, 13:54
#10
Chapter

Инженер-проектировщик автомобильных дорог
 
Регистрация: 21.10.2009
Южно-Сахалинск
Сообщений: 245
<phrase 1=


Клева.

Алексей я не могу называть человека на ты Алексеем. Если на ты, то значит Леха, а мы же в принципе не знакомы. Поэтому можно я буду так как есть.

Книгу Владимира Лазаревича я уже прочитал и все сделал что там написано. Терь у меня в руках источник авторов Хювенена и Сеппянена. И по уже прочитаному я понял что эта книга не про Autolisp конкретно, но очень много для себя интересного узнал, но главное что я се закала уже полещука именно того что вынаписали со второй его книгой про Autolisp.
Chapter вне форума  
 
Непрочитано 26.01.2010, 13:58
#11
Кулик Алексей aka kpblc
Moderator

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


У Николая Николаевича получаются отменные справочники. Но учиться по ним очень затруднительно. Лично я читал "САПР на базе" вместе с "AutoLISP и секреты адаптации" (Полещук Н.Н., 2002 год). Тогда все получалось более-менее понятно
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.01.2010, 14:06
#12
Chapter

Инженер-проектировщик автомобильных дорог
 
Регистрация: 21.10.2009
Южно-Сахалинск
Сообщений: 245
<phrase 1=


Хм...я не знаю насколько реальную поставил перед собой задачу...но почему бы не попробовать и не попытаться научиться хоть как то программировать в Autolisp.

Просто когда начинаю читат форум пыл как то падает)) Так сказать обволакивание цитатами заставляет меня открывать рот и капать слюну.

Но это отступления. Буду грызть гранит науки, что стала меня интересовать все больше и больше.
Chapter вне форума  
 
Непрочитано 26.01.2010, 14:10
#13
Кулик Алексей aka kpblc
Moderator

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


Offtop: Пока не забыл, из разряда "почему на форуме так": http://kpblc.blogspot.com/2010/01/blog-post.html
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.01.2010, 14:14
#14
Chapter

Инженер-проектировщик автомобильных дорог
 
Регистрация: 21.10.2009
Южно-Сахалинск
Сообщений: 245
<phrase 1=


АААА...хорошо Алексей. Ты меня убедил

P.S.

Я же себе этот справочник с тайнами адаптациито же заказзал.

Код:
[Выделить все]
(setq ang (/ (* 17.5 pi) 180.)
            mid (mapcar
                  (function
                    (lambda (a b)
                      (* (+ a b) 0.5)
                      ) ;_ end of lambda
                    ) ;_ end of function
                  pt1
                  pt2
                  ) ;_ end of mapcar
Алексей скажи вот в этом месте как я понял происходит задание точки, что у нас в центре. Которую можно определить сравнивая с моей писаниной как p3. Переходим в радианы, задаем функцию со значаниями pt1 pt2, вычисляем середину между ними, а потом определяем угол поворота для определения середины между точками?

Можно пожалуйста для полноты картины сказать что такое mapcar. Mid это и есть как я понял аналог p3 из моего кода.

Остальное не спрашиваю потому что не понимаю пока. Жду книг, но смотрел смотрел смотрел смотрел на код и увидел это место, которое оказалось вроде
весьма просто написано, конечно слегка представляя что делает lambda.

Последний раз редактировалось Chapter, 27.01.2010 в 04:47.
Chapter вне форума  
 
Автор темы   Непрочитано 29.01.2010, 01:09
#15
Chapter

Инженер-проектировщик автомобильных дорог
 
Регистрация: 21.10.2009
Южно-Сахалинск
Сообщений: 245
<phrase 1=


Алексей
Chapter вне форума  
 
Непрочитано 29.01.2010, 10:51
#16
Дима_

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


Цитата:
Сообщение от Chapter Посмотреть сообщение
Можно пожалуйста для полноты картины сказать что такое mapcar.
mapcar - функция для обработки списков:
mapcar F lst1 lst2 lst3 ...
возращает список вида
(
(F (car lst1) (car lst2) (car lst3) ... (car lst...))
(F (cadr lst1) (cadr lst2) (cadr lst3) ... (cadr lst...))
....
(F (last lst1) (last lst2) (last lst3).... (last lst...))
)

То есть количество списоков lst - должно соответствовать количеству входных параметров функции F.

В твоем случае - беруться координаты по X,Y,Z обоих точек складываються и деляться пополам - то есть получаем (mid) точку центра линии pt1-pt2.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 29.01.2010, 13:37
#17
Chapter

Инженер-проектировщик автомобильных дорог
 
Регистрация: 21.10.2009
Южно-Сахалинск
Сообщений: 245
<phrase 1=


Спасибо Дима. Это я могу понять. продолжу свое обучение.
Chapter вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Проблемы с маленьким кодом.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Насущные проблемы ПОС, обсуждение замечаний экспертизы и других тонкостей нашего дела antim111 Технология и организация строительства 1942 10.12.2015 12:45
Какая гадость это пространство листа! (или проблемы использования Layout) wetr AutoCAD 140 18.05.2014 15:56
Проблемы с КОМПАС 3D v9 SoDD Компас 142 02.01.2010 20:20
Revit Architecture 2008: Тормоза при работе с 3D моделью, плюс проблемы с тонированием lara Revit 13 09.09.2009 10:05
Civil 3D. Проблемы с подпрофильной таблицей Ygorekk Вертикальные решения на базе AutoCAD 5 18.04.2008 10:12