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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Замена веса линий объектов

Замена веса линий объектов

Ответ
Поиск в этой теме
Непрочитано 09.03.2011, 15:34 #1
Замена веса линий объектов
v_alex
 
Новокузнецк
Регистрация: 24.10.2005
Сообщений: 1,124

Здравствуйте... очень нужна помощь... есть порядка 300 файлов... рисовали их очень хорошие, но не очень грамотные люди... в общем нарисовали они все очень тонкими линиями... 0,09... я сейчас открываю каждый файл и правлю эти линии на правильные... на 50 листе задолбался... подскажите лисп который бы в открытых файлах у всех объектов менял толщины линий... заранее спасибо всем сочувствующим...
Просмотров: 4560
 
Непрочитано 09.03.2011, 15:55
#2
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 910


Открываете файл - быстрый выбор - отрезок (полилиния/несколько - зависит от того, толщину каких объектов нужно изменить) - вес линий (в условии ставите равно 0,09) - и меняете толщину на необходимую
kacugu вне форума  
 
Автор темы   Непрочитано 09.03.2011, 16:53
#3
v_alex


 
Регистрация: 24.10.2005
Новокузнецк
Сообщений: 1,124
<phrase 1=


Спасибо за совет... завтра продолжу пользоваться быстрым выбором... но лиспом это можно сделать быстрее... и к сожалению я в нем не писал очень долго и забыл основы...
v_alex вне форума  
 
Непрочитано 09.03.2011, 17:22
#4
VVA

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


v_alex, _setbylayer не устроит?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 09.03.2011, 17:41
#5
v_alex


 
Регистрация: 24.10.2005
Новокузнецк
Сообщений: 1,124
<phrase 1=


Наверное нет... первая мысль которая мне пришла сделать макрос по быстрому на кнопку... но по быстрому не получилось... оказалось у окна быстрого выбора нет возможности работать с командной строкой... попытался сделать через рекордер операций... опять уперся в окно быстрого выбора... я просто незнаю как командно выбрать все объекты с определенной толщиной... для _setbylayer все равно надо делать выбор...

в этом сборнике http://dwg.ru/dnl/7680 есть лисп DISLAY.LSP который сортирует объекты по слоям... но много непонятного и литературы под рукой нет по лиспу...
v_alex вне форума  
 
Непрочитано 09.03.2011, 18:31
#6
Кулик Алексей aka kpblc
Moderator

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


Какой-нибудь закон "правильности" существует? Или все "по месту и соображению"?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.03.2011, 18:37
#7
VVA

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


Отредактируй список соответствий LWLIST*
Код:
[Выделить все]
(setq *LWLIST* (list
  ;;;(list <Старое значение> <Новое значение>)
  (list -1 -1) ;_Послою (-1)
  (list -2 -2) ;_Поблоку (-2)
  (list -3 -3) ;_Поумолчанию (-3)
  (list 0 0)   ;_ Вес 0.00
  (list 5 5)   ;_ Вес 0.05
  (list 9 9)   ;_ Вес 0.09
  (list 13 13) ;_ Вес 0.13
  (list 15 15) ;_ Вес 0.15
  (list 18 18) ;_ Вес 0.18
  (list 20 20) ;_ Вес 0.20
  (list 25 25) ;_ Вес 0.25
  (list 30 30) ;_ Вес 0.30
  (list 35 35) ;_ Вес 0.35
  (list 40 40) ;_ Вес 0.40
  (list 50 50) ;_ Вес 0.50
  (list 53 53) ;_ Вес 0.53
  (list 60 60) ;_ Вес 0.60
  (list 70 70) ;_ Вес 0.70
  (list 80 80) ;_ Вес 0.80
  (list 90 90) ;_ Вес 0.90
  (list 100 100) ;_ Вес 1.00
  (list 106 106) ;_ Вес 1.06
  (list 120 120) ;_ Вес 1.20
  (list 140 140) ;_ Вес 1.40
  (list 158 158) ;_ Вес 1.58
  (list 200 200) ;_ Вес 2.00
  (list 211 211) ;_ Вес 2.11
))
(defun C:CHLWALL ()(ConvLw nil))
(defun C:CHLWSEL( / *error* Doc ss CountLW)
   (vl-load-com)  
  (defun *error* (msg)(princ msg)(vla-endundomark doc)(princ))
  (setq Doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark Doc)
  (if (setq ss (ssget "_:L"))
    (progn
      (setq CountLW 0)
     (foreach obj (mapcar (function vlax-ename->vla-object)
	            (vl-remove-if (function listp)
		      (mapcar (function cadr) (ssnamex ss))))
       (setq CountLW (ChangeLW Obj CountLW))
       )
      (princ "\nConverting Field in ")(princ CountLW)
      (princ " text's")
      )
    )
(vla-endundomark Doc)
(command "_.Regenall")  
  )
(defun ChangeLW ( Obj CountLW / lw )
  (if (and (vlax-write-enabled-p Obj)
           (vlax-property-available-p Obj 'LineWeight)
           )
    (progn
      (setq lw (cadr(assoc (vla-get-LineWeight obj) *LWLIST*)))
      (vl-catch-all-apply 'vla-put-lineweight (list Obj lw))
      (setq CountLW (1+ CountLW))
      )
    )
  CountLW
  )
(defun ConvLw ( Ask / Doc *error* ChangeLWInAllObjects
	      )
  (vl-load-com)  
  (defun *error* (msg)(princ msg)
   (mip:layer-status-restore)
   (vla-endundomark doc)(princ)
  )
 (defun loc:msg-yes-no ( title message / WScript ret)
(setq WScript (vlax-get-or-create-object "WScript.Shell"))
(setq ret (vlax-invoke-method WScript "Popup" message "0" title (+ 4 48)))
(vlax-release-object WScript)
(= ret 6)  
)

(defun ChangeLWInAllObjects (Doc / txtstr tmp txt count CountLW)
  (setq  CountLW 0)  
  (vlax-for Blk	(vla-get-Blocks Doc)
    (if	(equal (vla-get-IsXref Blk) :vlax-false) ;;;kpbIc http://forum.dwg.ru/showpost.php?p=396910&postcount=30
      (progn
	(setq count 0
	      txt (strcat "Changed " (vla-get-name Blk))
	      )
	(grtext -1 txt)
      (vlax-for	Obj Blk
	(setq count (1+ count))
	(if (zerop(rem count 10))(grtext -1 (strcat txt " : " (itoa count))))
        (setq CountLW (ChangeLW Obj CountLW))
      ) ;_ end of vlax-for
      )
    ) ;_ end of if
  ) ;_ end of vlax-for
 (vl-cmdf "_redrawall")
 CountLW 
)
(setq Doc (vla-get-activedocument (vlax-get-acad-object)))
(mip:layer-status-save)(vla-startundomark Doc)
 (if (or (not Ask )
	 (if (= (getvar "DWGCODEPAGE") "ANSI_1251")
	   (loc:msg-yes-no "Внимание"
	     "Все поля будут преобразованы в текст !!!\nПродолжить?"
	     )
	   (loc:msg-yes-no "Attension"
	     "All fields will be transformed to the text!!!\nto Continue?"
	     )
	   )
	 )
 (progn
   (princ "\nConverting Field in ")
   (princ (ChangeLWInAllObjects Doc))
   (princ " text's")
   )
   (princ)
 )
(mip:layer-status-restore)(vla-endundomark Doc)
(command "_.Regenall")  
(princ)
)

(defun mip:layer-status-restore	()
  (foreach item	*MIP_LAYER_LST*
    (if	(not (vlax-erased-p (car item)))
      (vl-catch-all-apply
	'(lambda ()
	   (vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
	   (vla-put-freeze
	     (car item)
	     (cdr (assoc "freeze" (cdr item)))
	   ) ;_ end of vla-put-freeze
	 ) ;_ end of lambda
      ) ;_ end of vl-catch-all-apply
    ) ;_ end of if
  ) ;_ end of foreach
  (setq *MIP_LAYER_LST* nil)
) ;_ end of defun
(defun mip:layer-status-save ()
  (setq *MIP_LAYER_LST* nil)
  (vlax-for item (vla-get-layers
		   (vla-get-activedocument (vlax-get-acad-object))
		 ) ;_ end of vla-get-layers
    (setq *MIP_LAYER_LST*
	   (cons (list item
		       (cons "freeze" (vla-get-freeze item))
		       (cons "lock" (vla-get-lock item))
		 ) ;_ end of cons
		 *MIP_LAYER_LST*
	   ) ;_ end of cons
    ) ;_ end of setq
    (vla-put-lock item :vlax-false)
    (if	(= (vla-get-freeze item) :vlax-true)
      (vl-catch-all-apply
	'(lambda () (vla-put-freeze item :vlax-false))
      ) ;_ end of vl-catch-all-apply
    ) ;_ end of if
  ) ;_ end of vlax-for
) ;_ end of defun


Цитата:
Сообщение от v_alex Посмотреть сообщение
просто незнаю как командно выбрать все объекты с определенной толщиной
Для толщины 0.09
Код:
[Выделить все]
(sssetfirst
  nil
  (ssget "_X" (list (cons 370 9)(cons 410 (getvar "CTAB"))))
  )
Принцип простой
Послою - -1
Поблоку - -2
Поумолчанию - -3
Дальше значение веса, умноженное на 100
Вес 0.09 - 9
Вес 1.06 - 106
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 10.03.2011, 07:03
#8
v_alex


 
Регистрация: 24.10.2005
Новокузнецк
Сообщений: 1,124
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Какой-нибудь закон "правильности" существует? Или все "по месту и соображению"?
закон правильности есть, но не до него... так что по месту и соображению...
Цитата:
Сообщение от VVA Посмотреть сообщение
Отредактируй список соответствий LWLIST*
Большое искреннее спасибо...
v_alex вне форума  
 
Непрочитано 10.03.2011, 08:00
#9
Ыых


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


Они в слоях чертили?
Ыых вне форума  
 
Автор темы   Непрочитано 10.03.2011, 13:20
#10
v_alex


 
Регистрация: 24.10.2005
Новокузнецк
Сообщений: 1,124
<phrase 1=


а как иначе... в двух трех... в слоях "0" "вспомог" и "слой 1"
v_alex вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Замена веса линий объектов



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отображение веса линий в видовом экране. Андрюха_вода AutoCAD 46 29.08.2014 12:38
В предварительном просмотре не отображаются веса линий salto-klose AutoCAD 3 08.06.2010 16:04
Замена названий блоков, типов линий АлексЮстасу Программирование 9 04.06.2010 21:51
FILTER / фильтр BM60 Справочник команд 0 08.07.2008 15:35
AutoCAD 2007 рус. - неверная печать веса некоторых линий stas00n AutoCAD 1 29.10.2007 03:31