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

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

Выделение общих примитивов и другие полезные программы

Ответ
Поиск в этой теме
Непрочитано 25.10.2007, 14:25 #1
Выделение общих примитивов и другие полезные программы
BARS_1985
 
construktor
 
moscow
Регистрация: 26.09.2007
Сообщений: 24

Нужен Лиспик, который выделял бы общие примитивы определенным цветом, либо перемещал бы в другой слой, либо удалял вовсе.

1. Вопрос возник после того как я убедился, что при попытке измерить сумму длин выделенных примитивов с помощью программ представленных на форуме они считают и те примитивы, которые наложены один на другой или же находятся рядом (на расстоянии погрешности (0,05 например).

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

3. И пока последнее. Буду ооочень благодарен за лиспик, который мог бы в примитивах делать засечки (разрывы). Поясняю: есть отрезок длиной 200 мм и надо что бы через каждые 20 мм отрезок обрывался на длину 5 мм (шаг разрывов и величина разрыва должна меняться)

Жду ответов! И надеюсь они будут полезны всем.
Просмотров: 5263
 
Непрочитано 25.10.2007, 14:40
#2
Кулик Алексей aka kpblc
Moderator

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


1. _.qselect
2. overkill из Express Tools
3. _break
Оно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.10.2007, 15:02
#3
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


3.
3.1 Делаешь "хитрый" (с wipeout'ом) блок, а еще лучше "хитрый динамический блок" с возможность изменять его длинну.
3.2 Длинну блока устанавливаешь равной "пробелу"
3.3 _measure с опцией "Блок"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 25.10.2007, 16:34
#4
BARS_1985

construktor
 
Регистрация: 26.09.2007
moscow
Сообщений: 24


Все это конечно замечательно... Но ни один из пунктов не вышел
Не все же инженеры Автокада и программисты :-)
Можно чуть более подробно объяснять что и где.

1. В меню можно сделать выборку по различным параметрам, но я там не нашел выборку по общим отрезкам или дугам. Можно просто тупо выделить все отрезки... или какой либо слой (а общие как были общими так и остались). Это мне ни к чему.

2. Опять попытка завершилась ничем. Не понял что делает опция. Выбрал объекты где есть сопряжение двух рядомстоящих точек (0.01 мм) нажал ввод.. и.. ничего. Менял там параметр с цифрой (0.0000001), полагал что он и отвечал за точность при сопряжении, что бы, грубо говоря, 2 мм-овые фаски не соединялись в точку. Но нет. Без изменений.

3. Ну тут вообще темный лес. Что за "хитрый". Видимо, я должен догадаться ))) Не догадался! :-) wipeout ??? Да и даже пораздумав не понимаю как с помощью блока можно выполнить пункт 3
BARS_1985 вне форума  
 
Непрочитано 25.10.2007, 16:40
#5
Кулик Алексей aka kpblc
Moderator

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


хитрый блок
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.10.2007, 18:05
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


По п.3
См. пример.
Если отключить слой "Рамка" то получишь требуемый результат, отрезок останется целым
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 14.11.2007 в 09:48.
VVA вне форума  
 
Автор темы   Непрочитано 26.10.2007, 16:17
#7
BARS_1985

construktor
 
Регистрация: 26.09.2007
moscow
Сообщений: 24


3. Прочитал про хитрый блок. По - моему не годится он. Во-первых как я понял довольно трудная технология, в которой принимает участие ось z, что нежелательно. Дело в том, что после разрыва линии уже разорванную линию должно узреть оборудование и далеко не факт что оно обрабатывает слои с измененной Oz, а то что блоки не приемлет это точно. неужели нет никаких идей о том как это организовать в Лиспе? Просто другие функции у меня завязаны именно в нем. Вот и хочется объединив Лиспы получить требуемое
BARS_1985 вне форума  
 
Непрочитано 26.10.2007, 16:36
#8
Кулик Алексей aka kpblc
Moderator

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


Хитрый блок содержит в себе объект WIPEOUT. И никаких смещений по 0z, только если сам не сделаешь. У меня почему-то ощущение, что ты не полностью прочитал тему.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.11.2007, 10:14
#9
BARS_1985

construktor
 
Регистрация: 26.09.2007
moscow
Сообщений: 24


Господа! Ну что бы все про блоки, да про блоки. Для любой проблемы всегда есть больше чем один путь ее решения. Ваши бы знания, да в мои русла

Вот накрихтел простейшую програмульку и надеюсь с вашей помощью ее серьезно доработать:

(defun C:virov ()
(setq
wag 20 ; шаг между выровами
vir 5 ; длина вырова


pt1 (getpoint "\n точка 1")
pt2 (getpoint "\n точка 2")
ang1 (/ (* (angle pt1 pt2) 180) pi)

m1 (polar pt1 ang1 wag)
m2 (polar m1 ang1 vir)

m3 (polar m2 ang1 wag)
m4 (polar m3 ang1 vir)

m5 (polar m4 ang1 wag)
m6 (polar m5 ang1 vir)

kol (fix (/ (distance pt1 pt2) (+ wag vir)))
)
(command "_trim" m1 "" m1 m2)

)

Нерешенные проблемы:
1) функция trim требует выделения объекта, а указывая точку приходится включать привязку.
2) эта demo версия работает только при выборке двух точек отрезка над которым и работает программа. Хотелось бы что бы сам прорабатывал все отрезки, а еще лучше и другие примитивы не забывала.
3) и еще минус, что можно сделать два вырова на одном отрезке.

В общем это шаблон того как примерно я хочу что бы программа выглядела. Надеюсь на вашу помощь!
BARS_1985 вне форума  
 
Непрочитано 02.11.2007, 10:16
#10
Кулик Алексей aka kpblc
Moderator

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


У команды _trim, по-моему, была опция _f (fence)
---
Добавлено: кстати, а почему вариант использования типа линии (для п.3) не рассматривается?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.11.2007, 12:45
#11
BARS_1985

construktor
 
Регистрация: 26.09.2007
moscow
Сообщений: 24


У меня была такая мысль. Но прямая хоть и штрихпунктирная, все равно остается прямой с двумя точками. А надо что бы точки на разрывах все таки были. Для оборудования.
BARS_1985 вне форума  
 
Автор темы   Непрочитано 14.11.2007, 16:29
#12
BARS_1985

construktor
 
Регистрация: 26.09.2007
moscow
Сообщений: 24


аааауууууу... Неужели для таких продвинутых пользователей это такая трудная задача. Один отрезок разбить на несколько
BARS_1985 вне форума  
 
Непрочитано 14.11.2007, 23:35
#13
vic153

проектировщик газопроводов
 
Регистрация: 04.08.2005
Петербург
Сообщений: 327


BARS_1985: сдается мне, что ты вначале рисуешь осевую линию на которую сажаешь оборудование. И ты хочешь, чтобы осевая линия прерывалась под этим оборудованием.
Автоматизацию этого процесса, здесь разбирали - это и использование оборудования, как блоков с объектами WIPEOUT, или способ описанный Vova в его книге "AutoCAD. Язык макрокоманд и создание кнопок".
vic153 вне форума  
 
Автор темы   Непрочитано 15.11.2007, 15:40
#14
BARS_1985

construktor
 
Регистрация: 26.09.2007
moscow
Сообщений: 24


Не совсем так. Есть оборудование, которое выжигает лазером контур созданный в программе автокад. И вырубка всего контура приведет к выпадению материала с заготовки, поэтому появилась необходимость делать выровы в примитивах.
BARS_1985 вне форума  
 
Непрочитано 15.11.2007, 16:55
#15
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Держи лиспик
Код:
[Выделить все]
(defun C:LASER ( )
  (and
    (setq shg (getdist "\nДлинна штриха: "))
    (setq rzr (getdist "\nДлинна пропуска: "))
    (setq ss (ssget "_:L" '((0 . "LINE"))))
    (setq i 0)
    (while (< i (sslength ss))
      (setq en (ssname ss i))
      (setq ed (entget en))
      (setq start (cdr(assoc 10 ed))
            end   (cdr(assoc 11 ed))
            )
      (setq start1 start end1 start pt nil ang (angle start end))
      (mapcar '(lambda(x)(if (member (car x) '(0 8 370 62 6))
                           (setq pt (append pt (list x))))) ed)
      (setq ed pt)
;;;      (entmake (append ed
;;;                       (list 
;;;                       (cons 10 end)
;;;                       (cons 11 (setq end (polar end (angle end start) shg)))
;;;                       )
;;;                         )
;;;                 )
      (progn
      (while (>= (distance end1 end)(+ rzr shg))
        (setq start1 end1
              pt (polar start1 ang shg)
              end1 (polar start1 ang (+ shg rzr))
              )
        (entmake (append ed
                       (list 
                       (cons 10 start1)
                       (cons 11 pt)
                       )
                         )
                 )
        )
     (entmake (append ed
                  (list 
                   (cons 10 end1)
                   (cons 11 end)
                  )
                )
            )
      )
     (setq i (1+ i)) 
     (entdel en)
     );_while
      );_and
  (princ)
  )
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 16.11.2007 в 16:21. Причина: Новая версия
VVA вне форума  
 
Автор темы   Непрочитано 16.11.2007, 11:10
#16
BARS_1985

construktor
 
Регистрация: 26.09.2007
moscow
Сообщений: 24


Спасибо !! Это уже похоже на то, что мне нужно :-)
Есть недочеты правда:
1. Программа делает разрвы на определенном шаге, а если остался отрезок с величиной меньшей чем шаг, то он автоматически удаляется. А такие отрезки есть всегда.
2. Хорошо бы что бы можно было выбрать набор примитивов, а не выбирать по одному.
Спасибо!

P.S.: Я бы рад сам доработать программу, благо знаю некоторые команды и на уровне начинающего умею их расписывать, но могли бы вы порекомендовать литературку где доходчивым языком объясняется LISP.
BARS_1985 вне форума  
 
Непрочитано 16.11.2007, 16:21
#17
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


А теперь?. Код в №15
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 19.11.2007, 10:58
#18
BARS_1985

construktor
 
Регистрация: 26.09.2007
moscow
Сообщений: 24


Похоже =)
Еще хорошо бы пару условий соблюсти.
1) выровы устанавливаются на всех отрезках по центру, независимо от того какого расстояния отрезок (мин 10 мм)
2) Если на отрезке два и более вырова, то хорошо что бы они располагались равномерно.
А так супер! Спасибо большое!
Намерян купить книженцию по лиспу и сам дальше разбираться буду =)
BARS_1985 вне форума  
 
Непрочитано 19.11.2007, 11:24
#19
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Симметрично, если я правильно понял
Код:
[Выделить все]
(defun C:LASER1 ( )
  (and
    (setq shg (getdist "\nДлинна штриха: "))
    (setq rzr (getdist "\nДлинна пропуска: "))
    (setq ss (ssget "_:L" '((0 . "LINE"))))
    (setq i 0)
    (while (< i (sslength ss))
      (setq en (ssname ss i))
      (setq ed (entget en))
      (setq start (cdr(assoc 10 ed))
            end   (cdr(assoc 11 ed))
            )
    (if (>= (distance start end)(+ shg rzr))
      (progn
      (setq delta (fix(/ (distance start end)(+ shg rzr)))) ;_число целых шагов
      (setq delta (- (distance start end)(* delta (+ shg rzr)))) ;_Остаток
      (setq delta (* (+ shg delta) 0.5)) ;_1/2 остатка
          (entmake (append ed ;_Смещаемся не delta от начала
                  (list 
                   (cons 10 start)
                   (cons 11 (setq start (polar start (angle start end) delta)))
                  )
                )
            )
      (setq ang (angle start end) pt nil start1 (polar start ang rzr) end1 start1)
      (mapcar '(lambda(x)(if (member (car x) '(0 8 370 62 6))
                           (setq pt (append pt (list x))))) ed)
      (setq ed pt)
      (while (>= (distance end1 end)(+ rzr shg)) ;_пока остаток > шаг+разрыв
        (setq start1 end1
              pt (polar start1 ang shg)
              end1 (polar start1 ang (+ shg rzr))
              )
        (entmake (append ed
                       (list 
                       (cons 10 start1)
                       (cons 11 pt)
                       )
                         )
                 )
        )
     (entmake (append ed ;_оставшийся хвостик
                  (list 
                   (cons 10 end1)
                   (cons 11 end)
                  )
                )
            )
      (entdel en)
      )
      )
     (setq i (1+ i)) 
     );_while
      );_and
  (princ)
  )
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 19.11.2007 в 16:53. Причина: Учтена длина отрезков
VVA вне форума  
 
Автор темы   Непрочитано 19.11.2007, 16:36
#20
BARS_1985

construktor
 
Регистрация: 26.09.2007
moscow
Сообщений: 24


Оооо...
Что же лисп делает с чертежами..
В общем все отрезки меньше длины он достраивает до длины штриха.
BARS_1985 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выделение общих примитивов и другие полезные программы



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AutoМебель или другие программы к САD Оксана Прочее. Программное обеспечение 3 19.01.2006 14:44
Выделение примитивов Spake AutoCAD 1 29.08.2003 08:59