Похожая фигня
"ошибка: неверное значение аргумента: положительное 0"

Vidocq пишет:

тогда в коде проги я в неправильном порядке поставил аргументы при вычислении:
(- 2 var), а надо было - (- var 2)
что приводило к неверным действиям программы дальше.

Понятно в итоге ты тут получал -4, но вот какая функция дальше ругалась на это -4?

2

(1 ответов, оставленных в LISP)

shima пишет:

у которых разница вторых элементов меньше 5.

первый попавшийся, или с наименьшей разницей?

3

(4 ответов, оставленных в LISP)

vl-string-subst

4

(25 ответов, оставленных в LISP)

trvi пишет:

А если цвет текста надо будет пометь не на красный. Где изменить? Как вообще цвета назначаются?

i      0

0 - на единицу меньше нужного цвета красный (1), например если нужно зелёный (3) напиши 2

5

(25 ответов, оставленных в LISP)

trvi пишет:

У меня размерные стили настроены - по слою и поэтому не вижу изменений

У меня, да и большинства нормальных людей тоже "по-слою", так что причина не в этом.
Вот вариант с заменой цвета только текста, если работать не будет выложи файл

http://s017.radikal.ru/i406/1211/98/d025f767843c.gif

(defun c:equal_dim_vla (/ all_dim car_meas tmp eq_dim i b)
  (vl-load-com)
  (setq    all_dim
     (mapcar 'vlax-ename->vla-Object
         (vl-remove-if
           'listp
           (mapcar 'cadr
               (ssnamex (ssget "_X" '((0 . "DIMENSION"))))
           )
         )
     )
  )
  (while (car all_dim)
    (setq car_meas (Vla-get-Measurement (car all_dim))
      tmp       (list
             (vl-remove-if-not
               (function (lambda (a)
                   (equal (Vla-get-Measurement a) car_meas 1e-12)
                 )
               )
               all_dim
             )
           )
      eq_dim   (cons (car tmp) eq_dim)
      all_dim  (vl-remove-if
             (function
               (lambda (a)
             (equal (Vla-get-Measurement a) car_meas 1e-12)
               )
             )
             all_dim
           )
      tmp       nil
    )
  )
  (setq    eq_dim (vl-remove-if
         (function (lambda (x) (= (length x) 1)))
         eq_dim
           )
    i      0
    b      (cond
         ((>= 6 (length eq_dim))
          1
         )
         ((>= 12 (length eq_dim))
          20
         )
         ((>= 24 (length eq_dim))
          10
         )
         (t 1)
           )
  )
  (cond
    ((not eq_dim)
     "Одинаковых размеров не найдено"
    )
    ((> (length eq_dim) 255)
     "Групп одинаковых размеров слишком много"
    )
    (t
     (mapcar
       (function
     (lambda (x)
       (setq i (+ b i))
       (mapcar
         (function
           (lambda (x)
         (vla-put-TextColor
           x
           i
         )
           )
         )
         x
       )
     )
       )
       eq_dim
     )
     (princ)
    )
  )
)

6

(2 ответов, оставленных в LISP)

Наверно можно, но лучше пользоваться настроенным Punto Switcher

7

(25 ответов, оставленных в LISP)

trvi пишет:

Конечно лучше бы чтобы они были разными цветами, но не думаю что это можно реализовать

можно
http://s017.radikal.ru/i435/1211/22/d47a02e05b5f.gif

(defun c:equal_dim (/ all_dim car_list tmp eq_dim i b)
  (setq    all_dim
     (mapcar 'entget
         (vl-remove-if
           'listp
           (mapcar 'cadr
               (ssnamex (ssget "_X" '((0 . "DIMENSION"))))
           )
         )
     )
  )
  (while (car all_dim)
    (setq car_list (cdr (assoc 42 (car all_dim)))
      tmp       (list
             (vl-remove-if-not
               (function (lambda (a)
                   (equal (cdr (assoc 42 a)) car_list 1e-12)
                 )
               )
               all_dim
             )
           )
      eq_dim   (cons (car tmp) eq_dim)
      all_dim  (vl-remove-if
             (function (lambda (a)
                 (equal (cdr (assoc 42 a)) car_list 1e-12)
                   )
             )
             all_dim
           )
      tmp       nil
    )
  )
  (setq    eq_dim (vl-remove-if
         (function (lambda (x) (= (length x) 1)))
         eq_dim
           )
    i      0
    b      (cond
         ((>= 6 (length eq_dim))
          1
         )
         ((>= 12 (length eq_dim))
          20
         )
         ((>= 24 (length eq_dim))
          10
         )
         (t 1)
           )
  )
  (cond
    ((not eq_dim)
     "\nОдинаковых размеров не найдено"
    )
    ((> (length eq_dim) 255)
     "\nСлишком много групп одинаковых размеров"
    )
    (t
     (mapcar
       (function
     (lambda (x)
       (setq i (+ b i))
       (mapcar
         (function
           (lambda (x)
         (entmod (if (setq tmp (ASSOC 62 x))
               (SUBST (cons 62 i) tmp x)
               (append x (list (cons 62 i)))
             )
         )
           )
         )
         x
       )
     )
       )
       eq_dim
     )
     (princ)
    )
  )
)

8

(25 ответов, оставленных в LISP)

trvi пишет:

Мне нужен лисп который бы осуществлял бы поиск одинаковых measure (значение) размера, например на чертеже 5 размеров со значениями 150, и изменял бы цвет значения одинаковых размеров на "синий"

Хорошо, у тебя 5 размеров 150 ед., и ещё 3 размера 100 ед., а ещё 6 размеров 50 ед, и т.д. и что, их все сделать "синими"?

9

(1 ответов, оставленных в LISP)

Есть код, который позволяет выбрать тексты содержащие числа в указном диапазоне: http://forum.dwg.ru/showpost.php?p=6603 … stcount=32
Либо переделай, как тебе надо, либо выбирай, поочередно каждый диапазон, а потом для выбранных, через палитру "свойства" заменяй значение на нужно

1) Чтоб тела получились отдельными после вычитания нужно применить "Разделит" _separate
2) Либо сразу вычитать не тоненькое тело, а сделать копию исходного, и из исходного вычесть, скажем, правую часть, а из копии левую.

А если вместо "Резать" использовать "Вычитание", создать второе тело по произвольной полилинии и вычесть его?

А чем стандартная справка не устраивает? Я успешно пользуюсь онлайн справкой для AutoCAD 2011, почему 2011? потому что в последующих убрали раздел "Для разработчиков".
Так же очень удобно давать ссылку, с ответом из справки, на вопросы пользователей на форуме.

...

Александр Ривилис пишет:

С вытаскиванием из 3DSOLID информации о радиусе и высоте советую не заморачиваться - этой информации попросту может не быть при обнулении истории.

Спасибо, не будем. Хотя вот Дима_ кому-то делал подобную программку Сумма длин 3D тел

Александр Ривилис пишет:

Блок может быть один. А при вставке он масштабируется с равными X и Y (радиус цилиндра) и Z (высота цилиндра).

Вообще идеальный вариант http://forum.dwg.ru/images/smilies/good.gif создать блока из цилиндра с единичным радиусом и единичной высотой.

Наверно можно, только программно, в каком виде должны быть данные на выходе?

16

(11 ответов, оставленных в LISP)

Павел Артемьев пишет:

но в activeX я не шарю совсем

Там на самом деле всё просто, ты же наверняка сам хочешь разобраться, а не чтоб тебе готовый код написали  ;)
Справка по VBA - AutoCAD объектная модель
Как пользоваться справкой по VBA, для AutoLISP Четыре правила для работы с ActiveX в Visual Lisp
Ну а там уже чего не понятно спрашивай.

17

(11 ответов, оставленных в LISP)

Объект называется "AECC_COGO_POINT", но его DXF описание особо полезного ни чего не содержит:

((-1 . <Имя объекта: 7ffffa25d00>)
 (0 . AECC_COGO_POINT)
 (330 . <Имя объекта: 7ffffa039f0>)
 (5 . 5140)
 (100 . AcDbEntity)
 (67 . 0)
 (410 . Model)
 (8 . 0)
 (100 . AeccDbCogoPoint))

А вот у VLA-объекта есть свойство "Elevation", по нему уже можно отсортировать по высоте(отметке)

18

(2 ответов, оставленных в DCL)

http://docs.autodesk.com/ACD/2011/RUS/f … c-6a27.htm

http://geodesist.ru/forum/index.php?thr … ocad.4609/

Александр Пекшев aka Modis пишет:

Средствами акада - никак

Так а тема вроде и не в разделе голый AutoCAD, а в программировании.

21

(8 ответов, оставленных в LISP)

Писал немного похожее, выбор чисел в указанном диапазоне.
http://forum.dwg.ru/showthread.php?p=660353#post660353

22

(4 ответов, оставленных в AutoCAD)

Михаил пишет:

Ознакамливаюсь с А2013. В строке меню, в закладке "Вид" есть команда "Регенерировать все". Но этой команды не нашел на ленте.

А этой команды и в предыдущих версиях никогда на ленте не было.
Вот как я её туда засовывал в 2010 http://youtu.be/M2Pkq9UJ8Qs?hd=1

pan пишет:

C помощью какой команды Вы создаете виды и разрезы?

VIEWBASE

Не сталкивались, пока функция интересна, но сыровата, не знаю чего Паша так по ней писается?
Выход, создавать новый базовый вид, на новом листе за пределами области печати, и по новой создавать разрезы и узлы уже перетаскивая в область печати.

25

(6 ответов, оставленных в LISP)

Ольга Заговора пишет:

что бы остались соответствующие ручки как на рисунке.

И что эти ручки должны делать?