Перейти к содержимому


Почти работающий лисп

Lisp

Сообщений в теме: 12

#1 ooo.edp

    Посетитель

  • Пользователи
  • PipPip
  • 11 сообщений

Отправлено 20 Октябрь 2016 - 14:52

Добрый день.

Роясь в автокадовских лиспах и проверяя их на совместимость с NanoCad 7 8, обнаружил очень полезный лисп, расставляющий выноски с координатами указанных точек по чертежу.

В версии 7.0х64 Лисп отрабатывает почти до конца, но ничего не отрисовывает.

В версии 8.0х64 выноска отрисовывается, но Nanocad вылетает с неустранимой ошибкой

Может есть тут кто умный, разбирающийся в Lispе, кто переделает скрипт?

Прикрепленные файлы

  • Прикрепленный файл  ошибка.png   27,8К   1 Количество загрузок:
  • Прикрепленный файл  vinoska.lsp   3,31К   4 Количество загрузок:

Сообщение отредактировал ooo.edp: 20 Октябрь 2016 - 16:47


#2 Kreator

    Активист

  • Пользователи
  • PipPipPipPip
  • 671 сообщений
  • Пол:Мужчина
  • Город:Краснодар

Отправлено 20 Октябрь 2016 - 15:49

Просмотр сообщенияooo.edp (20 Октябрь 2016 - 14:52) писал:

Добрый день.
Может есть тут кто умный, разбирающийся в Lispе, кто переделает скрипт?
Добрый.
NC 6+ x86 - полёт нормальный, выноску ставит и не вылетает никуда. NC 6+ x64 - ставит и вылетает. Вопрос о багах, наверное.
В смысле я не умный в LISP'е, поэтому только проверка :) Попробуйте отловить момент ошибки - закомментируйте последние строки после _addleader, и запускайте, поочерёдно вводя в код закомментированные строки.

Сообщение отредактировал Kreator: 20 Октябрь 2016 - 15:52

Полховский А.В. Проектирование железнодорожных путей
nanoCAD Plus 10.1.4468.1506; MultiCAD.NET; Печатаем просто и быстро

#3 ooo.edp

    Посетитель

  • Пользователи
  • PipPip
  • 11 сообщений

Отправлено 21 Октябрь 2016 - 09:36

Добрый день.

Согласен, метод "научного тыка" бывает работоспособным и иногда себя оправдывает.

Закомментировав некоторые строки добился того, что в NanoCad 8х64 выноска все-таки рисуется в виде линии выноски и отдельного многострочного текста. Но только одну выноску. Если же снова ввести команду запуска скрипта, то после указания направления выноски "Работа NanoCad прекращена......"
В NanoCad 7х64:

XYUCS - XYUCS
ошибка: недопустимая функция: 7599.33 - число это похоже всего координата выноски по "Х"

Закомментированные строки:

;; (vla-put-insertionpoint ann_obj (vlax-3d-point end-point))
;; Теперь модицифируем собственно выноску - это было комментарием, просто чтобы не вырезать построчно
;; (vla-put-verticaltextposition lead_obj acOutside)
;; (vla-put-ArrowheadSize lead_obj 0.5)

В общем, умный человек все еще востребован,

Прикрепленные файлы

  • Прикрепленный файл  vinoska2.lsp   3,32К   2 Количество загрузок:


#4 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 277 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 24 Октябрь 2016 - 11:43

Просмотр сообщенияKreator (20 Октябрь 2016 - 15:49) писал:

NC 6+ x86 - полёт нормальный, выноску ставит и не вылетает никуда .
а можно узнать(ради научного интереса) что это за выноска, какого типа? Ведь если скрипт "автокадовский" - он чертит некую "автокадовскую" выноску. Но с интерфейса nanoCAD такую выноску создать (насколько я понимаю) нельзя, т.к. в nanoCAD используются свои выноски. По всей вероятности, это выноски из Teiga.dwg"обернутые" доп.функционалом, с кучей "ручек", доп.функций и прочего.
Таким образом, вопрос вероятно можно перефразировать так: реализован ли для LISP вызов API для родных выносок nanoCAD, или реализован вызовов API Teiga для отрисовки выноски?

Сообщение отредактировал Ivanco: 24 Октябрь 2016 - 11:47

"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET

#5 Kreator

    Активист

  • Пользователи
  • PipPipPipPip
  • 671 сообщений
  • Пол:Мужчина
  • Город:Краснодар

Отправлено 24 Октябрь 2016 - 15:58

Просмотр сообщенияIvanco (24 Октябрь 2016 - 11:43) писал:

а можно узнать(ради научного интереса) что это за выноска, какого типа? Ведь если скрипт "автокадовский" - он чертит некую "автокадовскую" выноску. Но с интерфейса nanoCAD такую выноску создать (насколько я понимаю) нельзя, т.к. в nanoCAD используются свои выноски. По всей вероятности, это выноски из Teiga.dwg"обернутые" доп.функционалом, с кучей "ручек", доп.функций и прочего.
Таким образом, вопрос вероятно можно перефразировать так: реализован ли для LISP вызов API для родных выносок nanoCAD, или реализован вызовов API Teiga для отрисовки выноски?
А чёрт знает, что это такое :) Называется "Выноска", ручек всего 2 - точка и начало полки. Никаких стрелок. Причём текст отдельно в виде МТекста с маскировкой. Вероятно, использован какой-то родной автокадовский тип выноски, о коих копий сломано немало в других темах в стиле "почему не поддерживается MLEADER" и т.п. Вероятно, и вылетает по этому поводу. И скорее всего, результат в NC не такой, как в AC - стрелки нет, хотя в коде она добавляется. Есть предположение, что эта выноска реализована криво/не до конца. Оно и понятно - в NC гораздо более весёлые родные выноски, выдранные из СДПС. Но это давний спор.
По поводу кода. Я не большой программист, но расставил контрольные точки и выяснил, что код не переживает вызова этой функции:
  (vla-put-attachmentpoint ann_obj
    (+ 4 (if (> (car end-point) (car start-point)) ; выноска вправо, точка — влево
	   0  2) ;_ end of if
	   (if (/= low-string "")	  ; нижняя строка есть, выр. — по  центру
		   0 3) ;_ end of if
	   ) ;_ end of +
	) ;_ end of vla-put-AttachmentPoint
Т.е. изменение точки привязки полки.
Надо пробовать заменить vla-addleader на что-то более родное для NC. В крайнем случае, палочки нарисовать :D Вообще, лисп - это жесть... Проще заново написать на .Net, хоть синтаксис просматривается :)
Полховский А.В. Проектирование железнодорожных путей
nanoCAD Plus 10.1.4468.1506; MultiCAD.NET; Печатаем просто и быстро

#6 ooo.edp

    Посетитель

  • Пользователи
  • PipPip
  • 11 сообщений

Отправлено 26 Октябрь 2016 - 08:51

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

#7 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 277 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 26 Октябрь 2016 - 09:01

Просмотр сообщенияooo.edp (26 Октябрь 2016 - 08:51) писал:

Эти точки можно и вручную набивать, но на больших объектах это и долго и ошибки проскакивают.
Варианты:
1.В СПДС можно сделать так - не быстро , но ошибок не будет.
2. Ждать когда найдется добрый человек который перепишет/напишет заново скрипт.
3. Заказать где нибудь переделку скрипта. (либо написание заново, если на Lisp невозможно).Как и озвучивали выше.
P.S в Lisp я тоже не разбираюсь, в .net API вроде по выноскам есть методы/свойства.

Сообщение отредактировал Ivanco: 26 Октябрь 2016 - 09:02

"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET

#8 Robink

    Активист

  • Пользователи
  • PipPipPipPip
  • 351 сообщений
  • Пол:Мужчина
  • Город:Казань
  • Интересы:САПРостроение

Отправлено 26 Октябрь 2016 - 10:10

по .Net да есть
public static void CreateMultiLeader()
  {
   Document doc = Application.DocumentManager.MdiActiveDocument;
   Database db = doc.Database;

   using (Transaction tr = db.TransactionManager.StartTransaction())
   {	
    BlockTable bt = tr.GetObject(db.BlockTableId, 0) as BlockTable;
   
    BlockTableRecord ms  = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

    var startPt = new Point3d(1000, 1000, 0);
    var endPt = new Point3d(0, 0, 0);

    Vector3d v = endPt - startPt;
    Point3d landPt = startPt + v;
    MLeader mld = new MLeader();

    int ldNum = mld.AddLeader();
    int lnNum = mld.AddLeaderLine(ldNum);
    mld.AddFirstVertex(lnNum, landPt);
    mld.AddLastVertex(lnNum, startPt);
   
    //Create the MText
    MText mt = new MText();
    mt.Contents = "Multileader with";

    mld.ContentType = ContentType.MTextContent;
    mld.MText = mt;
    mld.TextLocation = startPt;

    ms.AppendEntity(mld);
    tr.AddNewlyCreatedDBObject(mld, true);

    tr.Commit();
   }
  }


#9 ooo.edp

    Посетитель

  • Пользователи
  • PipPip
  • 11 сообщений

Отправлено 27 Октябрь 2016 - 16:45

Ради такого дела поставил Visual Studio. Я конечно чайник-чайник, но покурил форум и мануалы.
Откомпилировал для версий 7х64 и 8х64.
Рисует в NanoCad выноску от точки 0,0,0
позиция полки 1000, 1000, 0
В NanoCad 7x64 выноска не редактируется.
А как реализовать выноску нанокадовскую?

#10 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 277 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 28 Октябрь 2016 - 21:10

Просмотр сообщенияooo.edp (27 Октябрь 2016 - 16:45) писал:

А как реализовать выноску нанокадовскую?
На MultiCAD.NET однако:
Скрытый текст
1.Подключить к проекту:System.Windows.Forms.dll,mapibasetypes.dll,mapimgd.dll( у двух последних CopyLocal -False)
2.Скомпилировать под нужную платформу.
3. ptCoordToNote - команда.
P.S. упс, движок форума сбивает форматирование кода..

Сообщение отредактировал Ivanco: 28 Октябрь 2016 - 21:35

"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET

#11 Robink

    Активист

  • Пользователи
  • PipPipPipPip
  • 351 сообщений
  • Пол:Мужчина
  • Город:Казань
  • Интересы:САПРостроение

Отправлено 29 Октябрь 2016 - 22:04

А в 8 выносные разве не шевелятся? Я сейчас перешел на дин блоки.

#12 ooo.edp

    Посетитель

  • Пользователи
  • PipPip
  • 11 сообщений

Отправлено 30 Октябрь 2016 - 20:13

Да ,шевелятся выносные линии в 8-ке. Но не до конца там совместимость отработана, случаются глюки и непонятные изменения выносок.
И динамические блоки в 8-ке работают гораздо лучше. Несколько моих динамических блоков, созданных в Автокаде жутко глючили, а в 8-ке нормально заработали. Было неожиданно приятно.

#13 ooo.edp

    Посетитель

  • Пользователи
  • PipPip
  • 11 сообщений

Отправлено 07 Ноябрь 2016 - 16:32

Цитата

На MultiCAD.NET однако
...
Так как меня не устраивал результат программы на мультикаде, то пришлось разбираться самому.
Тапками не бейте, я совсем чайник (см. 9 пост)
Вот что в итоге получилось:

Скрытый текст

Компилировал для NanoCad 8x64 - все работает.
Теперь надо разобраться:
- как исполнять команду не однократно
- как управлять направлением полки выноски (сейчас она все время вправо от начала)
- как прикрутить dll на кнопку.
Для NanoCad 7x64 не компилирует, ругается на необходимость Net 4.0.0

Прикладываю dll
команда запуска ptCoordToNote

Прикрепленные файлы

  • Прикрепленный файл  Vinoska.zip   2,11К   3 Количество загрузок:

Сообщение отредактировал ooo.edp: 08 Ноябрь 2016 - 08:54






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей