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

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

3вопроса

Ответ
Поиск в этой теме
Непрочитано 04.02.2005, 00:47 #1
3вопроса
DDlis
 
Регистрация: 03.02.2005
Сообщений: 583

Я совсем недавно начал работь в AutoCADе и у меня возникло несколько вопросов.
1. Как сделать так, чтобы рисовалось обозначение разреза 1-1 в масштабе и подчеркивалось толстой линией.
2. Как после написания однострочного текста сделать так, чтобы расстояние между сточками было одинаковым
3. В AutoCADе можно писать макросы, а нельзя ли сделать так, чтобы макрос сам писался по ходу выполнения команд нет ли кокого-нибудь такого приложения для AutoCAD.
Просмотров: 5424
 
Непрочитано 04.02.2005, 06:39 Re: 3вопроса
#2
Fogel

люблю мастерить
 
Регистрация: 21.01.2005
Челябинск
Сообщений: 10,381


Цитата:
Сообщение от DDlis
Я совсем недавно начал работь в AutoCADе и у меня возникло несколько вопросов.
1. Как сделать так, чтобы рисовалось обозначение разреза 1-1 в масштабе и подчеркивалось толстой линией.
2. Как после написания однострочного текста сделать так, чтобы расстояние между сточками было одинаковым
3. В AutoCADе можно писать макросы, а нельзя ли сделать так, чтобы макрос сам писался по ходу выполнения команд нет ли кокого-нибудь такого приложения для AutoCAD.
... а так же где находится кнопка - 3D моделирование, чтоб раз и готово... (это меня мои подопечные спрашивают) Все возможно, ручками, ручками Просто все это можно написать. Тут все от технологии проектирования зависит, например, зачем отрисовывать надписи в масштабе - не проще ли отрисовать их в пространстве листа, поверх видовых экранов? Впрочем ИМХО
Fogel вне форума  
 
Непрочитано 04.02.2005, 08:21
#3
Кулик Алексей aka kpblc
Moderator

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


Машина думать за конструктора / чертежника / секретаря и т.д. не будет. Отвечаю по порядку поступления:
1. Используем любые оформительские системы (от СПДС GraphiCS, autoСПДС, MechaniCS etc до бесплатных, которые просто найти в глубинах нета надо).
2. имхо в таком варианте надо пользоваться многострочным текстом. И вообще тексты оформлять в ворде
3. Купить книгу, читать и пробовать. Отличная книга по макросам: В.Свет, "Язык макросов и создание кнопок".
>>Fogel: сейчас начнется спор об оформлении в листе / модели
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.02.2005, 08:53
#4
X-DeViL

Бизнес-шмизнес
 
Регистрация: 26.05.2004
Питер
Сообщений: 1,911


kpblc
Цитата:
И вообще тексты оформлять в ворде
Наследие хорзи живет ))) :wink:
X-DeViL вне форума  
 
Непрочитано 04.02.2005, 09:05
#5
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от X-DeViL
Наследие хорзи живет ))) :wink:
Издеваешься. Точно. Ты не видел, что тут мои архитекторы в каде ваяют в качестве поясниловок - волосы шевелятся даже там, где их нет!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.02.2005, 09:10 Re: 3вопроса
#6
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


2 DDlis

1 - %%uТекст - получится подчеркнутое слово "Текст". Но, если мне не изменяет память, ГОСТ на подчеркивание уже лет 10-15 как не действует и заголовки изображений пишутся без подчеркивания.

2 - для однострочного текста используй команду _DTEXT. После набора текстровой строки нажми Enter один раз, курсор перейдет на строку ниже, набери следующую строку и т.д. Для завершения ввода всех строк нажми Enter два раза. Все строки будут однострочными с равным расстоянием между строк.

3 - не встречал. Но и не искал.
Pilot вне форума  
 
Непрочитано 04.02.2005, 09:18 Re: 3вопроса
#7
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,148


Цитата:
Сообщение от DDlis
2. Как после написания однострочного текста сделать так, чтобы расстояние между сточками было одинаковым
Блин вроде где то видел и вроде делал даже, думал в Экспрессах есть но видно не там. Т.е. выделяешь текст, а программка его выравнивает по какому либо краю и по вертикали.... Неужели глюк?
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 04.02.2005, 09:24
#8
Кулик Алексей aka kpblc
Moderator

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


В ЕТ есть такая команда, как текст в многострочный. А потом уже выравнивать как хочешь
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.02.2005, 09:41
#9
BelPolk

программист
 
Регистрация: 27.08.2003
Minsk, Belarus
Сообщений: 2
<phrase 1=


Цитата:
3. В AutoCADе можно писать макросы, а нельзя ли сделать так, чтобы макрос сам писался по ходу выполнения команд нет ли кокого-нибудь такого приложения для AutoCAD.
Встречался с VBA Recorder http://www.cadbow.com/products.php, но толком с ним не разбирался. А писАть все же правильнее ручками, ИМХО, конечно. :roll:
BelPolk вне форума  
 
Непрочитано 04.02.2005, 09:48
#10
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Цитата:
Сообщение от BelPolk
...А писАть все же правильнее ручками, ИМХО, конечно.
Это не ИМХО. Это Аксиома.
Pilot вне форума  
 
Непрочитано 04.02.2005, 10:04
#11
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,148


По второму вопросу вот программу у себя нашел, не знаю откуда скачал, но действует
Код:
[Выделить все]
(princ "\nRe-space (RS)  Version 2.0  4-13-91  by Jon Shapiro")
 ;
 ;This program will take a series of text strings, selected individually
 ;and in sequence, and revise the spacing between each line.  This
 ;should be especially useful after running a lisp routine to revise the
 ;height of a group of text entities.  Each entity would need to have it's
 ;insert point shifted in accordance with the new text height.
 ;
 ;Version 2.0 has been improved to handle other types of text justification
 ;modes in addition to left justified (i.e. right, middle).
 
 ;----------------------------------
 ;Error handler
 (defun MYERR (MSG)
    (if (and (/= MSG "Function cancelled") (/= MSG "console break"))
       (progn
          (princ "\nError: ")
          (princ MSG)
       )
    )
    (setq *error* OLDER)
    (setvar "cmdecho" 1)
    (princ)
 )
 ;---------------------------
 ;
 (defun c:rs (/ older tmpdis ss sslen ctr ent txtrot just code inspt
                xpt ypt entlis tdisp x y pt theta)
    (setvar "cmdecho" 0)
    (command ".undo" "m")
    (setq older *error*
          *error* myerr
    )
    (initget (+ 1 2 4)) ;disallow negative and zero responses
    (if (= dis nil)
       (progn
          (initget (+ 1 2 4)) ;disallow nul negative and zero responses
          (setq dis (getdist "\nDistance between text strings: "))
       )
       (progn
          (initget (+ 2 4)) ;disallow negative and zero responses
          (setq tmpdis dis
                dis (getdist (strcat "\nDistance between text strings <"
                          (rtos dis) ">: " )
                    )
          );close setq
          (if (= dis nil)
             (setq dis tmpdis)
          )
       );close progn
    );close if
    (princ "\nSelect text strings to respace in sequence: ")
    (setq ss (ssget)
          sslen (sslength ss)
          ctr 0  ;initialize counter
    );close setq
    (while (and (/= ss nil) (>= sslen 0) (< ctr sslen))
       (setq ent (ssname ss ctr))
       (if (= ctr 0)
          (progn
             (setq txtrot (cdr (assoc 50 (entget ent)))
                   just (cdr (assoc 72 (entget ent)))
             )
             (if (> just 0)
                (setq code 11)    ;non-left justified
                (setq code 10)    ;left justified
             )
             (setq inspt (cdr (assoc code (entget ent)))
                   xpt (car inspt)
                   ypt (cadr inspt)
             );close setq
          );close progn
          (progn
 ;------------------------------------------------------------------------
 ;lets take different action depending on rotation angle of text entities
 ;------------------------------------------------------------------------
 
 ;---------------------------------------------------
 ;Lets also check text justification mode.
 ;We should use group code 10 for left justified
 ;text.  All others we should use group code 11
 ;this will maintain justification
 ;---------------------------------------------------
 
             (cond
                (   (< txtrot (* 0.5 pi))       ;if rotation angle <90 deg
                    (setq entlis (entget ent)
                          just (cdr (assoc 72 entlis))
                    )
                    (if (> just 0)
                       (setq code 11)
                       (setq code 10)
                    )
                    (setq tdisp (* ctr dis)
                          x (+ xpt (* tdisp (sin txtrot)))
                          y (- ypt (* tdisp (cos txtrot)))
                          pt (list x y)
                          entlis (subst (cons code pt) (assoc code entlis) entlis)
                    );close setq
                    (entmod entlis)
                );close 1st cond
 
                (   (and (< txtrot pi) (>= txtrot (* 0.5 pi))) ;if rotation angle <180 & >= 90 deg
                    (setq entlis (entget ent)
                          theta (- txtrot (* 0.5 pi))
                          tdisp (* ctr dis)
                          x (+ xpt (* tdisp (cos theta)))
                          y (+ ypt (* tdisp (sin theta)))
                          pt (list x y)
                          entlis (subst (cons code pt) (assoc code entlis) entlis)
                    );close setq
                    (entmod entlis)
                );close 2nd cond
 
                (   (and (< txtrot (* 1.5 pi)) (>= txtrot pi)) ;if rot angle <270 & >= 180 deg
                    (setq entlis (entget ent)
                          theta (- txtrot pi)
                          tdisp (* ctr dis)
                          x (- xpt (* tdisp (sin theta)))
                          y (+ ypt (* tdisp (cos theta)))
                          pt (list x y)
                          entlis (subst (cons code pt) (assoc code entlis) entlis)
                    );close setq
                    (entmod entlis)
                );close 3rd cond
 
                (   (and (< txtrot (* 2.0 pi)) (>= txtrot (* 1.5 pi))) ;if rot angle <360 & >= 270 deg
                    (setq entlis (entget ent)
                          theta (- txtrot (* 1.5 pi))
                          tdisp (* ctr dis)
                          x (- xpt (* tdisp (cos theta)))
                          y (- ypt (* tdisp (sin theta)))
                          pt (list x y)
                          entlis (subst (cons code pt) (assoc code entlis) entlis)
                    );close setq
                    (entmod entlis)
                );close 4th cond
             );close cond text rotation angles
 ;-------------------------------------------------------------------------
          );close progn
       );close if
       (setq ctr (1+ ctr))  ;increment counter
    );close while
    (setvar "cmdecho" 1)
    (setq *error* older)
    (princ);quiet exit
 );close defun respace
 (princ);quiet load
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 04.02.2005, 10:12 Re: 3вопроса
#12
виталич

конструктор
 
Регистрация: 04.09.2003
Новосибирск
Сообщений: 476


Цитата:
Сообщение от DDlis
Я совсем недавно начал работь в AutoCADе и у меня возникло несколько вопросов.
1. Как сделать так, чтобы рисовалось обозначение разреза 1-1 в масштабе и подчеркивалось толстой линией.
По ГОСТ 2305-68 в редакции, по моему, 89 года обозначение разреза (сечения) выглядит так:

А-А(М*:*). Подчеркивать толстой линией уже не нужно. Цифры тоже не используются, только русские прописные буквы.
__________________
Не бывает так, чтобы не было никак. Как-нибудь да будет.
виталич вне форума  
 
Непрочитано 04.02.2005, 10:43
#13
TeDii

Инженер-конструктор-механик
 
Регистрация: 02.12.2004
УкРаИнА
Сообщений: 94


Да и буковка "М" - столько же уже непишется.


А-А (1:2)
__________________
С уважением, TeDii
TeDii вне форума  
 
Непрочитано 04.02.2005, 10:50
#14
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Вот еще програмка для выравнивания однострочного текста. Выравнивает все по верхней строке, поддерживает все типы выравнивания.
Код:
[Выделить все]
(princ "Type DALI to Run")

(defun c:dali (/ tHeight insPoint dtSet oldDisMode errFlag
		 sStr tAlignPt tAlignment disDelta dtList
	       oldStrDis)
  (vl-load-com)

  (defun texAlign (item /)
          (setq disDelta(- disDelta dali:strDis)); end setq
      (vla-put-Alignment (car str) tAlignment)
      (cond
	((= tAlignment 0)
	   (vla-put-InsertionPoint (car str)
	     (vlax-3D-Point(car insPoint)
	       (+ disDelta(cadr insPoint))(nth 2 insPoint)))
	 )
	((member tAlignment '(1 2 4 6 7 8 9 10 11 12 13 14))
	   (vla-put-TextAlignmentPoint (car str)
	     (vlax-3D-Point(car tAlignPt)
	       (+ disDelta(cadr tAlignPt))(nth 2 tAlignPt)))
	 )
	((member tAlignment '(3 5))
	 (princ "\nCan't align string with Aligned or Fit alignment ")
	 )
	); end cond
    ); end of texAlign
  
  (if(not dali:disMode)(setq dali:disMode "S"))
  (setq oldDisMode dali:disMode)
  (if(not dali:strDis)(setq dali:strDis 4.167))
  (setq oldStrDis dali:strDis)
  (initget "S C")
  (setq dali:disMode
    (getkword
      (strcat "\nSpecify distance between strings [Standard/Custom] <" dali:disMode ">: ")))
  (if(null dali:disMode)(setq dali:disMode oldDisMode))
  (if(= dali:disMode "C")
    (progn
    (setq dali:strDis(getdist(strcat "\nSpecify Custom distance <"(rtos dali:strDis) ">: ")))
    (if(null dali:strDis)(setq dali:strDis oldStrDis))
    (princ(strcat "\nCustom distance is "(rtos dali:strDis)))
	  ); end progn
    ); end if
  (princ "\n*** Select DText and press Enter *** ")
   (if
     (setq dtSet(ssget '((0 . "TEXT"))))
    (progn
      (setq dtList(vl-sort(mapcar
		     '(lambda (x)(list x
			(+(cadr(vlax-safearray->list
				 (vlax-variant-value
				   (vla-get-InsertionPoint x))))
			        (cadr(vlax-safearray->list
				 (vlax-variant-value
				   (vla-get-TextAlignmentPoint x)))))))
		 (mapcar 'vlax-ename->vla-object 
                  (vl-remove-if 'listp 
                     (mapcar 'cadr(ssnamex dtSet)))))
		     (function(lambda(a b)(>(cadr a)(cadr b)))))
           tHeight(vla-get-Height (caar dtList))
	   insPoint(vlax-safearray->list
		    (vlax-variant-value
		      (vla-get-InsertionPoint (caar dtList))))
	   tAlignPt(vlax-safearray->list
		    (vlax-variant-value
		      (vla-get-TextAlignmentPoint (caar dtList))))
	   tAlignment(vla-get-Alignment (caar dtList))
	    dtList(cdr dtList)
	    disDelta 0.0
	  ); end setq
    (if(= dali:disMode "S")(setq dali:strDis(* 1.6668 tHeight)))
      (foreach str dtList
     (if
	(not
	    (vl-catch-all-error-p
	         (vl-catch-all-apply 'texAlign (list str))))
       (princ)
       (setq errFlag T)
       ); end if
	); end foreach
      (if errFlag(princ "\n*** Some objects on Locked Layer ***"))
  ); end progn
    (princ "\nString isn't selected. ")
    ); end if
    (princ)
    ); end of dalign
{Smirnoff} вне форума  
 
Непрочитано 04.02.2005, 11:49
#15
Fogel

люблю мастерить
 
Регистрация: 21.01.2005
Челябинск
Сообщений: 10,381


Цитата:
Сообщение от kpblc
Цитата:
Сообщение от X-DeViL
Наследие хорзи живет ))) :wink:
Издеваешься. Точно. Ты не видел, что тут мои архитекторы в каде ваяют в качестве поясниловок - волосы шевелятся даже там, где их нет!
Хи. Но когда я увидел открытку - ангелочек с луком и стрелами сделаную в автокаде... я понял что возможности векторной графики и человеческой тупости безграничны. Для начала они нашли картинку (а она была отпечатана с их же компа, из стандартного набора ворда) сосканировали, вставили в автокад и не зная как избавиться от рамки - ОБВЕЛИ весь контур. Тест поздравления, набранный однострочником довершал "шедевр". На вопрос "а нельзя ли это было сделать в ворде?" получил вразумительный ответ: "А что это такое?" Я им до сих пор не сумел растолковать что текстовую часть проекта НУЖНО делать в ворде - они так и пишут пояснительные записки в автокаде...
P.S. Народ, спасибо за код, а то я уж хотел на диск шариться лезть. Была гдето штучка - загоняла все напечатанное в блокнот, а поправленное размещала назад (ессно ровненько по заданной рамке)
Fogel вне форума  
 
Непрочитано 04.02.2005, 11:56
#16
Лентяй

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


Программа выравнивания однострочного текста по превой строке было а ToolPak-5, бесплатный инсталлятор которй наш модератор куда-то заныкал. А ну, Perezz!!, колитесь, куды деньги дел! Народ, можно сказать, исстрадался без ToolPak'а, а вам хаханьки?
Лентяй вне форума  
 
Непрочитано 04.02.2005, 13:40
#17
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013


Fogel:

Цитата:
Была гдето штучка - загоняла все напечатанное в блокнот, а поправленное размещала назад (ессно ровненько по заданной рамке)
Вот эта штучка:

Код:
[Выделить все]
;; Программа редактирования однострочного текста в редакторе NOTEPAD
;; Важная информация-редактором можно редактировать выбранный однострочный текст
;;или если ничего не выбрано , то создавать новый.
;;Высота шрифта , степень сжатия определяется по самой верхней строке.
;; Если строк больше одной , по 1 и 2 строке берется расстояние между
;; строками .Глюков вроде пока не обнаружил.
;;Смолянка Эдуард Валериевич smoled@yandex.ru 
;; г.С-Петербург 2003г.
(defun C:texteditor(/ nabort str-list znach namet)
(vl-load-com)  
 (if  
  (setq nabort (ssget
		 '(
		   (0 . "text")
		   )
		 )
	)
   (progn
   (setq namet
	  (vl-remove-if 'listp
	  (mapcar
	       'cadr
	  (ssnamex nabort)
	 
	 );mapcar
	 );vl-remove-if
	  );setq
);progn
  (progn
    (command "text" pause pause pause ".")
  
    (setq namet(list(entlast)))
         (entmod (subst
			 '(1 . " ")
			 (assoc 1(entget (car namet)))
			 (entget (car namet))
			 ))
    
    )
  );if
(setq data-namet(mapcar '(lambda (x)
			   (list
			     (cadr
			       (assoc 10 x)
			       )
			     (caddr
			       (assoc 10 x)
			       )
			     (cdr
			       (assoc 1 x)
			       )
			     )
			   )
			(mapcar 'entget namet)
			);mapcar
      );setq '(нач.точка значение)
  (setq sortt (vl-sort data-namet '(lambda (y1 y2)
				     (>
				       (cadr y1)
				       (cadr y2)
				       )
				     )
		       )
	);сортировка по убыванию y
  ;;;**************************************************************
  (if (=
	(length sortt)
	1)
    (progn
      (setq deltay
	     (* 1.5
		(cdr
		  (assoc 40
			 (entget
			   (car namet)
			   )
			 )
		  )
		)
	    )
      )
  (progn
    (setq deltay
	   (abs
	     (-
	       (cadar sortt)
	       (cadadr sortt)
	       )
	     )
	  )
    );расстояние между строками
    );if
   (setq yt(cadar sortt);максимальная для y
	minx (apply 'min
		    (mapcar '(lambda (y)
			       (car y)
			       )
			    sortt)
		    );минимальная х
	znach (mapcar 'caddr sortt);значения текста
	);setq
  
   (setq obrazets (vl-remove-if 
		   '(lambda (x)
		      (or
		      (equal
			(car x)
			-1 )
		      (equal
			(car x)
			330 )
		      (equal
			(car x)
			5 )
		      (equal
			(car x)
			10)
		      (equal
			(car x)
			1)
		      )
		      )
		   (entget
		     (car namet)
		     )
		   )
	);setq шаблон для entmake 
;;;*****************************************************       
 (setq fname(vl-filename-mktemp "x"
	       (vl-filename-directory
		 (findfile "acad.mns"))
	       ".txt")
	);fname имя файла
;;;***********************************************************
  (setq desct(open fname "w"))
(mapcar '(lambda (p)
	   (write-line p desct)
	   )
	znach)
(close desct);запись в файл
 ;;;*********************************************
  (vlax-invoke-method(vlax-get-or-create-object "wscript.shell")"run"
     (strcat "notepad.exe\ " fname) 1 :vlax-true)
   ;открываем файл
 ;;;*********************************************    
  (setq desk2(open fname "r"))
  (while
    (setq str
	   (read-line desk2)
	  )
    (setq str-list (cons str str-list)
	  )
    );while
  (close desk2);чтение файла
  (mapcar 'entdel namet);удаление старого текста  
  (vl-file-delete fname) ;удаление файла
  (setq str-list
	 (reverse str-list)
	);cписок строк
    ;****************************************************************
 
  (setq n 0)
  (foreach i str-list
    (if (not
	  (or
	    (= (strlen i)
	      0)
            (not(read i))
	    )
	    )
      (progn
    (setq list-x    
      (cons
	(list 10 minx
	      (- yt
		 (* deltay n)
		 )
	      )
	(reverse obrazets)
	)
	  )
    (setq new-list
	   (cons
	     (cons 1 i)
	     list-x)
	  )
    (entmake
      (reverse new-list)
      )
    );progn
      );if
    (setq n (1+ n)
	  )
    );foreach  
  (princ)
  );defun
Nike вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > 3вопроса