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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Изменение координат точки вставни блока в соответствии со значением X Y Z в его аттрибутах

Изменение координат точки вставни блока в соответствии со значением X Y Z в его аттрибутах

Ответ
Поиск в этой теме
Непрочитано 24.11.2016, 13:12 #1
Изменение координат точки вставни блока в соответствии со значением X Y Z в его аттрибутах
mihael_b
 
geodezist
 
israel
Регистрация: 07.09.2004
Сообщений: 28

Нужна помощь в написании лиспа. Нужно изменить координаты точек вставки блоков в соответствии со значением X Y Z прописаных в их атрибутах. Срочно. Заранее благодарю за помощь. Не бесплатно, готов оплатить через PayPal.

Последний раз редактировалось mihael_b, 24.11.2016 в 13:22.
Просмотров: 1050
 
Непрочитано 24.11.2016, 13:48
#2
Кулик Алексей aka kpblc
Moderator

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


Поскольку раздел не "Поиск исполнителей", показывай, на чем сам споткнулся.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.11.2016, 13:59
#3
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


проще сделать экспорт данных, а потом в Excel сформировать скрипт на вставку
trir вне форума  
 
Непрочитано 24.11.2016, 15:19
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Как-то понадобилось, набросал для себя по быстрому
Таги атрибутов задаются в переменных att_X att_Y att_Z
Код:
[Выделить все]
(vl-load-com)
(defun C:BLKXYZ (/ att_X att_Y att_Z ss att)
  (setq att_X "X" ;_Tag X Value
        att_Y "Y" ;_;_Tag Y Value
        att_Z "Z" ;_Tag Z Value
  ) ;_ end of setq
  (if (setq ss (ssget '((0 . "INSERT"))))
    (foreach blk (lib:conv-pickset-to-vlalist ss)
      (if (and
            (setq att (get-all-atts blk))
            (assoc att_X att)
            (assoc att_Y att)
            (assoc att_Z att)
            (vlax-write-enabled-p blk)
          ) ;_ end of and
        (vla-put-insertionpoint
          blk
          (vlax-3d-point
            (list (atof (vl-string-subst
                          "."
                          ","
                          (MIP-CONV-TO-STR (cdr (assoc att_X att)))
                        ) ;_ end of vl-string-subst
                  ) ;_ end of atof
                  (atof (vl-string-subst
                          "."
                          ","
                          (MIP-CONV-TO-STR (cdr (assoc att_Y att)))
                        ) ;_ end of vl-string-subst
                  ) ;_ end of atof
                  (atof (vl-string-subst
                          "."
                          ","
                          (MIP-CONV-TO-STR (cdr (assoc att_Z att)))
                        ) ;_ end of vl-string-subst
                  ) ;_ end of atof
            ) ;_ end of list
          ) ;_ end of vlax-3d-point
        ) ;_ end of vla-put-InsertionPoint
      ) ;_ end of if
    ) ;_ end of foreach
  ) ;_ end of if
) ;_ end of defun
(defun lib:conv-pickset-to-list (value / item lst)
  (repeat (setq item (sslength value)) ;_ end setq
    (setq lst (cons (ssname value (setq item (1- item))) lst))
  ) ;_ end repeat

  lst
) ;_ end of defun
(defun lib:conv-pickset-to-vlalist (selset)
  (if selset
    (mapcar 'vlax-ename->vla-object
            (lib:conv-pickset-to-list selset)
    ) ;_ end of mapcar
  ) ;_ end of if
) ;_ end of defun
(defun mip-conv-to-str (dat)
  (cond ((= (type dat) 'INT) (setq dat (itoa dat)))
        ((= (type dat) 'REAL) (setq dat (rtos dat 2 12)))
        ((null dat) (setq dat ""))
        (t (setq dat (vl-princ-to-string dat)))
  ) ;_ end of cond
) ;_ end of defun

(defun get-all-atts (obj)
  (if (and obj
           (vlax-property-available-p obj 'Hasattributes)
           (eq :vlax-true (vla-get-hasattributes obj))
      ) ;_ end of and
    (vl-catch-all-apply
      (function
        (lambda ()
          (mapcar (function (lambda (x)
                              (cons (vla-get-tagstring x)
                                    (vla-get-textstring x)
                              ) ;_ end of cons
                            ) ;_ end of lambda
                  ) ;_ end of function
                  (append (vlax-invoke obj 'Getattributes)
                          (vlax-invoke obj 'Getconstantattributes)
                  ) ;_ end of append
          ) ;_ end of mapcar
        ) ;_ end of lambda
      ) ;_ end of function
    ) ;_ end of vl-catch-all-apply
  ) ;_ end of if
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Изменение координат точки вставни блока в соответствии со значением X Y Z в его аттрибутах

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в атрибуты блока автоматически вставить координаты X и Y начальной точки выноски? МишаИнженер AutoCAD 24 05.05.2016 15:56
Неверная 2D-точка в редакторе блока, в момент указания начальной точки, как исправить? MorganSpb AutoCAD 1 14.04.2015 11:54
Получение координат точки, лежащей на полилинии на расстоянии n от ее начала. Kirill_Ja Программирование 1 25.09.2012 10:15
Копирование блока в точки ? St520 AutoCAD 3 12.11.2009 12:38
Изменение блока в чертеже вместе с аттрибутами. Mikhail AutoCAD 4 15.10.2003 01:53