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

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

Вычитание солидов с сохранением их

Ответ
Поиск в этой теме
Непрочитано 02.11.2012, 10:50 #1
Вычитание солидов с сохранением их
iskatel111
 
Регистрация: 13.06.2012
Сообщений: 98

Здравствуйте.

при вычитании солидов, тот что вычитается удаляется полностью, мне же нужно его оставить
(две детали входят одна в другую, вычитанием получаю форму паза для фрезеровки)

как выход из положения копирую вычитаемую деталь и вставляю в то же место - одна вычитается, другая остается.
Может можно както настроить чтоб солиды не удалялись?
Просмотров: 2740
 
Непрочитано 02.11.2012, 11:23
#2
fasadel


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


Сохраните скрипт в файл с расширением .lsp. Потом наберите команду _appload и загрузите сохранённый файл. После этого из командной строки станет доступна команда _ssub, которая делает именно такое вычитание, как вам требуется.
Код:
[Выделить все]
 (vl-load-com)

(defun c:ssub ()
	(setq s1_ename (car (entsel "\nSelect solid: ")))
	(setq s1_obj (vlax-ename->vla-object s1_ename))
	
	(setq s2_ename (car (entsel "\nSelect solid to substruct: ")))
	(setq s2_obj (vlax-ename->vla-object s2_ename))
	(vla-copy s2_obj)
   	
  	(vla-boolean s1_obj acSubtraction s2_obj)

        (alert "fasadel.com — Дизайн-проектирование фасадов и изготовление фасадного декора. (на правах рекламы)")
)
Примечание: команда работает только для двух солидов, проверки корректности выбора объектов нет.
fasadel вне форума  
 
Непрочитано 02.11.2012, 11:59
#3
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,179
<phrase 1=


стойте. была системная переменная, которая за это отвечала. Сейчас поищу
нет, думал DELOBJ, но он только для EXTRUDE, SWEEP, REVOLVE, and LOFT commands
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Непрочитано 02.11.2012, 12:14
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Вот такое чудо написанное мной около 5 лет назад (да тогда я так писал):
Код:
[Выделить все]
 (defun c:subsolid ( / ss1 ss2)
(princ "\nВыберите объекты из которых производиться вычитание")
(setq ss1 (mapcar 'vlax-ename->vla-object (sstolist (ssget (list (cons 0 "3DSOLID"))))))
(princ "\nВыберите вычитаемые объекты")
(setq ss2 (mapcar 'vlax-ename->vla-object (sstolist (ssget (list (cons 0 "3DSOLID"))))))
(if (and ss1 ss2)
(progn
(vla-startundomark (vlax-get-property (vlax-get-acad-object) 'ActiveDocument))
(mapcar '(lambda (solid1)
(mapcar '(lambda (solid2)
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-boolean (list solid1 AcSubtraction solid2))) (vla-delete solid2))
)(mapcar 'vla-copy ss2))
)ss1)
(vla-endundomark (vlax-get-property (vlax-get-acad-object) 'ActiveDocument))
));end of progn&if
);end of subsolid
Offtop: то fasadel тебе список ошибок\косяков твоей программы написать?
...хотя парочка уже в примечании есть

p.s. ой там еще sstolist - же - надо добавить:
Код:
[Выделить все]
 (vl-load-com)
(defun sstolist(ss) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 02.11.2012 в 12:21.
Дима_ вне форума  
 
Автор темы   Непрочитано 02.11.2012, 12:28
#5
iskatel111


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Вот такое чудо написанное мной около 5 лет назад (да тогда я так писал):
после выбора солида пишет ; error: no function definition: SSTOLIST
iskatel111 вне форума  
 
Непрочитано 02.11.2012, 12:31
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


см. ниже в #4.
p.s. можешь просто сложить строки в один файл.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 02.11.2012, 13:31
#7
iskatel111


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


спасибо, работает
iskatel111 вне форума  
 
Непрочитано 02.11.2012, 13:39
#8
fasadel


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


Цитата:
Offtop: то fasadel тебе список ошибок\косяков твоей программы написать?
to _Дима замечания приветствуются. Скрипт не проверял, если честно, схалявил.
fasadel вне форума  
 
Непрочитано 02.11.2012, 15:01
1 | #9
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


У тебя остается кучка глобальных переменных (которые могут портить другую, такого-же плана написанную, программу). Если используешь setq то совсем не нужно писать его несколько раз:
(setq a 1) (setq b 2) ... -> (setq a 1 b 2 ...) и самое главное в твоем примере они не нужны вообще (делаю ctrl+c-ctrl+v из твоей программы, оставляя только что действительно делает действие - без "воды"):
Код:
[Выделить все]
 
(defun c:ssub ()
  	(vla-boolean (vlax-ename->vla-object (car (entsel "\nSelect solid: ")))
                 acSubtraction
                 (vla-copy (vlax-ename->vla-object (car (entsel "\nSelect solid to substruct: ")))))
    (alert "fasadel.com — Дизайн-проектирование фасадов и изготовление фасадного декора. (на правах рекламы)"))
Отличается от твоей тем, что (а это еще ошибка) у тебя удаляло таки исходный объект, и вставляло его копию (а это может впоследствии вызвать трудноуловимую ошибку - например если "связатся" полем с этим объектом - он вроде остается - но на самом деле это не он), а здесь работает с копией. Ну еще есть правила "хорошего тона" оформления команд, по поводу меток отмены, выбора рамкой и пр...
p.s. Как совет - в лиспе вначале надо отучится "думать переменными" и старатся мыслить абстракциями - что нужно сделать, то есть если надо к 3 прибываить 8, то не нужно писать (setq a 3) (setq b 8) (+ a b) - это примерно как у тебя сейчас - просто (+ 3 8).
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 02.11.2012 в 15:07.
Дима_ вне форума  
 
Непрочитано 02.11.2012, 15:31
#10
fasadel


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


Спасибо за комментарии. Насчёт вычитания не того объекта — ценное замечание, я что-то об этом даже не задумался.

К сожалению, никак не могу наловчиться читать программы ЛИСП. Тяжело это со скобками, не говоря уже о нотации арифметики. К тому же надо научиться форматировать текст, чтобы он был понятнее, а то везде пишут, как придётся. Есть какие-то правильные стили? Сколько надо вложенных скобок наворачивать? Какая здесь вообще культура?

Поразбирался чуток ЛИСПом (написал пяток полезных функций) и, наверное, пойду в Basic. Сейчас на VBA перепишу те же функции для практики , а дальше видно будет. Как-то VBA привычнее по виду.

Вот только мне нужны в работе фишечки связанные с автоматизацией визуализации: освещение, камеры, а тут на форуме с этим как-то глухо. По ходу никто с этим не работает.

Последний раз редактировалось fasadel, 02.11.2012 в 15:36.
fasadel вне форума  
 
Непрочитано 02.11.2012, 15:32
1 | #11
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от fasadel Посмотреть сообщение
К тому же надо научиться форматировать текст, чтобы он был понятнее, а то везде пишут, как придётся.
http://autolisp.ru/2009/09/10/vlide-misc-01/
http://autolisp.ru/2009/09/12/vlide-misc-02/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Вычитание солидов с сохранением их

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Word. Преобразование нумерованного списка в обычный текст с сохранением нумерации kp+ Прочее. Программное обеспечение 24 15.11.2021 13:20
Не работают команды объединение, вычитание и пересечение NumLock AutoCAD 10 28.02.2014 11:31
Вычитание 3D тел. hprx AutoCAD 1 04.04.2009 13:54
Проблемы при печати солидов Werwolf AutoCAD 2 04.02.2008 15:32
Как импортировать dwg ф-л в 3DMax8 с сохранением объема объе AGNRS AutoCAD 6 16.05.2007 19:12