dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

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

Ошибка в коде - не могу найти.

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 24.04.2017, 08:36 #1
Ошибка в коде - не могу найти.
La Persona
 
Чайник
 
Регистрация: 01.12.2011
Сообщений: 27

La Persona вне форума Вставить имя

Уважаемые знатоки! Есть небольшая программа, расставляющая пикеты вдоль полилинии. После адаптации с 2d полилинии к 3d начинает появляться ошибка после ПК10+00. Никак не получается выловить её... Буду признателен за помощь. ЗЫ: код любительский, корявый... но на 2D работал исправно.
Код:
[Выделить все]
(vl-load-com)

(defun c:piket( / snp pln base_lenght step_lenght use_lenght
	       block_name block_coord param_point proiz ugol_gr my_block
	       my_att spis_att att_old num_new num_new_str suff att_new
	       xcoord_block ycoord_block x1coord_text x2coord_text
	       y1coord_text y2coord_text coord1_text coord2_text ) 
  (setq snp (getvar "Osmode"))
  (setvar "Osmode" 0) 
  (setq block_name (getstring "Ââåäèòå èìÿ áëîêà:"))
  (setq step_lenght 100)
  (setq pln (car (entsel)))
  (setq base_lenght (vlax-curve-getDistAtParam pln (vlax-curve-getEndParam pln)))
  (setq use_lenght 0)
  (while (<= use_lenght base_lenght)
    (progn
      (setq block_coord (vlax-curve-getPointAtDist pln use_lenght))
      (setq param_point (vlax-curve-getParamAtPoint pln block_coord))
      (setq proiz (vlax-curve-getFirstDeriv pln param_point))
      (setq ugol_gr (* (angle '(0 0 0) proiz) 57.29747))
      (setvar "attreq" 0)
      (command "_.insert" block_name block_coord 1.0 1.0 ugol_gr)
      (setq num_new (fix (/ use_lenght 100)))
      (if (< num_new 10)
	(setq num_new_str (strcat "ÏÊ0" (itoa num_new) "+00"))
	(setq num_new_str (strcat "ÏÊ" (itoa num_new) "+00"))
      )
      (setq xcoord_block (nth 0 block_coord))
      (setq ycoord_block (nth 1 block_coord))
      (setq zcoord_block (nth 2 block_coord))
      (setq x1coord_text (+ xcoord_block 0))
      (setq y1coord_text (+ ycoord_block 1))
      (setq x2coord_text (+ xcoord_block 100))
      (setq y2coord_text (+ ycoord_block 20))
      (setq coord1_text (list x1coord_text y1coord_text zcoord_block))
      (setq coord2_text (list x2coord_text y2coord_text zcoord_block))
      (if (zerop (rem (fix (/ use_lenght 100)) 2))
	(command "_mtext" coord1_text coord2_text num_new_str ""))
      (setq use_lenght (+ use_lenght step_lenght))
    )
  )
  (setvar "Osmode" snp)
)
Сам грешу на vlax-curve-..., но не могу разобраться.

Последний раз редактировалось La Persona, 24.04.2017 в 08:45.
Просмотров: 828
 
Непрочитано 24.04.2017, 10:09
#2
Кулик Алексей aka kpblc
Moderator

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


Хоть какая ошибка? Где файл-образец? Что за число 57.29474?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.04.2017, 10:18
#3
trushev


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Что за число 57.29474?
Очень похоже на 1 радиан в градусах 57.2957805
trushev вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 24.04.2017, 10:39
#4
La Persona

Чайник
 
Регистрация: 01.12.2011
Сообщений: 27


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Хоть какая ошибка? Где файл-образец? Что за число 57.29474?
Приложил. Это радиан в градусах.

Спотыкается программа на этом месте
Код:
[Выделить все]
       
      (setq block_coord (vlax-curve-getPointAtDist pln use_lenght))
      (setq param_point (vlax-curve-getParamAtPoint pln block_coord))
      (setq proiz (vlax-curve-getFirstDeriv pln param_point))
До значения use_lenght = 1000 все нормально, на 1100 ошибка

Цитата:
ошибка: неверный тип аргумента: numberp: nil
Вложения
Тип файла: dwg
DWG 2010
3D_polyline.dwg (509.3 Кб, 5 просмотров)

Последний раз редактировалось La Persona, 24.04.2017 в 10:45.
La Persona вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.04.2017, 11:45
#5
Кулик Алексей aka kpblc
Moderator

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


Похоже на то, что код начинает "клинить" при попытке вычисления параметра для "наклонного" куска 3D-полилинии. Код писать сейчас не могу, поэтому в качестве идеи: проверить, получается ли param_point. Если нет, то найти предыдущую вершину, следующую вершину, и найти соотношение расстояний между текущей точкой и соседними вершинами. Это фактически и будет параметром кривой, только надо будет добавить параметр предыдущей вершины.
Надеюсь, не сильно запутал
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 24.04.2017, 12:30
#6
La Persona

Чайник
 
Регистрация: 01.12.2011
Сообщений: 27


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Похоже на то, что код начинает "клинить" при попытке вычисления параметра для "наклонного" куска 3D-полилинии. Код писать сейчас не могу, поэтому в качестве идеи: проверить, получается ли param_point. Если нет, то найти предыдущую вершину, следующую вершину, и найти соотношение расстояний между текущей точкой и соседними вершинами. Это фактически и будет параметром кривой, только надо будет добавить параметр предыдущей вершины.
Надеюсь, не сильно запутал
Не вычисляется param_point.

Вылечилось заменой vlax-curve-getParamAtPoint на vlax-curve-getParamAtDist. Спасибо за уделенное время )

Однако все равно интересно, почему не срабатывает getParamAtPoint... Может фаза луны не та?
La Persona вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Ошибка в коде - не могу найти.

Инженерные консультации
Опции темы Поиск в этой теме
Поиск в этой теме:

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сталь 13ХФА. Не могу найти стандарт на поковку и на саму сталь. Подскажите, пожалуйста!! АлександрETA Поиск литературы, чертежей, моделей и прочих материалов 2 23.06.2016 22:12
Подскажите пожалуйста где я могу найти библиотеку электродвигателей для SolidWorks? chepel-sasha Поиск литературы, чертежей, моделей и прочих материалов 6 19.08.2012 21:42
Не могу найти меню Attributes Elysiumie ANSYS 4 31.07.2012 19:32
Серия 125. Не могу найти узел опирания балкона, и конструкцию оного. sakura Поиск литературы, чертежей, моделей и прочих материалов 0 27.10.2009 15:26
Не могу найти коды DXF для selectionset в VBA... ssn Программирование 4 06.12.2003 17:19

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||


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