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

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

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

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

Уважаемые знатоки! Есть небольшая программа, расставляющая пикеты вдоль полилинии. После адаптации с 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.
Просмотров: 3341
 
Непрочитано 24.04.2017, 10:09
#2
Кулик Алексей aka kpblc
Moderator

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


Хоть какая ошибка? Где файл-образец? Что за число 57.29474?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.04.2017, 10:18
#3
trushev


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


Цитата:
Сообщение от Кулик Алексей 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 Кб, 9 просмотров)

Последний раз редактировалось 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
С.-Петербург
Сообщений: 39,787


Похоже на то, что код начинает "клинить" при попытке вычисления параметра для "наклонного" куска 3D-полилинии. Код писать сейчас не могу, поэтому в качестве идеи: проверить, получается ли param_point. Если нет, то найти предыдущую вершину, следующую вершину, и найти соотношение расстояний между текущей точкой и соседними вершинами. Это фактически и будет параметром кривой, только надо будет добавить параметр предыдущей вершины.
Надеюсь, не сильно запутал
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей 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 вне форума  
 
Непрочитано 26.03.2018, 14:52
#7
Okl


 
Регистрация: 14.03.2018
Сообщений: 11
Отправить сообщение для Okl с помощью Skype™


Такая же проблема....
ошибка: неверный тип аргумента: numberp: nil

Код:
[Выделить все]
 (SETQ	nn_y	 4700.0			; íà÷àëüíûå êîîðäèíàòû
	nn_x	 130.0			; íà÷àëüíûå êîîðäèíàòû
	nk_vh	 (LIST 6 8 4 6)		; êîë-âî âûõîäîâ
	nw_line	 (LIST 1 1 2 2)		; Âåñ Ëèíèé ( 9 - ñóù. 30 ïðîåêò. ) êëþ÷: "1" èëè "2" ñîîòâåòñòâåííî
	name_rm	 (LIST "FXDA" "FXEA" "FXDB" "FXDA") ;_Íàçâàíèå Ðàäèîìîäóëåé
	n_rm	 (LIST 1 1 1 2) ;_Íóìåðàöèÿ ðàäèîìîäóëåé
	st_rt_rm (LIST "GSM-900" "GSM-900/DCS-1800" " DCS-1800" "UMTS-2100") ;_Ñòàíäàðòû íà Ðàäèìîäóëÿõ
	nk_rm	 (LENGTH nk_vh)		; êîë-âî Ðàäèîìîäóëåé
	nri	 0
  )
  (WHILE (< nri (- nk_rm 0))
    (PRINT "222222222222222222222222222222222222" )
    
    (SETQ nv_k_vh (CAR nk_vh))		; âçÿòèå êîëè÷åñòâà âûõîäîâ èç ÐÌ ïî ïîðÿäêó
    (SETQ nk_vh (CDR nk_vh))

    (SETQ nv_name_rm (CAR name_rm))	; âçÿòèå Íàçâàíèé äëÿ ÐÌ ïî ïîðÿäêó
    (SETQ name_rm (CDR name_rm))

    (SETQ nv_n_rm (CAR n_rm))		; âçÿòèå íîìåðîâ äëÿ ÐÌ ïî ïîðÿäêó
    (SETQ n_rm (CDR n_rm))

    (SETQ nv_st_rt_rm (CAR st_rt_rm))	; âçÿòèå Ñòàíäàðòîâ äëÿ ÐÌ ïî ïîðÿäêó
    (SETQ st_rt_rm (CDR st_rt_rm))


    (SETQ nv_w_line (CAR nw_line))	; îïðåäåëåíèå ïðîåêòèðóåìîñòè ïî ïîðÿäêó
    (SETQ nw_line (CDR nw_line))


    (SETQ nd_rm (* nv_k_vh 10))		;      äëèíà ÐÌ



    (SETQ
      n_y1	nn_y
      n_x1	nn_x
      k_vh1	nv_k_vh
      name_rm	nv_name_rm
      n_rm	nv_n_rm
      st_rt_rm	nv_st_rt_rm
    )
    (IF	(= nv_w_line 1)
      (SETQ w_line 9)
      (SETQ w_line 30)
    )
    (PRINT "33333333333333333333333333333333333333" )
    (PRINT n_y1     )
    (PRINT n_x1     )
    (PRINT k_vh1    )
    (PRINT w_line   )
    (PRINT name_rm  )
    (PRINT n_rm     )
    (PRINT st_rt_rm )

    



    (c:sk_rm n_y1 n_x1 k_vh1 w_line name_rm n_rm st_rt_rm) ;_ Âûçîâ ïîäôóíêöèè ïîñòðîåíèÿ Ðàäèîìîäóëåé
    (PRINT "444444444444444444444444444444444444444444444" )

(PRINT st_rt_rm1 )
    
    (SETQ nn_x (+ nn_x nd_rm 10))
    (SETQ nri (+ nri 1))
  )
в функции (c:sk_rm ) используются числовые и строчные переменные... строчные переменные имеют право быть переменными функции?
в чем может быть проблемма?
Okl вне форума  
 
Непрочитано 26.03.2018, 16:35
#8
Кулик Алексей aka kpblc
Moderator

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


Причин может быть несколько.
1. Команда теоретически может принимать аргументы, но лучше этого не делать. Функцию переименовать
2. В каком месте ошибка? Может, как раз в той самой c:sk_rm?

----- добавлено через 28 сек. -----
3. Ставь точку останова и проходи пошагово - поймешь, откуда что берется, куда засовывается и как обрабатывается.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум 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