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

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

Программное создание размерных стилей

Ответ
Поиск в этой теме
Непрочитано 12.09.2005, 09:04 #1
Программное создание размерных стилей
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 39,844

Есть небольшая проблема: надо сделать размерный стиль, и внутри него дополнительные определения для размерных стилей на угловые размеры, радиусы и т.п. Через (tblobjname) получены списки настроек, имена, но сделать повторно через (entmake) - естественно, на новом файле, только имя стиля менял,- не получается - возвращается nil.
Я понимаю, что есть некоторые значения dxf-кодов, которые являются обязательными. Какие обязательные, какие нет, мне вычислить не удалось. Поэтому собственно вопрос(ы) - даю несколько, чтобы и мне было понятно, и сразу на ошибки указали:
1. Для задания кодов 5, 6 и 7 (соответствуют dimblk, dimblk1, dimblk2) требуется имя блока - как его получать / задавать? через tblobjname или assoc? Или проще сделать через (setvar)?
2. Для кодов 340, 341 (соответственно dimtxtsty, dimldrblk) требуются уже хэндлы блоков - а к ним как обращаться?
3. Для кодов 371, 372 (соответственно dimlwd, dimlwe) требуются lineweight enum value - а это что за чудо? Для значения "ByLayer" чего надо назначать? А для "ByBlock", 0.25 etc?
---
Идти через (setvar) в данном варианте у меня что-то не получается, подозреваю, что надо использовать ActiveX-функции, но там я как свинья в ананасах, хоть скажите, в какую сторону копать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Просмотров: 27447
 
Непрочитано 12.09.2005, 11:21
#2
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
kpblc: надо использовать ActiveX-функции, но там я как свинья в ананасах, хоть скажите, в какую сторону копать.
Во- перывых, не "в ананасах", а в апельсинах. Классику непозволительно искажать никому, даже гурам. Во-вторых, не надо прибндняться - LISP-ом вы занялись с полгода и уже сделали заметные успехи. Одолеете и ActiveX. А для начала загляните в "The Visual LISP Developer Bible" bt David Stein. Здесь когда-то приводили ссылку, но если надо, я могу кинуть ZIP на емелю.
Лентяй вне форума  
 
Автор темы   Непрочитано 12.09.2005, 11:29
#3
Кулик Алексей aka kpblc
Moderator

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


Ну дело в том, что есть человек с ником Apelsinov, весьма сильно мною уважаемый, не хочу даже косвенно его обижать или давать повод.
За похвалу спасибо - Доброе слово и ламеру приятно (с) Лукьяненко, "Фальшивые зеркала".
Zip, если можно, то да, с большим удовольствием. Сколько оно весит? Просто yandex не принимает больше 10 метров за раз, т.е. паковка должна быть где-то по 7-7,5 метров, не больше.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.09.2005, 12:04
#4
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Хорошая новость - мыло уже отслал, всего 800К.
Плохая нововсть - нет, пусть уж AutoDesk скажет сам: "Dimensions created via the AutoCAD user interface are created with the active dimension style plus all document overrides. Dimensions created via ActiveX are created with the active dimension style only. To have the dimensions created via ActiveX take on the document overrides, use the CopyFrom method to copy the dimension style from the document to the active dimension style." Так что сохдавайте парный спиок с DXF кодами, согласно DXF Reference->Tables->DIMSTYLES, типа такого
Код:
[Выделить все]
((0 . "DIMSTYLE") (2 . "Standard") (70 . 0) (3 . "") (4 . "") (5 . "") (6 . "") (7 . "") (40 . 0.0) (41 . 0.0625) (42 . 0.03125) (43 . 0.38) (44 . 0.03125) (45 . 0.0) (46 . 0.0) (47 . 0.0) (48 . 0.0) (140 . 0.09375) (141 . 0.09) (142 . 0.0) (143 . 25.4) (144 . 1.0) (145 . 0.0) (146 . 1.0) (147 . 0.0625) (71 . 0) (72 . 0) (73 . 0) (74 . 0) (75 . 0) (76 . 0) (77 . 1) (78 . 1) (170 . 0) (171 . 2) (172 . 1) (173 . 0) (174 . 0) (175 . 0) (176 . 256) (177 . 256) (178 . 256) (270 . 2) (271 . 3) (272 . 3) (273 . 2) (274 . 2) (340 . <Entity name: 7ef88c88>) (275 . 0) (280 . 0) (281 . 0) (282 . 0) (283 . 1) (284 . 0) (285 . 0) (286 . 0) (287 . 3) (288 . 0))
затем ENTMAKE, и да сопутствует вам удача. Аминь.
Лентяй вне форума  
 
Автор темы   Непрочитано 12.09.2005, 12:16
#5
Кулик Алексей aka kpblc
Moderator

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


Опять-таки немного новостей:
хорошая - письмо получил, но пока просмотреть не успел.
отвратительная - список создан, но (entmake) для него возвращает nil. Соответственно, ничего не делается. Чтобы не быть голословным:
Код:
[Выделить все]
(list
'(0 . "DIMSTYLE") '(2 . "SPDS")  '(70 . 0)	  '(3 . "")   '(4 . "")	  '(5 . "")
'(6 . "")	 '(7 . "")   '(41 . 2.5) '(42 . 0.625)	'(43 . 3.75)   '(44 . 1.25)
'(45 . 0.5) '(46 . 0.0) '(47 . 0.0) '(48 . 0.0) '(140 . 2.5)   '(141 . -2.5)
'(142 . 0.0)   '(144 . 1.0)   '(145 . 0.0)	  '(146 . 1.0)	 '(147 . 0.625)	'(71 . 0)
'(72 . 0)	 '(73 . 0)   '(74 . 1)	 '(75 . 0)   '(76 . 0)	 '(77 . 1)   '(78 . 8)
'(170 . 0)	 '(171 . 3)  '(172 . 1)	 '(173 . 0)  '(174 . 0)	 '(175 . 0)  '(176 . 0)
'(177 . 0)	 '(178 . 0)  '(270 . 2)	 '(271 . 0)  '(272 . 0)	 '(273 . 2)  '(274 . 3)
'(275 . 1)	 '(280 . 0)  '(281 . 0)	 '(282 . 0)  '(283 . 0)	 '(284 . 8)  '(285 . 0)
'(286 . 0)	 '(287 . 4)  '(288 . 0)
) ;_ end of list
(entmake) применяется на этот список. Чего ему не нравится, понять не могу
При этом на самом деле в группе 5 мне надо использовать "_Archtick", но это ладно, можно временно и (setvar) применить, и заменить
Код:
на
Код:
[Выделить все]
'(5 . (tblobjname "block" "_archtick"))
Кстати, непонятно, последняя строка правильно сделана или нет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.09.2005, 20:06
#6
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Не знаю, как в более ранних версиях, но в 2005 группы 5, 6. 7б 270 и 287 не используются (obsolete), потому, как я понимаю, ими пользоваться не следует. Ссылки на блок стрелки делаются группами 340, 341 и 342, соответственно "handle of referenced BLOCK, BLOCK1, BLOCK2" и переменные DIMBLK, DIMBLK1, DIMBLK2. Может, следует вытаскивать соотв. ссылку из коллекции_блоков/tblsearch "block" и потом как-то пердвать вновь создаваемому списку? И еще, если есть чертеж-прототип, не проще ли перенести стиль путем CopyFrom.Object?
Лентяй вне форума  
 
Автор темы   Непрочитано 13.09.2005, 08:35
#7
Кулик Алексей aka kpblc
Moderator

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


Да все дело в том, что такая операция будет выполняться, скорее всего, миллионы раз, так что вариант copyfrom немного не катит. Мне тут подсказали попробовать применять dxf-список, полученный через (entget (tblobjname "dimstyle" "dimenstion_style_name")), сейчас ковыряю в этом направлении.
Кстати, за книгу огромное человеческое спасибо, вчера распечатал, до 2 ночи не спал - читал. Может, ее сюда закинуть, поскольку она и на afralisp'e тоже есть вроде как в свободном скачивании?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.09.2005, 09:08
#8
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
kpblc: Может, ее сюда закинуть, поскольку она и на afralisp'e тоже есть вроде как в свободном скачивании?
А где же я ее, по-вашему. взял? Натюрлих, туточки, из какого-нить, ну о-о-о-очень давнишнего dwl-а.
Лентяй вне форума  
 
Автор темы   Непрочитано 13.09.2005, 09:11
#9
Кулик Алексей aka kpblc
Moderator

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


Упс... Все равно thanks огромаднейший.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.09.2005, 10:58
#10
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Ничуть не меньший наш вам Welcome!
Лентяй вне форума  
 
Непрочитано 14.09.2005, 12:00
#11
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Может через ActiveX попробовать. Примерно, так:
Код:
[Выделить все]
(defun demo (OSt NSt / dss name new nn pat stl suf)
  (if (= (strcase OSt) (strcase NSt))
    (princ "\nNew style can't be named the same as old style!")
    (progn
      (setq pat (strcat (strcase OSt) "," (strcase OSt) "$#")
            dss (vla-get-DimStyles (vla-get-ActiveDocument (vlax-get-acad-object)))
      )
      (vlax-for i dss
        (if (wcmatch (strcase (setq name (vla-get-name i))) pat)
          (setq stl (cons (list name i) stl))
        )
      )
      (if (setq stl (vl-sort stl (function (lambda (a b) (< (car a) (car b))))))
        (progn
          (setq suf (1+ (strlen OSt)))
          (foreach i stl
            (setq nn (strcat NSt (substr (car i) suf)))
            (if (vl-catch-all-error-p
                  (setq new (vl-catch-all-apply (function vla-Add) (list dss nn)))
                )
              (princ (strcat "\nCan't create new style: '" nn "'"))
              (vla-CopyFrom new (cadr i))
            )
          )
        )
        (princ (strcat "\nCan't find old style: '" OSt "'"))
      )
    )
  )
  (princ)
)

(demo "OldStyle" "NewStyle")
Серьёзно не проверял, но, вроде бы - должно работать.
Alaspher вне форума  
 
Непрочитано 15.09.2005, 11:12
#12
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Я так понял, что kpblc создает новый размерный стиль в документе, где этого стиля раньше не было. Ваша же программа создает в пределах одного и того же документа новый стиль, содержащий те же установки, что и старый. Сорри. но это не от той стенки гвоздь.
Лентяй вне форума  
 
Автор темы   Непрочитано 16.09.2005, 08:52
#13
Кулик Алексей aka kpblc
Moderator

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


Всем откликнувшимся - огромное человеческое спасибо. Лентяю - отдельный земной поклон за книгу. Alaspher - за иллюстрации. Проблема решена. Если интересно, код:
Код:
[Выделить все]
;|=============================================================================
*    Функция создания размерного стиля. Используется вариант (setvar) и
* (vl-cmdf)
*    Параметры вызова:
*	нет
*    Примеры вызова:
(_kpblc-create-dimstyle)
=============================================================================|;
(defun _kpblc-create-dimstyle (/ ent_list exist_style arrow_block active_dimstyle)

  ;; Локальные функции
  (defun _kpblc-create-sub-dimstyle (style-number / ent_list ent_name)
    (setq ent_name (if style-number
		     (strcat "SPDS$" (itoa style-number))
		     "SPDS"
		     ) ;_ end of if
	  ent_list
		   (list
		     (cons 0 "DIMSTYLE") ;		@R@
		     (cons 100 "AcDbSymbolTableRecord") ;		@R@
		     (cons 100 "AcDbDimStyleTableRecord") ;		@R@
		     (cons 2 ent_name)	;dimsty		@R@
		     (cons 70
			   (if (not style-number)
			     0
			     style-number
			     ) ;_ end of if
			   )		; @R@
		     (cons 40 (getvar "dimscale")) ;dimscale	@R@
		     (cons 41 2.5)	;dimsz		@R@
		     (cons 42 0.625)	;dimexo		@R@
		     (cons 43 3.75)	;dimdli		@R@
		     (cons 44 1.25)	;dimexe		@R@
		     (cons 45 0.5)	;dimrnd		@R@
		     (cons 46 0.0)	;dimdle		@R@
		     ;; группы 47 (dimtp) и 48 (dimtm) не используются - отключена
		     ;; dimtol
		     ;; и
		     ;; dimlim
		     (cons 140 2.5)	;dimtxt		@R@
		     (cons 141 -2.5)	;dimcen		@R@
		     (cons 143 0.005)	;dimaltf	@R@
		     (cons 144 1)	;dimlfac
		     (cons 145 0)	;dimtvp
		     (cons 147 0.5)	;dimgap		@R@
		     ;; группа 146 (dimtfac) не используется и не изменяется - отключены
		     ;; альтернативные единицы
		     (cons 72 0)	;dimlim
		     ;; Дополнительно, для гарантии, отключаем dimlim
		     (cons 73 0)	;dimtih		@R@
		     (cons 74 0)	;dimtoh		@R@
		     (cons 77 1)	;dimtad		@R@
		     (cons 78 8)	;dimzin		@R@
		     (cons 79 2)	;dimazin	@R@
		     ;; группа 71 (dimtol) - нет альтернативных единиц
		     (cons 170 0)	;dimalt
		     (cons 172 1)	;dimtofl	@R@
		     (cons 173 0)	;dimsah		@R@
		     (cons 174 0)	;dimtix
		     (cons 175 1)	;dimsoxd
		     (cons 176 0)	;dimclrd
		     (cons 177 0)	;dimclre
		     (cons 178 0)	;dimclrt
		     (cons 179 1)	;dimadec
		     ;; группа 171 (dimaltd) не используется - нет альтернативных единиц
		     (cons 271 0)	;dimdec		@R@
		     (cons 272 0)	;dimtdec	@R@
		     (cons 275 1)	;dimaunit
		     (cons 277 2)	;dimlunit
		     (cons 278 44)	;dimdsep	@R@
		     (cons 279		;dimtmove
			   (cond
			     ((not style-number) 0)
			     ((= style-number 0) 1)
			     ((= style-number 1) 1)
			     (t 1)
			     ) ;_ end of cond
			   ) ;_ end of cons
		     (cons 280 0)	;dimjust
		     (cons 281 0)	;dimsd1
		     (cons 282 0)	;dimsd2
		     (cons 283 0)	;dimtolj
		     (cons 284 8)	;dimtzin
		     ;; группа 270 не используется - устарело. Вместо этого используется
		     ;; назначение dimlunit и dimfrac
		     ;; группа 287 (dimfit) не используется - устар. Вместо этого
		     ;; используются
		     ;; dimaltfit и dimtmove
		     (cons 288 0)	;dimupt
		     ;; группы 273 (dimaltu), 274 (dimalttd), 285 (dimaltz), 286
		     ;; (dimalttz)
		     ;; не используются - нет альтернативных единиц
		     ;; группа 276 (dimfrac) не устанавливается
		     (cons 340 (tblobjname "style" "SPDS")) ;dimtxtsty	@R@
		     (cons 371 -2)	;dimlwd
		     (cons 372 -2)	;dimlwe
		     ) ;_ end of list
	  ) ;_ end of setq
    (if	(member style-number '(nil 0 1))
      (progn
	(setq ent_list
	       (reverse
		 (cons
		   (cons 342
			 (cdr
			   (assoc 330
				  (entget
				    (tblobjname "block" "_archtick")
				    ) ;_ end of entget
				  ) ;_ end of assoc
			   ) ;_ end of cdr
			 )		;dimblk		@R@
		   (reverse ent_list)
		   ) ;_ end of cons
		 ) ;_ end of reverse
	      ) ;_ end of setq
	(setq ent_list
	       (reverse
		 (cons
		   (cons 343
			 (cdr
			   (assoc 330
				  (entget
				    (tblobjname "block" "_archtick")
				    ) ;_ end of entget
				  ) ;_ end of assoc
			   ) ;_ end of cdr
			 )		;dimblk1
		   (reverse ent_list)
		   ) ;_ end of cons
		 ) ;_ end of reverse
	      ) ;_ end of setq
	(setq ent_list
	       (reverse
		 (cons
		   (cons 344
			 (cdr
			   (assoc 330
				  (entget
				    (tblobjname "block" "_archtick")
				    ) ;_ end of entget
				  ) ;_ end of assoc
			   ) ;_ end of cdr
			 )		;dimblk2
		   (reverse ent_list)
		   ) ;_ end of cons
		 ) ;_ end of reverse
	      ) ;_ end of setq
	) ;_ end of setq
      ) ;_ end of if
    (if	(setq exist_style (tblobjname "dimstyle" ent_name))
      (foreach item ent_list
	(_kpblc-ent-modify exist_style (car item) (cdr item))
	) ;_ end of foreach
      (entmake ent_list)
      ) ;_ end of if

    ) ;_ end of defun
  ;; Конец локальных функций

  (_kpblc-create-textstyle)
  (if (not (tblsearch "block" "_archtick"))
    (progn
      (setq _dimblk_ (getvar "dimblk"))
      (setvar "dimblk" "_archtick")
      (if (= _dimblk_ "")
	(setvar "dimblk" ".")
	(setvar "dimblk" _dimblk_)
	) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if

  (_kpblc-echo t)

  (foreach item	(list nil 0 2 3 4 7)
    (_kpblc-create-sub-dimstyle item)
    ) ;_ end of foreach

  (if (not *kpblc-activedoc*)
    (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of if
  (if (tblobjname "dimstyle" "SPDS")
    (progn
      (setq active_dimstyle (vlax-ename->vla-object (tblobjname "dimstyle" "SPDS")))
      (vlax-put-property *kpblc-activedoc* "ActiveDimStyle" active_dimstyle)
      ) ;_ end of progn
    (vl-cmdf "_.-dimstyle" "_Save" "SPDS")
    ) ;_ end of if
  (_kpblc-echo nil)

  (princ)
  ) ;_ end of defun

;|=======================================================================================
*    Функция снятия / показа командного эха. В процессе работы используются глобальные
* переменные *kpblc-cmdecho* и *kpblc-nomutt*. Если они nil, то в них считываются значения
* cmdecho и nomutt. Если они не nil, то устанавливаются записанные в них значения.
*    Параметры вызова:
*	setecho	- установить или возвратить обратно эхо. nil -> установить эхо; t -> снять
*    Примеры вызова:
(_kpblc-echo t)		; снять эхо команд
(_kpblc-echo nil)		; установить это команд
=======================================================================================|;
(defun _kpblc-echo (setecho)
  (if setecho
    (mapcar
      'setvar
      (list "cmdecho" "nomutt")
      (list 0 1)
      ) ;_ end of mapcar
    (mapcar
      'setvar
      (list "cmdecho" "nomutt")
      (list 1 0)
      ) ;_ end of mapcar
    ) ;_ end of if
  (princ)
  ) ;_defun

;|=======================================================================================
*    Функция создает текстовый стиль. Создание идет через (entmake).
*    Созданный стиль делается активным
*    Параметры вызова:
*	нет
*    Примеры вызова:
(_kpblc-create-textstyle)
=======================================================================================|;
(defun _kpblc-create-textstyle (/ ent_list font_filename exist_style)
  (if (findfile "spds.shx")
    (setq font_filename (strcat (vl-filename-base (findfile "spds.shx")) ".shx"))
    (setq font_filename (strcat (vl-filename-base (findfile "simplex.shx")) ".shx"))
    ) ;_ end of if
  (setq	ent_list
	 (list
	   '(0 . "STYLE")
	   '(100 . "AcDbSymbolTableRecord")
	   '(100 . "AcDbTextStyleTableRecord")
	   '(2 . "SPDS")		; text style name
	   '(70 . 0)			;
	   '(40 . 0.0)			; text height
	   '(41 . 0.8)			; width factor
	   '(50 . 0.0)			; oblique angle
	   '(71 . 0)			; not backwatf, not upside down
	   '(42 . 2.5)			; last height used
	   (cons 3 font_filename)	; primary font file name
	   '(4 . "")			; big font file name
	   ) ;_ end of list
	) ;_ end of setq
					;(entmake ent_list)
  (if (setq exist_style (tblobjname "style" "SPDS"))
    ;; Стиль есть, возвращаем стандартный вид
    (foreach item ent_list
      (_kpblc-ent-modify exist_style (car item) (cdr item))
      ) ;_ end of foreach
    ;; Стиля нет, делаем его и нормализуем все примитивы
    (entmake ent_list)
    ) ;_ end of if
  (setvar "textstyle" "SPDS")
					;(princ)
  ) ;_ end of defun

;|=======================================================================================
*    Функция модификации указанного бита примитива
*    Параметры вызова:
*	entity	- примитив, полученный через (entsel), (entlast) etc
*	bit	- dxf-код, значение которого надо установить
*	value	- новое значение
*    Примеры вызова:
(_kpblc-ent-modify (entlast) 8 "0")	; перенести последний примитив на слой 0
(_kpblc-ent-modify (entsel) 62 10)	; установить выбранному примитиву цвет 10
*    Возвращаемое значение:
*	примитив с модифицированным dxf-списком. Примитив автоматически перерисовывается.
=======================================================================================|;
(defun _kpblc-ent-modify (ent bit value / ent_list old_dxf new_dxf)
  (if (not
	(and
	  (or
	    (= (cdr (assoc 0 (entget ent))) "STYLE")
	    (= (cdr (assoc 0 (entget ent))) "DIMSTYLE")
	    ) ;_ end of or
	  (= bit 100)
	  ) ;_ end of and
	) ;_ end of not
    (progn
      (setq ent_list (entget ent)
	    new_dxf  (cons bit
			   (if (and (= bit 62) (= (type value) 'str))
			     (if (= (strcase value) "BYLAYER")
			       256
			       0
			       ) ;_ end of if
			     value
			     ) ;_ end of if
			   ) ;_ end of cons
	    ) ;_ end of setq
      (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
	(progn (entmod (if old_dxf
			 (subst new_dxf old_dxf ent_list)
			 (append ent_list (list new_dxf))
			 ) ;_ end of if
		       ) ;_ end of entmod
	       (entupd ent)
	       (redraw ent)
	       ) ;_ end of progn
	) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  ent
  ) ;_ end of defun
В коде используется немного переработанная функция из ruCAD (ru-ent-mod) для обработки записей таблиц STYLE и DIMSTYLE. Мало ли, может, кому и пригодится...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.09.2005, 09:37
#14
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


А вот теперь, когда задача решена, может быть подумать - а нужно ли вообще программное создание стиля?

Стиль - именованная совокупность набора значений системных переменных, устанавливающаяся при выборе стиля. Если оформлять размеры по-разному, использовать стиль в голом Автокаде удобно. Но если дошли до программирования, то цель, возможно, обеспечить единообразие - то есть оформление размеров по единому стандарту. Для этого стиль не нужен - можно просто устанавливать требуемые значения, чтобы в текущем состоянии размеры изображались "как надо".

Это будет гораздо нагляднее маловразумительных DXF-кодов. "Любимые" значения можно вообще в файле держать, даже списком. Это позволит не менять программу, если встретишь другую любовь.

Эт так, в порядке возможного варианта.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 16.09.2005, 09:59
#15
Кулик Алексей aka kpblc
Moderator

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


> ShaggyDoc : Да пробовал я так, пробовал. Не фонтан, если честно - постоянно работать с системными переменными - достаточно медленно, дополнительно надо отслеживать, какой размер проставляется... В общем, либо у меня руки кривые, либо мне лень. Скорее всего, и то, и другое. В общем, мне показалось это более приемлемым вариантом. Кстати, там в комментариях на каждый dxf-код соответствующая ему системная переменная забита - это к вопросу о маловразумительности.
Ладно, если не интересно, то и бог с ним, оставим тему в покое, она сама и умрет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.09.2005, 13:13
#16
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


>ShaggyDoc
Мне очень понравилось решение kpblc. Я тоже употребляю размерные стили, хранящиеся в прототипе. Для единообразия (архитектурно-строительное проектирование) использую целых два стиля: с выносными линиями и без. Переключение между стилями осуществляется выбором кнопки (пользовательской) проставления размера: с выносными линиями или без оных. Но в случае его (прототипа) очистки, неиспользуемые стили уходят. Безвозвратно! В этом случае программное задание стиля (после проверки на его наличие) выручает.
Так я и делал, но попроще (по-инженерному), текст же kpblc учел кажется все варианты.
Alan вне форума  
 
Автор темы   Непрочитано 16.09.2005, 13:24
#17
Кулик Алексей aka kpblc
Moderator

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


> Alan : можно и не проверять, а просто повторно вызывать - override-стиль не создается, все настройки переходят на "стандартные", которые заданы в dxf-списке. Если чего-то там не нравится в этих настройках, исправить, по-моему, 5 минут.
Несколько замечаний:
1. Группу 70 не трогать - она вкупе с именем (группа 2) определяет область применения стиля.
2. Устаревшие группы не использовать - ибо нефиг
3. Для группы 340 предварительно надо сделать текстовый стиль
4. Для групп 342, 343, 344 при условии использования закрашенной стрелки придется извращаться - т.к. при создании нового стиля эти настройки по умолчанию берутся с текущего. Соответственно приходится туда каким-то манером вколачивать dimblk = "", что через (tblobjname) провернуть нереально.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.09.2005, 14:13
#18
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Программа-то мне тоже понравилась.

А вот насчет разных стилей в одном проекте - сомнение. Особенно "архитектурных".

Допустим, размеры проставлены "архитектурно", без выносок. Так можно где-нибудь на чисто "архитектурных" чертежах. Но далее эта же подоснова попадет к строителям, смежникам. А там такие вольности уже не пойдут. Часть будет одним стилем, часть другим.

Плюс еще другие "архитектурные" особенности (недовводы, непараллельность стен осям, "красивые" до ужаса шрифты и т.п.) - общий вид ужасный. Да еще любовь к расчленению размеров (ij, как я нарисовал, на века), когда переопределение стиля не спасет.

PS. К качеству программы, над которой kpblc хорошо потрудился это не имеет отношения.

PPS. Втягивание в дискуссию не о программе исключительно с провокационной целью.
ShaggyDoc вне форума  
 
Непрочитано 16.09.2005, 14:39
#19
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


>ShaggyDoc
Цитата:
А вот насчет разных стилей в одном проекте - сомнение. Особенно "архитектурных". Допустим, размеры проставлены "архитектурно", без выносок....
Применение ДВУХ (с выносками и без) стилей в одном проекте не противоречит ГОСТ 21.501-93 "Правило выполнения арх.-стр. чертежей".
ИМХО, надо дать проектировщику возможность выбора сообразно конкретному случаю.

Цитата:
Плюс еще другие "архитектурные" особенности (недовводы, непараллельность стен осям, "красивые" до ужаса шрифты и т.п.) - общий вид ужасный. Да еще любовь к расчленению размеров (ij, как я нарисовал, на века), когда переопределение стиля не спасет.
Всё это надо стандартизировать в СТП. Тут мы кажется с kpblc пришли к консенсусу, писал свой под себя по его образцу.
А за несоблюдения карать сообразно революционной целесообразности. Битьём!!!
Alan вне форума  
 
Автор темы   Непрочитано 16.09.2005, 15:15
#20
Кулик Алексей aka kpblc
Moderator

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


Поддамся на провокацию (ессно, со шкурными интересами) - именно так, как описал ShaggyDoc, работают у меня архитекторы. Конструктора рыдают - у кого еще силы остались. На все попытки урезонить архитекторов те отвечают "Мы творческие люди, и нам техника ни к чему". Именно поэтому эту прогу + обновление всех текстовых и размерных примитивов на основе тутошней же функции kpblc-ent-modify повесить на сохранение. Хоть что-то...
А насчет остального - конструкторы уже начинают вроде как заворачивать чертежи обратно на доработку, если шаг не соблюден, если взорваны размеры (пока говорят, если таких большая часть, но, надеюсь, придем к тому, чтобы даже один такой размер служил основанием для доработки), если не использовалась orthomode, кроме косых кусков, ну и так далее.
Что самое интересное, учиться из 35 человек могут, хотят и учатся всего 6-7, при всем при этом трое - "тетушки" предпенсионного возраста. Какое удовольствие с ними работать - не описать!
Так что все для них, родных.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.04.2007, 14:58
#21
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


вопросы к Крыс:
1) В 2008 версии появилась новая возможность в текстовых и размерных стилях использовать свойство "Annotative", как добавить эту опцию к лиспу? Вроде переменна которая за это отвечает "DIMANNO", но она "только для чтения"
2) Есть чертеж с размерным стилем "М 1-1", я запускаю твой лисп (имя размерного стиля в лиспе я изменил на "M 1-1" и у меня появляются ДВА размерных стиля "М 1-1" (настройки стилей разные). Как сделать чтобо стиль создаваемый лиспом заменял существующий?
3) Засечки для радиусов диаметров... могут быть только "Closed filled" ?
Piton вне форума  
 
Автор темы   Непрочитано 12.04.2007, 15:12
#22
Кулик Алексей aka kpblc
Moderator

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


1. Annotative - посмотрю, может, чего и получится.
2. Вообще-то 2 размерных стиля с одинаковым именем не могут существовать. Может, раскладка не та? Потому как у меня такого не наблюдается.
3. Ага. Делал специально, для "подстилей".
---
Добавлено: Интересные вещи нарисовываются. В Annotative стиле присутствуют расширенные данные:
Код:
[Выделить все]
(cdr (assoc -3 (entget (tblobjname "dimstyle" "annotative") '("*"))))
(("AcadAnnotative" (1000 . "AnnotativeData") (1002 . "{") (1070 . 1) (1070 . 1) (1002 . "}")) ("ACAD_DSTYLE_DIMJAG" (1070 . 388) (1040 . 1.5)) ("ACAD_DSTYLE_DIMTALN" (1070 . 392) (1070 . 0)))
Соответственно с ними надо разбираться и пробовать присандаливать к стилю, одновременн проверяя версию.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.04.2007, 17:40
#23
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


2. Точно буква "М" была в разных раскладках.
3. Жаль что только "Closed filled" всегда пользовался "Open 30", но с этим можно жить.

Вопрос по текстовому стилю:
I) есть строчка которая отвечает за угол наклона
'(50 . 0) ; oblique angle
я хочу сделать угол наклона текста был 15 градусов, заменеяю "0" на "15"-> и получаю угол в свойсвах текста "-220.563". В каких единицах задается угол? (в справке дается значение от "-85" до "85")
II) Как добавить (добавь пожалуста ) еще 2 два текстовых стиля "ТЕКСТ", "ЗАГОЛОВОК" и сделать текущим слой "ТЕКСТ" после запуска лиспа.
Piton вне форума  
 
Непрочитано 12.04.2007, 17:53
#24
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


>Piton Угол задается в радианах
15' ~ 0.261799 рад
Вот 2 ф-ции
Набери (dtr 15)
Код:
[Выделить все]
;;;Библиотечные функции 
;;;Ф-ция переводит градусы в радианы
;;;( dtr a)
(defun DTR (a)(* pi (/ a 180.0)))
;;;------------------------------------------------------------------------------- 
;;;Ф-ция переводит радианы в градусы
;;;( R2D a)
(defun RTD (a)(/ (* a 180.0) pi))
VVA вне форума  
 
Автор темы   Непрочитано 13.04.2007, 12:05
#25
Кулик Алексей aka kpblc
Moderator

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


Значится так
Для создания текстового стиля "как захочется" использовать можно такое:
Код:
[Выделить все]
(vl-load-com)
(setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))

(defun _kpblc-style-create-textstyle-by-list (lst / res)
                                             ;|
*    Создание или перенастройка текстового стиля
*    Параметры вызова:
*	lst	список вида:
      '(("name" . <ИмяСтиля>)		; nil -> работа прекращается
	("height" . <ВысотаТекста>)	; nil или меньше 0 -> 0.
	("ang" . <УголНаклона, градусы>) ; nil -> 0.
	("font" . <ИмяФонта>)		; nil -> "simplex.shx"
	("width" . <КоэффициентШирины>)	; nil -> 1.
*    Примеры вызова:
(_kpblc-style-create-textstyle-by-list '(("name" . "test1") ("font" . "isosp.shx")))
(_kpblc-style-create-textstyle-by-list '(("name" . "test2") ("font" . "isosp.shx") ("ang" . 15.)))
|;
  (_kpblc-error-catch
    (function
      (lambda ()
        (if (cdr (assoc "name" lst))
          (progn
            (foreach item
                     (list (cons "height" 0.)
                           (cons "ang" 0.)
                           (cons "font"
                                 (cond
                                   ((findfile "simplex.shx"))
                                   ((findfile "txt.shx"))
                                   (vla-get-fontfile
                                    (vla-get-activetextstyle *kpblc-activedoc*)
                                    )
                                   ) ;_ end of cond
                                 ) ;_ end of cons
                           (cons "width" 1.)
                           ) ;_ end of list
              (if (not (assoc (car item) lst))
                (setq lst (cons item lst))
                ) ;_ end of if
              ) ;_ end of foreach
            (setq lst
                   (subst (cons "font"
                                (cond
                                  ((findfile (cdr (assoc "font" lst))))
                                  ((findfile "simplex.shx"))
                                  ((findfile "txt.shx"))
                                  (vla-get-fontfile
                                   (vla-get-activetextstyle *kpblc-activedoc*)
                                   )
                                  ) ;_ end of cond
                                ) ;_ end of cons
                          (assoc "font" lst)
                          lst
                          ) ;_ end of subst
                  ) ;_ end of setq
            (setq res (if (tblobjname "style" (cdr (assoc "name" lst)))
                        (vla-item (vla-get-textstyles *kpblc-activedoc*))
                        (vla-add (vla-get-textstyles *kpblc-activedoc*)
                                 (cdr (assoc "name" lst))
                                 ) ;_ end of vla-add
                        ) ;_ end of if
                  ) ;_ end of setq
            (vla-put-fontfile res (cdr (assoc "font" lst)))
            (vla-put-height res (cdr (assoc "height" lst)))
            (vla-put-obliqueangle res (/ (* (cdr (assoc "ang" lst)) pi) 180.))
            (vla-put-width res (cdr (assoc "width" lst)))
            (_kpblc-ent-modify-autoregen
              (vlax-vla-object->ename res)
              4
              ""
              t
              ) ;_ end of _kpblc-ent-modify-autoregen
            (_kpblc-ent-modify-autoregen
              (vlax-vla-object->ename res)
              71
              0
              t
              ) ;_ end of _kpblc-ent-modify-autoregen
            ) ;_ end of progn
          ) ;_ end of if
        ) ;_ end of lambda
      ) ;_ end of function
    '(lambda (x) (princ (strcat "\n _kpblc-style-create-textstyle ERROR : " x)))
    ) ;_ end of _kpblc-error-catch
  res
  ) ;_ end of defun

(defun _kpblc-error-catch (protected-function
                           on-error-function
                           /
                           catch_error_result
                           )
                          ;|
*** Функция взята из книжной версии ruCAD'a без каких бы то ни было переделок,
*** кроме переименования.
*    Оболочка отлова ошибок.
*    Параметры вызова:
*	protected-function	- "защищаемая" функция
*	on-error-function	- функция, выполняемая в случае ошибки
=============================================================================|;
  (setq catch_error_result (vl-catch-all-apply protected-function))
  (if (and (vl-catch-all-error-p catch_error_result)
           on-error-function
           ) ;_ end of and
    (apply on-error-function
           (list (vl-catch-all-error-message catch_error_result))
           ) ;_ end of apply
    catch_error_result
    ) ;_ end of if
  ) ;_ end of defun

(defun _kpblc-ent-modify-autoregen (ent        bit        value      ext_regen
                                    /          ent_list   old_dxf    new_dxf
                                    layer_dxf70
                                    )
                                   ;|
*    Функция модификации указанного бита примитива
*    Параметры вызова:
*	entity	- примитив, полученный через (entsel), (entlast) etc
*	bit	- dxf-код, значение которого надо установить
*	value	- новое значение
*	regen	- выполнять или нет регенерацию примитива сразу. t/ nil
*    Примеры вызова:
(_kpblc-ent-modify (entlast) 8 "0" t)	; перенести последний примитив на слой 0
(_kpblc-ent-modify (entsel) 62 10 nil)	; установить выбранному примитиву цвет 10
*    Возвращаемое значение:
*	примитив с модифицированным dxf-списком. Примитив перерисовывается в
* зависимости от значения ключа ext_regen
|;
  (setq ent (_kpblc-conv-ent-to-ename ent))
  (if (not
        (and
          (or
            (= (strcase (cdr (assoc 0 (entget ent))) nil) "STYLE")
            (= (strcase (cdr (assoc 0 (entget ent))) nil) "DIMSTYLE")
            (= (strcase (cdr (assoc 0 (entget ent))) nil) "LAYER")
            ) ;_ end of or 
          (= bit 100)
          ) ;_ end of and 
        ) ;_ end of not 
    (progn
      (setq ent_list (entget ent)
            new_dxf  (cons bit
                           (if (and (= bit 62) (= (type value) 'str))
                             (if (= (strcase value) "BYLAYER")
                               256
                               0
                               ) ;_ end of if 
                             value
                             ) ;_ end of if 
                           ) ;_ end of cons 
            ) ;_ end of setq 
      (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
        (progn
          (entmod (if old_dxf
                    (subst new_dxf old_dxf ent_list)
                    (append ent_list (list new_dxf))
                    ) ;_ end of if 
                  ) ;_ end of entmod
          (if ent_regen
            (entupd ent)
            (redraw ent)
            ) ;_ end of if
          ) ;_ end of progn 
        ) ;_ end of if 
      ) ;_ end of progn 
    ) ;_ end of if 
  ent
  ) ;_ end of defun
Для настройки размерного стиля поменяй в нем 340 группу на примерно такое:
Код:
[Выделить все]
(cons 340 (tblobjname "style" (vla-get-name (_kpblc-style-create-textstyle-by-list '(("name" . "test1") ("font" . "isosp.shx"))))))
Для замены Fill на Open надо поковыряться с 342, 343, 344 группами.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.04.2007, 14:40
#26
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


-> VVA Спасибо ввел 0.261799 и угол наклона стал таким каким мне нужно.

Крыс
Лисп который создает текстовый стиль в ответ на
Код:
[Выделить все]
(_kpblc-style-create-textstyle-by-list '(("name" . "ТЕКСТ") ("font" . "mipgost.shx") ("ang" . 15.) ("width" . 0.8.)))
ругается
Код:
[Выделить все]
 _kpblc-style-create-textstyle ERROR : lisp value has no coercion to VARIANT 
with this type:  0#<VLA-OBJECT IAcadTextStyle 01fcb464>
:shock:
и как сделать текстовый стиль текущим?

P.S замена в лиспе размеров групп 342...344
Код:
[Выделить все]
(tblobjname "block" "_Oblique")
на
Код:
[Выделить все]
 (tblobjname "block" "_Open30")
результатов не принесла
Piton вне форума  
 
Автор темы   Непрочитано 13.04.2007, 14:46
#27
Кулик Алексей aka kpblc
Moderator

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


Во-первых, у тебя неправильный вызов. Надо так:
Код:
[Выделить все]
(_kpblc-style-create-textstyle-by-list '(("name" . "ТЕКСТ") ("font" . "mipgost.shx") ("ang" . 15.) ("width" . 0.8)))
(в последнем списке надо вбивать 0.8, а не 0.8.).
Сделать текущим:
Код:
[Выделить все]
(vla-put-ActiveTextStyle (vla-get-ActiveDocument (vlax-get-acad-object)) (_kpblc-style-create-textstyle-by-list '(("name" . "ТЕКСТ") ("font" . "mipgost.shx") ("ang" . 15.) ("width" . 0.8))))
Для создания размерного стиля текстовый стиль, который ему назначается, уже должен существовать в файле.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.04.2007, 10:52
#28
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


1)При добавлении в автозагрузку ругается
Код:
[Выделить все]
 _kpblc-style-create-textstyle ERROR : no function definition: 
_KPBLC-CONV-ENT-TO-ENAME
2)на ввод
Код:
[Выделить все]
(_kpblc-style-create-textstyle-by-list '(("name" . "ТЕКСТ") ("font" . "mipgost.shx") ("ang" . 15.) ("width" . 0.8)))
отвечает
Код:
[Выделить все]
_kpblc-style-create-textstyle ERROR : too few actual parametersnil
, но темнеменее стиль создается, если я его переопределяю ( например меняю угол наклона на 20), то стиль не переопределяестя.
3)замена в лиспе размеров групп 342, 343,344
Код:
[Выделить все]
(tblobjname "block" "_Oblique")
на
Код:
[Выделить все]
 (tblobjname "block" "_Open30")
не помогла
4)По поводу сделать текущим текстовый стиль - не понял куда вставлять и как запускать
Код:
[Выделить все]
(vla-put-ActiveTextStyle (vla-get-ActiveDocument (vlax-get-acad-object)) (_kpblc-style-create-textstyle-by-list '(("name" . "ТЕКСТ") ("font" . "mipgost.shx") ("ang" . 15.) ("width" . 0.8))))
Piton вне форума  
 
Автор темы   Непрочитано 16.04.2007, 11:17
#29
Кулик Алексей aka kpblc
Moderator

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


<...>Все снес, вот вроде как работающий вариант:
Код:
[Выделить все]
(defun _kpblc-style-create-dimstyle (/ lst dimstyle_name _dimblk_)
  (vl-load-com)
  (or *kpblc-activedoc*
      (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
      ) ;_ end of or
  (vla-put-activetextstyle
    *kpblc-activedoc*
    (_kpblc-style-create-textstyle-by-list
      '(("name" . "ТЕКСТ")
        ("font" . "mipgost.shx")
        ("ang" . 15.)
        ("width" . 0.8)
        )
      ) ;_ end of _kpblc-style-create-textstyle-by-list
    ) ;_ end of vla-put-ActiveTextStyle
  ;; Определяется имя размерного стиля
  (setq dimstyle_name "SPDS"
        ;; Вот теперь здесь определяем виды блоков
        lst           (list (cons nil "_archtick")
                            (cons 0 "_archtick")
                            (cons 2 "_open30")
                            (cons 3 "_open30")
                            (cons 4 "_open30")
                            (cons 7 "_open30")
                            ) ;_ end of list
        ) ;_ end of setq
  (foreach item lst
    (if (not (tblobjname "block" (cdr item)))
      (progn
        (setq _dimblk_ (getvar "dimblk"))
        (setvar "dimblk" (cdr item))
        (setvar "dimblk" _dimblk_)
        ) ;_ end of progn
      ) ;_ end of if
    (_kpblc-style-create-dimstyle-sub (car item))
    ) ;_ end of foreach
  ) ;_ end of defun

(defun _kpblc-style-create-dimstyle-sub (style-number /)
                                        ;|
*    Функция создания размерного "под"стиля.
*    Параметры вызова:
*	style-number	номер создаваемого стиля.
|;
  (setq ent_name (if style-number
                   (strcat "SPDS$" (itoa style-number))
                   "SPDS"
                   ) ;_ end of if
        ent_list
                 (list
                   (cons 0 "DIMSTYLE") ;      @R@
                   (cons 100 "AcDbSymbolTableRecord") ;      @R@
                   (cons 100 "AcDbDimStyleTableRecord") ;      @R@
                   (cons 2 ent_name) ;dimsty      @R@
                   (cons 70
                         (if (not style-number)
                           0
                           style-number
                           ) ;_ end of if
                         ) ; @R@
                   (cons 40 (getvar "dimscale")) ;dimscale   @R@
                   (cons 41 2.5) ;dimsz      @R@
                   (cons 42 0.625) ;dimexo      @R@
                   (cons 43 3.75) ;dimdli      @R@
                   (cons 44 1.25) ;dimexe      @R@
                   (cons 45 0.5) ;dimrnd      @R@
                   (cons 46 0.0) ;dimdle      @R@
                   ;; группы 47 (dimtp) и 48 (dimtm) не используются - отключена
                   ;; dimtol
                   ;; и
                   ;; dimlim
                   (cons 140 2.5) ;dimtxt      @R@
                   (cons 141 -2.5) ;dimcen      @R@
                   (cons 143 0.005) ;dimaltf   @R@
                   (cons 144 1) ;dimlfac
                   (cons 145 0) ;dimtvp
                   (cons 147 0.5) ;dimgap      @R@
                   ;; группа 146 (dimtfac) не используется и не изменяется - отключены
                   ;; альтернативные единицы
                   (cons 72 0) ;dimlim
                   ;; Дополнительно, для гарантии, отключаем dimlim
                   (cons 73 0) ;dimtih      @R@
                   (cons 74 0) ;dimtoh      @R@
                   (cons 77 1) ;dimtad      @R@
                   (cons 78 8) ;dimzin      @R@
                   (cons 79 2) ;dimazin   @R@
                   ;; группа 71 (dimtol) - нет альтернативных единиц
                   (cons 170 0) ;dimalt
                   (cons 172 1) ;dimtofl   @R@
                   (cons 173 0) ;dimsah      @R@
                   (cons 174 0) ;dimtix
                   (cons 175 1) ;dimsoxd
                   (cons 176 0) ;dimclrd
                   (cons 177 0) ;dimclre
                   (cons 178 0) ;dimclrt
                   (cons 179 1) ;dimadec
                   ;; группа 171 (dimaltd) не используется - нет альтернативных единиц
                   (cons 271 0) ;dimdec      @R@
                   (cons 272 0) ;dimtdec   @R@
                   (cons 275 1) ;dimaunit
                   (cons 277 2) ;dimlunit
                   (cons 278 44) ;dimdsep   @R@
                   (cons 279 ;dimtmove
                         (if (not style-number)
                           0
                           1
                           ) ;_ end of if
                         ) ;_ end of cons
                   (cons 280 0) ;dimjust
                   (cons 281 0) ;dimsd1
                   (cons 282 0) ;dimsd2
                   (cons 283 0) ;dimtolj
                   (cons 284 8) ;dimtzin
                   ;; группа 270 не используется - устарело. Вместо этого используется
                   ;; назначение dimlunit и dimfrac
                   ;; группа 287 (dimfit) не используется - устар. Вместо этого
                   ;; используются
                   ;; dimaltfit и dimtmove
                   (cons 288 0) ;dimupt
                   ;; группы 273 (dimaltu), 274 (dimalttd), 285 (dimaltz), 286
                   ;; (dimalttz)
                   ;; не используются - нет альтернативных единиц
                   ;; группа 276 (dimfrac) не устанавливается
          ;(cons 340 (tblobjname "style" "SPDS")) ;dimtxtsty   @R@
                   (cons 340 (tblobjname "style" (getvar "textstyle")))
                   (cons 371 -2) ;dimlwd
                   (cons 372 -2) ;dimlwe
                   ) ;_ end of list
        ) ;_ end of setq
  (if (member style-number '(nil 0 1))
    (progn
      (setq ent_list
             (reverse
               (cons
                 (cons 342
                       (cdr
                         (assoc 330
                                (entget
                                  (tblobjname "block" "_archtick")
                                  ) ;_ end of entget
                                ) ;_ end of assoc
                         ) ;_ end of cdr
                       ) ;dimblk      @R@
                 (reverse ent_list)
                 ) ;_ end of cons
               ) ;_ end of reverse
            ) ;_ end of setq
      (setq ent_list
             (reverse
               (cons
                 (cons 343
                       (cdr
                         (assoc 330
                                (entget
                                  (tblobjname "block" "_archtick")
                                  ) ;_ end of entget
                                ) ;_ end of assoc
                         ) ;_ end of cdr
                       ) ;dimblk1
                 (reverse ent_list)
                 ) ;_ end of cons
               ) ;_ end of reverse
            ) ;_ end of setq
      (setq ent_list
             (reverse
               (cons
                 (cons 344
                       (cdr
                         (assoc 330
                                (entget
                                  (tblobjname "block" "_archtick")
                                  ) ;_ end of entget
                                ) ;_ end of assoc
                         ) ;_ end of cdr
                       ) ;dimblk2
                 (reverse ent_list)
                 ) ;_ end of cons
               ) ;_ end of reverse
            ) ;_ end of setq
      ) ;_ end of setq
    ) ;_ end of if
  (if (setq exist_style (tblobjname "dimstyle" ent_name))
    (foreach item ent_list
      (_kpblc-ent-modify exist_style (car item) (cdr item))
      ) ;_ end of foreach
    (entmake ent_list)
    ) ;_ end of if
  ) ;_ end of defun

(defun _kpblc-style-create-textstyle-by-list (lst / res)
                                             ;|
*    Создание или перенастройка текстового стиля
*    Параметры вызова:
*   lst   список вида:
      '(("name" . <ИмяСтиля>)      ; nil -> работа прекращается
   ("height" . <ВысотаТекста>)   ; nil или меньше 0 -> 0.
   ("ang" . <УголНаклона, градусы>) ; nil -> 0.
   ("font" . <ИмяФонта>)      ; nil -> "simplex.shx"
   ("width" . <КоэффициентШирины>)   ; nil -> 1.
*    Примеры вызова:
(_kpblc-style-create-textstyle-by-list '(("name" . "test1") ("font" . "isosp.shx")))
(_kpblc-style-create-textstyle-by-list '(("name" . "test2") ("font" . "isosp.shx") ("ang" . 15.)))
|;
  (_kpblc-error-catch
    (function
      (lambda ()
        (if (cdr (assoc "name" lst))
          (progn
            (foreach item
                     (list (cons "height" 0.)
                           (cons "ang" 0.)
                           (cons "font"
                                 (cond
                                   ((findfile "simplex.shx"))
                                   ((findfile "txt.shx"))
                                   (vla-get-fontfile
                                    (vla-get-activetextstyle *kpblc-activedoc*)
                                    )
                                   ) ;_ end of cond
                                 ) ;_ end of cons
                           (cons "width" 1.)
                           ) ;_ end of list
              (if (not (assoc (car item) lst))
                (setq lst (cons item lst))
                ) ;_ end of if
              ) ;_ end of foreach
            (setq lst
                   (subst (cons "font"
                                (cond
                                  ((findfile (cdr (assoc "font" lst))))
                                  ((findfile "simplex.shx"))
                                  ((findfile "txt.shx"))
                                  (vla-get-fontfile
                                   (vla-get-activetextstyle *kpblc-activedoc*)
                                   )
                                  ) ;_ end of cond
                                ) ;_ end of cons
                          (assoc "font" lst)
                          lst
                          ) ;_ end of subst
                  ) ;_ end of setq
            (setq res (if (tblobjname "style" (cdr (assoc "name" lst)))
                        (vla-item (vla-get-textstyles *kpblc-activedoc*)
                                  (cdr (assoc "name" lst))
                                  ) ;_ end of vla-item
                        (vla-add (vla-get-textstyles *kpblc-activedoc*)
                                 (cdr (assoc "name" lst))
                                 ) ;_ end of vla-add
                        ) ;_ end of if
                  ) ;_ end of setq
            (vla-put-fontfile res (cdr (assoc "font" lst)))
            (vla-put-height res (cdr (assoc "height" lst)))
            (vla-put-obliqueangle res (/ (* (cdr (assoc "ang" lst)) pi) 180.))
            (vla-put-width res (cdr (assoc "width" lst)))
            (_kpblc-ent-modify-autoregen
              (vlax-vla-object->ename res)
              4
              ""
              t
              ) ;_ end of _kpblc-ent-modify-autoregen
            (_kpblc-ent-modify-autoregen
              (vlax-vla-object->ename res)
              71
              0
              t
              ) ;_ end of _kpblc-ent-modify-autoregen
            ) ;_ end of progn
          ) ;_ end of if
        ) ;_ end of lambda
      ) ;_ end of function
    '(lambda (x) (princ (strcat "\n _kpblc-style-create-textstyle ERROR : " x)))
    ) ;_ end of _kpblc-error-catch
  res
  ) ;_ end of defun

(defun _kpblc-conv-ent-to-ename (ent_value / res)
                                ;|
*    Функция преобразования полученного значения в ename
*    Параметры вызова:
*   ent_value   значение, которое надо преобразовать в примитив. Может
*         быть именем примитива, vla-указателем или просто
*         списком.
*         Если не принадлежит ни одному из указанных типов,
*         возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-ename (entlast))
(_kpblc-conv-ent-to-ename (vlax-ename->vla-object (entlast)))
=============================================================================|;
  (_kpblc-error-catch
    '(lambda ()
       (setq res (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 setq
       ) ;_ end of lambda
    '(lambda (x) (princ (strcat "\n _kpblc-conv-ent-to-ename ERROR : " x)))
    ) ;_ end of _kpblc-error-catch
  res
  ) ;_ end of defun

(defun _kpblc-ent-modify-autoregen (ent        bit        value      ext_regen
                                    /          ent_list   old_dxf    new_dxf
                                    layer_dxf70
                                    )
                                   ;|
*    Функция модификации указанного бита примитива
*    Параметры вызова:
*   entity   - примитив, полученный через (entsel), (entlast) etc
*   bit   - dxf-код, значение которого надо установить
*   value   - новое значение
*   regen   - выполнять или нет регенерацию примитива сразу. t/ nil
*    Примеры вызова:
(_kpblc-ent-modify (entlast) 8 "0" t)   ; перенести последний примитив на слой 0
(_kpblc-ent-modify (entsel) 62 10 nil)   ; установить выбранному примитиву цвет 10
*    Возвращаемое значение:
*   примитив с модифицированным dxf-списком. Примитив перерисовывается в
* зависимости от значения ключа ext_regen
|;
  (setq ent (_kpblc-conv-ent-to-ename ent))
  (if (not
        (and
          (or
            (= (strcase (cdr (assoc 0 (entget ent))) nil) "STYLE")
            (= (strcase (cdr (assoc 0 (entget ent))) nil) "DIMSTYLE")
            (= (strcase (cdr (assoc 0 (entget ent))) nil) "LAYER")
            ) ;_ end of or
          (= bit 100)
          ) ;_ end of and
        ) ;_ end of not
    (progn
      (setq ent_list (entget ent)
            new_dxf  (cons bit
                           (if (and (= bit 62) (= (type value) 'str))
                             (if (= (strcase value) "BYLAYER")
                               256
                               0
                               ) ;_ end of if
                             value
                             ) ;_ end of if
                           ) ;_ end of cons
            ) ;_ end of setq
      (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
        (progn
          (entmod (if old_dxf
                    (subst new_dxf old_dxf ent_list)
                    (append ent_list (list new_dxf))
                    ) ;_ end of if
                  ) ;_ end of entmod
          (if ent_regen
            (entupd ent)
            (redraw ent)
            ) ;_ end of if
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  ent
  ) ;_ end of defun

(defun _kpblc-error-catch (protected-function
                           on-error-function
                           /
                           catch_error_result
                           )
                          ;|
*** Функция взята из книжной версии ruCAD'a без каких бы то ни было переделок,
*** кроме переименования.
*    Оболочка отлова ошибок.
*    Параметры вызова:
*   protected-function   - "защищаемая" функция
*   on-error-function   - функция, выполняемая в случае ошибки
=============================================================================|;
  (setq catch_error_result (vl-catch-all-apply protected-function))
  (if (and (vl-catch-all-error-p catch_error_result)
           on-error-function
           ) ;_ end of and
    (apply on-error-function
           (list (vl-catch-all-error-message catch_error_result))
           ) ;_ end of apply
    catch_error_result
    ) ;_ end of if
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.04.2007, 10:31
#30
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


Крыс спасибо. Но я не могу сообразить
Объясни порядок работы (в моем понимании)
1)создаем текстовые стиль(у меня их 3 "ТЕКСТ", "РАЗМЕР", "ЗАГОЛОВОК") командой
Код:
[Выделить все]
(_kpblc-style-create-textstyle-by-list '(("name" . "ЗАГОЛОВОК") ("font" . "mipgost.shx") ("ang" . 15.)))
У меня ругается
Код:
[Выделить все]
_kpblc-style-create-textstyle ERROR : bad argument type: VLA-OBJECT nilnil
2)Текстовый стиль "ТЕКСТ" надо сделать текущим. Какую команду ввести?
3)Создаем размерный стиль ("М 1-1"). Какую команду ввести?
4)Создать макрос, чтоб автоматизировать пункты 1),2),3)
Piton вне форума  
 
Автор темы   Непрочитано 20.04.2007, 12:21
#31
Кулик Алексей aka kpblc
Moderator

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


Вот переделанный код (как говорится, найди отличия)
Код:
[Выделить все]
(vl-load-com)
(or *kpblc-activedoc*
    (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of or

(defun _kpblc-style-create-dimstyle
       (name textstyle / lst dimstyle_name _dimblk_)
       ;|
*    Функция создания размерного стиля.
*    Параметры вызова:
*	name		имя создаваемого размерного стиля
*	textstyle	Указатель на используемый TextStyle для этого размерного стиля
*    Примеры вызова:
(_kpblc-style-create-dimstyle "M1_1"(_kpblc-style-create-textstyle-by-list
    '(("name" . "ТЕКСТ")
      ("font" . "mipgost.shx")
      ("ang" . 15.)
      ("width" . 0.8)
      )
    ))
|;
  ;; Определяется имя размерного стиля
  (setq dimstyle_name name
        ;; Вот теперь здесь определяем виды блоков
        lst           (list (cons nil "_archtick")
                            (cons 0 "_archtick")
                            (cons 2 "_open30")
                            (cons 3 "_open30")
                            (cons 4 "_open30")
                            (cons 7 "_open30")
                            ) ;_ end of list
        ) ;_ end of setq
  (foreach item lst
    (if (not (tblobjname "block" (cdr item)))
      (progn
        (setq _dimblk_ (getvar "dimblk"))
        (setvar "dimblk" (cdr item))
        (setvar "dimblk"
                (if (= _dimblk_ "")
                  "."
                  _dimblk_
                  ) ;_ end of if
                ) ;_ end of setvar
        ) ;_ end of progn
      ) ;_ end of if
    (_kpblc-style-create-dimstyle-sub
      name
      (vla-get-name textstyle)
      (car item)
      (cdr item)
      ) ;_ end of _kpblc-style-create-dimstyle-sub
    ) ;_ end of foreach
  (if (tblobjname "dimstyle" name)
    (vla-item (vla-get-dimstyles *kpblc-activedoc*) name)
    ) ;_ end of if
  ) ;_ end of defun

(defun _kpblc-style-create-dimstyle-sub
       (name textstyle style-number style-blk /)
       ;|
*    Функция создания размерного "под"стиля.
*    Параметры вызова:
*	name		имя стиля
*	textstyle	Имя используемого текстового стиля. Стиль должен уже
		; существовать в файле. Проверка не производится.
*	style-number   	номер создаваемого стиля.
*	style-blk	имя блока, используемого в создаваемом подстиле
|;
  (setq ent_name (if style-number
                   (strcat name "$" (itoa style-number))
                   name
                   ) ;_ end of if
        ent_list
                 (list
                   (cons 0 "DIMSTYLE") ;      @R@
                   (cons 100 "AcDbSymbolTableRecord") ;      @R@
                   (cons 100 "AcDbDimStyleTableRecord") ;      @R@
                   (cons 2 ent_name) ;dimsty      @R@
                   (cons 70
                         (if (not style-number)
                           0
                           style-number
                           ) ;_ end of if
                         ) ; @R@
                   (cons 40 (getvar "dimscale")) ;dimscale   @R@
                   (cons 41 2.5) ;dimsz      @R@
                   (cons 42 0.625) ;dimexo      @R@
                   (cons 43 3.75) ;dimdli      @R@
                   (cons 44 1.25) ;dimexe      @R@
                   (cons 45 0.5) ;dimrnd      @R@
                   (cons 46 0.0) ;dimdle      @R@
                   ;; группы 47 (dimtp) и 48 (dimtm) не используются - отключена
                   ;; dimtol и dimlim
                   (cons 140 2.5) ;dimtxt      @R@
                   (cons 141 -2.5) ;dimcen      @R@
                   (cons 143 0.005) ;dimaltf   @R@
                   (cons 144 1) ;dimlfac
                   (cons 145 0) ;dimtvp
                   (cons 147 0.5) ;dimgap      @R@
                   ;; группа 146 (dimtfac) не используется и не изменяется - отключены
                   ;; альтернативные единицы
                   (cons 72 0) ;dimlim
                   ;; Дополнительно, для гарантии, отключаем dimlim
                   (cons 73 0) ;dimtih      @R@
                   (cons 74 0) ;dimtoh      @R@
                   (cons 77 1) ;dimtad      @R@
                   (cons 78 8) ;dimzin      @R@
                   (cons 79 2) ;dimazin   @R@
                   ;; группа 71 (dimtol) - нет альтернативных единиц
                   (cons 170 0) ;dimalt
                   (cons 172 1) ;dimtofl   @R@
                   (cons 173 0) ;dimsah      @R@
                   (cons 174 0) ;dimtix
                   (cons 175 1) ;dimsoxd
                   (cons 176 0) ;dimclrd
                   (cons 177 0) ;dimclre
                   (cons 178 0) ;dimclrt
                   (cons 179 1) ;dimadec
                   ;; группа 171 (dimaltd) не используется - нет альтернативных единиц
                   (cons 271 0) ;dimdec      @R@
                   (cons 272 0) ;dimtdec   @R@
                   (cons 275 1) ;dimaunit
                   (cons 277 2) ;dimlunit
                   (cons 278 44) ;dimdsep   @R@
                   (cons 279 ;dimtmove
                         (if (not style-number)
                           0
                           1
                           ) ;_ end of if
                         ) ;_ end of cons
                   (cons 280 0) ;dimjust
                   (cons 281 0) ;dimsd1
                   (cons 282 0) ;dimsd2
                   (cons 283 0) ;dimtolj
                   (cons 284 8) ;dimtzin
                   ;; группа 270 не используется - устарело. Вместо этого используется
                   ;; назначение dimlunit и dimfrac
                   ;; группа 287 (dimfit) не используется - устар. Вместо этого
                   ;; используются dimaltfit и dimtmove
                   (cons 288 0) ;dimupt
                   ;; группы 273 (dimaltu), 274 (dimalttd), 285 (dimaltz), 286
                   ;; (dimalttz) не используются - нет альтернативных единиц
                   ;; группа 276 (dimfrac) не устанавливается
          ;(cons 340 (tblobjname "style" "SPDS")) ;dimtxtsty   @R@
                   (cons 340 (tblobjname "style" textstyle))
                   (cons 371 -2) ;dimlwd
                   (cons 372 -2) ;dimlwe
                   ) ;_ end of list
        ) ;_ end of setq
  (if (member style-number '(nil 0 1))
    (progn
      (setq ent_list
             (reverse
               (cons
                 (cons 342
                       (cdr
                         (assoc 330
                                (entget
                                  (tblobjname "block" style-blk)
                                  ) ;_ end of entget
                                ) ;_ end of assoc
                         ) ;_ end of cdr
                       ) ;dimblk      @R@
                 (reverse ent_list)
                 ) ;_ end of cons
               ) ;_ end of reverse
            ) ;_ end of setq
      (setq ent_list
             (reverse
               (cons
                 (cons 343
                       (cdr
                         (assoc 330
                                (entget
                                  (tblobjname "block" style-blk)
                                  ) ;_ end of entget
                                ) ;_ end of assoc
                         ) ;_ end of cdr
                       ) ;dimblk1
                 (reverse ent_list)
                 ) ;_ end of cons
               ) ;_ end of reverse
            ) ;_ end of setq
      (setq ent_list
             (reverse
               (cons
                 (cons 344
                       (cdr
                         (assoc 330
                                (entget
                                  (tblobjname "block" style-blk)
                                  ) ;_ end of entget
                                ) ;_ end of assoc
                         ) ;_ end of cdr
                       ) ;dimblk2
                 (reverse ent_list)
                 ) ;_ end of cons
               ) ;_ end of reverse
            ) ;_ end of setq
      ) ;_ end of setq
    ) ;_ end of if
  (if (setq exist_style (tblobjname "dimstyle" ent_name))
    (foreach item ent_list
      (_kpblc-ent-modify-autoregen exist_style (car item) (cdr item) t)
      ) ;_ end of foreach
    (entmake ent_list)
    ) ;_ end of if
  ) ;_ end of defun

(defun _kpblc-style-create-textstyle-by-list (lst / res)
                                             ;|
*    Создание или перенастройка текстового стиля
*    Параметры вызова:
*   lst   список вида:
      '(("name" . <ИмяСтиля>)      ; nil -> работа прекращается
   ("height" . <ВысотаТекста>)   ; nil или меньше 0 -> 0.
   ("ang" . <УголНаклона, градусы>) ; nil -> 0.
   ("font" . <ИмяФонта>)      ; nil -> "simplex.shx"
   ("width" . <КоэффициентШирины>)   ; nil -> 1.
*    Примеры вызова:
(_kpblc-style-create-textstyle-by-list '(("name" . "test1") ("font" . "isosp.shx")))
(_kpblc-style-create-textstyle-by-list '(("name" . "test2") ("font" . "isosp.shx") ("ang" . 15.)))
|;
  (_kpblc-error-catch
    (function
      (lambda ()
        (if (cdr (assoc "name" lst))
          (progn
            (foreach item
                     (list (cons "height" 0.)
                           (cons "ang" 0.)
                           (cons "font"
                                 (cond
                                   ((findfile "simplex.shx"))
                                   ((findfile "txt.shx"))
                                   (vla-get-fontfile
                                    (vla-get-activetextstyle *kpblc-activedoc*)
                                    )
                                   ) ;_ end of cond
                                 ) ;_ end of cons
                           (cons "width" 1.)
                           ) ;_ end of list
              (if (not (assoc (car item) lst))
                (setq lst (cons item lst))
                ) ;_ end of if
              ) ;_ end of foreach
            (setq lst
                   (subst (cons "font"
                                (cond
                                  ((findfile (cdr (assoc "font" lst))))
                                  ((findfile "simplex.shx"))
                                  ((findfile "txt.shx"))
                                  (vla-get-fontfile
                                   (vla-get-activetextstyle *kpblc-activedoc*)
                                   )
                                  ) ;_ end of cond
                                ) ;_ end of cons
                          (assoc "font" lst)
                          lst
                          ) ;_ end of subst
                  ) ;_ end of setq
            (setq res (if (tblobjname "style" (cdr (assoc "name" lst)))
                        (vla-item (vla-get-textstyles *kpblc-activedoc*)
                                  (cdr (assoc "name" lst))
                                  ) ;_ end of vla-item
                        (vla-add (vla-get-textstyles *kpblc-activedoc*)
                                 (cdr (assoc "name" lst))
                                 ) ;_ end of vla-add
                        ) ;_ end of if
                  ) ;_ end of setq
            (vla-put-fontfile res (cdr (assoc "font" lst)))
            (vla-put-height res (cdr (assoc "height" lst)))
            (vla-put-obliqueangle res (/ (* (cdr (assoc "ang" lst)) pi) 180.))
            (vla-put-width res (cdr (assoc "width" lst)))
            (_kpblc-ent-modify-autoregen
              (vlax-vla-object->ename res)
              4
              ""
              t
              ) ;_ end of _kpblc-ent-modify-autoregen
            (_kpblc-ent-modify-autoregen
              (vlax-vla-object->ename res)
              71
              0
              t
              ) ;_ end of _kpblc-ent-modify-autoregen
            ) ;_ end of progn
          ) ;_ end of if
        ) ;_ end of lambda
      ) ;_ end of function
    '(lambda (x) (princ (strcat "\n _kpblc-style-create-textstyle ERROR : " x)))
    ) ;_ end of _kpblc-error-catch
  res
  ) ;_ end of defun

(defun _kpblc-conv-ent-to-ename (ent_value / res)
                                ;|
*    Функция преобразования полученного значения в ename
*    Параметры вызова:
*   ent_value   значение, которое надо преобразовать в примитив. Может
*         быть именем примитива, vla-указателем или просто
*         списком.
*         Если не принадлежит ни одному из указанных типов,
*         возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-ename (entlast))
(_kpblc-conv-ent-to-ename (vlax-ename->vla-object (entlast)))
=============================================================================|;
  (_kpblc-error-catch
    '(lambda ()
       (setq res (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 setq
       ) ;_ end of lambda
    '(lambda (x) (princ (strcat "\n _kpblc-conv-ent-to-ename ERROR : " x)))
    ) ;_ end of _kpblc-error-catch
  res
  ) ;_ end of defun

(defun _kpblc-ent-modify-autoregen (ent        bit        value      ext_regen
                                    /          ent_list   old_dxf    new_dxf
                                    layer_dxf70
                                    )
                                   ;|
*    Функция модификации указанного бита примитива
*    Параметры вызова:
*   entity   - примитив, полученный через (entsel), (entlast) etc
*   bit   - dxf-код, значение которого надо установить
*   value   - новое значение
*   regen   - выполнять или нет регенерацию примитива сразу. t/ nil
*    Примеры вызова:
(_kpblc-ent-modify (entlast) 8 "0" t)   ; перенести последний примитив на слой 0
(_kpblc-ent-modify (entsel) 62 10 nil)   ; установить выбранному примитиву цвет 10
*    Возвращаемое значение:
*   примитив с модифицированным dxf-списком. Примитив перерисовывается в
* зависимости от значения ключа ext_regen
|;
  (setq ent (_kpblc-conv-ent-to-ename ent))
  (if (not
        (and
          (or
            (= (strcase (cdr (assoc 0 (entget ent))) nil) "STYLE")
            (= (strcase (cdr (assoc 0 (entget ent))) nil) "DIMSTYLE")
            (= (strcase (cdr (assoc 0 (entget ent))) nil) "LAYER")
            ) ;_ end of or
          (= bit 100)
          ) ;_ end of and
        ) ;_ end of not
    (progn
      (setq ent_list (entget ent)
            new_dxf  (cons bit
                           (if (and (= bit 62) (= (type value) 'str))
                             (if (= (strcase value) "BYLAYER")
                               256
                               0
                               ) ;_ end of if
                             value
                             ) ;_ end of if
                           ) ;_ end of cons
            ) ;_ end of setq
      (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
        (progn
          (entmod (if old_dxf
                    (subst new_dxf old_dxf ent_list)
                    (append ent_list (list new_dxf))
                    ) ;_ end of if
                  ) ;_ end of entmod
          (if ent_regen
            (entupd ent)
            (redraw ent)
            ) ;_ end of if
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  ent
  ) ;_ end of defun

(defun _kpblc-error-catch (protected-function
                           on-error-function
                           /
                           catch_error_result
                           )
                          ;|
*** Функция взята из книжной версии ruCAD'a без каких бы то ни было переделок,
*** кроме переименования.
*    Оболочка отлова ошибок.
*    Параметры вызова:
*   protected-function   - "защищаемая" функция
*   on-error-function   - функция, выполняемая в случае ошибки
=============================================================================|;
  (setq catch_error_result (vl-catch-all-apply protected-function))
  (if (and (vl-catch-all-error-p catch_error_result)
           on-error-function
           ) ;_ end of and
    (apply on-error-function
           (list (vl-catch-all-error-message catch_error_result))
           ) ;_ end of apply
    catch_error_result
    ) ;_ end of if
  ) ;_ end of defun
Для того, чтобы сразу создать стиль, да еще его и активировать, спробуй такое:
Код:
[Выделить все]
(vla-put-ActiveDimStyle (vla-get-ActiveDocument(vlax-get-acad-object)) (_kpblc-style-create-dimstyle "M1_10"(_kpblc-style-create-textstyle-by-list
    '(("name" . "ТЕКСТ")
      ("font" . "mipgost.shx")
      ("ang" . 15.)
      ("width" . 0.8)
      )
    )))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.06.2008, 12:03
#32
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Всем откликнувшимся - огромное человеческое спасибо. Лентяю - отдельный земной поклон за книгу. Alaspher - за иллюстрации. Проблема решена. Если интересно, код:
Код:
[Выделить все]
;|=============================================================================
*    Функция создания размерного стиля. Используется вариант (setvar) и
* (vl-cmdf)
*    Параметры вызова:
*	нет
*    Примеры вызова:
(_kpblc-create-dimstyle)
=============================================================================|;
(defun _kpblc-create-dimstyle (/ ent_list exist_style arrow_block active_dimstyle)

  ;; Локальные функции
  (defun _kpblc-create-sub-dimstyle (style-number / ent_list ent_name)
    (setq ent_name (if style-number
		     (strcat "SPDS$" (itoa style-number))
		     "SPDS"
		     ) ;_ end of if
	  ent_list
		   (list
		     (cons 0 "DIMSTYLE") ;		@R@
		     (cons 100 "AcDbSymbolTableRecord") ;		@R@
		     (cons 100 "AcDbDimStyleTableRecord") ;		@R@
		     (cons 2 ent_name)	;dimsty		@R@
		     (cons 70
			   (if (not style-number)
			     0
			     style-number
			     ) ;_ end of if
			   )		; @R@
		     (cons 40 (getvar "dimscale")) ;dimscale	@R@
		     (cons 41 2.5)	;dimsz		@R@
		     (cons 42 0.625)	;dimexo		@R@
		     (cons 43 3.75)	;dimdli		@R@
		     (cons 44 1.25)	;dimexe		@R@
		     (cons 45 0.5)	;dimrnd		@R@
		     (cons 46 0.0)	;dimdle		@R@
		     ;; группы 47 (dimtp) и 48 (dimtm) не используются - отключена
		     ;; dimtol
		     ;; и
		     ;; dimlim
		     (cons 140 2.5)	;dimtxt		@R@
		     (cons 141 -2.5)	;dimcen		@R@
		     (cons 143 0.005)	;dimaltf	@R@
		     (cons 144 1)	;dimlfac
		     (cons 145 0)	;dimtvp
		     (cons 147 0.5)	;dimgap		@R@
		     ;; группа 146 (dimtfac) не используется и не изменяется - отключены
		     ;; альтернативные единицы
		     (cons 72 0)	;dimlim
		     ;; Дополнительно, для гарантии, отключаем dimlim
		     (cons 73 0)	;dimtih		@R@
		     (cons 74 0)	;dimtoh		@R@
		     (cons 77 1)	;dimtad		@R@
		     (cons 78 8)	;dimzin		@R@
		     (cons 79 2)	;dimazin	@R@
		     ;; группа 71 (dimtol) - нет альтернативных единиц
		     (cons 170 0)	;dimalt
		     (cons 172 1)	;dimtofl	@R@
		     (cons 173 0)	;dimsah		@R@
		     (cons 174 0)	;dimtix
		     (cons 175 1)	;dimsoxd
		     (cons 176 0)	;dimclrd
		     (cons 177 0)	;dimclre
		     (cons 178 0)	;dimclrt
		     (cons 179 1)	;dimadec
		     ;; группа 171 (dimaltd) не используется - нет альтернативных единиц
		     (cons 271 0)	;dimdec		@R@
		     (cons 272 0)	;dimtdec	@R@
		     (cons 275 1)	;dimaunit
		     (cons 277 2)	;dimlunit
		     (cons 278 44)	;dimdsep	@R@
		     (cons 279		;dimtmove
			   (cond
			     ((not style-number) 0)
			     ((= style-number 0) 1)
			     ((= style-number 1) 1)
			     (t 1)
			     ) ;_ end of cond
			   ) ;_ end of cons
		     (cons 280 0)	;dimjust
		     (cons 281 0)	;dimsd1
		     (cons 282 0)	;dimsd2
		     (cons 283 0)	;dimtolj
		     (cons 284 8)	;dimtzin
		     ;; группа 270 не используется - устарело. Вместо этого используется
		     ;; назначение dimlunit и dimfrac
		     ;; группа 287 (dimfit) не используется - устар. Вместо этого
		     ;; используются
		     ;; dimaltfit и dimtmove
		     (cons 288 0)	;dimupt
		     ;; группы 273 (dimaltu), 274 (dimalttd), 285 (dimaltz), 286
		     ;; (dimalttz)
		     ;; не используются - нет альтернативных единиц
		     ;; группа 276 (dimfrac) не устанавливается
		     (cons 340 (tblobjname "style" "SPDS")) ;dimtxtsty	@R@
		     (cons 371 -2)	;dimlwd
		     (cons 372 -2)	;dimlwe
		     ) ;_ end of list
	  ) ;_ end of setq
    (if	(member style-number '(nil 0 1))
      (progn
	(setq ent_list
	       (reverse
		 (cons
		   (cons 342
			 (cdr
			   (assoc 330
				  (entget
				    (tblobjname "block" "_archtick")
				    ) ;_ end of entget
				  ) ;_ end of assoc
			   ) ;_ end of cdr
			 )		;dimblk		@R@
		   (reverse ent_list)
		   ) ;_ end of cons
		 ) ;_ end of reverse
	      ) ;_ end of setq
	(setq ent_list
	       (reverse
		 (cons
		   (cons 343
			 (cdr
			   (assoc 330
				  (entget
				    (tblobjname "block" "_archtick")
				    ) ;_ end of entget
				  ) ;_ end of assoc
			   ) ;_ end of cdr
			 )		;dimblk1
		   (reverse ent_list)
		   ) ;_ end of cons
		 ) ;_ end of reverse
	      ) ;_ end of setq
	(setq ent_list
	       (reverse
		 (cons
		   (cons 344
			 (cdr
			   (assoc 330
				  (entget
				    (tblobjname "block" "_archtick")
				    ) ;_ end of entget
				  ) ;_ end of assoc
			   ) ;_ end of cdr
			 )		;dimblk2
		   (reverse ent_list)
		   ) ;_ end of cons
		 ) ;_ end of reverse
	      ) ;_ end of setq
	) ;_ end of setq
      ) ;_ end of if
    (if	(setq exist_style (tblobjname "dimstyle" ent_name))
      (foreach item ent_list
	(_kpblc-ent-modify exist_style (car item) (cdr item))
	) ;_ end of foreach
      (entmake ent_list)
      ) ;_ end of if

    ) ;_ end of defun
  ;; Конец локальных функций

  (_kpblc-create-textstyle)
  (if (not (tblsearch "block" "_archtick"))
    (progn
      (setq _dimblk_ (getvar "dimblk"))
      (setvar "dimblk" "_archtick")
      (if (= _dimblk_ "")
	(setvar "dimblk" ".")
	(setvar "dimblk" _dimblk_)
	) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if

  (_kpblc-echo t)

  (foreach item	(list nil 0 2 3 4 7)
    (_kpblc-create-sub-dimstyle item)
    ) ;_ end of foreach

  (if (not *kpblc-activedoc*)
    (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of if
  (if (tblobjname "dimstyle" "SPDS")
    (progn
      (setq active_dimstyle (vlax-ename->vla-object (tblobjname "dimstyle" "SPDS")))
      (vlax-put-property *kpblc-activedoc* "ActiveDimStyle" active_dimstyle)
      ) ;_ end of progn
    (vl-cmdf "_.-dimstyle" "_Save" "SPDS")
    ) ;_ end of if
  (_kpblc-echo nil)

  (princ)
  ) ;_ end of defun

;|=======================================================================================
*    Функция снятия / показа командного эха. В процессе работы используются глобальные
* переменные *kpblc-cmdecho* и *kpblc-nomutt*. Если они nil, то в них считываются значения
* cmdecho и nomutt. Если они не nil, то устанавливаются записанные в них значения.
*    Параметры вызова:
*	setecho	- установить или возвратить обратно эхо. nil -> установить эхо; t -> снять
*    Примеры вызова:
(_kpblc-echo t)		; снять эхо команд
(_kpblc-echo nil)		; установить это команд
=======================================================================================|;
(defun _kpblc-echo (setecho)
  (if setecho
    (mapcar
      'setvar
      (list "cmdecho" "nomutt")
      (list 0 1)
      ) ;_ end of mapcar
    (mapcar
      'setvar
      (list "cmdecho" "nomutt")
      (list 1 0)
      ) ;_ end of mapcar
    ) ;_ end of if
  (princ)
  ) ;_defun

;|=======================================================================================
*    Функция создает текстовый стиль. Создание идет через (entmake).
*    Созданный стиль делается активным
*    Параметры вызова:
*	нет
*    Примеры вызова:
(_kpblc-create-textstyle)
=======================================================================================|;
(defun _kpblc-create-textstyle (/ ent_list font_filename exist_style)
  (if (findfile "spds.shx")
    (setq font_filename (strcat (vl-filename-base (findfile "spds.shx")) ".shx"))
    (setq font_filename (strcat (vl-filename-base (findfile "simplex.shx")) ".shx"))
    ) ;_ end of if
  (setq	ent_list
	 (list
	   '(0 . "STYLE")
	   '(100 . "AcDbSymbolTableRecord")
	   '(100 . "AcDbTextStyleTableRecord")
	   '(2 . "SPDS")		; text style name
	   '(70 . 0)			;
	   '(40 . 0.0)			; text height
	   '(41 . 0.8)			; width factor
	   '(50 . 0.0)			; oblique angle
	   '(71 . 0)			; not backwatf, not upside down
	   '(42 . 2.5)			; last height used
	   (cons 3 font_filename)	; primary font file name
	   '(4 . "")			; big font file name
	   ) ;_ end of list
	) ;_ end of setq
					;(entmake ent_list)
  (if (setq exist_style (tblobjname "style" "SPDS"))
    ;; Стиль есть, возвращаем стандартный вид
    (foreach item ent_list
      (_kpblc-ent-modify exist_style (car item) (cdr item))
      ) ;_ end of foreach
    ;; Стиля нет, делаем его и нормализуем все примитивы
    (entmake ent_list)
    ) ;_ end of if
  (setvar "textstyle" "SPDS")
					;(princ)
  ) ;_ end of defun

;|=======================================================================================
*    Функция модификации указанного бита примитива
*    Параметры вызова:
*	entity	- примитив, полученный через (entsel), (entlast) etc
*	bit	- dxf-код, значение которого надо установить
*	value	- новое значение
*    Примеры вызова:
(_kpblc-ent-modify (entlast) 8 "0")	; перенести последний примитив на слой 0
(_kpblc-ent-modify (entsel) 62 10)	; установить выбранному примитиву цвет 10
*    Возвращаемое значение:
*	примитив с модифицированным dxf-списком. Примитив автоматически перерисовывается.
=======================================================================================|;
(defun _kpblc-ent-modify (ent bit value / ent_list old_dxf new_dxf)
  (if (not
	(and
	  (or
	    (= (cdr (assoc 0 (entget ent))) "STYLE")
	    (= (cdr (assoc 0 (entget ent))) "DIMSTYLE")
	    ) ;_ end of or
	  (= bit 100)
	  ) ;_ end of and
	) ;_ end of not
    (progn
      (setq ent_list (entget ent)
	    new_dxf  (cons bit
			   (if (and (= bit 62) (= (type value) 'str))
			     (if (= (strcase value) "BYLAYER")
			       256
			       0
			       ) ;_ end of if
			     value
			     ) ;_ end of if
			   ) ;_ end of cons
	    ) ;_ end of setq
      (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
	(progn (entmod (if old_dxf
			 (subst new_dxf old_dxf ent_list)
			 (append ent_list (list new_dxf))
			 ) ;_ end of if
		       ) ;_ end of entmod
	       (entupd ent)
	       (redraw ent)
	       ) ;_ end of progn
	) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  ent
  ) ;_ end of defun
В коде используется немного переработанная функция из ruCAD (ru-ent-mod) для обработки записей таблиц STYLE и DIMSTYLE. Мало ли, может, кому и пригодится...
Есть вопрос если я использую языки с обратным написанием (иврит) в 71 коде на что мне надо поменять значение,
что-бы подключить "обратнописание" , пробовал поменять "0" на "1" непомогает
Код:
[Выделить все]
 '(71 . 1)			; not backwatf, not upside
Holon вне форума  
 
Непрочитано 17.06.2008, 12:53
#33
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Все разобрался, для создания текстового стиля с "обратнописанием" нужно в коде писать "2"
Код:
[Выделить все]
'(71 . 2)			; not backwatf, not upside down
Holon вне форума  
 
Непрочитано 18.06.2008, 11:29
#34
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


РАз уж тема поднялась, добавлю еще одну ссылочку на программное создание размерных стилей
http://www.theswamp.org/index.php?topic=23586.0
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 30.06.2008 в 15:48.
VVA вне форума  
 
Непрочитано 30.06.2008, 03:12
#35
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Мне часто бывают нужны размерные линии с одной стрелкой и с масштабом размерного значения 0,5. Я создаю новый стиль на основе ISO-25, в настройках убираю выносные линии, одну стрелку (первую привык) и выставляю масштаб (остальное - по умолчанию. Естественно, в каждом файле надо это делать, либо копировать такую стрелку из другого файла....
kpblc, можно ли с помощью твоего лиспа сделать это?? В идеале хотелось бы так:
1.Жму кнопку на панели
2.Создается вышеописанный размерный стиль, сразу же включается, и система предлагает кликнуть первую, затем вторую точки размерной линии.
3.Вот линия на месте, включается обратно ранее установленный размерный стиль
4.При нажатии правой кнопки мыши - повтор команды, т.е., видимо, не макрос это должен быть и не функция....Может, я не все понимаю


А вообще, считаю, что лиспик очень серьезен

Последний раз редактировалось skkkk, 30.06.2008 в 03:22. Причина: Забыл уведомление подключить
skkkk вне форума  
 
Автор темы   Непрочитано 30.06.2008, 08:39
#36
Кулик Алексей aka kpblc
Moderator

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


Ну а почему бы нет? Есть вопрос: а этот "собственный" стиль относиться будет к каким размерам (линейный? выравненный? угловой?); верно ли я понял, что стрелка, остающаяся "на месте" - это заполненная?
Попробую сегодня на обеде (если не загрузят по самое не хочу)...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.06.2008, 08:51
#37
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


В основном пользуюсь параллельным. Стрелка, да, заполненная

Последний раз редактировалось skkkk, 30.06.2008 в 09:04.
skkkk вне форума  
 
Автор темы   Непрочитано 30.06.2008, 15:39
#38
Кулик Алексей aka kpblc
Moderator

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


Чего-то никак не получается победить "отсутствие" размерной стрелки. Должно быть просто до безобразия, ан никак
Еще вечером попробую глянуть.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.06.2008, 16:07
#39
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
Чего-то никак не получается победить "отсутствие" размерной стрелки. Должно быть просто до безобразия, ан никак
Еще вечером попробую глянуть.
Я не очень понял чего не получается, поясните плиз.
ЗЫ:Эх. А как узнать dxf код соответствующий переменной dimtfill?
Sleekka вне форума  
 
Автор темы   Непрочитано 30.06.2008, 16:20
#40
Кулик Алексей aka kpblc
Moderator

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


Какой-какой переменной? В 2006 такой не нашел.
А не получается следующее: попробуй программно создать размерный стиль, в котором отключено создание одной из стрелок.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.06.2008, 16:54
#41
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Алексей, мне кажется нужно
  • DIMBLK установить в "";
  • DIMBLK1 в "_archtick" (или что там нужно)
  • DIMBLK2 в "_none"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 30.06.2008, 16:57
#42
Кулик Алексей aka kpblc
Moderator

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


Я пробовал. Не сработало. Не знаю, что тому виной (наверное, я) - вечером попробую провернуть еще разок. На другой ОС, на другой версии...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.06.2008, 17:02
#43
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
А не получается следующее: попробуй программно создать размерный стиль, в котором отключено создание одной из стрелок.
Сделал может и через пекин, но:
Код:
[Выделить все]
(vl-cmdf "_-insert" "c:\\slcad\\dwg\\_None.dwg")
(vl-cmdf)
(_kpblc-style-create-dimstyle)
вобщем я сделал так. Есс-но файл пустой загнал с нужным именем.
dimtfill - недокументированная, но она отвечает за background mask текста который используется в размерах.
пробивается по тут: http://www.kxcad.net/autodesk/autoca.../d0e138311.htm
но зная ее сделать размерный стиль не получается. Может через вла получится модифицировать это свойство. Книги Полещука Акад2008 под рукой нету - ща пойду искать.
Sleekka вне форума  
 
Непрочитано 30.06.2008, 17:27
#44
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


УРРРА нашел:
Если кому интересно то dimtfill = 69 группа.
В Книге "Акад 2008" Полещука - переменная есть, группы нету.
Sleekka вне форума  
 
Автор темы   Непрочитано 01.07.2008, 09:19
#45
Кулик Алексей aka kpblc
Moderator

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


наконец-то до меня "дошло".
Надо в описании стиля менять группу 173 с '(173 . 0) на '(173 . 1) - в таком случае допускается использование dimblk1 и dimblk2, а не dimblk. Группы для отсутствующих стрелок надо будет исключать из списка. И потом создавать.
Правда, на код меня не хватило, так что результат наполовину теоретический
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.07.2008, 11:34
#46
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Ну зачем же так расстраиваться? Код, конечно полезный очень уж, но не повод вешать нос....Я вот вообще не врубаюсь и здоров живу Надеюсь, ты не сидел над этим всю ночь?

Последний раз редактировалось skkkk, 28.03.2013 в 23:47.
skkkk вне форума  
 
Автор темы   Непрочитано 01.07.2008, 11:39
#47
Кулик Алексей aka kpblc
Moderator

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


Ну не всю, часа полтора-два где-то потратил. Пока все переменные прошерстил
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.07.2008, 12:20
#48
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


А тебя еще может хватить?
skkkk вне форума  
 
Автор темы   Непрочитано 01.07.2008, 14:01
#49
Кулик Алексей aka kpblc
Moderator

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


На что меня должно хватить? На написание кода под твою задачу? Попробую вечером...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.07.2008, 04:36
#50
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Блин, забыл сразу сказать... Еще бы туда добавить точность 0.0
skkkk вне форума  
 
Непрочитано 10.07.2008, 04:13
#51
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Не получилось?
skkkk вне форума  
 
Автор темы   Непрочитано 10.07.2008, 04:23
#52
Кулик Алексей aka kpblc
Moderator

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


Код слишком сложный выходит. Сейчас как раз пробую упростить.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.07.2008, 04:24
#53
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


как по аське....не мне одному не спится что ли?? Да было бы здорово такую кнопочку....... (мечтательно))))
skkkk вне форума  
 
Непрочитано 06.08.2008, 13:33
#54
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Вопрос такой:
В приложенном файле рисунка я провёл такой эксперимент:

Цитата:
_$ (setq a (tblnext "DIMSTYLE" t))
((0 . "DIMSTYLE") (2 . "M-Standard") (70 . 0) (3 . "") (4 . "") (5 . "Oblique") (6 . "") (7 . "") (40 . 1.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (44 . 0.8) (45 . 0.0) (46 . 0.8) (47 . 0.0) (48 . 0.0) (140 . 2.5) (141 . 2.0) (142 . 0.0) (143 . 0.0393701) (144 . 1.0) (145 . 0.0) (146 . 1.0) (147 . 0.6) (71 . 0) (72 . 0) (73 . 0) (74 . 0) (75 . 0) (76 . 0) (77 . 1) (78 . 1) (170 . 0) (171 . 3) (172 . 1) (173 . 0) (174 . 0) (175 . 0) (176 . 256) (177 . 256) (178 . 256) (270 . 2) (271 . 0) (272 . 0) (273 . 2) (274 . 3) (340 . <Имя объекта: 7eff1ae8>) (275 . 0) (280 . 0) (281 . 0) (282 . 0) (283 . 0) (284 . 8) (285 . 0) (286 . 0) (287 . 4) (288 . 0))

_$ (cdr (assoc 2 (entget (cdr (assoc 340 a)))))
"M-Standard_0"

_$ (setq a (tblnext "DIMSTYLE"))
((0 . "DIMSTYLE") (2 . "Standard") (70 . 0) (3 . "") (4 . "") (5 . "") (6 . "") (7 . "") (40 . 1.0) (41 . 0.18) (42 . 0.0625) (43 . 0.38) (44 . 0.18) (45 . 0.0) (46 . 0.0) (47 . 0.0) (48 . 0.0) (140 . 0.18) (141 . 0.09) (142 . 0.0) (143 . 25.4) (144 . 1.0) (145 . 0.0) (146 . 1.0) (147 . 0.09) (71 . 0) (72 . 0) (73 . 1) (74 . 1) (75 . 0) (76 . 0) (77 . 0) (78 . 0) (170 . 0) (171 . 2) (172 . 0) (173 . 0) (174 . 0) (175 . 0) (176 . 0) (177 . 0) (178 . 0) (270 . 2) (271 . 4) (272 . 4) (273 . 2) (274 . 2) (340 . <Имя объекта: 7eff1ae8>) (275 . 0) (280 . 0) (281 . 0) (282 . 0) (283 . 1) (284 . 0) (285 . 0) (286 . 0) (287 . 3) (288 . 0))

_$ (cdr (assoc 2 (entget (cdr (assoc 340 a)))))
"M-Standard_0"
Ничего не понимаю, ведь последнее выражение должно было вернуть "Standard" - имя тектового стиля, который соответствует размерному стилю "Standard".

Где я туплю?
Вложения
Тип файла: dwg
DWG 2004
Чертеж.dwg (43.1 Кб, 932 просмотров)
Makswell вне форума  
 
Автор темы   Непрочитано 06.08.2008, 13:41
#55
Кулик Алексей aka kpblc
Moderator

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


Обрати внимание - ты ж получаешь 340 группу, а у тебя и в первом, и во втором случае там лежит одно и то же.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.08.2008, 14:06
#56
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Makswell Посмотреть сообщение
последнее выражение должно было вернуть "Standard" - имя тектового стиля, который соответствует размерному стилю "Standard".
Не совсем так - текстовому стилю использованому в размерном стиле "Standard", он...
Alaspher вне форума  
 
Непрочитано 06.08.2008, 14:40
#57
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Кулик Алексей aka kpblc, точно одно и тоже: (340 . <Имя объекта: 7eff1ae8>)
Так что же это?

В DXF-ref.. написано: 340 - DIMTXSTY (handle of referenced STYLE)
И вот как раз DIMTXSTY для каждого размерного стиля разное.

Alaspher, извини, что-то не допонял. Можно поподробней.

ЗЫ Вообще-то я уже решил проблему, получаю текстовый стиль через tblobjname. Просто хочется для себя прояснить этот момент.
Makswell вне форума  
 
Автор темы   Непрочитано 06.08.2008, 14:54
#58
Кулик Алексей aka kpblc
Moderator

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


Makswell, ну кто ж тебе виноват, что у тебя такой дамп получился...
Код:
[Выделить все]
_$ (entget (cdr (assoc 340 (entget (TBLOBJNAME "dimstyle" "standard")))))
((-1 . <Entity name: 7ef7cc88>) (0 . "STYLE") (330 . <Entity name: 7ef7cc18>) (5 . "11") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "Standard") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 2.5) (3 . "txt") (4 . ""))
_$ (entget (cdr (assoc 340 (entget (TBLOBJNAME "dimstyle" "M-Standard")))))
((-1 . <Entity name: 7ef7e2e8>) (0 . "STYLE") (330 . <Entity name: 7ef7cc18>) (5 . "FBD") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "M-Standard_0") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 2.5) (3 . "Gost2304.ttf") (4 . ""))
Переделывая твой код, надо получать не (tblnext), а, наверное, так:
Код:
[Выделить все]
_$ (tblobjname "dimstyle" (cdr (assoc 2 (tblnext "dimstyle" t))))
<Entity name: 7ef7e0b0>
_$ (tblobjname "dimstyle" (cdr (assoc 2 (tblnext "dimstyle"))))
<Entity name: 7ef7e1d8>
И обрабатывать уже полученные значения.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.08.2008, 15:31
#59
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Makswell Посмотреть сообщение
Alaspher, извини, что-то не допонял. Можно поподробней.

ЗЫ Вообще-то я уже решил проблему, получаю текстовый стиль через tblobjname. Просто хочется для себя прояснить этот момент.
Да, действительно - есть косяк, при получении DXF через tblnext возвращается текстовый стиль (и ещё многое другое) не от того размерного стиля, имя которого указано в группе 2, а от текущего. Поскольку почти не пользуюсь tblnext, то и не знал об этом.

Вариант с tblobjname - всегда надёжнее.
Alaspher вне форума  
 
Непрочитано 17.08.2008, 04:15
#60
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код слишком сложный выходит. Сейчас как раз пробую упростить.
Алексей, а сложный код можешь поместить? Мне вобщем-то без разницы на простоту. Только это если без проблем. Если с ними, то фиг с ним
skkkk вне форума  
 
Непрочитано 13.11.2008, 09:40
#61
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


А можно сделать размерный стиль без дополнительного определения для размерных стилей на угловые размеры, радиусы и т.п.?
Просто один размерный стиль!!!! Спасибо.

как я понимаю сделать это не возможно

Последний раз редактировалось Кулик Алексей aka kpblc, 17.11.2008 в 13:52.
Джек вне форума  
 
Автор темы   Непрочитано 17.11.2008, 13:52
#62
Кулик Алексей aka kpblc
Moderator

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


Все возможно. Но лично мне просто некогда писать код. Попробуй просто проанализировать код (он достаточно простой) и снять создание "подстилей"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.01.2009, 16:30
#63
acyxou


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


Приветствую всех заинтересованых!
А никто не сделал прогу для создания размерных стилей с диалоговым окном? Вобщем ищу такую прогу при активации которой, появляется диалоговое окно и в нем от конечного пользователя требуется всего навсего выбрать из списка размерных стилей необходимый ему, после чего стиль автоматом создается. Есстественно к каждому размерному стилю будут пояснения, для чего он используется и какие в кратце его параметры. Возможно ли это реализовать если еще не реализовано? Просто хочу сделать так чтоб в организации не было свободы творчества в этом направлении. Также есть вариант сделать тоже самое и для текстовых стилей, или вообще объединить все это в одну прогу.
Можно конечно эту идею реализовать и посредством ToolPalettes (но DesignCenter прошу не предлагать).......
Вобщем мне интересно ваше мнение относительно данной темы. Целесообразно ли это?
acyxou вне форума  
 
Автор темы   Непрочитано 13.01.2009, 16:40
#64
Кулик Алексей aka kpblc
Moderator

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


Может, и целесообразно - в каждой избушке свои погремушки. А сделать-то несложно: формируешь dcl-окно (например), в котором заполняешь выпадающий список, прописываешь подробности обработки и вперед
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.01.2009, 16:44
#65
acyxou


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


Спасибо, Алексей.
Я с dcl еще не подружился.... а не легче ли это будет сделать посредством VBA, или VBA+Lisp?
acyxou вне форума  
 
Автор темы   Непрочитано 13.01.2009, 16:49
#66
Кулик Алексей aka kpblc
Moderator

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


В VBA будет легче создать форму. Но не создать размерный стиль.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.01.2009, 16:56
#67
acyxou


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


Вот я о том же. Форму уже почти создал, точнее дизайн.... а не подскажите ссылкой где можно быстро почитать как реализовать это все?

Ответы на свои вопросы нашел в книге господина Полещука

Последний раз редактировалось acyxou, 13.01.2009 в 19:01.
acyxou вне форума  
 
Непрочитано 14.01.2009, 08:54
#68
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Если ты незнаком пока с DCL, вот здесь есть функция, которая поможет тебе создать
выпадающее меню ты только должен заменить в ней аргументы "my function_1" "my function_2" и т.д.
на имена вызывземых слоев, и соответственно в теле функции c:mymenu в функции cond
заменить функцию (alert "Start my function_1")(alert "Start my function_2") и т.д. Вызов функции команда
mymenu
Holon вне форума  
 
Непрочитано 14.01.2009, 09:49
#69
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


acyxou, у меня сделано так:
Есть текстовый файл, наподобие ini-файла, в котором содержатся данные по всем нужным мне размерным стилям (он может создаваться в том числе и программно). Есть программа, которая создаёт все размерные стили, согласно этого файла.

Далее принцип такой:
Например мне нужен какой-либо размерный стиль. Нажимаю кнопку - создаются все размерные стили, согласно этого ini-файла. Нужный стиль ставлю текущим. Далее _PURGE.

Если интересно, то могу выложить код, только предупреждаю заранее, что на высокий стиль программирования я не претендую.
Makswell вне форума  
 
Автор темы   Непрочитано 14.01.2009, 09:57
#70
Кулик Алексей aka kpblc
Moderator

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


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

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А зачем создавать все размерные стили, если можно создавать только выбранный?
Телодвижений меньше. И программирования. Без всяких предложений что выбрать, DCL и прочих различных диалогов.
Makswell вне форума  
 
Автор темы   Непрочитано 14.01.2009, 10:35
#72
Кулик Алексей aka kpblc
Moderator

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


Эээээ... Это как? Создавать несколько размерных стилей, потом установить нужный стиль текущим. Как выбрать нужный программно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.01.2009, 10:37
#73
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Я написал "нужный стиль ставлю текущим". Ставлю я, а не программа.
Makswell вне форума  
 
Непрочитано 14.01.2009, 10:43
#74
acyxou


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


Соглашусь с Алексеем! Makswell, я делаю это все не для себя, а для людей, которым лишние телодвижения (purge например) крайне нежелательны. Поддерживаю идею с отдельным .ini файлом, в котором будут размещаться параметры стилей. К тому же, я думаю переназначить команды (redefine) _STYLE и _DIMSTYLE чтоб при нажатии на эти кнопки выскакивало диалоговое окно моей программы со списками размерных и текстовых стилей. Вобщем пресечь свободу творчества в этом направлении. Знаю, жестоко, но зато будет порядок в организации и в конце концов, думаю что народ меня поддержит.... Кто что думает?
acyxou вне форума  
 
Автор темы   Непрочитано 14.01.2009, 10:47
#75
Кулик Алексей aka kpblc
Moderator

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


Makswell, перед установкой стиль должен быть создан, ведь верно? Создается он программно, потом _purge, при котором твой созданный (и нужный) стиль благополучно сносится Говорю на основе #69.
acyxou, а потом найдется один крендель, который вызовет _.style и твое переопределение накрывается медным тазом. Дырявым
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.01.2009, 10:58
#76
acyxou


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


Ну я только порадуюсь за этого кренделя что он может работать с командной строкой К каждому файлу будет применяться стандарт, в котором будут регламентироваться текстовые и размерные стили и если чертеж стандарту не соответствует, то оптравится на доработку. Зачем кренделю что-то самому создавать если он может ко мне подойти и предложить какую-то свою идею и я учту его замечания и дополню прогу. Идея вообще не в том, чтоб запретить людям пользоваться командами _Dimstyle и _Style, а чтоб унифицировать чертежи и упростить работу инженера. С учетом специфики работы в моей организации считаю данную идею вполне приемлимой.
acyxou вне форума  
 
Автор темы   Непрочитано 14.01.2009, 11:01
#77
Кулик Алексей aka kpblc
Moderator

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


А не проще тогда использовать dws с автоматическим обновлением из файла стандарта?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.01.2009, 11:08
#78
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
Makswell, перед установкой стиль должен быть создан, ведь верно? Создается он программно, потом _purge, при котором твой созданный (и нужный) стиль благополучно сносится Говорю на основе
Были аналогичные мысли. Undefine purge и переписал команды на закрытие - чистится все автоматом при закрытии с сохранением.
Sleekka вне форума  
 
Автор темы   Непрочитано 14.01.2009, 11:12
#79
Кулик Алексей aka kpblc
Moderator

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


А командный реактор не проще было сделать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.01.2009, 11:13
#80
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Makswell, перед установкой стиль должен быть создан, ведь верно? Создается он программно, потом _purge, при котором твой созданный (и нужный) стиль благополучно сносится Говорю на основе #69.
Алексей, наверно ты просто недопонял. PURGE тоже руками. Причем необязательно сразу, можно например перед закрытием файла.

Чтобы не разводить посты напишу поподробней.

Раньше было так. У меня был шаблон, в котором были все слои, стили и т.п. При PURGE всё это (в смысле, многое) пропадало. Способов вернуть какой-нибудь слой или стиль множество. Самое простое - это например по-быстрому создать новый файл, нарисовать том что-нибудь, присвоить этому слой-стиль , а потом скопировать в целевой файл. Или например вставлять блок с палитры инструментров, а потом удалять. А в блок запихнуть все слои и стили. Но всё это не так быстро, не так удобно и не красиво.

Я сделал примерно также, как в варианте с блоком, только программно. И создаётся не всё скопом, а отдельно кнопка на стили, кнопка на слои и т.п. Кстати, со слоям работа идёт по такому же принципу.

Ну и насчет "PURGE тоже руками" вообще-то у меня это типа superpurge - тоже одна кнопка, одно движение. Чистит помимо стандартного ещё много чего, типа пустых текстов, списка масштабов и прочей ерунды.
Makswell вне форума  
 
Автор темы   Непрочитано 14.01.2009, 11:16
#81
Кулик Алексей aka kpblc
Moderator

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


Offtop: Сейчас как раз с аналогичной задачей воюю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.01.2009, 11:24
#82
acyxou


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


Holon, спасибо за ссылку, но там все на каком-то языке, которым я не владею Я так понял что прога, которая там опубликована, открывает диалоговое окно и просит выбрать что-то. В моем случае пусть это будет список размерных стилей. Я выбираю нужный мне, и потом этот стиль создается... Я правильно понял?
acyxou вне форума  
 
Непрочитано 14.01.2009, 11:33
#83
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Да ты правильно понял, только для того, чтобы вызывался стиль, тебе надо
заменить (alert "Start my function_1") на функцию которая будет создавать этот стиль.
Holon вне форума  
 
Непрочитано 14.01.2009, 12:01
#84
acyxou


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


Holon, спасибо! Взял себе на вооружение
acyxou вне форума  
 
Непрочитано 03.04.2012, 10:20
#85
Никифорова

инженер
 
Регистрация: 11.11.2009
Иркутск
Сообщений: 15
<phrase 1=


acyxou, как у вас дела? Создали ли вы "прогу при активации которой, появляется диалоговое окно и в нем от конечного пользователя требуется всего навсего выбрать из списка размерных стилей необходимый ему, после чего стиль автоматом создается. Есстественно к каждому размерному стилю будут пояснения, для чего он используется и какие в кратце его параметры" ?
Никифорова вне форума  
 
Непрочитано 25.04.2012, 17:05
#86
T@K


 
Регистрация: 16.09.2010
Воронеж
Сообщений: 3


Подскажите как бы этот стиль еще аннотативным сделать :-)
T@K вне форума  
 
Автор темы   Непрочитано 25.04.2012, 17:42
#87
Кулик Алексей aka kpblc
Moderator

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


http://autolisp.ru/2011/03/17/howto-...tyle-or-block/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.05.2012, 11:53
#88
T@K


 
Регистрация: 16.09.2010
Воронеж
Сообщений: 3


Спасибо!
T@K вне форума  
 
Непрочитано 08.04.2013, 11:01
#89
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Предлагаю свой набор стилей.
Частенько работа начинается с "голых" dxf файлов... одним нажатием получаю все что может приготится, лишенее _-purge...
В коллекции есть стили для планов масштаба 1:500 1:1000 1:2000 (рисование в модели 1000 масштаба) и различные масштабные стили для листов.
Также отрисовывается блок _ArchTick когда его нет в чертеже
Код:
[Выделить все]
 ;;writed by SADist
(defun c:create ( / oldcmd)
(setq oldcmd (getvar "cmdecho")) (setvar "cmdecho" 0)

;create textstyle
(entmakex (list
(cons 0 "STYLE") 
(cons 100 "AcDbSymbolTableRecord") 
(cons 100 "AcDbTextStyleTableRecord") 
(cons 2 "GOST_dim");name style
(cons 70 0)
(cons 40 0.0);fixed text height or no fixed
(cons 41 1.0);width factor
(cons 50 0.261799);oblique angle
(cons 71 0)
;(cons 42 2.5);last height used
(cons 3 "GOST_ANT.TTF");font file name
(cons 4 "");bigfont file name
);end list
);end entmake
(if (not (tblobjname "block" "_ArchTick"))  ;создание блока стрелки если его нет в чертеже
(progn
;create block begin
(entmakex (list
	(cons 0 "BLOCK") 
	(cons 100 "AcDbEntity") 
	(cons 100 "AcDbBlockBegin") 
	(cons 2 "_ArchTick");name block
	(list 10 0.0 0.0 0.0);base coord 
	(cons 70 0)
	);end list
	);end entmake

	;create pline
	(entmakex (list
	(cons 0 "LWPOLYLINE") 
	(cons 100 "AcDbEntity") 
	(cons 100 "AcDbPolyline")
	(cons 6 "ByBlock");linetype
	(cons 8 "0");layer
	(cons 90 2)
	(cons 70 0) 
	(cons 43 0.15) 
	(list 10 -0.5 -0.5) 
	(cons 40 0.15) 
	(cons 41 0.15) 
	(cons 42 0.0)
	(cons 91 0) 
	(list 10 0.5 0.5) 
	(cons 40 0.15) 
	(cons 41 0.15) 
	(cons 42 0.0)
	(cons 91 0) 
	;(list 210 0.0 0.0 1.0)
	);end list
	);end entmake
	
	;endblk
	(entmakex (list
	(cons 0 "ENDBLK") 
	(cons 100 "AcDbEntity") 
	(cons 100 "AcDbBlockEnd")
	);end list
);end entmake
);end progn
);end if



;---------------------500--------------------
(entmakex (list
(cons 0 "DIMSTYLE")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbDimStyleTableRecord")
(cons 2 "500");имя стиля
(cons 70 0)
(cons 40 (getvar "dimscale"));массштаб размерного стиля?? уменьшается вместе с засечками и текстом!
(cons 41 1) ;размер стрелки
(cons 42 0.0) ;отступ от объекта
(cons 43 3.75);шаг в базовых размерах
(cons 44 0.5) ;удлинение выносных
(cons 45 0.0) ;dimrnd
(cons 46 0.5) ;удлинение выносных
(cons 140 1.25)	;высота текста
(cons 141 1.25)	
(cons 143 0.0393701)	
(cons 145 0)	
(cons 147 0.25)	
(cons 72 0)	
(cons 73 0)	
(cons 74 0)	
(cons 77 1)	
(cons 78 1)	
(cons 79 2)	
(cons 170 0)	
(cons 172 1)	
(cons 173 0)	
(cons 174 0)	
(cons 175 1)	
(cons 176 0)	
(cons 177 0)	
(cons 178 0)	
(cons 179 0)	
(cons 271 2)	
(cons 272 2)	
(cons 275 1)	
(cons 277 2)	
;(cons 278 44)	
(cons 279 0)	
(cons 280 0)	
(cons 281 0)	
(cons 282 0)	
(cons 283 0)	
(cons 284 8)	
(cons 288 0)	
(cons 340 (tblobjname "style" "GOST_dim"))	;стиль текста для размеров
(cons 371 -2)	
(cons 372 -2)
(cons 342 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));стрелка размера 
(cons 343 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));первая стрелка
(cons 344 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));вторая стрелка
);end list
);end entmake
;---------------------500--------------------
;---------------------1000--------------------
(entmakex (list
(cons 0 "DIMSTYLE")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbDimStyleTableRecord")
(cons 2 "1000");имя стиля
(cons 70 0)
(cons 40 (getvar "dimscale"));массштаб размерного стиля?? уменьшается вместе с засечками и текстом!
(cons 41 2.0) ;размер стрелки
(cons 42 0.0) ;отступ от объекта
(cons 43 3.75);шаг в базовых размерах
(cons 44 1.0) ;удлинение выносных
(cons 45 0.0) ;dimrnd
(cons 46 1.0) ;удлинение выносных
(cons 140 2.5)	;высота текста
(cons 141 2.5)	
(cons 143 0.0393701)	
(cons 145 0)	
(cons 147 0.5)	
(cons 72 0)	
(cons 73 0)	
(cons 74 0)	
(cons 77 1)	
(cons 78 1)	
(cons 79 2)	
(cons 170 0)	
(cons 172 1)	
(cons 173 0)	
(cons 174 0)	
(cons 175 1)	
(cons 176 0)	
(cons 177 0)	
(cons 178 0)	
(cons 179 0)	
(cons 271 2)	
(cons 272 2)	
(cons 275 1)	
(cons 277 2)	
;(cons 278 44)	
(cons 279 0)	
(cons 280 0)	
(cons 281 0)	
(cons 282 0)	
(cons 283 0)	
(cons 284 8)	
(cons 288 0)	
(cons 340 (tblobjname "style" "GOST_dim"))	;стиль текста для размеров
(cons 371 -2)	
(cons 372 -2)
(cons 342 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick") ) ) ));стрелка размера 
(cons 343 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick") ) ) ));первая стрелка
(cons 344 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick") ) ) ));вторая стрелка
);end list
);end entmake
;---------------------1000--------------------

;---------------------2000--------------------
(entmakex (list
(cons 0 "DIMSTYLE")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbDimStyleTableRecord")
(cons 2 "2000");имя стиля
(cons 70 0)
(cons 40 (getvar "dimscale"));массштаб размерного стиля?? уменьшается вместе с засечками и текстом!
(cons 41 4.0) ;размер стрелки
(cons 42 0.0) ;отступ от объекта
(cons 43 3.75);шаг в базовых размерах
(cons 44 2.0) ;удлинение выносных
(cons 45 0.0) ;dimrnd
(cons 46 2.0) ;удлинение выносных
(cons 140 5.0)	;высота текста
(cons 141 5.0)	
(cons 143 0.0393701)	
(cons 145 0)	
(cons 147 1.0)	
(cons 72 0)	
(cons 73 0)	
(cons 74 0)	
(cons 77 1)	
(cons 78 1)	
(cons 79 2)	
(cons 170 0)	
(cons 172 1)	
(cons 173 0)	
(cons 174 0)	
(cons 175 1)	
(cons 176 0)	
(cons 177 0)	
(cons 178 0)	
(cons 179 0)	
(cons 271 2)	
(cons 272 2)	
(cons 275 1)	
(cons 277 2)	
;(cons 278 44)	
(cons 279 0)	
(cons 280 0)	
(cons 281 0)	
(cons 282 0)	
(cons 283 0)	
(cons 284 8)	
(cons 288 0)	
(cons 340 (tblobjname "style" "GOST_dim"))	;стиль текста для размеров
(cons 371 -2)	
(cons 372 -2)
(cons 342 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick") ) ) ));стрелка размера 
(cons 343 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick") ) ) ));первая стрелка
(cons 344 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick") ) ) ));вторая стрелка
);end list
);end entmake
;---------------------2000--------------------

;---------------------R500--------------------
(entmakex (list
(cons 0 "DIMSTYLE")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbDimStyleTableRecord")
(cons 2 "R500");имя стиля
(cons 70 0)
(cons 40 (getvar "dimscale"));массштаб размерного стиля?? уменьшается вместе с засечками и текстом!
(cons 41 1.0) ;размер стрелки
(cons 42 0.0) ;отступ от объекта
(cons 43 3.75);шаг в базовых размерах
(cons 44 0.5) ;удлинение выносных
(cons 45 0) ;dimrnd величина округления
(cons 46 0.5) ;удлинение выносных
(cons 140 1.25)	;высота текста
(cons 141 1.25)	
(cons 143 0.0393701)	
(cons 145 0)	
(cons 147 0.5)	
(cons 72 0)	
(cons 73 0)	
(cons 74 0)	
(cons 77 1)	
(cons 78 8)	
(cons 79 2)	
(cons 170 0)	
(cons 172 1)	
(cons 173 0)	
(cons 174 0)	
(cons 175 1)	
(cons 176 0)	
(cons 177 0)	
(cons 178 0)	
(cons 179 0)	
(cons 271 2)	
(cons 272 2)	
(cons 275 1)	
(cons 277 2)	
;(cons 278 44)	
(cons 279 0)	
(cons 280 0)	
(cons 281 0)	
(cons 282 0)	
(cons 283 0)	
(cons 284 8)	
(cons 288 0)	
(cons 340 (tblobjname "style" "GOST_dim"))	;стиль текста для размеров
(cons 371 -2)	
(cons 372 -2)
;(cons 342 "");стрелка размера 
;(cons 343 "");первая стрелка
;(cons 344 "");вторая стрелка
);end list
);end entmake
;---------------------R500--------------------
;---------------------R1000--------------------
(entmakex (list
(cons 0 "DIMSTYLE")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbDimStyleTableRecord")
(cons 2 "R1000");имя стиля
(cons 70 0)
(cons 40 (getvar "dimscale"));массштаб размерного стиля?? уменьшается вместе с засечками и текстом!
(cons 41 2.0) ;размер стрелки
(cons 42 0.0) ;отступ от объекта
(cons 43 3.75);шаг в базовых размерах
(cons 44 1.0) ;удлинение выносных
(cons 45 0) ;dimrnd величина округления
(cons 46 1.0) ;удлинение выносных
(cons 140 2.5)	;высота текста
(cons 141 2.5)	;высота маркера текста
(cons 143 0.0393701)	
(cons 145 0)	
(cons 147 0.5)	
(cons 72 0)	
(cons 73 0)	
(cons 74 0)	
(cons 77 1)	
(cons 78 8)	
(cons 79 2)	
(cons 170 0)	
(cons 172 1)	
(cons 173 0)	
(cons 174 0)	
(cons 175 1)	
(cons 176 0)	
(cons 177 0)	
(cons 178 0)	
(cons 179 0)	
(cons 271 2)	
(cons 272 2)	
(cons 275 1)	
(cons 277 2)	
;(cons 278 44)	
(cons 279 0)	
(cons 280 0)	
(cons 281 0)	
(cons 282 0)	
(cons 283 0)	
(cons 284 8)	
(cons 288 0)	
(cons 340 (tblobjname "style" "GOST_dim"))	;стиль текста для размеров
(cons 371 -2)	
(cons 372 -2)
;(cons 342 "");стрелка размера 
;(cons 343 "");первая стрелка
;(cons 344 "");вторая стрелка
);end list
);end entmake
;---------------------R1000--------------------


;---------------------R2000--------------------
(entmakex (list
(cons 0 "DIMSTYLE")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbDimStyleTableRecord")
(cons 2 "R2000");имя стиля
(cons 70 0)
(cons 40 (getvar "dimscale"));массштаб размерного стиля?? уменьшается вместе с засечками и текстом!
(cons 41 4.0) ;размер стрелки
(cons 42 0.0) ;отступ от объекта
(cons 43 3.75);шаг в базовых размерах
(cons 44 2.0) ;удлинение выносных
(cons 45 0) ;dimrnd величина округления
(cons 46 2.0) ;удлинение выносных
(cons 140 5.0)	;высота текста
(cons 141 0.09)	;высота маркера текста
(cons 143 0.0393701)	
(cons 145 0)	
(cons 147 1.0)	
(cons 72 0)	
(cons 73 0)	
(cons 74 0)	
(cons 77 1)	
(cons 78 8)	;подавление нулей в размерах(4/8/12)
(cons 79 2)	;-//- в угловых размерах
(cons 170 0)	
(cons 172 1)	
(cons 173 0)	
(cons 174 0)	
(cons 175 1)	
(cons 176 0)	
(cons 177 0)	
(cons 178 0)	
(cons 179 0)	
(cons 271 2)	
(cons 272 2)	
(cons 275 1)	
(cons 277 2)	
;(cons 278 44)	
(cons 279 0)	
(cons 280 0)	
(cons 281 0)	
(cons 282 0)	
(cons 283 0)	
(cons 284 8)	
(cons 288 0)	
(cons 340 (tblobjname "style" "GOST_dim"))	;стиль текста для размеров
(cons 371 -2)	
(cons 372 -2)
;(cons 342 "");стрелка размера 
;(cons 343 "");первая стрелка
;(cons 344 "");вторая стрелка
);end list
);end entmake
;---------------------R2000--------------------


;----------------------1-100--------------------
(entmakex (list
(cons 0 "DIMSTYLE")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbDimStyleTableRecord")
(cons 2 "1-100");имя стиля
(cons 70 0)
(cons 40 (getvar "dimscale"));[общий масштабный коэффициент]?? уменьшается вместе с засечками и текстом!
(cons 41 2.0) ;размер стрелки
(cons 42 0.0) ;отступ начала выносных от объекта
(cons 43 0.38);отступ размерных линий
(cons 44 1.0) ;удлинение выносных
(cons 45 0) ;dimrnd величина округления
(cons 46 1.0) ;удлинение выносных
(cons 140 2.5)	;высота текста
(cons 141 0.09)	;высота маркера текста
(cons 143 0.0393701)	
(cons 144 0.1) 	;массштабный коэффициент для линейных единиц
(cons 145 0)	
(cons 147 0.5)	;зазор между размерной линией и текстом
(cons 72 0)	
(cons 73 0)	;текст горизонтально(откл)
(cons 74 0)	;текст горизонтально(откл)
(cons 77 1)	;текст над размерной линией
(cons 78 1)	;подавление нулей
(cons 79 2)	;подавление нулей в угловых размерах(3/4/8/12)
(cons 170 0)	
(cons 172 1)	
(cons 173 0)	;разные блоки стрелок
(cons 174 0)	
(cons 175 1)	;запрет размерной за пределами выносной
(cons 176 0)	;цвет размерной линии и выноски
(cons 177 0)	;цвет выносной линии
(cons 178 0)	;цвет размерного текста
(cons 179 0)	;десятичных знаков в угловых размерах
(cons 271 2)	;колво десятичных знаков
(cons 272 2)	;-//-в допусках
(cons 275 1)	;формат угловых единиц
(cons 277 2)	;формат линейных единиц
;(cons 278 44)	;десятичный разделитель ","
(cons 279 0)	
(cons 280 0)	;выравнивание текста на размерной линии
(cons 281 0)	
(cons 282 0)	
(cons 283 0)	
(cons 284 8)	
(cons 288 0)	;произвольное положение текста
(cons 340 (tblobjname "style" "GOST_dim"))	;стиль текста для размеров
(cons 371 -2)	;вес размерной
(cons 372 -2)	;вес выносной
(cons 342 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));стрелка размера 
(cons 343 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));первая стрелка
(cons 344 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));вторая стрелка
);end list
);end entmake
;---------------------1-100--------------------


;----------------------1-2000--------------------
(entmakex (list
(cons 0 "DIMSTYLE")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbDimStyleTableRecord")
(cons 2 "1-2000");имя стиля
(cons 70 0)
(cons 40 (getvar "dimscale"));[общий масштабный коэффициент]?? уменьшается вместе с засечками и текстом!
(cons 41 2.0) ;размер стрелки
(cons 42 0.0) ;отступ начала выносных от объекта
(cons 43 0.38);отступ размерных линий
(cons 44 1.0) ;удлинение выносных
(cons 45 0) ;dimrnd величина округления
(cons 46 1.0) ;удлинение выносных
(cons 140 2.5)	;высота текста
(cons 141 0.09)	;высота маркера текста
(cons 143 0.0393701)	
(cons 144 2.0) 	;массштабный коэффициент для линейных единиц
(cons 145 0)	
(cons 147 0.5)	;зазор между размерной линией и текстом
(cons 72 0)	
(cons 73 0)	;текст горизонтально(откл)
(cons 74 0)	;текст горизонтально(откл)
(cons 77 1)	;текст над размерной линией
(cons 78 1)	;подавление нулей
(cons 79 2)	;подавление нулей в угловых размерах(3/4/8/12)
(cons 170 0)	
(cons 172 1)	
(cons 173 0)	;разные блоки стрелок
(cons 174 0)	
(cons 175 1)	;запрет размерной за пределами выносной
(cons 176 0)	;цвет размерной линии и выноски
(cons 177 0)	;цвет выносной линии
(cons 178 0)	;цвет размерного текста
(cons 179 0)	;десятичных знаков в угловых размерах
(cons 271 2)	;колво десятичных знаков
(cons 272 2)	;-//-в допусках
(cons 275 1)	;формат угловых единиц
(cons 277 2)	;формат линейных единиц
;(cons 278 44)	;десятичный разделитель ","
(cons 279 0)	
(cons 280 0)	;выравнивание текста на размерной линии
(cons 281 0)	
(cons 282 0)	
(cons 283 0)	
(cons 284 8)	
(cons 288 0)	;произвольное положение текста
(cons 340 (tblobjname "style" "GOST_dim"))	;стиль текста для размеров
(cons 371 -2)	;вес размерной
(cons 372 -2)	;вес выносной
(cons 342 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));стрелка размера 
(cons 343 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));первая стрелка
(cons 344 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));вторая стрелка
);end list
);end entmake
;---------------------1-2000--------------------

;----------------------1-200--------------------
(entmakex (list
(cons 0 "DIMSTYLE")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbDimStyleTableRecord")
(cons 2 "1-200");имя стиля
(cons 70 0)
(cons 40 (getvar "dimscale"));[общий масштабный коэффициент]?? уменьшается вместе с засечками и текстом!
(cons 41 2.0) ;размер стрелки
(cons 42 0.0) ;отступ начала выносных от объекта
(cons 43 0.38);отступ размерных линий
(cons 44 1.0) ;удлинение выносных
(cons 45 0) ;dimrnd величина округления
(cons 46 1.0) ;удлинение выносных
(cons 140 2.5)	;высота текста
(cons 141 0.09)	;высота маркера текста
(cons 143 0.0393701)	
(cons 144 0.2) 	;массштабный коэффициент для линейных единиц
(cons 145 0)	
(cons 147 0.5)	;зазор между размерной линией и текстом
(cons 72 0)	
(cons 73 0)	;текст горизонтально(откл)
(cons 74 0)	;текст горизонтально(откл)
(cons 77 1)	;текст над размерной линией
(cons 78 1)	;подавление нулей
(cons 79 2)	;подавление нулей в угловых размерах(3/4/8/12)
(cons 170 0)	
(cons 172 1)	
(cons 173 0)	;разные блоки стрелок
(cons 174 0)	
(cons 175 1)	;запрет размерной за пределами выносной
(cons 176 0)	;цвет размерной линии и выноски
(cons 177 0)	;цвет выносной линии
(cons 178 0)	;цвет размерного текста
(cons 179 0)	;десятичных знаков в угловых размерах
(cons 271 2)	;колво десятичных знаков
(cons 272 2)	;-//-в допусках
(cons 275 1)	;формат угловых единиц
(cons 277 2)	;формат линейных единиц
;(cons 278 44)	;десятичный разделитель ","
(cons 279 0)	
(cons 280 0)	;выравнивание текста на размерной линии
(cons 281 0)	
(cons 282 0)	
(cons 283 0)	
(cons 284 8)	
(cons 288 0)	;произвольное положение текста
(cons 340 (tblobjname "style" "GOST_dim"))	;стиль текста для размеров
(cons 371 -2)	;вес размерной
(cons 372 -2)	;вес выносной
(cons 342 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));стрелка размера 
(cons 343 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));первая стрелка
(cons 344 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));вторая стрелка
);end list
);end entmake
;---------------------1-200--------------------


;----------------------1-20--------------------
(entmakex (list
(cons 0 "DIMSTYLE")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbDimStyleTableRecord")
(cons 2 "1-20");имя стиля
(cons 70 0)
(cons 40 (getvar "dimscale"));[общий масштабный коэффициент]?? уменьшается вместе с засечками и текстом!
(cons 41 2.0) ;размер стрелки
(cons 42 0.0) ;отступ начала выносных от объекта
(cons 43 0.38);отступ размерных линий
(cons 44 1.0) ;удлинение выносных
(cons 45 0) ;dimrnd величина округления
(cons 46 1.0) ;удлинение выносных
(cons 140 2.5)	;высота текста
(cons 141 0.09)	;высота маркера текста
(cons 143 0.0393701)	
(cons 144 0.02) 	;массштабный коэффициент для линейных единиц
(cons 145 0)	
(cons 147 0.5)	;зазор между размерной линией и текстом
(cons 72 0)	
(cons 73 0)	;текст горизонтально(откл)
(cons 74 0)	;текст горизонтально(откл)
(cons 77 1)	;текст над размерной линией
(cons 78 1)	;подавление нулей
(cons 79 2)	;подавление нулей в угловых размерах(3/4/8/12)
(cons 170 0)	
(cons 172 1)	
(cons 173 0)	;разные блоки стрелок
(cons 174 0)	
(cons 175 1)	;запрет размерной за пределами выносной
(cons 176 0)	;цвет размерной линии и выноски
(cons 177 0)	;цвет выносной линии
(cons 178 0)	;цвет размерного текста
(cons 179 0)	;десятичных знаков в угловых размерах
(cons 271 2)	;колво десятичных знаков
(cons 272 2)	;-//-в допусках
(cons 275 1)	;формат угловых единиц
(cons 277 2)	;формат линейных единиц
;(cons 278 44)	;десятичный разделитель ","
(cons 279 0)	
(cons 280 0)	;выравнивание текста на размерной линии
(cons 281 0)	
(cons 282 0)	
(cons 283 0)	
(cons 284 8)	
(cons 288 0)	;произвольное положение текста
(cons 340 (tblobjname "style" "GOST_dim"))	;стиль текста для размеров
(cons 371 -2)	;вес размерной
(cons 372 -2)	;вес выносной
(cons 342 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));стрелка размера 
(cons 343 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));первая стрелка
(cons 344 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));вторая стрелка
);end list
);end entmake
;---------------------1-20--------------------

;----------------------1-50--------------------
(entmakex (list
(cons 0 "DIMSTYLE")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbDimStyleTableRecord")
(cons 2 "1-50");имя стиля
(cons 70 0)
(cons 40 (getvar "dimscale"));[общий масштабный коэффициент]?? уменьшается вместе с засечками и текстом!
(cons 41 2.0) ;размер стрелки
(cons 42 0.0) ;отступ начала выносных от объекта
(cons 43 0.38);отступ размерных линий
(cons 44 1.0) ;удлинение выносных
(cons 45 0) ;dimrnd величина округления
(cons 46 1.0) ;удлинение выносных
(cons 140 2.5)	;высота текста
(cons 141 0.09)	;высота маркера текста
(cons 143 0.0393701)	
(cons 144 0.05) 	;массштабный коэффициент для линейных единиц
(cons 145 0)	
(cons 147 0.5)	;зазор между размерной линией и текстом
(cons 72 0)	
(cons 73 0)	;текст горизонтально(откл)
(cons 74 0)	;текст горизонтально(откл)
(cons 77 1)	;текст над размерной линией
(cons 78 1)	;подавление нулей
(cons 79 2)	;подавление нулей в угловых размерах(3/4/8/12)
(cons 170 0)	
(cons 172 1)	
(cons 173 0)	;разные блоки стрелок
(cons 174 0)	
(cons 175 1)	;запрет размерной за пределами выносной
(cons 176 0)	;цвет размерной линии и выноски
(cons 177 0)	;цвет выносной линии
(cons 178 0)	;цвет размерного текста
(cons 179 0)	;десятичных знаков в угловых размерах
(cons 271 2)	;колво десятичных знаков
(cons 272 2)	;-//-в допусках
(cons 275 1)	;формат угловых единиц
(cons 277 2)	;формат линейных единиц
;(cons 278 44)	;десятичный разделитель ","
(cons 279 0)	
(cons 280 0)	;выравнивание текста на размерной линии
(cons 281 0)	
(cons 282 0)	
(cons 283 0)	
(cons 284 8)	
(cons 288 0)	;произвольное положение текста
(cons 340 (tblobjname "style" "GOST_dim"))	;стиль текста для размеров
(cons 371 -2)	;вес размерной
(cons 372 -2)	;вес выносной
(cons 342 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));стрелка размера 
(cons 343 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));первая стрелка
(cons 344 (cdr  (assoc 330 (entget (tblobjname "block" "_ArchTick")))));вторая стрелка
);end list
);end entmake
;---------------------1-50--------------------
(setvar "cmdecho" oldcmd)
(princ)
);end defun
Может и громоздко, но просто и понятно. Можно быстро изменить под свои нужды...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 08.04.2013, 12:59
#90
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
Может и громоздко, но просто и понятно. Можно быстро изменить под свои нужды...
Некий аналог на .NET здесь, с той лишь разницей, что подробный комментарий дан по каждой опции соответствующего диалогового окна...

А это есть зло:
Цитата:
стили для планов масштаба 1:500 1:1000 1:2000 (рисование в модели 1000 масштаба) и различные масштабные стили для листов.
Правильней пользоваться аннотативностью, а не плодить стили под каждый масштаб.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 08.04.2013 в 13:06.
hwd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программное создание размерных стилей

Размещение рекламы