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

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

Простановка направлений и значений отклонений

Ответ
Поиск в этой теме
Непрочитано 20.08.2009, 08:49 #1
Простановка направлений и значений отклонений
G-RAV
 
Геодезист
 
г.Новосибирск
Регистрация: 16.08.2009
Сообщений: 86

Ещё одна моя программулина - вам на суд! Суть, которой в следующем:
Существует массив из окружностей (проектное положение свай), расположенных друг от друга на метр и дальше. После (геодезической) съемки (на рисунке ввиде точек) необходимо указать направление и значение (в см) отклонений...Вот код:
Код:
[Выделить все]
 
(defun C:deflection ( / scale XY_pr Ygeod1 Xgeod1 XY_pol Ygeod2 Xgeod2 Xr Yr)
(setq
    old_clayer (getvar "clayer")
    old_attdia (getvar "attdia")
    old_attreq (getvar "attreq")
    old_osmode (getvar "osmode")
    old_cmdecho (getvar "cmdecho")
  ) ;_ end of setq
 
(setvar "attdia" 0)
(setvar "attreq" 1)
(setvar "osmode" 0)
(setvar "cmdecho" 0)
;Установка текущего слоя
(command "_.layer" "_m" "отклонения" "")
;Установка размеров стрелок и текста в соответствии с масштабом
(setq scale (getstring"\nВведите знаменатель масштаба [100/200/300/400/500] <100>:"))
;Привязка к окружности (проект)
(command "_osnap" "_cen")
(setq XY_pr(getpoint "\nУкажите проектную точку "))
(while (/= XY_pr nil)
 
(setq Ygeod1(car XY_pr))  ;Y - проект
(setq Xgeod1(cadr XY_pr)) ;Х - проект
 
;Привязка к точке (факт)  
(command "_osnap" "_nod")
(setq XY_pol(getpoint "\nУкажите точку, полученную по результатам тахеометрической съемки"))
(setq Ygeod2(car XY_pol))  ;Y - факт
(setq Xgeod2(cadr XY_pol)) ;Х - факт
(setq Xr(rtos (abs(* 100(- (car XY_pr) (car XY_pol))))2 0))  ; |Хпроект-Хфакт| в см
(if (= Xr "0") (setq Xr "1"))
(setq Yr(rtos (abs(* 100(- (cadr XY_pr) (cadr XY_pol))))2 0)); |Yпроект-Yфакт| в см
(if (= Yr "0") (setq Yr "1")) 
(setq razmer (/(* 0.36 (atoi scale))100));Коофициет масштаба блока
(command "_osnap" "_non");Отключение привязки
 
  (cond ((< Ygeod1 Ygeod2) 
 (command"_insert" "arrow_X+" XY_pr razmer razmer 0 Xr ""))
   ((> Ygeod1 Ygeod2) 
 (command"_insert" "arrow_X-" XY_pr razmer razmer 0 Xr ""))
 )
  (cond ((< Xgeod1 Xgeod2) 
 (command"_insert" "arrow_Y+" XY_pr razmer razmer 0 Yr ""))
   ((> Xgeod1 Xgeod2) 
 (command"_insert" "arrow_Y-" XY_pr razmer razmer 0 Yr ""))
 )
 
(command "_osnap" "_cen")
(setq XY_pr(getpoint "\nУкажите проектную точку "))
 
    )
(setvar "clayer" old_clayer)
(setvar "attdia" old_attdia)
(setvar "attreq" old_attreq)
(setvar "osmode" old_osmode)
(setvar "cmdecho" old_cmdecho)
) ;_ end of defun
Выкладываю рисунок, где лучше этот код испытывать..
Вопрос: А реально ли сделать так, чтобы при выделении всего массива сразу проставлялись все отклонения???

Вложения
Тип файла: dwg
DWG 2004
отклонения.dwg (137.9 Кб, 1026 просмотров)

Просмотров: 5729
 
Непрочитано 20.08.2009, 10:21
#2
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


Когда блоков несколько сотен можно не дожить до вечера кликая. У меня проходит по всем блокам автоматически проверяет расстояние и если оно меньше заданного, выводит данные в эксель
Victor вне форума  
 
Автор темы   Непрочитано 20.08.2009, 10:51
#3
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


Цитата:
Сообщение от Victor Посмотреть сообщение
Когда блоков несколько сотен можно не дожить до вечера кликая. У меня проходит по всем блокам автоматически проверяет расстояние и если оно меньше заданного, выводит данные в эксель
Блоков всего 4.. Я пробовал сделать с одним, но у меня ничего не вышло.... Запарка с атрибутом. Плюс ко всему, при обновлении блок встает в исходное положение...
И мне не надо проверять и выводить в эксель... а надо, чтоб проставлялись направления отклонений и их значения... оно в принципе так и работает.... просто интересно, можно ли, чтобы они проставлялись одним "залпом"
G-RAV вне форума  
 
Непрочитано 20.08.2009, 12:08
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


То есть, если я правильно понял, нужно найти смещение красных кружочков относительно точки вставки ближайшего блока? Если так, то можно конечно, чтобы они все автоматом проставлялись.
Примерно по такому алгоритму: создается набор из всех кружочков, и потом перебирая этот набор к каждому кружочку ищем ближайший блок.
Do$ вне форума  
 
Автор темы   Непрочитано 20.08.2009, 12:12
#5
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


неа... как раз красные кружки "мертвецки" верно стоят - это проект.... а вот точки (на чертеже - синим цветом) - это съемка и нужно найти смещение этих точек от проекта... ну я думаю, что алгоритм от этого сильно не меняется...
G-RAV вне форума  
 
Непрочитано 20.08.2009, 13:47
#6
Кулик Алексей aka kpblc
Moderator

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


Гоняй
Код:
[Выделить все]
(defun c:deflection (/                 adoc              *error*           _kpblc-conv-selset-to-ename
                     fun_get-closest-block               pt_selset         blk_selset        closest_block
                     ins_lst           ins_blk           attr              scale
                     )

  (defun fun_get-closest-block (point block-lst)
    (setq point (cdr (assoc 10 (entget point))))
    (car
      (vl-sort
        block-lst
        (function
          (lambda (a b)
            (< (distance point (cdr (assoc 10 (entget a))))
               (distance point (cdr (assoc 10 (entget a))))
               ) ;_ end of <
            ) ;_ end of lambda
          ) ;_ end of function
        ) ;_ end of vl-sort
      ) ;_ end of car
    ) ;_ end of defun

  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun _kpblc-conv-selset-to-ename (selset / tab item)
                                     ;|
*    Преобразование набора, полученного через ssget, в список ename-представлени
* примитивов.
*    Параметры вызова:
	selset	набор примитивов
*    Примеры вызова:
(_kpblc-conv-selset-to-ename (ssget))
|;
    (cond
      ((not selset) nil)
      ((= (type selset) 'pickset)
       (repeat (setq tab  nil
                     item (sslength selset)
                     ) ;_ end setq
         (setq tab (cons (ssname selset (setq item (1- item))) tab))
         ) ;_ end repeat
       )
      ((listp selset) selset)
      ) ;_ end of cond
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (and (= (type (setq pt_selset (vl-catch-all-apply
                                      (function
                                        (lambda ()
                                          (princ "\nВыберите сваи для обработки : ")
                                          (ssget '((0 . "CIRCLE")))
                                          ) ;_ end of lambda
                                        ) ;_ end of function
                                      ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'pickset
              ) ;_ end of =
           (= (type (setq blk_selset
                           (vl-catch-all-apply
                             (function
                               (lambda ()
                                 (princ "\nВыберите реальные точки : ")
                                 (ssget '((0 . "INSERT") (2 . "piket_s")))
                                 ) ;_ end of lambda
                               ) ;_ end of function
                             ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'pickset
              ) ;_ end of =
           (= (type
                (setq scale (vl-catch-all-apply
                              (function
                                (lambda (/ res)
                                  (initget "100 200 300 400 500")
                                  (cond
                                    ((setq res (getkword "\nВведите знаменатель масштаба [100/200/300/400/500] <100> : "))
                                     (atof res)
                                     )
                                    (t 100.)
                                    ) ;_ end of cond
                                  ) ;_ end of lambda
                                ) ;_ end of function
                              ) ;_ end of vl-catch-all-apply
                      ) ;_ end of setq
                ) ;_ end of type
              'real
              ) ;_ end of =
           ) ;_ end of and
    (progn
      (setq pt_selset  (_kpblc-conv-selset-to-ename pt_selset)
            blk_selset (_kpblc-conv-selset-to-ename blk_selset)
            scale      (/ (* 0.36 scale) 100)
            ) ;_ end of setq
      (foreach pt pt_selset
        (setq closest_block (fun_get-closest-block pt blk_selset)
              blk_selset    (vl-remove closest_block blk_selset)
              ins_lst       '(("x") ("y"))
              ins_lst       (subst
                              (cons "x"
                                    (if (> (cadr (assoc 10 (entget pt))) (cadr (assoc 10 (entget closest_block))))
                                      "arrow_x-"
                                      "arrow_x+"
                                      ) ;_ end of if
                                    ) ;_ end of cons
                              (assoc "x" ins_lst)
                              ins_lst
                              ) ;_ end of subst
              ins_lst       (subst
                              (cons "y"
                                    (if (> (caddr (assoc 10 (entget pt))) (caddr (assoc 10 (entget closest_block))))
                                      "arrow_y-"
                                      "arrow_y+"
                                      ) ;_ end of if
                                    ) ;_ end of cons
                              (assoc "y" ins_lst)
                              ins_lst
                              ) ;_ end of subst
              ) ;_ end of setq
        (foreach item ins_lst
          (setq ins_blk (vla-insertblock
                          (vla-get-modelspace adoc)
                          (vlax-3d-point (cdr (assoc 10 (entget pt))))
                          (cdr item)
                          scale
                          scale
                          scale
                          0.
                          ) ;_ end of vla-InsertBlock
                attr    (car (vlax-safearray->list
                               (vlax-variant-value
                                 (vla-getattributes ins_blk)
                                 ) ;_ end of vlax-variant-value
                               ) ;_ end of vlax-safearray->list
                             ) ;_ end of car
                ) ;_ end of setq
          (if (wcmatch (cdr item) "*x*")
            (vla-put-textstring
              attr
              ((lambda (/ res)
                 (if (= (setq res
                               (rtos (abs (* 100. (- (cadr (assoc 10 (entget pt))) (cadr (assoc 10 (entget closest_block))))))
                                     2
                                     0
                                     ) ;_ end of rtos
                              ) ;_ end of setq
                        "0"
                        ) ;_ end of =
                   "1"
                   res
                   ) ;_ end of if
                 ) ;_ end of lambda
               )
              ) ;_ end of vla-put-TextString
            ) ;_ end of if
          (if (wcmatch (cdr item) "*y*")
            (vla-put-textstring
              attr
              ((lambda (/ res)
                 (if (= (setq res
                               (rtos (abs (* 100. (- (caddr (assoc 10 (entget pt))) (caddr (assoc 10 (entget closest_block))))))
                                     2
                                     0
                                     ) ;_ end of rtos
                              ) ;_ end of setq
                        "0"
                        ) ;_ end of =
                   "1"
                   res
                   ) ;_ end of if
                 ) ;_ end of lambda
               )
              ) ;_ end of vla-put-TextString
            ) ;_ end of if
          ) ;_ end of foreach
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.08.2009, 14:21
#7
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


Погонял...
1) Можно ли сделать так, чтоб выбирать нужно было один раз?
2) Значения слишком большие.
3) Некоторые направления несоответствуют действительности(точка уходит в другую сторону), а на некоторых "сваях" по 4 направления, а должно быть максимум 2..
4) На некоторых пустых(без близлежащей точки) "сваях" стоят направления и значения, хотя их там не должно быть...
Вообщем я сейчас попробую что-нибудь поправить.... не знаю получится ли....
G-RAV вне форума  
 
Непрочитано 20.08.2009, 14:43
#8
Кулик Алексей aka kpblc
Moderator

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


Для "выбора один раз" надо бы как-то ограничивать поиск точек. Это раз. Второе. Насчет "направлений в 4 стороны". У тебя там нарисованы 2 окружности. Если убирать дубликаты, то это увеличит код, а у меня сейчас со временем напряг. Может, кто-то другой, более профессиональный, подключится.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.08.2009, 15:06
#9
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


Нашел вот кое что - числа стали соответствовать....
Код:
[Выделить все]
 
 (lambda (a b)
            (< (distance point (cdr (assoc 10 (entget a))))
               (distance point (cdr (assoc 10 (entget b))))
               ) ;_ end of <
            ) ;_ end of lambda
На не большом массиве работает нормально... Если захватываешь большой массив, считает некоторые отклонения до соседних окружностей... Может нужно сделать какое-нибудь ограничение.... Скажем, в пределах 30-40см

Последний раз редактировалось G-RAV, 20.08.2009 в 15:48.
G-RAV вне форума  
 
Непрочитано 21.08.2009, 09:30
#10
Кулик Алексей aka kpblc
Moderator

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


Я что-то никак не могу представить, как надо обрабатывать вариант, при котором не проставлено фактическое положение сваи. Визуально это дело отконтролировать не проблема, но вот универсальный алгоритм мне никак не придумать. А так - вариант нумер 2:
Код:
[Выделить все]
(defun c:deflection (/                 adoc              *error*           _kpblc-conv-selset-to-ename
                     fun_get-closest-block               pt_selset         blk_selset        closest_block
                     ins_lst           ins_blk           attr              scale
                     )

  (defun fun_get-closest-block (point block-lst)
    (setq point (cdr (assoc 10 (entget point))))
    (car
      (vl-sort
        block-lst
        (function
          (lambda (a b)
            (< (distance point (cdr (assoc 10 (entget a))))
               (distance point (cdr (assoc 10 (entget b))))
               ) ;_ end of <
            ) ;_ end of lambda
          ) ;_ end of function
        ) ;_ end of vl-sort
      ) ;_ end of car
    ) ;_ end of defun

  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun _kpblc-conv-selset-to-ename (selset / tab item)
                                     ;|
*    Преобразование набора, полученного через ssget, в список ename-представлени
* примитивов.
*    Параметры вызова:
	selset	набор примитивов
*    Примеры вызова:
(_kpblc-conv-selset-to-ename (ssget))
|;
    (cond
      ((not selset) nil)
      ((= (type selset) 'pickset)
       (repeat (setq tab  nil
                     item (sslength selset)
                     ) ;_ end setq
         (setq tab (cons (ssname selset (setq item (1- item))) tab))
         ) ;_ end repeat
       )
      ((listp selset) selset)
      ) ;_ end of cond
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (and (= (type (setq pt_selset (vl-catch-all-apply
                                      (function
                                        (lambda ()
                                          (princ "\nВыберите сваи для обработки : ")
                                          (ssget '((0 . "CIRCLE")))
                                          ) ;_ end of lambda
                                        ) ;_ end of function
                                      ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'pickset
              ) ;_ end of =
           (= (type (setq blk_selset
                           (vl-catch-all-apply
                             (function
                               (lambda ()
                                 (princ "\nВыберите реальные точки : ")
                                 (ssget '((0 . "INSERT") (2 . "piket_s")))
                                 ) ;_ end of lambda
                               ) ;_ end of function
                             ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'pickset
              ) ;_ end of =
           (= (type
                (setq scale (vl-catch-all-apply
                              (function
                                (lambda (/ res)
                                  (initget "100 200 300 400 500")
                                  (cond
                                    ((setq res (getkword "\nВведите знаменатель масштаба [100/200/300/400/500] <100> : "))
                                     (atof res)
                                     )
                                    (t 100.)
                                    ) ;_ end of cond
                                  ) ;_ end of lambda
                                ) ;_ end of function
                              ) ;_ end of vl-catch-all-apply
                      ) ;_ end of setq
                ) ;_ end of type
              'real
              ) ;_ end of =

           ) ;_ end of and
    (progn
      (setq pt_selset  ((lambda (/ lst res center start)
                          (setq lst (_kpblc-conv-selset-to-ename pt_selset))
                          (while lst
                            (setq start  (car lst)
                                  center (cdr (assoc 10 (entget start)))
                                  lst    (vl-remove-if
                                           (function
                                             (lambda (x)
                                               (equal (cdr (assoc 10 (entget x))) center 1e-3)
                                               ) ;_ end of lambda
                                             ) ;_ end of function
                                           lst
                                           ) ;_ end of vl-remove-if
                                  res    (cons start res)
                                  ) ;_ end of setq
                            ) ;_ end of while
                          (reverse res)
                          ) ;_ end of lambda
                        )
            blk_selset (_kpblc-conv-selset-to-ename blk_selset)
            scale      (/ (* 0.36 scale) 100)
            ) ;_ end of setq
      (foreach pt pt_selset
        (if (setq closest_block (fun_get-closest-block pt blk_selset))
          (progn
            (setq ; blk_selset (vl-remove closest_block blk_selset)
              ins_lst '(("x") ("y"))
              ins_lst (subst
                        (cons "x"
                              (if (> (cadr (assoc 10 (entget pt))) (cadr (assoc 10 (entget closest_block))))
                                "arrow_x-"
                                "arrow_x+"
                                ) ;_ end of if
                              ) ;_ end of cons
                        (assoc "x" ins_lst)
                        ins_lst
                        ) ;_ end of subst
              ins_lst (subst
                        (cons "y"
                              (if (> (caddr (assoc 10 (entget pt))) (caddr (assoc 10 (entget closest_block))))
                                "arrow_y-"
                                "arrow_y+"
                                ) ;_ end of if
                              ) ;_ end of cons
                        (assoc "y" ins_lst)
                        ins_lst
                        ) ;_ end of subst
              ) ;_ end of setq
            (foreach item ins_lst
              (setq ins_blk (vla-insertblock
                              (vla-get-modelspace adoc)
                              (vlax-3d-point (cdr (assoc 10 (entget pt))))
                              (cdr item)
                              scale
                              scale
                              scale
                              0.
                              ) ;_ end of vla-InsertBlock
                    attr    (car (vlax-safearray->list
                                   (vlax-variant-value
                                     (vla-getattributes ins_blk)
                                     ) ;_ end of vlax-variant-value
                                   ) ;_ end of vlax-safearray->list
                                 ) ;_ end of car
                    ) ;_ end of setq
              (if (wcmatch (cdr item) "*x*")
                (vla-put-textstring
                  attr
                  ((lambda (/ res)
                     (if (= (setq res
                                   (rtos (abs (* 100. (- (cadr (assoc 10 (entget pt))) (cadr (assoc 10 (entget closest_block))))))
                                         2
                                         0
                                         ) ;_ end of rtos
                                  ) ;_ end of setq
                            "0"
                            ) ;_ end of =
                       "1"
                       res
                       ) ;_ end of if
                     ) ;_ end of lambda
                   )
                  ) ;_ end of vla-put-TextString
                ) ;_ end of if
              (if (wcmatch (cdr item) "*y*")
                (vla-put-textstring
                  attr
                  ((lambda (/ res)
                     (if (= (setq res
                                   (rtos
                                     (abs (* 100. (- (caddr (assoc 10 (entget pt))) (caddr (assoc 10 (entget closest_block))))))
                                     2
                                     0
                                     ) ;_ end of rtos
                                  ) ;_ end of setq
                            "0"
                            ) ;_ end of =
                       "1"
                       res
                       ) ;_ end of if
                     ) ;_ end of lambda
                   )
                  ) ;_ end of vla-put-TextString
                ) ;_ end of if
              ) ;_ end of foreach
            ) ;_ end of progn
          ) ;_ end of if
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.08.2009, 09:49
#11
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Универсальный алгоритм прост.
Если свая отклонилась более чем на 30см. , то для геодезиста это криминал и положение сваи обязательно нужно перепроверить прежде чем поднимать шум(стрелки лучше не рисовать). Поэтому для прорисовки смещений нужно ввести допуск при котором стрелки не рисуются(для себя делал 30см).
Дополнительно желательно сделать отсечку по слоям для съемочных точек и отсечку по номерам свай(диапазон) чтобы при повторной прорисовке исполнительной съемки смещения не накладывались друг на друга.
Эдуард вне форума  
 
Автор темы   Непрочитано 21.08.2009, 10:09
#12
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


Да там просто на некоторые сваи нет съемки, поэтому кружок пуст (без точки) и его как бы надо просто пропускать, а вообще Эдуард прав, только вот для диаметра 159 - 15 см - это уже растрел .
G-RAV вне форума  
 
Непрочитано 21.08.2009, 10:15
#13
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Конечно расстрел. Но если точка ближе 30 см - это явно съемочная точка , а не случайная. И уже нужно подумывать о том - а кто-же будет крайним
Эдуард вне форума  
 
Автор темы   Непрочитано 21.08.2009, 10:22
#14
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


2 Кулик Алексей aka kpblc
Сейчас вообще все классно работает! И пусть даже пустые кружки проставляет, их можно не включать в выбор, либо удалить потом отклонения... СУПЕР!!! СПАСИБО!!

Почему то на некоторых рисунках не работает, пишет "Ошибка Automation. Ошибка файлера" . В чем может быть причина???

Последний раз редактировалось G-RAV, 23.08.2009 в 06:48.
G-RAV вне форума  
 
Непрочитано 26.08.2009, 10:05
#15
Кулик Алексей aka kpblc
Moderator

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


Доброго. А файлик глянуть можно?
Сильно подозреваю, что там проблема в отсутствии блоков соответствующих или с атрибутами что-то "не то".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.08.2009, 10:25
#16
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


Нашел проблему... Если рисунок не содержит блоков "Arrow..." то программа выдает "Ошибка Automation. Ошибка файлера". Но путь к DWG блокам у меня прописан... Почему она их не подгружает самостоятельно?
G-RAV вне форума  
 
Непрочитано 26.08.2009, 10:29
#17
Кулик Алексей aka kpblc
Moderator

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


Потому что этого не было сделано Надо просто эти блоки на момент запуска уже иметь в файле.
Ну или второй вариант - создавать их программно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.08.2009, 10:43
#18
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


G-RAV, вот моя, готовая программа, Отклонения в исполнительных семах (строительство) ,
Программа может:
1. Рисовать анкер, сваю, или просто одни стрелки.
2. Показывать и подписывать отклонения X Y Z в любой комбинации (например только по Y).
3. Значения превышающие допустимые выделяются красным цветом и помещаются на отдельный слой.
4. Все элементы разносятся по слоям (Стрелки, Анкер, Отклонения,...).
5. Перед значением отклонения ставить [В] или [Н], что обозначает Верх или Низ колонны или стены.
6. Вручную кликать каждую пару Проектное положение / Фактическое положение или выделить всё разом и программа сама найдёт пары проект / факт и всё нарисует.
8. Учитывать масштабный коэффициент при построении и вычислении.
9) В качестве проектного положения при автоматической простановки отклонений, при выборе ”полилиния(LWPOLYLINE)” проектным положением будет считаться либо ближайшая вершина, либо ближайшая точка на полилинии, причём приоритет отдаётся вершинам, т.е. при поиске «ближайшего», расстояние до вершины и до ближайшие точки сравниваются 1 к 2


Но, если интересно именно самому и своё, то могу исходник прислать, может чего почерпнёшь для себя.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 26.08.2009, 11:17
#19
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


Disney, спасибо огромное, просмотрю обязательно!

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Потому что этого не было сделано Надо просто эти блоки на момент запуска уже иметь в файле.
Ну или второй вариант - создавать их программно.
А если, как вариант, куда-нить прилепить
Код:
[Выделить все]
(command"_insert" "arrow_X+" "0,0,0" "" "" "0" "" "1" ""
   "_insert" "arrow_X-" "0,0,0" "" "" "0" "" "1" ""
   "_insert" "arrow_Y+" "0,0,0" "" "" "0" "" "1" ""
   "_insert" "arrow_Y-" "0,0,0" "" "" "0" "" "1" ""
      )
а потом _erase (0,0,0), но блоки уже будут в рисунке???
G-RAV вне форума  
 
Непрочитано 26.08.2009, 12:52
#20
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


дорогу укажи
(command "_insert" "C:\\EXL\\moi_blok" .....
Victor вне форума  
 
Автор темы   Непрочитано 26.08.2009, 12:54
#21
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


Цитата:
Сообщение от Victor Посмотреть сообщение
дорогу укажи
(command "_insert" "C:\\EXL\\moi_blok" .....
Дорога прописана в настройках -- > путь к вспомогательным файлам.
G-RAV вне форума  
 
Автор темы   Непрочитано 11.06.2010, 09:25
#22
G-RAV

Геодезист
 
Регистрация: 16.08.2009
г.Новосибирск
Сообщений: 86
<phrase 1=


2 Кулик Алексей aka kpblc
Доброго времени суток, Вам и Всем!
Помогите, пожалуйста разобраться с вашей функцией.... В частности, хотелось бы наконец то разобраться, как работает function в тандеме с lambda.. Все никак не могу уяснить для себя... Вот сама функция:
Код:
[Выделить все]
(defun	fun_get-closest-block (point block-lst)		;создается пользовательская функция с 2-мя локальными переменными point и block-lst
					
   (setq point (cdr (assoc 10 (entget point))))		;переменной point присваивается значение координаты выбранного примитива
; вот с этого момента мозг уже закипает, хотя, наверное, все просто :)					
   (car				; выбирается первый элемент списка (для чего?)						
     (vl-sort block-lst		; список block-lst (опять таки, мы же ему ничего не присваивали??) сортируется по возрастанию, т.к. "<"
	      (function		; а вот здесь вообще полный ступор, если я правильно понимаю, то function служит для немедленного выполнения 
		(lambda	(a b)	; временной (одноразовой) функции lambda с врем-ми переменными a и b
			  
			  (< (distance point (cdr (assoc 10 (entget a)))) ; список сортируется по расстоянию между point и (cdr (assoc 10 (entget a)))
			     (distance point (cdr (assoc 10 (entget b)))) ; и следующему расстоянию между point и (cdr (assoc 10 (entget b)))
			  ) ;_ end of <
			) ;_ end of lambda
	      ) ;_ end of function
     ) ;_ end of vl-sort
   ) ;_ end of car
 ) ;_ end of defun
если есть такая возможность, распишите как можно детальнее работу данной функции и всех ее компонентов....
G-RAV вне форума  
 
Непрочитано 11.06.2010, 12:24
#23
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Цитата:
(function ; а вот здесь вообще полный ступор, если я правильно понимаю, то function служит для немедленного выполнения
Нет, ответ найдешь здесь
CB вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Простановка направлений и значений отклонений



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отладка - Окно контрольных значений Mazai Программирование 4 16.06.2008 11:47
Учет случайных отклонений длин стержней torf_83 Прочее. Архитектура и строительство 9 13.12.2006 09:45