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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp, меняющий толщины линий

Lisp, меняющий толщины линий

Ответ
Поиск в этой теме
Непрочитано 15.09.2012, 15:10 #1
Lisp, меняющий толщины линий
Конструктор-ППРщик
 
Регистрация: 06.05.2010
Сообщений: 80

Добрый день! Много сил и времени нашего отдела тратится на корректировку чужих чертежей (приведение толщин линий в соответствие с внутренними стандартами: Толстая 0,4мм; Тонкая и размеры 0,18мм; Текст, Мтекст 0,2мм). Возможно ли в принципе написать Lisp, меняющий толщины линий следующим образом:
- Все толщины линий до 0,25 включительно преобразовывались бы в 0,18мм.
- Все толщины линий свыше 0,25 преобразовывались бы в 0,4мм.
- Все толщины линий текста и Мтекста преобразовывался в 0,2мм.
- Все толщины линий размеров (параллельные, угловые и т. д. ) - в 0,18мм.

и дополнительно - в слоях - до 0,25 и "по умолчанию" =0,18мм, свыше 0,25 = 0,4мм;
блоки в составах чертежа так же корректировались.
Возможно ли это нажатием одной кнопки?

Последний раз редактировалось Конструктор-ППРщик, 15.09.2012 в 15:24.
Просмотров: 4763
 
Непрочитано 17.09.2012, 11:41
#2
Do$

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


Возможно.
Do$ вне форума  
 
Непрочитано 20.09.2012, 19:46
#3
vade


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


Может Do$ подкинет лиспик по этой проблеме
vade вне форума  
 
Непрочитано 21.09.2012, 08:52
#4
Do$

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


Цитата:
Может Do$ подкинет лиспик по этой проблеме
Откуда такая информация?
Do$ вне форума  
 
Непрочитано 21.09.2012, 20:17
#5
vade


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


А твоё Возможно разве не о чем не говорит?
Может поможешь с данной проблемой

Последний раз редактировалось vade, 22.09.2012 в 15:05.
vade вне форума  
 
Непрочитано 22.09.2012, 16:14
#6
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 501
<phrase 1=


Цитата:
Сообщение от vade Посмотреть сообщение
А твоё Возможно разве не о чем не говорит?
неа. просто Do$ внимательно читает вопросы))
Цитата:
Сообщение от Конструктор-ППРщик Посмотреть сообщение
Возможно ли в принципе написать Lisp,
Цитата:
Сообщение от Конструктор-ППРщик Посмотреть сообщение
Возможно ли это нажатием одной кнопки?
в заглавном посте только вот эти два вопроса
bargool вне форума  
 
Автор темы   Непрочитано 22.09.2012, 16:22
#7
Конструктор-ППРщик


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


Хорошо, раз возможно, тогда вопрос №2:
Сколько по времени займет сваять такой лиспик и за сколько $ ?
Конструктор-ППРщик вне форума  
 
Непрочитано 22.09.2012, 16:44
#8
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,550


Цитата:
Сообщение от Конструктор-ППРщик Посмотреть сообщение
колько по времени займет сваять такой лиспик и за сколько $ ?
это в другой раздел
gomer вне форума  
 
Автор темы   Непрочитано 22.09.2012, 16:45
#9
Конструктор-ППРщик


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


А если бесплатно, за идею так сказать? )) или хотя бы подскажите чайнику, как его написать?
Конструктор-ППРщик вне форума  
 
Непрочитано 22.09.2012, 16:47
#10
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,550


Цитата:
Сообщение от Конструктор-ППРщик Посмотреть сообщение
или хотя бы подскажите чайнику, как его написать?
начать с четкого описания алгоритма
gomer вне форума  
 
Непрочитано 24.09.2012, 05:38
#11
MEsher


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


Цитата:
Сообщение от Конструктор-ППРщик Посмотреть сообщение
- Все толщины линий до 0,25 включительно преобразовывались бы в 0,18мм.
- Все толщины линий свыше 0,25 преобразовывались бы в 0,4мм.
- Все толщины линий текста и Мтекста преобразовывался в 0,2мм.
- Все толщины линий размеров (параллельные, угловые и т. д. ) - в 0,18мм.
То есть вне зависимости от слоя для каждой линии должно выполняться это условие?

Если да, то

Цитата:
Сообщение от gomer Посмотреть сообщение
начать с четкого описания алгоритма
Наверно берешь все объекты с рабочего пространства и по деревянному через 'cond их правишь.

Последний раз редактировалось MEsher, 24.09.2012 в 06:20.
MEsher вне форума  
 
Непрочитано 24.09.2012, 07:47
#12
void2005

Инженегр-констбезруктор
 
Регистрация: 12.11.2010
Красноярск
Сообщений: 61


а куда пропал Кулик Алексей ака Крыс, много кому помог безвозмездно за виртуальное пыво, мне например
void2005 вне форума  
 
Непрочитано 24.09.2012, 08:16
#13
MEsher


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


Цитата:
Сообщение от MEsher Посмотреть сообщение
и по деревянному через 'cond
К примеру так
Код:
[Выделить все]
 (vl-load-com)
(setq acad-application (vlax-get-acad-object))
(setq active-document (vla-get-ActiveDocument acad-application))
(setq model-space (vla-get-ModelSpace active-document))

(defun C:KVESS ( / i temp name)
  (setq i 0)
  (repeat (vla-get-count model-space)
    (setq temp (vla-item model-space i)
	  name (vla-get-objectname temp))
    (cond
      ((= name "AcDbMText") (vla-put-Lineweight temp 20))
      ((= name "AcDbBlockReference") (c:bvess temp))
      ((or (= name "AcDbLine")
	   (= name "AcDbText")
	   (= name "AcDbArc")
	   (= name "AcDbPolyline")
	   (= name "AcDbEllipse")
	   (= name "AcDbHatch")
	   (= name "AcDbSpline")
	   (= name "AcDbCircle")) (vla-put-Lineweight temp
				    (if (<= (vla-get-Lineweight temp) 25) 18 40)))
      ((wcmatch name "*Dimension") (vla-put-Lineweight temp 18))
      (T (princ "Неизвестный примитив :(")))
    (setq i (1+ i))))

(defun c:BVESS (block / temp i name)
  (setq block (vla-item (vla-get-blocks active-document) (vla-get-EffectiveName block))
	i 0)
  (repeat (vla-get-count block)
    (setq temp (vla-item block i)
	  name (vla-get-objectname temp))
    (cond
      ((= name "AcDbMText") (vla-put-Lineweight temp 20))
      ((= name "AcDbBlockReference") (c:bvess temp))
      ((or (= name "AcDbLine")
	   (= name "AcDbText")
	   (= name "AcDbArc")
	   (= name "AcDbPolyline")
	   (= name "AcDbEllipse")
	   (= name "AcDbHatch")
	   (= name "AcDbSpline")
	   (= name "AcDbCircle")) (vla-put-Lineweight temp
				    (if (<= (vla-get-Lineweight temp) 25) 18 40)))
      (T (princ "Неизвестный примитив :(")))
    (setq i (1+ i))
    ))

Последний раз редактировалось MEsher, 24.09.2012 в 08:25.
MEsher вне форума  
 
Непрочитано 24.09.2012, 09:08
#14
Кулик Алексей aka kpblc
Moderator

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


Ака крыс сейчас в завале. Ни на что полноценное времени нет. А выдавать полуфабрикат - не комильфо.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.09.2012, 06:53
#15
MEsher


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


хотя можно и иначе попробывать
Код:
[Выделить все]
 
(vl-load-com)

(defun C:NVESS (/ acad-application active-document model-space nvess)
  (setq	acad-application (vlax-get-acad-object)
	active-document	 (vla-get-ActiveDocument acad-application)
	model-space	 (vla-get-ModelSpace active-document)
	nvess		 (lambda (space / temp ind)
			   (setq ind (vla-get-count space))
			   (repeat (vla-get-count space)
			     (setq temp (vla-item space (1- ind)))
			     (if (= (vla-get-objectname temp) "AcDbBlockReference")
			       (progn
				 (nvess (vla-item (vla-get-blocks active-document)
						 (vla-get-EffectiveName temp)
				       )
				 )
				 (nvess (vla-item (vla-get-blocks active-document)
						 (vla-get-Name temp)
				       )
				 )
			       )

			       (if (vlax-property-available-p temp "Lineweight")
				 (if
				   (wcmatch (vla-get-objectname temp)
					    "*Text,AcDbAttribute,AcDbAttributeDefinition"
				   )
				    (vla-put-Lineweight temp 20)
				    (vla-put-Lineweight
				      temp
				      (if (<= (vla-get-Lineweight temp) 25)
					18
					40
				      )
				    )
				 )
			       )
			     )
			     (setq ind (1- ind))
			   )
			 )
  )
  (nvess model-space)
)
__________________
Код порою получается жутковат, конешно, и убиться об его можно, да ведь все под богом ходим...
MEsher вне форума  
 
Непрочитано 25.09.2012, 09:40
#16
Кулик Алексей aka kpblc
Moderator

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


Без гарантий и особых проверок:
Код:
[Выделить все]
 (vl-load-com)

(defun c:test (/ adoc layers att)

  (defun _kpblc-conv-ent-to-vla (ent_value / res)
    (cond
      ((= (type ent_value) 'vla-object) ent_value)
      ((= (type ent_value) 'ename) (vlax-ename->vla-object ent_value))
      ((setq res (_kpblc-conv-ent-to-ename ent_value))
       (vlax-ename->vla-object res)
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-ename (ent_value /)
    (cond
      ((= (type ent_value) 'vla-object)
       (vlax-vla-object->ename ent_value)
       )
      ((= (type ent_value) 'ename) ent_value)
          ;((= (type ent_value) 'str) (handent ent_value))
      ((= (type ent_value) 'list) (cdr (assoc -1 ent_value)))
      (t nil)
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-vla-to-list (value / res)
    (cond
      ((listp value)
       (mapcar (function _kpblc-conv-vla-to-list) value)
       )
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (_kpblc-conv-vla-to-list (vlax-safearray->list value))
         ) ;_ end of if
       )
      ((and (member (type value) (list 'ename 'str 'vla-object))
            (= (type (_kpblc-conv-ent-to-vla value)) 'vla-object)
            (vlax-property-available-p (_kpblc-conv-ent-to-vla value) 'count)
            ) ;_ end of and
       (vlax-for sub (_kpblc-conv-ent-to-vla value)
         (setq res (cons sub res))
         ) ;_ end of vlax-for
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun


  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (setq layers (mapcar
                 (function
                   (lambda (x)
                     (append (list (cons "obj" x))
                             (mapcar
                               (function
                                 (lambda (prop / tmp)
                                   (setq tmp (vlax-get-property x (car prop)))
                                   (vl-catch-all-apply
                                     (function
                                       (lambda ()
                                         (vlax-put-property x (car prop) (cdr prop))
                                         ) ;_ end of lambda
                                       ) ;_ end of function
                                     ) ;_ end of vl-catch-all-apply
                                   (cons (car prop) tmp)
                                   ) ;_ end of lambda
                                 ) ;_ end of function
                               (list (cons "freeze" :vlax-false)
                                     (cons "lock" :vlax-false)
                                     ) ;_ end of list
                               ) ;_ end of mapcar
                             ) ;_ end of append
                     ) ;_ end of LAMBDA
                   ) ;_ end of function
                 (vl-remove-if
                   (function
                     (lambda (x)
                       (wcmatch (strcase (vla-get-name x)) "*|*")
                       ) ;_ end of LAMBDA
                     ) ;_ end of function
                   (_kpblc-conv-vla-to-list (vla-get-layers adoc))
                   ) ;_ end of vl-remove-if
                 ) ;_ end of mapcar
        ) ;_ end of setq
  (foreach item layers
    (vla-put-lineweight (cdr (assoc "obj" item))
                        (if (or (= (vla-get-lineweight (cdr (assoc "obj" item))) aclnwtbylwdefault)
                                (<= (vla-get-lineweight (cdr (assoc "obj" item))) aclnwt025)
                                ) ;_ end of or
                          aclnwt018
                          aclnwt040
                          ) ;_ end of if
                        ) ;_ end of vla-put-lineweight
    ) ;_ end of foreach
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (equal (vla-get-isxref blk_def) :vlax-false)
      (if (wcmatch (if (vlax-property-available-p blk_def 'effectivename)
                     (vla-get-effectivename blk_def)
                     (vla-get-name blk_def)
                     ) ;_ end of if
                   "`*D*"
                   ) ;_ end of WCMATCH
        (vlax-for ent blk_def
          (vl-catch-all-apply
            (function
              (lambda ()
                (vla-put-lineweight ent aclnwt018)
                ) ;_ end of lambda
              ) ;_ end of function
            ) ;_ end of vl-catch-all-apply
          ) ;_ end of vlax-for
        (vlax-for ent blk_def
          (if (and (wcmatch (strcase (vla-get-objectname ent)) "*BLOCK*")
                   (setq att (append (_kpblc-conv-vla-to-list (vla-getattributes ent))
                                     (_kpblc-conv-vla-to-list (vla-getconstantattributes ent))
                                     ) ;_ end of append
                         ) ;_ end of setq
                   ) ;_ end of and
            (foreach _att att
              (vl-catch-all-apply
                (function
                  (lambda ()
                    (vla-put-lineweight _att aclnwt020)
                    ) ;_ end of lambda
                  ) ;_ end of function
                ) ;_ end of vl-catch-all-apply
              ) ;_ end of foreach
            ) ;_ end of if
          (vl-catch-all-apply
            (function
              (lambda ()
                (vla-put-lineweight ent
                                    (cond
                                      ((wcmatch (strcase (vla-get-objectname ent)) "*TEXT,*ATTR*") aclnwt020)
                                      ((<= (vla-get-lineweight ent) aclnwt025) aclnwt018)
                                      (t aclnwt040)
                                      ) ;_ end of cond
                                    ) ;_ end of vla-put-lineweight
                ) ;_ end of LAMBDA
              ) ;_ end of function
            ) ;_ end of vl-catch-all-apply
          ) ;_ end of vlax-for
        ) ;_ end of if
      ) ;_ end of if
    ) ;_ end of vlax-for
  (foreach item layers
    (foreach prop (cdr item)
      (vl-catch-all-apply
        (function
          (lambda ()
            (vlax-put-property (cdr (assoc "obj" item)) (car prop) (cdr prop))
            ) ;_ end of lambda
          ) ;_ end of function
        ) ;_ end of vl-catch-all-apply
      ) ;_ end of foreach
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 25.09.2012 в 10:59.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.09.2012, 10:55
#17
Дима_

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


Offtop: То Крыс - кодировка
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 25.09.2012, 10:59
#18
Кулик Алексей aka kpblc
Moderator

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


А она касалась только комментариев. Вроде посносил.
Но все равно спасибо
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.09.2012, 14:32
#19
detrah


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


Похожая задача: необходимо для выбранных примитивов изменить вес линии.
Наковырял только такое (для одного примитива):
Код:
[Выделить все]
 ; Присваиваем объекту вес линии
(defun c:lweight05 (/ ent)
   (setvar "CMDECHO" 0)
   (setq ent (vlax-ename->vla-object (car (entsel))))
   (vla-put-lineweight ent aclnwt050); вес в мм*100
   (princ)
 )
Подскажите, как модернизировать код, чтобы можно было редактировать сразу целый набор?
__________________
Не теряйте голову! А вдруг жизнь захочет вас по ней погладить?
detrah вне форума  
 
Непрочитано 26.09.2012, 16:14
#20
Саша1983


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


помнится когда работал в гипротрубе была у нас панелька, разработанная нашими программерами, где была такая кнопка, которую тут хотят. Тогда не придал ей значения, сейчас думаю - жаль код не копирнул, сейчас тоже очень нужно.
Саша1983 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp, меняющий толщины линий

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP для подсчета суммы длин линий Kostinok LISP 18 26.04.2013 14:56
LISP. Как увеличить уменьшить масштаб типов линий всех объектов на заданную величину. Zhnek LISP 4 26.07.2012 12:37
LISP Есть дерево из линий, нужно на концы линий нарисовать метки Golem-iq LISP 16 06.03.2012 00:44
AutoCAD 2011: отображение толщины линий dimcher AutoCAD 2 18.05.2010 12:33
Печать толщины линий Alexfoto333 AutoCAD 3 10.10.2007 11:06