Lisp. Мультивыноска по ГОСТу
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Мультивыноска по ГОСТу

Lisp. Мультивыноска по ГОСТу

Ответ
Поиск в этой теме
Непрочитано 14.01.2013, 22:02 #1
Lisp. Мультивыноска по ГОСТу
sdv79
 
Инженер ЭОМ
 
Москва
Регистрация: 05.03.2009
Сообщений: 215

Lisp. Добрые люди помогите. Как программно создать мультивыноску (от безысходности соглашусь на мультитекст) по ГОСТу вида
0000000 4х18
8-AOT 0--------
0000000 2,5
Просмотров: 9067
 
Непрочитано 14.01.2013, 22:09
#2
Кулик Алексей aka kpblc
Moderator

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


Сначала сюда
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.01.2013, 22:19
#3
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Кулик Алексей aka kpblc спасибо, обязательно вникну. Если есть у кого готовые наработки, буду благодарен.
sdv79 вне форума  
 
Непрочитано 14.01.2013, 22:22
#4
Кулик Алексей aka kpblc
Moderator

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


Лично я сначала бы руками создал такой MTEXT либо блок с атрибутами, посмотрел на его поведение, а потом уже думал, как его присобачить к выноске или мультивыноске.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.01.2013, 22:29
#5
bargool


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


Цитата:
Сообщение от sdv79 Посмотреть сообщение
соглашусь на мультитекст
А почему бы не блок? 3 атрибута, немного динамичности. И можно будет использовать в подсчёте для спецификации
__________________
Алексей
bargool вне форума  
 
Автор темы   Непрочитано 14.01.2013, 23:06
#6
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


bargool решение хорошее, но блоки уже есть, сами светильники, для спецификации они считаются через БД (Access). А вот возможности создавать мультивыноску по ГОСТу, после расчета освещенности, для пользоватетелей будет клево. Закрыв глаза и сделать убого, можно, из простых трех фрагментов текста. Хочется эстетики. Часто бывает что надпись закрывает светильники. Куда удобнее и быстрее в другое помещение вынести выноску со светильниками чем блок или фрагменты текста (брр).

Последний раз редактировалось sdv79, 14.01.2013 в 23:16.
sdv79 вне форума  
 
Непрочитано 14.01.2013, 23:20
#7
bargool


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


sdv79, вот здесь я приложил блок "GroupLeader" (во вложениях), он у меня служит в качестве выноски обозначения групп кабелей. Заполняется программно, вставляется тоже (взаимодействие с пользователем). Как вариант, можно сделать нечто подобное. Работу с динамикой в лиспе я видел в теме от Supermax, как минимум
__________________
Алексей
bargool вне форума  
 
Автор темы   Непрочитано 14.01.2013, 23:33
#8
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


C# .net пока нет. Админы сороний софт на работе не ставят, даже Access и того нет приходится через Libre работать, OpenDCL начал изучать и тот удалили, СУ... ,на win 7 х64 не хотят бесплатный модуль Microsoft Access Database Engine 2010 Redistributable_x64.exe для работы с БД поставить.
Работа с групповыми линиями для электриков - моя тема, удивил в Win ELSO очень давно, понравилась, сам хочу сделать такой модуль, не сейчас.
Создание дополнительных параметров Visibility Set в динамических блоках изучал, когда работал с OpenDCL (редактировал автомат-менял видимость).
Ребята, мне нужна мультивыноска с надписью по ГОСТу (как в заголовке), худший вариант мультитекст, помогите на LISP, блоки и тексты-это компромисс от безысходности.
sdv79 вне форума  
 
Непрочитано 15.01.2013, 02:09
#9
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Скинь скриншот или чертеж с выноской (А 2010)
или с образцом мультитекста в слоях и высотой по ГОСТУ
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 15.01.2013, 10:46
#10
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Чертеж с выноской
Вложения
Тип файла: dwg
DWG 2004
Чертеж7.dwg (159.3 Кб, 3090 просмотров)
sdv79 вне форума  
 
Непрочитано 15.01.2013, 11:38
#11
pan

добрый человек
 
Регистрация: 23.02.2004
Глушь
Сообщений: 971


А если поставить в настройках стиля мультивыноски Присоединение слева/справа - Подчеркивание последней строки, это не решит вашу пробему?
Вложения
Тип файла: dwg
DWG 2004
Чертеж8.dwg (134.1 Кб, 3030 просмотров)
__________________
Правильно сформулированный вопрос содержит 90% ответа.
pan вне форума  
 
Автор темы   Непрочитано 15.01.2013, 12:17
#12
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


pan твой вариант тоже подходит, только мне необходимо программно на Lisp формировать мультивыноску, а не руками. Нужен код
sdv79 вне форума  
 
Непрочитано 15.01.2013, 14:33
#13
hwd

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


Если это поможет - могу выложить .NET код, решающий данную задачу. Возможно кто-нибудь по аналогии воссоздаст LISP вариант обозначенной логики.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 15.01.2013, 14:37
#14
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


hwd милости просим, с упованием на модератора и ГУРУ( откликнетесь).
sdv79 вне форума  
 
Непрочитано 15.01.2013, 14:44
#15
hwd

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


Исходный код на .NET:
Код:
[Выделить все]
using System;
using cad = Autodesk.AutoCAD.ApplicationServices.Application;
using AppSrv = Autodesk.AutoCAD.ApplicationServices;
using DbSrv = Autodesk.AutoCAD.DatabaseServices;
using Geom = Autodesk.AutoCAD.Geometry;
using Rtm = Autodesk.AutoCAD.Runtime;

[assembly: Rtm.CommandClass(typeof(AndreyBushman.CAD.Sample))]

namespace AndreyBushman.CAD {

    public sealed class Sample {

        [Rtm.CommandMethod("netTextMLeader")]
        public static void netTextMLeader() {
            AppSrv.Document doc = cad.DocumentManager.MdiActiveDocument;
            DbSrv.Database db = doc.Database;

            using (DbSrv.Transaction tr = db.TransactionManager.StartTransaction()) {
                DbSrv.BlockTableRecord csp = tr.GetObject(
                    db.CurrentSpaceId, DbSrv.OpenMode.ForWrite) as DbSrv.BlockTableRecord;

                DbSrv.MLeader mLeader = new DbSrv.MLeader();
                mLeader.SetDatabaseDefaults();

                mLeader.ContentType = DbSrv.ContentType.MTextContent;

                mLeader.SetTextAttachmentType(
                    DbSrv.TextAttachmentType.AttachmentBottomLine,
                    DbSrv.LeaderDirectionType.LeftLeader);

                DbSrv.MText mText = new DbSrv.MText();
                mText.SetDatabaseDefaults();
                mText.Width = 1.5;
                mText.Height = 2;
                mText.Contents = "\\pxse 1;8-AOT\\A1;{\\H0.7x;\\S4x18/2,5;}";
                mText.Location = new Geom.Point3d(200.0, 200.0, 0);
                mText.TextStyle = db.Textstyle;
                mLeader.MText = mText;

                Int32 idx = mLeader.AddLeaderLine(new Geom.Point3d(190.0, 190.0, 0));

                Geom.Matrix3d transfo = Geom.Matrix3d.Displacement(new Geom.Vector3d(0, 0, 10));
                mLeader.TransformBy(transfo);

                csp.AppendEntity(mLeader);
                tr.AddNewlyCreatedDBObject(mLeader, true);

                tr.Commit();
            }
        }
    }
}
Результат:

Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 1471
Размер:	2.1 Кб
ID:	94300  
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 15.01.2013, 15:55
#16
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Пробуй, добавил немного изменений
Вложения
Тип файла: lsp MLeader-For-Notes.LSP (4.4 Кб, 164 просмотров)

Последний раз редактировалось Олег (jr.), 15.01.2013 в 21:35.
Олег (jr.) вне форума  
 
Непрочитано 15.01.2013, 18:47
#17
hwd

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


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Пробуй
Не знаю как у других, а у меня, в AutoCAD 2009 Enu SP3 x64 этот LISP код создаёт вот такую порнографию:



Если начинаю перетаскивать ручки, то Jig показывает текст:



Но стоит только завершить редактирование, как всё (кроме ручек) исчезает.

UPD
Цитата:
Сообщение от Олег (jr.)
добавил немного изменений
1. Не решена проблема "прилипания" текста к полке выноски (в приведённом мною коде, я решал это путём добавления "\\pxse 1;").
2. По выполнению построения, команда не завершается, а автоматом запускается по новой - приходится лишний раз жать Esc. Может это конечно и "так задумано"...
3. Настройки созданного объекта мультивыноски не полностью соответствуют настройкам текущего стиля мультивыноски:
3.1. Неправильные значения свойств Left Alignment и Right Alignment).
3.2. Неправильное значение используемого текстового стиля - оно не читается из текущего стиля мультивыноски (как логично ожидается), а принудительно назначается как Standard.
Это то, что сразу бросается в глаза. Другие свойства не сверял.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 1448
Размер:	29.5 Кб
ID:	94341  Нажмите на изображение для увеличения
Название: 2.png
Просмотров: 1454
Размер:	3.6 Кб
ID:	94342  
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 16.01.2013 в 12:46.
hwd вне форума  
 
Автор темы   Непрочитано 16.01.2013, 20:05
#18
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


hwd хочу поблагодарить за код. Ваша строка \\pxse 1;8-AOT\\A1;{\\H0.7x;\\S4x18/2,5;}" натолкнула на мысль извлечь сущность выноски или мтекста. В итоге получилось создать мтекст по ГОСТу, один компромисс есть.
Олег (jr.) ваш вариант еще не смотрел, на работе нет инета (usb, CD закрыто), спасибо. Завтра посмотрю.
sdv79 вне форума  
 
Непрочитано 16.01.2013, 20:21
#19
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Олег (jr.) ваш вариант еще не смотрел, на работе нет инета (usb, CD закрыто), спасибо. Завтра посмотрю
Не забудь изменить имя текстового файла стиля,
я использовал "Standard" как в твоем чертеже
и слой тоже как там

Последний раз редактировалось Олег (jr.), 16.01.2013 в 20:37.
Олег (jr.) вне форума  
 
Непрочитано 16.01.2013, 20:25
#20
hwd

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


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
текстового файла,
скорее подразумевался стиль, а не файл...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 17.01.2013, 17:22
#21
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Олег (jr.) спасибо за код и проделанную работу. В первом приближении все отлично, очень рад.
Спасибо всем кто принимал участия, буду копать код.
:-)
sdv79 вне форума  
 
Непрочитано 17.01.2013, 17:28
#22
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Удачи
Олег (jr.) вне форума  
 
Непрочитано 14.05.2014, 23:51
#23
Alex II


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


Заранее извиняюсь, может не очень в тему попал. Помогите плз чем можете. Использую Mleader, но дополнительно прописал для этого вспомогательные вещи:

Код:
[Выделить все]
 
(vl-load-com)
	(command
			"_mleader"
			pause 
			pause 
			; "_e"
			; 0 
			"" 
	)
	(vla-put-TextJustify (vlax-ename->vla-object(entlast)) 2) 
        
                    
        (vla-put-textbackgroundfill (vlax-ename->vla-object(entlast)) 1)
        (vla-put-LineSpacingStyle (vlax-ename->vla-object(entlast)) 2)
        
  
	(command "_ddedit" (entlast) "") 
Проблема с этой строчкой
(vla-put-LineSpacingStyle (vlax-ename->vla-object(entlast)) 2)
выдает ошибку. Помогите плз исправить ошибку. Суть в том, что нужно положение текста Exactly, а никак не получаеться автоматизировать
Alex II вне форума  
 
Непрочитано 15.05.2014, 10:37
#24
Дима_

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


У Mleader нет свойства LineSpacingStyle, есть TextLineSpacingStyle.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 15.05.2014, 10:49
#25
Alex II


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


Огромное спасибо
Alex II вне форума  
 
Непрочитано 15.05.2014, 11:02
#26
Дима_

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


Вас не смущает троекратный вызов в трех строках (vlax-ename->vla-object(entlast))?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 15.05.2014, 11:20
#27
Alex II


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


Так как я в этом к сожалению не разбираюсь, то и смутить меня это не может Но если Вы предложите оптимизацию, то буду очень благодарен
Alex II вне форума  
 
Непрочитано 15.05.2014, 11:29
#28
Дима_

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


Цитата:
Сообщение от Alex II Посмотреть сообщение
Так как я в этом к сожалению не разбираюсь, то и смутить меня это не может Но если Вы предложите оптимизацию, то буду очень благодарен
При таком подходе она Вам все равно не поможет. Когда будете писать по многу и пальцы начнут уставать от "типографии", а главное начнете понимать, что это можно сделать как-то проще и лучше - тогда и поговорим.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 15.05.2014, 11:33
#29
Alex II


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


Договорились
Alex II вне форума  
 
Непрочитано 15.05.2014, 14:17
#30
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


тоже захотелось принять участие
для MLDT
можно присобачить:
Код:
[Выделить все]
 (defun mldt-dcl-getstrings (/
		  propsdcl
		  dlgname
		  dclfilename
		  dcl-file-path			; путь к dcl-файлу для проги (в папку temp)
		  hand					; ручка этого файла
		  dcl_id
		  i
		  lst
		  lif				;last input file
		  lifr				;last input file read
		  ld				;last data
		  tmp
		  )
  (setq propsdcl '("text" "upind" "downind"))

  (setq dlgname "MLDTgetcontent")
  (setq dclfilename (strcat "\\" dlgname ".dcl"))
  (setq lif (strcat "\\dclget-lif-" dlgname ".tmp"))

  ;-----------------------------------------------------------
  (defun kd:dclget_done ( / lst i lifw)		; last input file write
    (setq lst '() i 0)
    (repeat (length propsdcl)
      (setq lst (append lst (list (get_tile (strcat "key" (itoa i))))))
      (setq i (1+ i))
      )
    (done_dialog)
    (setq lifw (open (strcat (getenv "temp") lif) "w"))
    (mapcar '(lambda (x) (write-line x lifw)) lst)
    (close lifw)
    lst
    );defun
  ;-----------------------------------------------------------  

  ;;;;*******************************************************************

  (setq dcl-file-path (strcat (getenv "temp") dclfilename)
	hand (open dcl-file-path "w"))

  (if (setq lifr (open (strcat (getenv "temp") lif) "r"))
    (progn
      (while (setq tmp (read-line lifr))
	(setq ld (append ld (list tmp)))
	)
      (close lifr)
      )
    )
  
  (write-line (strcat dlgname ": dialog" "{label=\"kd "dlgname "\";") hand)
  (write-line ":row{" hand)

  (setq i 0)
  (write-line
    (strcat
      ":edit_box"
      "{"
      "label=\"" (nth i propsdcl) "\";"
      "key=\"" (strcat "key" (itoa i)) "\";"
      "edit_width=20;"
      "alignment=centered;"
      "value=\"" (if ld (nth i ld) "") "\";"
      (if (= i 0) "active=true;" "")
      "allow_accept=true;"
      "}")
    hand)


  (write-line ":column{" hand)
  (setq i 1)
    (write-line
    (strcat
      ":edit_box"
      "{"
      "label=\"" (nth i propsdcl) "\";"
      "key=\"" (strcat "key" (itoa i)) "\";"
      "edit_width=10;"
      "value=\"" (if ld (nth i ld) "") "\";"
      (if (= i 0) "active=true;" "")
      "allow_accept=true;"
      "}")
    hand)
  (setq i 2)
  (write-line
    (strcat
      ":edit_box"
      "{"
      "label=\"" (nth i propsdcl) "\";"
      "key=\"" (strcat "key" (itoa i)) "\";"
      "edit_width=10;"
      "value=\"" (if ld (nth i ld) "") "\";"
      (if (= i 0) "active=true;" "")
      "allow_accept=true;"
      "}")
    hand)


  (write-line "}" hand) ; end column
  (write-line "}" hand) ; end row
  
  (mapcar '(lambda (x) (write-line x hand)) '(":spacer{width=1;}" "ok_cancel;" "}"))
  (close hand)
  ;;;;*******************************************************************
  
  (if (or (< (setq dcl_id (load_dialog (strcat (getenv "temp") dclfilename)))0)
	  (not (new_dialog dlgname dcl_id)))
    (exit)
    ) ;if

  (action_tile "accept"		"(setq lst (kd:dclget_done))")
  (action_tile "is_default"	"(setq lst (kd:dclget_done))")
  (action_tile "cancel" 	"(done_dialog 0)")
  (start_dialog)
  (unload_dialog dcl_id)
  lst
  );defun
PS - забыл объяснить - функция реализует диалоговое окно запроса текстовых параметров + запоминает последний ввод (если он был) и при последующих вызовах - подставляет значения предыдущего

отдает результаты ввода в виде списка стрингов '('first 'tup 'tdown) (для файла MLeader-For-Notes.LSP)

Последний раз редактировалось kakt00z, 15.05.2014 в 14:23.
kakt00z вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Мультивыноска по ГОСТу



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) Red Nova LISP 5021 16.06.2025 17:50
Lisp. Не вставляет значения в базу access. Zaghim LISP 2 11.07.2012 14:29
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19