Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 20:30 28.05.24 
Компютри и Интернет
   >> CAD/CAM
Всички теми Следваща тема *Кратък преглед

Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | (покажи всички)
Тема Програмиране в ACAD  
АвторStSt (Нерегистриран)
Публикувано27.04.06 18:08



Занимавам се от близо 20 години с програмиране в ACAD
Имам много програми в областта на електропроектирането
Интересува ме има ли други хора, които работят в тази област и имат ли желание да обменяме идеи и разработки



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторMинaвaщ (Нерегистриран)
Публикувано27.04.06 20:11



Искам да попитам от позицията на ПОТРЕБИТЕЛ .
Съществува ли в България реална възможност при формулиране на конкретен проблем , да се поръчва разработка на допълнения към AutoCAD (или МS Excel/Word) . Става въпрос за малки автоматизации или обвързване със съществуващи приложения ... нямам конкретна Идея , но на мен ми се струва Логично , ако някой се замисли ...



Тема Re: Програмиране в ACADнови [re: Mинaвaщ]  
АвторStSt (Нерегистриран)
Публикувано27.04.06 20:46



Точно за това повдигам тази тема
Имам контакти с хора, които правят точно такива по-малки или по-значителни разработки за конкретни проблими.
Идеята ми е да се обособи форум, в който да се обменя опит именно в такава насока - програми или модули, които вършат точно определена работа (например програмите ми за проектиране на вътрешни електроинсталации ускоряват проектирането поне 10-20 пъти).
Проблемът е че прябва да се намери начин трудът на такива хора да се овъзмездява по някакъв начин (не е задължително с пари). И това може би е първата тема - как може да се направи така, че и двете страни да имат полза.
Колективният опит и разум може да намери решението.



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторMинaвaщ 2 (Нерегистриран)
Публикувано27.04.06 21:36



Браво за идеята StSt ! Искренно се надявам да се осъществи !
Имам известни познания по Auto-Lisp и считам че подобен форум би
могъл да бъде полезен.



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторMинaвaщ (Нерегистриран)
Публикувано28.04.06 13:15



От Мен главно Морална подкрепа
StSt ако може пиши ми e-mail или нещо друго на ki_ko_ko@abv.bg ,
ако се наложи да мога да те "притеснявам" лично ?
Нямам идея да ли в този Форум е удачно ... , но Хората в България са малко и ... де да знам



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторStSt (Нерегистриран)
Публикувано09.05.06 10:21



За да предизвикам все пак някакъв интерес към темата предлагам една програмка, която връща координатите на точка симетрична на две посочени точки. Тя е полезна при чертане на ос на път (например).

;Връща точка симетрична спрямо две точки в 2D чертеж
(defun simi (p1 / p2)
;р1 - точка или списък от две точки
;р2 - точка
(if (= (type (cadr p1)) 'REAL); ако първият елемент от р1 е реално число - р1 е точка
(setq p2 (getpoint p1 "\nEnter second point ") ); въвеждане на втора точка
(setq p2 (cadr p1) p1 (car p1)); отделяне на двете точки от списъка р1
);if
(polar p1 (angle p1 p2) (* (distance p1 p2) 0.5)); връща координатите на симетричната точка
);simi
; въвеждане на две точки за изчисляване на координатата
(defun sim(/ p1 p2)
(setq
p1 (getpoint "\nEnter fist point ");първа точка
p2 (getpoint p1 "\nEnter second point ");втора точка
)
(simi (list p1 p2));извиква функция 'SIMI със списък от две точки
);sim


Тя може да се прикачи към бутон от тулбар (например "Object Snap") и да се ползва като особена точка (като "EndPoint" "MidPoint" ...).
Ос на улица или на детайл се чертае като се избере команда "LINE" (примерно), натиска се бутон "Симетрала", посочват се двете точки, на които ще бъде симетрична началната точка, след това процеса се повтаря за следващата точка и т.н.



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторStSt (Нерегистриран)
Публикувано18.05.06 13:09



Аз продължавам да натискам по въроса

Предлагам ви програмка за прекъсване (TRIM) на обекти извън някаква затворена полилиния

;TRIM на обекти извън полилиния
(defun trimf (/ plrim plf plf1 p1 p2 nn)
(if (and
(setq plrim (entsel "\nИзберете полилиния за граница"))
(= "LWPOLYLINE" (cdr(ASSOC 0 (entget (car plrim)))))
);and
(progn
(COMMAND "zoom" "e")
(setq plrim (car plrim))
(COMMAND "offset" 1 plrim (getvar "extmin")(COMMAND))
(setq plf (entlast)
p1 (cdr(ASSOC 10 (entget plf)))
plf1 (entget plf)
plf1 (append plf1 (list (cons 10 p1))))
(FOREACH nn (cdr(member (cons 10 p1) plf1))
(if (= 10 (car nn))
(progn
(setq p2 (cdr nn)
);nab (csel1 plrim)
(COMMAND "trim" plrim """f" p1 p2 ""(COMMAND))
(setq p1 p2)
);progn
);if vertex
);FOREACH
(entdel plf)
(COMMAND "zoom" "p")
(princ)
);progn
);if LWPOLYLINE
);trimf

Програмката трябва да се копира във файл (например "TRIMF.LSP") в някоя директория, описана в SEARCH FILE PATH (например SUPPORT), зарежда се, като в командния ред се пише

(LOAD "TRIMF")

и се стартира като в командия ред се пише

(TRIMF)


посочва се полилинията, по която се изрязва и това е.

Не се изрязват блокове, текстове и др.



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторStSt (Нерегистриран)
Публикувано19.05.06 19:33



А бе хора!
Някой интересува ли се от това ACAD да върщи работа вместо него?
Ако има такъв ще му помогна с каквото мога.
За да тръгне работата предлагам да направя програма на всеки, който опише достатъчно разбираемо проблема си.



Тема Re: Програмиране в ACADнови [re: StSt]  
Авторmimu (Нерегистриран)
Публикувано20.05.06 00:35



Имам едно въпросче относно Auto Lisp-a.
Имам plug-in написан на protected AutoLisp.
Същесгвува ли софт, който отстранява
защитата и позволяващ редактирането
му с цел приспособяване на въпросния
plug-in към конретните условия?



Тема Re: Програмиране в ACADнови [re: mimu]  
АвторStSt (Нерегистриран)
Публикувано20.05.06 10:39



Има няколко начина за защита на LISP файлове - чрез компилиране, чрез т.н. "келвиниране" и др.
Съществува доста програми за целта.
Идеята им е предотвратят промяна на съдържанието и затова е трудно да се пробият. Преди време бях чел нещо по въпроса за криптиране и разкриптиране на такива файлове, но сега не ми идва на ум къде.
До този момент не съм разкриптирал LISP файл - по ми е лесно да напиша програма, която върши подобна работа



Тема Re: Програмиране в ACAD +нови [re: StSt]  
АвторMинaвaщ (Нерегистриран)
Публикувано20.05.06 12:14



В отговор на:

А бе хора!



Eй не се отчайвай от нас . Просто сме малко . Просто е трудно Човек да се усети , че има проблем . Просто Аз се въздържам да притеснявам някого за малки неща , които рядко ще ползвам ...
AutoCad Dialog DCL file това към AutoLisp програмата ли се използва или са самостоятелни ?



Тема Re: Програмиране в ACAD +нови [re: Mинaвaщ]  
АвторStSt (Нерегистриран)
Публикувано20.05.06 13:47



DCL фала е файл с описание на диалогови прозорци в LISP.
Това е обикновен ASCII файл но има собствен език



Тема Re: Програмиране в ACADнови [re: mimu]  
АвторPin (Нерегистриран)
Публикувано20.05.06 21:20



Ако е писана на AutoLisp (.lsp)- има доста програми, които декодират. Проблемът е обаче, че освен кодиране, фаилът най-вероятно е и компресиран - т.е. няма да има никакви коментари, нови редове, интервали и пр. и доста често е по-лесно да напишеш наново такава програма, отколкото да си играеш да я хакваш и да я преправяш. Ако обаче е писана на visuallisp и е компилирана (.vlx) - аз поне не съм виждал да има нещо като дисассемблер (ама не съм се и интересувал де)



Тема Re: Програмиране в ACAD +нови [re: StSt]  
АвторRado (Нерегистриран)
Публикувано21.05.06 07:47



Autolisp e най-удобния и лесен език за програмиране на AutoCAD, но е малко ограничен не подържа масиви, a и при рабата с текстови файлови има съвсем малко команди.Хората , които програмират AutoCAD обикновено след Autolisp минават на Visual Basic в среда AutoCAD или пък на Visula C.

Ето една програма и от мен, която променя височината на текстоветe в определено ниво

(defun c:changehigh()
(setq nivo(getstring "\n Input layer:"))
(setq vis(getreal "\n Input hight:"))
(setq ss (ssget "X" (list (cons 8 nivo) (cons 0 "TEXT"))))
(setq len (sslength ss))
(setq n 0)
(repeat len
(setq spis (entget(ssname ss n)))

(setq spis (subst (cons 40 vis) (assoc 40 spis) spis))
(setq n (1+ n))
(entmod spis)
)
)



Тема Re: Програмиране в ACAD +нови [re: Rado]  
АвторStSt (Нерегистриран)
Публикувано21.05.06 18:18



LISP (List Processor) работи със списъци, а списъците могат да бъдат организирани по най-различен начин и да имат структура далече по-сложна от многомерните масиви и средствата му за работа със списъците са напълно достатъчно.



Тема Рамка на чертежа в LAYOUTнови [re: StSt]  
АвторStSt (Нерегистриран)
Публикувано21.05.06 18:45



Педлагам програмка за изчертаване на рамка на чертежа в LAYOUT в зависимост от размера на предварително настроен PAGE SETUP, като оставя свободно поле, рамката е с опашка за прикачване към папка с машинка и знаци за сгъване



(DEFUN GET-LAYOUT (/ OLSOMODE LAY PT1 PT2 PTI ROT INCH LW LH DL DR DB DT ENTLAY br br1 dob ptend )
(VL-LOAD-COM)
(SETQ OLSOMODE (GETVAR "OSMODE"))
(SETVAR "OSMODE" 16845)
(setq LAY(HANDENT(vla-get-Handle(vla-get-layout(vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object))))))
ENTLAY (ENTGET LAY)
);setq
(if(not(VL-STRING-SEARCH "NONE" (STRCASE(cdr(ASSOC 2 ENTLAY)))))
(PROGN
(setq
PT1 (CDR(ASSOC 10 ENTLAY))
PTI (LIST (CDR(ASSOC 46 ENTLAY))(CDR(ASSOC 47 ENTLAY)))
ROT (CDR(ASSOC 73 ENTLAY))
INCH(CDR(ASSOC 72 ENTLAY))
LW(CDR(ASSOC 44 ENTLAY))
LH(CDR(ASSOC 45 ENTLAY))
DL(CDR(ASSOC 40 ENTLAY))
DB(CDR(ASSOC 41 ENTLAY))
DR(CDR(ASSOC 42 ENTLAY))
DT(CDR(ASSOC 43 ENTLAY))
)
(IF (= INCH 0)(SETQ INCH 2.54))
(COND
((= ROT 1)
(SETQ PT2 (MAPCAR '+ PTI (LIST (- LH DT DB)(- LW DR DL))))
);=1
((= ROT 0)
(SETQ PT2 (MAPCAR '+ PTI (LIST (- LW DR DL) (- LH DT DB))))
);=0
((= ROT 3)
(SETQ PT2 (MAPCAR '+ PTI (LIST (* -1(- LH DT DB))(* -1(- LW DR DL)))))
);=3
);COND
(if (and
(setq nab (ssget"c" PTI (MAPCAR '+ PTI '(0.1 0.1) )))
);and
(COMMAND "erase" nab (COMMAND))
);if
(COMMAND "RECTANGLE" (MAPCAR '+ PTI '(25 10)) (MAPCAR '+ PTI PT2 '(-10 -10)))
;(COMMAND "RECTANGLE" PTI (MAPCAR '+ PTI PT2 ))
;÷åðòàå ðàìêà íà ÷åðòåæà
; (COMMAND "RECTANGLE" (MAPCAR '+ PTI '(20 10)) (MAPCAR '+ PTI PT2 '(-10 -10)))
(if (> (cadr pt2) 297.0)
(PROGN
(COMMAND "pline" pti
(MAPCAR '+ pti '(0 295.0))
(MAPCAR '+ pti '(20.0 295.0))
(MAPCAR '+ pti (list 20 (cadr pt2)))
(MAPCAR '+ PTI PT2 )
(MAPCAR '+ pti (list (car pt2) 0))
pti
"")

);PROGN
(COMMAND "RECTANGLE" PTI (MAPCAR '+ PTI PT2 ))
);if
(COMMAND "line" (mapcar '+ pti (list 0 (/ 295.0 2)))
(mapcar '+ pti (list 0 (/ 295.0 2))'(25 0))"")
(COMMAND "solid" '(-2 0) '(0 5) '(2 0) "" "")
(setq solid (entlast)dll 190)
(cond
((> (car pt2)(+ 210 dll))
(setq br (fix(* 2(/(fix(/ (-(car pt2) 210)dll))2.0)))
dop (-(car pt2)(* br dll)210)
i 1
ptend (list(+ (car pti)(car pt2)) (cadr pti))
br1 -2.0
)
(if (< dop 100)(setq br (1- br) dop (-(car pt2)(* br dll)210) ) )
(setq br1 (- br1 (rem br 2))nab (ssadd))
(REPEAT br
(COMMAND "copy" solid "" '(0 0) (MAPCAR '- ptend (list (* i dll) 0)))
(setq i (1+ i)
nab (ssadd (entlast)nab))
);REPEAT
(COMMAND "copy" (entlast) "" '(0 0) (list (/ dop br1) 0))
(setq nab (ssadd (entlast)nab))
(COMMAND "copy" (entlast) "" '(0 0) (list (/ dop br1) 0))
(setq nab (ssadd (entlast)nab))
(if (= br1 -3.0)(COMMAND "copy" (entlast) "" '(0 0) (list (/ dop br1) 0)))
(setq nab (ssadd (entlast)nab))
(COMMAND "mirror" nab "" (mapcar '+ pti (mapcar '/ pt2 '(2 2)))
(mapcar '+ pti (mapcar '/ pt2 '(2 2))'(2 0))
"N")
); L> 395
);cond
(entdel solid)
(if (> (cadr pt2)295)
(PROGN
(COMMAND "solid" (MAPCAR '+ ptend '(0 -2))
(MAPCAR '+ ptend '(-5 0))
(MAPCAR '+ ptend '(0 2)) "" "")
(setq solid (entlast))
(COMMAND "array" solid "" "R"
(1+(fix (/ (cadr pt2)295.0)))
1
295.0
)
(entdel solid)
);PROGN
);if H>295
);PROGN
(ALERT "НЯМА ИЗБРАН ПЛОТЕР
\nОТ \"PAGE SETUP\" ИЗБЕРЕТЕ ПЛОТЕР, РАЗМЕР И ОРИЕНТАЦИЯ НА СТРАНИЦАТА \n
И СТАРТИРАЙТЕ ОТНОВО '(GET-LAYOUT)'")
);if not None plotter
(SETVAR "OSMODE" OLSOMODE)
);GET-LAYOUT

Запишете програмата като файл "GET-LAYOUT.LSP" в директория "SUPPORT", заредете го с
(lLOAD "GET-LAYOUT")

Изберете LAYOUT, изберете плотер, размер на страницата (може и CUSTOM), ориентация (Portrait или Landscape) след това стартирайте програмата с

(GET-LAYOUT)

това е всичко



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторRado (Нерегистриран)
Публикувано22.05.06 12:54



Аз познавам няколко човека ,който пишата програми за улесняване на работта на тях и на техните колеги, но не познажам някой на които му оценяват този труд и му плащат за Autolisp. По тази причина много хора се отказаха от програмиране на AutoCAD.Ще съм ти благодарена , ако се намери някой ,който плаща.



Тема Re: Програмиране в ACADнови [re: Rado]  
АвторStSt (Нерегистриран)
Публикувано22.05.06 14:51



И на мене никой не ми плаща.
Обаче ми доставя голямо удоволствие да правя програми, които ми улеснавят работата.



Тема Re: Мотивация ...нови [re: Rado]  
АвторMинaвaщ (Нерегистриран)
Публикувано22.05.06 21:29



Проблема с оценяването си е Постоянен , една от Основните причини е НЕУК масов потребител ... Т.Е. даже не се сеща , че може и по-лесно !
Приключвам с философстването
БЕЗ ДА ОБИЖАМ НИКОЙ !
Аз съм склонен да плащам .
Примерна ситуация при Мен :
1т. Налага ми се периодично да пресмятам DeltaY / (DeltaX*10) на линия .
2т. Потенциална екстра е изчислената стойност да се присвои на DText .
Какво ми минава през Тиквата Проста на 10-тият път от Хамалогията ...
- Брей няма ли някакъв трик ?
- Хъм , ако ползвам Калкулатора в 2006 , май ... не , не е работа !
- Сигурно с Lisp-че или VBA Макрос ще стане или като ползвам едно Приложение+Diesel ... ?
След "цигара време" ...
- Майната му ... не е работа за мен , че си го смятам на ръка ... ако не ме домързи може да поровя в Internet или да питам някой ... то и без това , аз го правя щото другите ме набутват по тоя начин ... иначе Аз вече да съм си ги сметнал в Excel (то и от там идвам) и да продължавам нататък
Такаааа ...
За 1т. Аз Скомният веднага давам ~5лв. , т.е. числото се появява в командният ред . При положение , че навия колегите че е много идейно цената може да варира ...
За 2т. е т'ва според мен си е по-Голяма екстра , трябва да се навиват колегите че си заслужава , но цената почва от 10лв. нагоре (в зависимост от ...)
Ако пък нещата се вкарат в меню и бутон-че , ще се плаща повече .... и т.н. и т.н.
Да не вземете да правите нещо !!! Казах , че минавам първо през Excel и там мога да си ги сметна ... и тези цифри служат само за ориентир ! Няма да си остават в чертежа !Тези неща са главно за "Другите от Острова"
Това е накратко Фабулата .
Определено има много процедурни Неуредици ... пък и за 10-15лв. ... по-добре човек да почива .
Повтарям , БЕЗ ДА ОБИЖАМ НИКОЙ !



Тема А от къде...нови [re: StSt]  
Автор mimosh ()
Публикувано23.05.06 09:03



може да се вземе подробна информация за програмиране на LISP.

Ще е добре да се позанимавам и аз , хем интересно, хем полезно

Прекомерната употреба на LINUX води до пристрастяване!


Тема Re: Мотивация ...нови [re: Mинaвaщ]  
АвторStSt (Нерегистриран)
Публикувано23.05.06 09:13



Запиши долната програмка като файл "DyDx.lsp" в SUPPORT. Направи си бутон с Customyze, от таба "Commands" избери "User Defined" в лявото поле избери "User Defined Button", вмъкни го в който искаш туулбар на което искаш място (излиза една дебела черта) чрез "влачене", с кликване върху бутона отвори прозореца за редактиране, в полето "User Defined Button" напиши каквото искаш да се показва в ToolTyp. В полето "Macro associated widt this button" запиши


(eval (load "DyDx"))

Избери картинка или си нарисувай с "Edit"
Натискаш "Apply" "Cancel" и имаш готов бутон

Начертай линия, натисни новия бутон, посочи линията и след това мястото, на което да се изпише резултата


;DltaY/(DeltaX*10) Lines
(defun DyDx (/ lin pt1 pt2 dpt result)
(if (and
(setq lin(entsel "\nSelect LINE: "))
(= "LINE" (cdr(assoc 0 (entget (car lin)))))
);and
(PROGN
(setq lin (car lin)
pt1 (cdr(ASSOC 10(entget lin)))
pt2 (cdr(ASSOC 11(entget lin)))
dpt (MAPCAR '- pt1 pt2)
result (/ (cadr dpt)(* 10 (car dpt)))
);setq
(COMMAND "text" (getpoint "\nStart point of TEXT: ") "" "" (RTOS result 2 4))
);PROGN
(if lin (ALERT "This is not a LINE")(ALERT "No Selection"))
);if
);DyDx
'(DyDx)




Тема Re: А от къде...нови [re: mimosh]  
АвторStSt (Нерегистриран)
Публикувано23.05.06 09:18



На български имаше една книжка мисля че се казваше "Програмиране на AutoLISP" но не съм много сигурен. В нея са дадени началните уроци и основните положения. След това започваш с HELP за разработчици, който се извиква в редактора на LISP с F1 и там са описани всички функции (LISP е функционален език) както на LISP, така и на VisualLISP и VBA



Тема Re: Мотивация ...нови [re: StSt]  
АвторStSt (Нерегистриран)
Публикувано23.05.06 17:31



След като помислих малко реших, че може би искаш да обработваш повече линии и затова ги експортваш в Exel. Затова промених малко програмата, така че можеш предварително да избереш необходимите линии или да ги посочиш след като стартираш програмата. Резултатът се изписва в близост да средата на линията. Височината на текста се задава предварително с TEXTSIZE. Останалите обяснения от сутринта важат и тук.

;Dy/10Dx group lines
(defun DyDx (/ nab i lin)
(PROMPT "Select nested LINES")
(if (setq i 0 nab (ssget))
(REPEAT (sslength nab)
(setq lin (ssname nab i)
i(1+ i))
(DyDx1 lin)
);REPEAT
);if nab
);DyDx
(defun DyDx1 (lin / pt1 pt2 pti dpt result)
(if (= "LINE"(cdr(ASSOC 0 (entget lin))))
(progn
(setq pt1 (cdr(ASSOC 10 (entget lin)))
pt2 (cdr(ASSOC 11 (entget lin)))
dpt (MAPCAR '- pt1 pt2)
result (/ (cadr dpt)(* 10 (car dpt)))
);setq
(COMMAND "text" "j" "BC"
(polar pt1 (ANGLE pt1 pt2)(/(DISTANCE pt1 pt2)2.0))
"" (/ (* (ANGLE pt1 pt2) 180.0)pi)
(rtos result 2 4)
(COMMAND))

);progn
);if LINE
);DyDx1
'(DyDx)




Тема Re: Благодаря ...нови [re: StSt]  
АвторMинaвaщ (Нерегистриран)
Публикувано23.05.06 22:38



Благодаря !
Започвам да се притеснявам от Голямата си Уста !
Според мен вече дължа 20-тина лв. + (поне още 5лв. на друго място)
Стартирал съм процедура по информиране на колегите , но съм песимистично настроен ... направих бутончета и меню .... сложил съм ги ...



Тема Re: Благодаря ...нови [re: Mинaвaщ]  
АвторStSt (Нерегистриран)
Публикувано24.05.06 13:01



А пробва ли ги в действителен чертеж



Тема Re: Пробвах...нови [re: StSt]  
АвторMинaвaщ (Нерегистриран)
Публикувано24.05.06 13:59



Да си призная пробвах това , Главно в с няколко начертани обекта и в два-три малки чертежа :
-------------------------------------------------------------------------
(defun C:DyDx (/ lin pt1 pt2 dpt result)
(if (and
(setq lin(entsel "\nСелектирай LINE: "))
(= "LINE" (cdr(assoc 0 (entget (car lin)))))
);and
(PROGN
(setq lin (car lin)
pt1 (cdr(ASSOC 10(entget lin)))
pt2 (cdr(ASSOC 11(entget lin)))
dpt (MAPCAR '- pt1 pt2)
result (/ (cadr dpt)(* 10 (car dpt)))
);setq
(COMMAND "text" (getpoint "\nСтартова точка на TEXT: ") "" "" (strcat "I=" (RTOS result 2 4)))
);PROGN
(if lin (ALERT "Tова не е LINE !")(ALERT "No Selection"))
);if
);DyDx
'(DyDx)
------------ и това Демо Версия ------------------------------------------------------
Sub Test()
' наклон на линия получен от деленето на deltaY и deltaX*10
Label1: Dim returnObj As AcadObject
Dim basePnt As Variant
ThisDrawing.Utility.GetEntity returnObj, basePnt, vbCrLf & "Изберете LINE: "
If TypeOf returnObj Is AcadLine Then
Dim lineObj As AcadLine
Set lineObj = returnObj
Dim tmpDbl As Double
tmpDbl = lineObj.Delta(1) / (lineObj.Delta(0) * 10)
ThisDrawing.Utility.Prompt "DY/(DX*10)=" & Format(tmpDbl, "0.0000") & vbCrLf
MsgBox "Наклон Y към X*10 --> I= " & Format(tmpDbl, "0.0000"), vbDefaultButton1, "Наклон на Линията ДЕМО ВЕРСИЯ"
Else: MsgBox "Това не е LINE !", vbCritical, "ГРЕШКА !"
GoTo Label1
End If
End Sub
---------------------------------------------------------------------
Ако има пробеми със смятането и др. големи не съм забелязал !



Тема Re: Пробвах...нови [re: Mинaвaщ]  
АвторStSt (Нерегистриран)
Публикувано25.05.06 14:38



Ако искаш само съобщение при единичната версия промени реда с
(command "TEXT" ......
със

(alert (strcat "I=" (RTOS result 2 4)))




Тема нЕкои ограничения ;-)нови [re: Mинaвaщ]  
АвторPin (Нерегистриран)
Публикувано26.05.06 16:04



Имай в предвид, че така написаните програми няма да работят с вертикални линии (ще гърми заради делението на 0), няма да връща коректен резулатат ако работиш в координатна система различна от базовата WCS, или UCS, която не е паралелна на WCS и накрая можеш да я използваш само с LINE, но не можеш да я използваш с Polyline или LWPolyline.
Това общо взето не е хич страшно, защото ти може изобщо и да не използваш горните случаи, но все пак ако ги използваш - да не се чудиш откъде ще ти идват проблемите





Тема моля да бъда извиненнови [re: Pin]  
АвторStSt (Нерегистриран)
Публикувано26.05.06 23:11



Pin е прав.
Затова моля за извинение.
Решението е в първия ред на програмата да се запише

(command "UCS" "W")
а на последния
(command "UCS" "P")
това решава проблема с координатната система - ще дава текста на друго място.
Резултатите не се влияят от координатната система - функция entget на AutoLISP връща координатите на точките в световна координатна система.
За да се избегне деленето на нула предлагам

(IF (/= (CAR dpt)0.0)(SETQ result (/ (cadr dpt)(* 10.0 (car dpt))))(SETQ result (EXPT 10.0 10)))


Всъщност това беше и идеята ми да пусна тази тема - обмен на идеи
Благодаря на Pin



Тема Програма за избор на елементи внови [re: Rado]  
АвторStSt (Нерегистриран)
Публикувано28.05.06 12:35



или пресечени от затворена полилиния


;избира обекти изцяло в затворена полилиния
(defun wsel (/ pol spi NN)
(setq pol (car(entsel "\nSelect polyline "))SPI (LIST))
(wsel1 pol)
);wsel
(defun wsel1 (pol / spi NN PTMIN PTMAX)
(SETQ PTMIN (GETVAR "EXTMAX")PTMAX (GETVAR "EXTMIN"))
(if (=(cdr(assoc 0 (ENTGET pol))) "LWPOLYLINE")
(progn
(FOREACH NN (ENTGET pol)
(IF(= 10(CAR NN))
(SETQ SPI (CONS (CDR NN)SPI)
PTMIN (LIST (MIN (CAR PTMIN)(CAR (CDR NN)))(MIN (CADR PTMIN)(CADR (CDR NN))))
PTMAX (LIST (MAX (CAR PTMAX)(CAR (CDR NN)))(MAX (CADR PTMAX)(CADR (CDR NN))))
);SETQ
);IF NN=10
);FOREACH
;;; (COMMAND "ZOOM" "W" PTMIN PTMAX)
(setq pol (ssget "WP" spi))
;;; (COMMAND "ZOOM" "P")
POL
);progn
(ALERT "This is NOT 'POLYLINE'!")
);IF
);wsel1
;избира обекти пресечени от затворена полилиния
(defun csel (/ pol spi NN)
(setq pol (car(entsel "\nSelect polyline "))SPI (LIST))
(csel1 pol)
);csel
(defun csel1 (pol / spi NN PTMIN PTMAX)
(SETQ PTMIN (GETVAR "EXTMAX")PTMAX (GETVAR "EXTMIN"))
(if (=(cdr(assoc 0 (ENTGET pol))) "LWPOLYLINE")
(progn
(FOREACH NN (ENTGET pol)
(IF(= 10(CAR NN))
(SETQ SPI (CONS (CDR NN)SPI)
PTMIN (LIST (MIN (CAR PTMIN)(CAR (CDR NN)))(MIN (CADR PTMIN)(CADR (CDR NN))))
PTMAX (LIST (MAX (CAR PTMAX)(CAR (CDR NN)))(MAX (CADR PTMAX)(CADR (CDR NN))))
);SETQ
);IF
);FOREACH
;;; (COMMAND "ZOOM" "W" PTMIN PTMAX)
(setq pol (ssget "CP" spi))
;;; (COMMAND "ZOOM" "P")
POL
);progn
(ALERT "This is NOT 'POLYLINE'!")
);IF
);csel1

За да изберете елементите в определена област с произволни граници първо очертайте с една полилиния границата, заредете програмата и стартирайте

(wsel)

за да изберете всички елементи вклизащи изцяло в полилинията
или

(csel)

за да изберете всички елементи вклизащи изцяло в полилинията и обектите пресечени от нея



Тема ;-)нови [re: StSt]  
АвторPin (Нерегистриран)
Публикувано28.05.06 15:16



Няма за какво да бъдеш извиняван, а по-скоро похвален. Програмките са повече от добри за някой, който трябва сега да започва от 0 - нали ако му напишеш по-дълга програма ще го шашнеш!

Аз си позволих да вметна тази забележка, защото с това делене 1/10 ми светна,че може би става въпрос за геодезически проекти и там геодезическата координатна система е X=North, Y=East, Z=Height и много от геодезистите държат да си работят в координатна система,в която Х си е по хоризонталата, обаче по вертикалата вместо Y имат Z. Та при такива ситуации (хипотетично) може да се получат нЕкои аномалии

P.S. А ти си си избрал ник, точно като мойте инициали (истнските)



Тема Re: ;-)нови [re: Pin]  
АвторStSt (Нерегистриран)
Публикувано28.05.06 20:53



Да знаеш, че и моите са такива



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторPink (Нерегистриран)
Публикувано29.05.06 21:16



Искам да попитам, доколко е перспективно програмирането на LISP.
Имам слаби познания по този език, на все пак мога да напиша някоя елементарна програма. Но се чудя, дали не трябва да заложа на други езици за програмиране като VBA или С++?



Тема Re: Програмиране в ACADнови [re: Pink]  
АвторStSt (Нерегистриран)
Публикувано29.05.06 22:49



Чистия AutoLISP е ограничен, но VisualLisp има доста сериозни възможности, включително и достъп до Properties и Metods от VBA. Манипулирането на чертожните примитиви е по-лесно. Слабост му е управлението на комплексни програми, включващи и други офис приложения, диалоговите прозорци са доста дървени. Много силна страна според мен са възможностите за обработка на списъци - там можеш да направиш логически конструкции (връзки и т.н.), каквито трудно се правят в обикновените бази данни и работата с тях е доста лесна. Трудно е в началото, защото списъците са по-особен вид организация на данните, но като свикнеш с тях след това е много приятно. Друга особена конструкция са реакторите (нещо като Events в обектните езици) - доста по-сложно е. Основното предимство на LISP е възможността да го ползваш в командния ред директно - много е удобно.
От опита, който имам, стигнах до заключението, че организацията на данните в чертежа е най-важния момент - езикът на който са написани програмите е по-маловажен. Зависи от начина на мислене и навиците на програмиста. Ако имаш опит с VB, C++ или друг език - по-добре продължи в тази насока. Няма най-добър език (иначе другите няма да съществуват).
Ако желаеш, дай имейл да ти пратя едно файлче за организация на данните и възможностите за кодиране на информация в чертожните елементи.



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторMинaвaщ (Нерегистриран)
Публикувано30.05.06 01:03



Като чета написаните работи , май трябва да се появи и тема "интелигентният чертеж" !



Тема Измерване ъгъл на примититивнови [re: StSt]  
АвторStSt (Нерегистриран)
Публикувано30.05.06 18:43



Това е функция, която връща ъгъла(в градуси), под който е начертан посочен елемент.
Можете да го включите в ACAD.LSP и да го прикачите към бутон от туулбар.
Когато искате да завъртите елемент или набор от елементи след избора им и посочване на базова точка натискате бутона или пишете в командния ред
(to-ang)
избирате точка от линия или полилиния и избраното се завърта на избрания ъгъл. Ако не посочите елемент програмата пита за две точки и връща ъгъла между тях. Работи с всякакви елементи, но трябва да се внимава с избора на точката на посочване. Трябва да се има предвид, че понякога завъртането става на 180 градуса и трябва да се прави още едно въртене.
Може да се направи и бутон за изправяне, т.е. завърнате до 0 градуса така
(* -1 (to-ang))

;Връща ъгъла на посочен елемент
(defun to-ang ( / a b)
(setq
a (entsel)
);setq
(if a
(setq
a(cadr a)
b(osnap a "per")
a(osnap a "nea")
);if a
(progn
(setq a (getpoint "\nSelect two point. First point: ")
b (getpoint a "\nSecond point: ")
)
);if not a
);if
(setq
a (* (angle a b) (/ 180 pi))
);setq
);to-ang




Тема Re: Програмиране в ACADнови [re: Mинaвaщ]  
АвторStSt (Нерегистриран)
Публикувано30.05.06 18:52



Приемам
Мога да предложа за обсъждане някои разсъждения относно организацията на елементите от чертежа.
Нека, обаче, да се обадят повече хора. Не знам доколко ги интересува. Виждам, че настоящата тема се посещава доста, но мнения има само от 3-4 души. Ако само това са заинтересованите можем да си разменим имейли и да си говорим само ние, няма причина да досаждаме на другите.



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторPink (Нерегистриран)
Публикувано31.05.06 22:34



Благодаря за отговара.
Познания по други езици нямам, така че ако искам да ги ползвам трябва да започна от нулата. Затова и питам, дали да се захващам с това.
Що се отнася до диалоговите прозорци, точно те ми намалиха ентусиазма към програмирането на LISP. Твърде много усилия за една малка част от общата програма. Но според мен те са твърде важни. Ако не можеш да си комуникираш с програмата по бърз и интуитивен начин, то тогава се връщаш във времето на DOS.

Въпросът за организация на данните,разбира се, е много важен. Но според мен много зависят от задачата, която се решава. Не знам, дали може да се унифицират по някакъв начин.



Тема Re: Програмиране в ACADнови [re: Pink]  
Автор Haчko (страхлив корем)
Публикувано01.06.06 08:43



LISP е доста стар, мощен и оригинален език.





Има начин отново да бъдем добри.

Тема `Интелигентното чертане`.....нови [re: StSt]  
Автор mimosh ()
Публикувано01.06.06 09:01



със сигурност трябва да има такава тема, ама тя трябва да е закована най отгоре, обаче не знам колко хора влизат в тоя клуб за да я прочетат.
Виждал съм чертеж с 5 линии на кръст дето аутокада не може и малкото име да си каже, едвам се селектира обект.
А има чертежи (огромни) дето може всичко да си правиш и то се случва много бързо, все едно чертаеш върху празна бланка.


А относно програмирането на AutoLISP: Твърде малко хора знаят, говоря от ползващите Аутокад, че в него има такава възможност. Много от хората, които се наричат инжинери и архитектурни техници че дори и архитекти не знаят елементарни неща и не умеят да боравят със слоеве ти ще искаш да им правиш програми на AutoLISP.

Прекомерната употреба на LINUX води до пристрастяване!


Тема Re: Програмиране в ACADнови [re: Pink]  
АвторStSt (Нерегистриран)
Публикувано01.06.06 09:24



Щом сега започваш - хвани VBA. Просто ще ти бъде по-лесно да преминеш и към проектиране в други офис приложения и ще можеш да ги свързваш в общи проекти. За диалозите си прав - много дървени са.
Сега малко за организацията на данните в чертежа. За дребни работи не е от такова значение организацията, но за по-големи работи и особено при работа в група е задължително. За унификацията - трябва да се изработят някои прости правила и да се ползват при всички случаи. Ще ти дам пример:
Направил съм си няколко набора от блокове (за вътрешни инсталации, за външни захранвания и т.н.). Когато създавам такъв блок му закачам два невидими константни атрибути с имена HIDDENNAME и GROUP. В HIDDENNAME слагам пълното име на изобразявания обект ("осветително тяло с ЛЛ 2х40" например), а в GROUP групата на блоковете ("осветителни тела", "табла", "стълбове" и т.н.). Тези атрибути ги ползвам в списъци за вмъкване на блоковете (доста по-удобно е да избереш блок "осветително тяло с ЛЛ 2х40" отколокото "qweasd2-40"), при създаване на легенда и спецификация, разни справки и т.н.



Тема Относно организация на даннитенови [re: StSt]  
АвторPink (Нерегистриран)
Публикувано01.06.06 13:25



Явно не съм разбрала каква организация имаш предвид.
Мислех, че говориш за организацията на самата програма.
Организацията на самия чертеж е може би най-важната тема, но няма никаква връзка с програмирането. Тъй като много ме вълнува тази тема ще я изнеса отделно. Ще се радвам, ако повече хора вземат отношение.



Тема Re: Относно организация на даннитенови [re: Pink]  
АвторStSt (Нерегистриран)
Публикувано01.06.06 16:05



Организацията на данните в чертежа има пряко отношение към програмирането. Това е първата стъпка.
Аз съм привърженик на програми, които подпомагат проектирането. Това не изключва "ръчно" въвеждане и затова именно спазването на принципите осигурява нормалната работа на програмите.
В примера за невидимите атрибути на блоковете, ако въведеш блок без необходимите атрибути, съответните програми няма да ги обработват и резултатите няма да са коректни.



Тема Re: Относно организация на даннитенови [re: StSt]  
АвторPink (Нерегистриран)
Публикувано01.06.06 18:00



Да, това е вярно. Но в случая става дума за изисквания на програмата. Това се залага още при формирането на идеята за самата пограма. Предполагам, че може да се тръгне и по друг път. Програмистът сам си решава какви рамки ще постави.
На мене ми е най-интересно, така да си организирам даден чертеж, че да свърша определена работа само с подръчни средства и де не се стигне до програмиране. Разбира се става дума за прости задачи. За по-сложни няма да мине без програмиране.



Тема Re: Мотивация ...нови [re: Mинaвaщ]  
АвторПporpaмиcт (Нерегистриран)
Публикувано02.06.06 15:24



Отдавна не бях влизал в тоя форум и с удоволствие открих интересната тема.

Пич, трябва да си много богат щом за такива прости задачки даваш по 5 лева.


Готов съм да ти ги правя на VBA за по 3 лева, говоря сериозно, заедно с нещата, които наричаш екстри.

Ще си направя малко реклама.
Писал съм (и продължавам да пиша) макроси за пресмятане на разгъвки на листови конструкции, като се почне от обикновения конус, цилиндър пресечен с наклонена равнина, преходи от правоъгълник в кръг, също и нетипови фигури - например преход между две окръжности разположени под произволен ъгъл в пространството. Най големия макрос, който съм писал е за генериране на NC - koд за машини за газово и плазмено рязане на листов материал.

Ако имаш нужда от нещо, само се обади!



Тема Re: трябва да си много богат ...нови [re: Пporpaмиcт]  
АвторMинaвaщ (Нерегистриран)
Публикувано02.06.06 21:07



В отговор на:

Пич, трябва да си много богат щом ...



Toва е само Пример , но съм напълно сериозен ...
Щукнало му на някой , че иска нещо по никое време ... колко да му вземеш ?
Виктори (кутия) 2,60лв. , Кафе с Кола 1,20лв. , голям Jameson 7лв. ...
Естествено , че като станат 20-тина почва човек да мисли ...
Или пък , ако се направи списък с желания и после се остойности , цена на едно от списъка може да е по-ниска , но това си е отстъпка за количество ...
Аз нямам идеи за нищо по-конкретно , но ... ki_ko_ko@abv.bg



Тема Re: трябва да си много богат ...нови [re: Mинaвaщ]  
Авторпporpaмиcт (Нерегистриран)
Публикувано02.06.06 23:05



Писах ти на мейла и ти пратих и едно примерче...



Тема Re: трябва да си много богат ...нови [re: Mинaвaщ]  
Авторпporpaмиcт (Нерегистриран)
Публикувано03.06.06 14:36



Тук ти пускам едно макросче, което може би ще бъде полезно и за други. Служи за мащабиране на размерите в чертежа. Работи добре за детайли с размери от 10 до към 3000мм. Ако са по-големи или по-малки трябва се настроят обхватите.
За да се види "силата" на макроса трябва да свържеш към иконки двете подпрограми ScaleUp и ScaleDown, ако го стартираш от меню производителността му пада много.


Public Sub ScaleUp()
ChangeDimensions True
End Sub

Public Sub ScaleDown()
ChangeDimensions False
End Sub

Private Function ChangeDimensions(direction As Boolean)
Dim d3p As AcadDim3PointAngular
Dim ddi As AcadDimDiametric
Dim dor As AcadDimOrdinate
Dim dal As AcadDimAligned
Dim dro As AcadDimRotated
Dim dan As AcadDimAngular
Dim dra As AcadDimRadial
Dim ent As AcadEntity
Dim i As Integer, count As Integer
Dim dScale As Double
dScale = ThisDrawing.GetVariable("DIMSCALE")
If direction Then
If dScale < 1 Then
dScale = dScale * 2
Else
dScale = dScale + 1
End If
Else
If dScale > 2 Then
dScale = dScale - 1
Else
dScale = dScale / 2
End If
End If
ThisDrawing.SetVariable "DIMSCALE", dScale
count = ThisDrawing.ModelSpace.count - 1
For i = 0 To count
Set ent = ThisDrawing.ModelSpace.Item(i)
Select Case ent.ObjectName
Case "AcDbRotatedDimension"
Set dro = ent
dro.ScaleFactor = dScale
Case "AcDbAlignedDimension"
Set dal = ent
dal.ScaleFactor = dScale
Case "AcDbRadialDimension"
Set dra = ent
dra.ScaleFactor = dScale
Case "AcDbDiametricDimension"
Set ddi = ent
ddi.ScaleFactor = dScale
Case "AcDbOrdinateDimension"
Set dor = ent
dor.ScaleFactor = dScale
Case "AcDb2LineAngularDimension"
Set dan = ent
dan.ScaleFactor = dScale
End Select
Next
ThisDrawing.Regen True
End Function




Тема Re: за сравнениенови [re: пporpaмиcт]  
АвторStSt (Нерегистриран)
Публикувано04.06.06 19:59



Имаше въпроси за ефективността и перспективността на LISP. Затова давам същата програма написана на LISP.

;променя DIMSCALE
(DEFUN chdScale (direction / dScale nab)
(setq nab (ssget "x" '((0 . "DIMENSION")))
dScale (GETVAR "DIMSCALE"))
(COND
((AND direction (< dScale 1.0))(SETQ dScale (* dScale 2.0)))
((AND direction (> dScale 1.0))(SETQ dScale (1+ dScale )))
((AND direction (> dScale 2.0))(SETQ dScale (1- dScale )))
(T (SETQ dScale (/ dScale 2.0)))
);COND
(SETVAR "DIMSCALE" dScale)
(COMMAND "DIM1")
(COMMAND "UPDATE" NAB "")
);chdScale

При създаване на бутони за увеличаване и намаляване на DIMSCALE в "Macro associated in this button" трябва да се запише
(chdScale T) - за увеличаване
(chdScale nil) - за намаляване
Увеличение на скоростта на обработка при варианта на LISP програмата ще се усети при чертежи с много чертожни елементи.



Тема Re: за сравнениенови [re: StSt]  
Авторpeshop (Нерегистриран)
Публикувано04.06.06 21:28



На VBA също може да е грозно и кратко.


В отговор на:


Function ChangeDimensions(direction As Boolean)
Dim iType(0) As Integer
Dim vValue(0) As Variant
dScale = ThisDrawing.GetVariable("DIMSCALE")
dScale = IIf(direction, IIf(dScale < 1, dScale * 2, dScale + 1), _
IIf(dScale > 2, dScale - 1, dScale / 2))
vValue(0) = "DIMENSION"
Set sSet = ThisDrawing.SelectionSets.Add("DIM")
sSet.Select acSelectionSetAll, , , iType, vValue
For Each aEnt In sSet
aEnt.ScaleFactor = dScale
Next
sSet.Delete
Update
End Function

Sub ScaleUp()
ChangeDimensions True
End Sub

Sub ScaleDown()
ChangeDimensions False
End Sub



ПП Нямам претенции за изчерпателност, че работи вярно (даже се сещам и кога ще гръмне) и т.н., но просто от спортна злоба.



Тема Re: за сравнениенови [re: peshop]  
Автор (Mинaвaщ) (същият)
Публикувано05.06.06 00:36



Да попитам и Аз !
Това върши ли подобна работа ?
-----------------------------------------------------------
Увеличаване на DIMSCALE + UPDATE на Dimension :
$M=$(if,$(>=,$(getvar,dimscale),1),^^_dimscale $(+,$(getvar,dimscale),1),^^_dimscale $(*,$(getvar,dimscale),2));_-dimstyle a all;;
Намаляване на DIMSCALE + UPDATE на Dimension :
$M=$(if,$(>=,$(getvar,dimscale),1),^^_dimscale $(-,$(getvar,dimscale),1),^^_dimscale $(/,$(getvar,dimscale),2));_-dimstyle a all;;
Но има проблем като стигне до 0-та ...
-----------------------------------------------------------
Текста се слага директно като макрос на бутона ...



Тема Re: за сравнениенови [re: StSt]  
Авторпporpaмиcт (Нерегистриран)
Публикувано05.06.06 14:43



Ето я същата функция написана по твоя начин:

Public Sub ChangeDimmensions()
Dim dScale As Double
dScale = ThisDrawing.GetVariable("DIMSCALE")
If direction Then
If dScale < 1 Then
dScale = dScale * 2
Else
dScale = dScale + 1
End If
Else
If dScale > 2 Then
dScale = dScale - 1
Else
dScale = dScale / 2
End If
End If
ThisDrawing.SetVariable "DIMSCALE", dScale
ThisDrawing.SendCommand "-dimstyle" & vbCr & "a" & vbCr & "all" & vbCr & vbCr
End Sub


Ako се използва функцията IIf както е направил колегата по-горе ще стане още по-кратка.



Тема Вместо заключениенови [re: StSt]  
АвторStSt (Нерегистриран)
Публикувано07.06.06 09:48



Повдигнах темата защото смятам, че е важна.
В написаните мнения почти всички бяха разочаровани от ниското ниво на ползващите чертожни програми (не само на ACAD). И аз мисля така. Стигнал съм до мнение, че има два подхода при ползване на чертожни програми - на "чертожника" и "проектанта" (слагам ги в кавички защото много проектанти работят с програмите като чертожници). При подхода на "чертожника" всичко се смята предварително, разчертава се с моливче и след това се изчертава "на чисто" на компютъра. Такива хора работят с линии, окръжности, дъги и т.н. и ползват генериращите команди (такива като LINE, CIRCLE ....).
"Проектанта" констуира чертежа си в процеса на ползване на програмите, като следва взаимовръзките между реалните физически обекти, ползвайки редактиращите команди на програмите (CHAMFER, FILLET, OFFSET, DIVIDE, MEASURE .....). Обектите с които работят са отражение на реални физически обекти (линията за него е стена, кабел ....). Необходимите размери и параметри се получават в процеса на конструиране на чертежа.
Е, как да автоматизираш работат на "чертожника" - най-много да му организираш малко слоевете и линиите, за да ползва някои по-мощни команди (QSELECT например). Специализирани програми не му трябват.

Беше повдигнат и въпроса за заплащането - такова няма. Смятам, че ще се появи тагявя, когато се появи търсенето. И тайната ми мисъл при пускането на тази тема беше да покажем, че може много по-интелигентно и ефективно да се работи, ползвайки специализирани програми, направени според собствените разбирания и начин на работа. От опит знам, че който пробва веднъж, след това иска още и още. Апетитът идва с яденето.

Друг повод за тази тема беше обмен на идеи и решения - появиха се и такива мнения. Дадени бяха решения на LISP, VBA, DIESEL ..... Така се повишава нивото на програмистите и това е много хубаво.

И накрая - според силите си ще помагам на всеки, който постави проблем в клуба.



Тема Re: Вместо заключениенови [re: StSt]  
Автор(Mинaвaщ) (Нерегистриран)
Публикувано07.06.06 12:32



В отговор на:

И накрая - според силите си ще помагам на всеки, който постави проблем в клуба.



БЛАГОДАРЯ предварително !
Аз ще продължавам когато ми хрумне да правя "разкази в картинки" за интересни според мен неща !
Мислех , че е време да премина и към Flash анимация , но не съм сигурен как ще се преборя с блокирането на ActiveX контролите от IE и засега ще са само картинки в HTML .



Тема Re: Вместо заключениенови [re: StSt]  
Авторkolumb (Нерегистриран)
Публикувано30.06.06 18:50



Как така заключение, никаква почивка по въпроса


Имам питане:
Искам с един бутон да се включват и изключват групи слоеве. Засега съм го решил с бутончета в tool pallete, като всяко бутонче изпълнява скрипт от вида:
-layer ON слой1, слой2интервалинтервал
-layer OFF слой1, слой2интервалинтервал
Обаче така са ми нужни два бутона - един за включване и един за изключване.
Има ли начин това да се напише като LISP програмка, която да създава променлива sloeve1 и когато тя е 1(т.е.преди това слоя е бил включен) за го изключи и съответно когато променливата е 0 (т.е. слоевете преди това са били изключени) да ги включи. По този начин всичко ще става с един единствен бутон.
Следващото ми питане е как се закача LISP програма за бутон.
Благодаря предварително.



Тема Re:... потребителски интерфейснови [re: kolumb]  
АвторMинaвaщ (Нерегистриран)
Публикувано01.07.06 17:38



В отговор на:

Следващото ми питане е как се закача LISP програма за бутон.



Eто това е според Мен въпрос в много правилна посока !
Колкото и да се заиграва човек и да събира помощни програмки за АutoCAD , aко неможе да се подредят в лесно достъпна форма са практически трудно използваеми !
Мислех си да пиша Урок по проблема , но се усетих че 50% я знам я незнам и се самовъзпрях . В общи линии нещата гравитират около Меню , Бутон , Тулпалет и ...
Изписването на командата на лиспа е потенциално Macro-то на бутона ... по-горе имаше описано и по-умно (елегантно) изписване ...
Спирам да пиша , че май са глупости ...



Тема Re: Вместо заключениенови [re: kolumb]  
АвторPin (Нерегистриран)
Публикувано01.07.06 22:04



Как се закача лисп програма към бутон - Имаш поне два варианта:
Вариант 1:
Десен клик върху който и да е видим тоолбар и избираш Customize, след което имаш възможности да си направиш нов тоолбар и да вкараш в него нов бутон или да вмъкнеш нов бутон във вече съществуващ тоолбар. В свойствата на бутона трябва да има един теьт бокс, където пище " Macro associated with the button.." или нещо подобно и там вмъкваш примерно:
^C^C(func_in_lisp par1 par2)
Вариант 2:

Пишеш един меню фаил, където описваш тоолбара и бутона(ите) и после го зареждаш този менюфаил с командата menuload. Ако не се вижда ще трябва да избереш view/toolbars и да го го отметнеш за да се покаже

Ето ти извадки от един примерен менюфаил, където се вика директно функция написана на лисп:

***MENUGROUP=PIPE
***TOOLBARS

**GEOHATCH
TID_TbGeoH [_Toolbar("GeoHatch", _Floating, _Hide, 85, 378, 1)]
TID__GHEarth [_Button("Earth", "h_eart_16.bmp", "h_eart_32.bmp")]^C^C(ghatch "earth" 20.0)


За слоевете си на прав път


Приблизително текста ще бъде такъв (нямам Аутокад и ако намеря някъде под ръка през следващите дни ще я проверя)

(setq aa (if aa
(command "layer" "off" "1,2" "")
(progn
(command "layer" "on" "1,2" "")
t
)
)
)

с "аа" съм кръстил променливата (когато е Т, слоеве "1" и "2" са включени, когато е nil са изключени)


Абе дира нещо ми изяжда подредбата на кода, но се надявам все пак и така да е достатъчно ясен



Тема Re: Вместо заключениенови [re: Pin]  
АвторStSt (Нерегистриран)
Публикувано03.07.06 11:47



Искам само да добавя, че вместо променлива може да се ползва състоянието на слоя (включен или изключен). Това става така


(if (>=(cdr(ASSOC 62(tblsearch "layer""1")))0)
(command "layer" "off" "1,2" "")
(command "layer" "on" "1,2" ""))

Групата с ключ 62 е за цвят на слоя. Ако стойността е отрицателена, значи че слоя е изключен и обратно



Тема Re: Вместо заключениенови [re: StSt]  
Авторkolumb (Нерегистриран)
Публикувано03.07.06 16:20



ОК, до тук добре, сега как ще изглежда като цяла програма, защото само това if-че не работи.



Тема Re: Вместо заключениенови [re: kolumb]  
Авторkolumb (Нерегистриран)
Публикувано03.07.06 16:35



Освен това е необходимо да се прави проверка дали слоя, който се изключва е текущ, защото тогава трябва да се добави още едно "y" накрая тъй като AutoCAD пита да ли сме сигурни, че искаме да изключим текущия слой.
за исключване на текущия слой:
-layer OFF layer1,layer2 y[][]
за всички останали:
-layer OFF layer1,layer2 [][]
Това е във формат за скрип

, [] e знак за интервал.



Тема Корекциянови [re: StSt]  
АвторStSt (Нерегистриран)
Публикувано03.07.06 19:46



Кolumb е прав. Ето коригирания макрос:

(if (>=(cdr(ASSOC 62(tblsearch "layer""1")))0)
(command "layer" "off" "1,2" (if (VL-STRING-SEARCH "1,2" (getvar "clayer"))"y"""))
(command "layer" "on" "1,2" (if (VL-STRING-SEARCH "1,2" (getvar "clayer"))"y""")))




Тема Re: Вместо заключениенови [re: kolumb]  
АвторPin (Нерегистриран)
Публикувано03.07.06 20:39



Ако го слагаш като макро към бутон от тулбар трябва да залепиш веднага след последната скоба ";" (без кавичките) и трябва да работи (с изключение на случая с текущия слой

)
За да работи с текущия слой трябва да се напише малко повече код - нещо подобно на това дето ти е дал адаша - пробвай го дали работи от текущия слой, че аз имам известни съмнения и ако не работи ще ти напиша нещо подобно (обаче в други ден, че сега тук са празници,а в къщи нямам Аутокад)



Тема грешканови [re: StSt]  
АвторStSt (Нерегистриран)
Публикувано03.07.06 21:38



Даденият по-горе код не е верен!
Трябва да бъде така:

(foreach nn '("1" "2");тука се изписват имената на слоевете, които трябва да се изслючват
(if (>=(cdr(ASSOC 62(tblsearch "layer" nn)))0)
(command "layer" "off" nn(if(/=(getvar "clayer" )nn)" " "y "))
(command "layer" "on" nn "")
);if
);foreach




Тема Re: грешканови [re: StSt]  
Авторkolumb (Нерегистриран)
Публикувано04.07.06 09:20



Все още не работи





Тема Re: грешканови [re: StSt]  
АвторStSt (Нерегистриран)
Публикувано04.07.06 09:32



Грешката беше в един интервал в кавичките

(foreach nn '("1" "2")
(if (>=(cdr(ASSOC 62(tblsearch "layer" nn)))0)
(command "layer" "off" nn(if(/=(getvar "clayer" )nn)"" "y"))
(command "layer" "on" nn "")
);if
)




Тема Re: грешканови [re: StSt]  
Авторkolumb (Нерегистриран)
Публикувано04.07.06 13:55



РАБОТИ!


И в крайна сметка пак си трябва едно ; накрая
Ето го окончателно работещо:

(foreach nn '("1" "2")
(if (>=(cdr(ASSOC 62(tblsearch "layer" nn)))0)
(command "layer" "off" nn(if(/=(getvar "clayer" )nn)"" "y"))
(command "layer" "on" nn "")
);if
);

На мястто на 1 и 2 се пишат имената на слоевете.
Благодаря момчета !

П.С. Ако правилно съм разбрал за всеки от елементите на масива nn се прави проверка включем/изключен и текущ(или не) и съответно се включва/изключва.
Ако слоевете са повече от един, тогава:
(foreach nn '("1" "2" "3" "4" и т.н.) ???



Тема Re: грешканови [re: kolumb]  
АвторStSt (Нерегистриран)
Публикувано04.07.06 14:43



Точно така с FOREACH на NN се присвоява последователно по един елемент от списъка



Тема За бутоните и макроситенови [re: StSt]  
АвторStSt (Нерегистриран)
Публикувано05.07.06 21:21



В темата няколко пъти беше засегнато прикачването на програми към бутони на туулбаровете.
Моето мнение е, че трябва да се реши предварително кои неща да се закачат на бутони. Аз имам повече от 500 файла с повече от 1000 функции и ако трябва да ги прикача на бутони ще стане голямо мазало - няма да има място за чертане.
На бутони трябва да се прикачат само тези функции, които се ползват във всички чертежи. Има начини това да стане по-интуитивно или според случая. Мисля, че съм го описвал в сайта. Ако трябва ще отворя отделна тема.



Тема Re: Програмиране в ACADнови [re: StSt]  
Автор ФeниX (nikolov_k)
Публикувано06.07.06 16:08



И аз програмирам на Autolisp, но за разлика от повечето тук използвам ACAD за карти, кадастър и задаване на допълнителна информация към обектите в ACAD. Програмките ги пиша за ускоряване на работата и мога да кажа, че ползата е огромна. Освен това смятам, че ако става въпрос за скорост, Autolisp няма конкуренция. Разбира се ако нещицата са простички това няма значение, но в случай, че обработвате нещо голямо разликата е огромна.



Тема ВРЪЗКАнови [re: ФeниX]  
АвторStSt (Нерегистриран)
Публикувано06.07.06 23:07



Дай мейл на stan_emea@abv.bg



Тема Re: ВРЪЗКАнови [re: StSt]  
Авторstanslavov (Нерегистриран)
Публикувано07.07.06 00:29



много хубава тема - аз се интересувам за лиспове за 3д- прозорци/врати/рамки .... всичко което може да улесни моделирането :-) за арх. 3д виз

за контакти
www.projects3d.com
office@projects3d.com

10x



Тема Re: ВРЪЗКАнови [re: stanslavov]  
АвторMинaвaщ (Нерегистриран)
Публикувано07.07.06 19:17



stanslavov написа :

В отговор на:

много хубава тема ...



ехе щом от 3dbg.com се заглеждат тук значи наистина е Интересно !



Тема Re: Програмиране в ACADнови [re: StSt]  
Авторmimu (Нерегистриран)
Публикувано30.07.06 22:44



Здравейте колеги,

Имам проблем с командата LAYISO oт EXPRESS TOOLS на ACAD Mechanical 2006.
Работя чертеж, чийто файли е към 5MB и голяма част от елементите са
получени от "гръмване" на няколко блока. Командата LAYISO често дава
грешка от тепа "lentype - nil". Тъй като всички ЕТ - команди са писани на
AUTOLISP поствам въпроса си тук.
Има ли някой подобен проблем и ако някой се е справял с него моля за
помощ.
Имам известни познания по AUTOLISP-а, но малко помощ не би ми била
излишна.

Поздрави на всички и предварително благодаря.



Тема Re: Програмиране в ACADнови [re: mimu]  
АвторStSt (Нерегистриран)
Публикувано31.07.06 09:15



Това може да се получи по най-различни поводи. Обикновено при обработване на DWG чертежи създавани на други програми някои от системните променливи не са указани или имат неподходяща стойност. Опитай да отвориш нов празен чертеж и да вмъкнеш с INSERT с EXPLODE стария. За точка на вмъкване задай точка различна от 0,0 (напр. 1,1) и след това го премести в 0,0. Провери системните променливи FLATLAND=0, TEXTSIZE<>0. Виж настройките на дименсионния стил.
Пробвай тези неща, пък да видим.



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторMlMU (Нерегистриран)
Публикувано31.07.06 23:22



Благодаря за отговора, ще опитам това, което предлагаш.
И аз имах известни съмнения, че чертежа е правен с друг
софтуер. Основно проблема се появява след като се " гръмне"
блока. Може би наистина има някаква разлика в описанието на
различните примитиви.
Много благодаря за съвета. Утре ще го пробвам и ще се обадя
отново.



Тема Re: Програмиране в ACADнови [re: MlMU]  
АвторACad VBA (Нерегистриран)
Публикувано03.08.06 09:06



Допада ми начина, по който се развива темата. Някъде скоро прочетох как може да се печели от отворен код - от поддръжката му. Няма какво да се коментира за разликатa в производителността между традиционното чертане с моливче и ползването на програми( за справка класацията по лично богатсво и мястото на Бил Гейтс в нея). Малко се отклонявам от Кад програмирането. Отдавна залитам по програмиране и това ми е хоби. Отделно и аз се трудя в инженерния бранш, а в него вече без Кад не можеш да минеш. Нещо, което и аз като начинаещ го правех за 8 часа, с около 1500 реда код се редуцира до 7мин, като от тях 4 мин са за допълнително оформление, а е лесно и те да се спестят ако още малко се поровя из VBA help-a. А сега практичното предложение: Моля ви намерете начин да изнесете темата в отделен форум. Мисля че имаме какво да си кажем, но поне да е по-добре структурирано.



Тема Re: Програмиране в ACADнови [re: StSt]  
Авторmimu (Нерегистриран)
Публикувано04.08.06 22:45



При един-два файла се получи, но при някои не проработи.

Благодаря все пак за идеята.



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторGeorgi (Нерегистриран)
Публикувано05.08.06 00:03



аз ще започвам да пиша на С# и Аутокад, много ще се радвам ако има форум където можем да обсъждаме :).



Тема Re: Програмиране в ACADнови [re: mimu]  
АвторStSt (Нерегистриран)
Публикувано05.08.06 10:19



Дай малко повече информация - при тези файлове, при които се е получило, какво направи. Защото бях дал няколко варианта.



Тема Re: Програмиране в ACADнови [re: MlMU]  
Авторпcпk (Нерегистриран)
Публикувано05.08.06 22:01



Още няколко се оправиха като минах през dxf-формат.



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторWinter (Нерегистриран)
Публикувано06.08.06 22:11



Знае ли някой как се отварят ACAD файлове в VIZ Render 2006?Иска да са с разширение .viz.



Тема Re: Autodesk VIZнови [re: Winter]  
АвторMинaвaщ (Нерегистриран)
Публикувано07.08.06 08:56



Не е много за тази Тема !
По принцип съм останал с впечатление , че самостоятелната версия на VIZ-a , отваря DWG файлове , а VIZ-a към някоя от другите програми е с ограничена функционалност т.е. става чрез линкване от другата програма към VIZ-a .
Ти какъв вариант на Програмата ползваш ?



Тема Re: Autodesk VIZнови [re: Mинaвaщ]  
АвторWinter (Нерегистриран)
Публикувано07.08.06 10:46



Все още никакъв,там е проблема.Имам инсталиран 2006,но не мога по никакъв начин да отворя AutoCad файл,а би трябвало. Точната версия е VIZ Render as ADT 2006.Знаеш ли програма,която да преобразува dwg в viz.Изобщо имаш ли някоя идея?



Тема Re: Програмиране в ACADнови [re: StSt]  
Автор onzi (онзи)
Публикувано08.08.06 09:50



трябва ми нещо, което да смята общата дължина на селектираните polylines. пробвах да ти вадя с list, но хистори-то е много малко.

идеална работа ще свърши и нещо, което само да принтира дължината на всеки обект (оттам копи/пейст и...)

едит: натворих нещо. комбинирах 2 примера на vba, дето си вървят с аутокада (вер 2004). сега праща в excel дължините. ето го нещото:


Private Sub cmdStart_Click()
Dim Excel As Object
Dim elem As Object
Dim excelSheet As Object
Dim Array1 As Variant
Dim Count, RowNum As Integer
Dim NumberOfAttributes As Integer

' Start Excel
On Error Resume Next

Set Excel = GetObject(, "Excel.Application")

If Err <> 0 Then
Err.Clear
Set Excel = CreateObject("Excel.Application")

If Err <> 0 Then
MsgBox "Could not load Excel.", vbExclamation
End
End If
End If

On Error GoTo 0

Excel.Visible = True
Excel.Workbooks.Add
Excel.Sheets("Sheet1").Select
Set excelSheet = Excel.ActiveWorkbook.Sheets("Sheet1")

RowNum = 1
Dim Header As Boolean
For Each elem In ThisDrawing.ModelSpace
If StrComp(elem.EntityName, "AcDbPolyline", 1) = 0 Then
RowNum = RowNum + 1
excelSheet.Cells(RowNum, Count + 1).Value = elem.Length

End If
Next elem

NumberOfAttributes = RowNum - 1

If NumberOfAttributes > 0 Then
excelSheet.Range(Cells(1, 1), Cells(1, 100)).Font.Bold = True

'For a specific set of attribute information this could
'be set to fit the exact number of columns.
excelSheet.Columns("A:G").AutoFit
'Rename the worksheet
Sheets("Sheet1").Name = "Attributes"
If Chart.Value = True Then
CreateChart (NumberOfAttributes)
End If
If Memo.Value = True Then
MakeMemos
End If
Else
MsgBox "No attributes found in the current drawing.", vbInformation
Excel.Quit
End If

Unload Me
End Sub



има още за дялане - сега хваща всички, а не само селектираните например, но бачка

TANSTAAFL! There AiNt Such Thing As A Free Lunch

Редактирано от onzi на 08.08.06 12:00.



Тема Re: Autodesk VIZ #2нови [re: Winter]  
АвторMинaвaщ (Нерегистриран)
Публикувано08.08.06 18:49



Ми точно "VIZ Render as ADT 2006" е с ограничена функционалност ! Т.е. входа с dwg файл става само от ADT-то .... Трябва да си намериш самостоятелен Autodesk® VIZ ->

намира се и версия 2007 .
Няма смисъл да пишем в тази ТЕМА и аз не разбирам тази и подобни програми .



Тема Re: Програмиране в ACADнови [re: StSt]  
Автор1 (Нерегистриран)
Публикувано09.08.06 15:19



GIF89aЦ]



Тема Re: ИЗЧИСЛЯВАНЕ И ИЗПИСВАНЕ ДЪЛЖИНИнови [re: onzi]  
АвторStSt (Нерегистриран)
Публикувано10.08.06 09:22



Вижда ми се прекалино сложно да вадиш дължините в Excel, да ги сумираш там и да ги връщаш отново в ACAD с Copy/Paste. Предлагам ти програмка, която изчислява дължините на линии, полилинии, сплайнове и дъги (предварително избрани) и прави МТЕХТ с описани по редове дължините на всички отделни групи примитиви, броя им и общата дължина.
Запиши я като *.LSP файл, зареди я с Tools/Load Application
(sp-long-type)


;сумира дължините на избрани елементи и ги описва
(defun SUM-LONG (/ i sp nab en VL-EN type-en )
(IF (SETQ
I 0
SP NIL
NAB (SSGET)
)
(PROGN
(VL-LOAD-COM)
(REPEAT (SSLENGTH NAB)
(SETQ EN (SSNAME NAB I)
I(1+ I)
VL-EN(vlax-ename->vla-object EN)
type-en (cdr(ASSOC 0 (entget en)))
);SETQ
(IF
(or
(= "LINE" type-en)
(= "LWPOLYLINE" type-en)
(= "ARC" type-en)
(= "SPLINE" type-en)

);or
(SETQ
LONG(vlax-curve-getDistAtParam VL-EN(vlax-curve-getEndParam VL-EN))
SP (APPEND SP (LIST (CONS EN LONG)))
);setq
);if LINE LWPOLYLINE ARC
);REPEAT
);PROGN
);IF NAB
sp
);SUM-LONG
;вади списък на дължините по тип на обекта от набора
(defun sp-long-type ( / sp sp-obj nn obj obj-line )
(if (setq sp (SUM-LONG))
(PROGN
(setq sp-obj nil)
(FOREACH nn sp
(setq obj (cdr(ASSOC 0 (entget (car nn)))))
(if (not (ASSOC obj sp-obj))
(setq sp-obj (APPEND sp-obj (list (list obj 0 0))))
);if
);FOREACH
(FOREACH nn sp
(setq obj (cdr(ASSOC 0 (entget (car nn))))
obj-line (ASSOC obj sp-obj)
obj-line (list (car obj-line)
(+ (nth 1 obj-line)(cdr nn))
(1+ (nth 2 obj-line)))
sp-obj (SUBST obj-line (ASSOC obj sp-obj)sp-obj)
);setq
);FOREACH
);PROGN
);if sp
(if (setq pti (getpoint "\nStart point of text: "))
(text-create sp-obj pti)
);if pti
sp-obj
);sp-long-type
;изписва текст със име, дължина и брой
(defun text-create (sp pti / txt nn all-long all-num )
(if (and sp
pti
);and
(PROGN
(setq txt "" all-long 0.0 all-num 0)
(FOREACH nn sp
(setq txt (strcat txt
(substr(strcat (nth 0 nn) " ")1 20)
(substr(strcat (rtos (nth 1 nn)2 2)" ") 1 10)
(substr(strcat (rtos (nth 2 nn)2 0)" ") 1 10)
"\\P")
all-long (+ all-long (nth 1 nn))
all-num (+ all-num (nth 2 nn)))
);FOREACH
(setq txt (strcat txt(substr(strcat " ОБЩО" " ")1 20)
(substr(strcat(rtos all-long 2 2)" ") 1 10)
(substr(strcat(rtos all-num 2 0)" ") 1 10)))
(COMMAND "mtext" pti (MAPCAR '+ pti (list (* (getvar "textsize")40.0) 10)) txt "")
);PROGN
);if sp
);text-create

Нарочно съм отделил функциите, защото на базата на тях може да се направят и други програми (например да се вадят дължините по слоеве, цвят и т.п.)



Тема Re: Autodesk VIZ #2нови [re: Mинaвaщ]  
АвторWinter (Нерегистриран)
Публикувано10.08.06 15:33



Много ти благодаря,Минаващ хубаво е да наминаваш в този клуб.


Абсолютно беше прав,че има линк,само че от Arhicad,но така или иначе ми даде вярната насока,за което благодаря.



Тема ObjectDCL - помощна програманови [re: StSt]  
АвторMинaвaщ (Нерегистриран)
Публикувано26.08.06 09:33



С мойте скромни познания по AutoCAD ... останах с впечатление , че създаването на AutoCAD® Dialog Control Language (DCL) файлове е малко трудна работа и ...
Преди време го бях видял , сега видях в един форум нова информация и реших , че може да е интересно ...
3dr Day Software - ObjectDCL
Само този жив сайт открих ->


Приложението беше платено навремето , сега май е мигрирало в "приложение с отворен код" т.е. безплатно ...


*извинявам се , ако съм заблудил някой !



Тема Re: Програмиране в ACADнови [re: 1]  
Авторnicksunkar (Нерегистриран)
Публикувано08.10.06 01:26



Hora kade ste izcheznali tozi forum ne e li aktiven вече. Kajete kade da vi pisha? Да не сте в друг форум



Тема Re: nicksunkarнови [re: nicksunkar]  
АвторMинaвaщ (Нерегистриран)
Публикувано08.10.06 15:29



Пиши тук ... аз незнам за друг форум .



Тема Re: Програмиране в ACADнови [re: StSt]  
АвторDim (Нерегистриран)
Публикувано20.10.06 15:01



Да попитам - как със VBA мога да взема координатите на точки(points) в един слой и да ги изпиша до точките?



Тема Re: Програмиране в ACADнови [re: Dim]  
АвторStSt (Нерегистриран)
Публикувано21.10.06 23:33



За VBA е малко сложно, но ти предлагам програмка на LISP
Долния текст го запиши в PTC.LSP
Зареди го с

(load "PTC")

избери точките или всички елементи от нужния слой (може с QSELECT) и стартирай

PTC

Ако текста е с неподходяща големина смени го с

TEXTSIZE

Ако разположението на текста не е подходящ в сорса промени числото след DTXT (сега е 1.0)


;ПРОСТАВЯ КООРТИНАТИ НА ТОЧКИ
(DEFUN C:PTC ()
(IF (AND
(SETQ NAB (SSGET))
(> (SSLENGTH NAB) 0)
);AND
(PROGN
(SETQ I 0 TS (GETVAR "TEXTSIZE") DTXT 1.0)
(REPEAT (SSLENGTH NAB)
(SETQ EN (SSNAME NAB I)
I(1+ I)
PT (CDR(ASSOC 10 (ENTGET EN)))
);SETQ
(IF (= "POINT"(CDR(ASSOC 0 (ENTGET EN))))
(COMMAND "TEXT" (POLAR PT (/ PI 4) (* DTXT TS))TS 0
(STRCAT (RTOS(NTH 0 PT)2 4)","(RTOS(NTH 1 PT)2 4)","(RTOS(NTH 1 PT)2 4))
(COMMAND))
);IF POINT
);REPEAT
);PROGN
);IF
);C:PTC




Тема Re: Програмиране в ACADнови [re: StSt]  
АвторDim (Нерегистриран)
Публикувано25.10.06 14:52



StSt, благодаря ти за отговора. Скриптът работи чудесно, но аз никак не го разбирам този синтаксис на Lisp :( и реших да го направя на VBA. Ето го и резултатът:

Sub Example_Coordinates()


Dim Selection As AcadSelectionSet
Dim Poly As AcadLWPolyline
Dim Obj As AcadEntity
Dim dblBound As Double
Dim PointMy As AcadPoint
Dim MTextObj As AcadMText
Dim adblCorner(0 To 2) As Double
Dim dblWidth As Double
Dim heightMy
Dim intNumDgtAftDcml As Integer
Dim strText As String
Dim newLayer As AcadLayer
'end----Dobaveno ot men

Set newLayer = ThisDrawing.Layers.Add("Koordinati")
ThisDrawing.ActiveLayer = newLayer
'Makes a selectionset.
On Error Resume Next
Set Selection = ThisDrawing.SelectionSets.Item("Select object.")
If Err Then
Set Selection = ThisDrawing.SelectionSets.Add("Select object.")
Err.Clear
Else
Selection.Clear
End If

ThisDrawing.Utility.Prompt vbCrLf & "Координатор !!!" & _
vbCrLf & "--------------------------------" & vbCrLf
heightMy = ThisDrawing.Utility.GetInteger("? Въведете височина на текста: ")
intNumDgtAftDcml = ThisDrawing.Utility.GetInteger("? Въведете брой символи след десетичната запетая: ")
dblWidth = 0
ThisDrawing.Utility.Prompt vbCrLf & "Изберете обекти:"

Selection.SelectOnScreen

For Each Obj In Selection

If Obj.ObjectName = "AcDbPolyline" Then

Set Poly = Obj
On Error Resume Next

dblBound = UBound(Poly.Coordinates)

x = 0
y = 1

For i = 0 To dblBound / 2

'MsgBox "X= " & Poly.Coordinates(x) & vbCrLf & "Y= " & Poly.Coordinates(y)
adblCorner(0) = Poly.Coordinates(x)
adblCorner(1) = Poly.Coordinates(y)
adblCorner(2) = 0#

strText = "X= " & FormatNumber(Poly.Coordinates(x), intNumDgtAftDcml) & vbCrLf & _
"Y= " & FormatNumber(Poly.Coordinates(y), intNumDgtAftDcml)

' Creates the mtext Object
Set MTextObj = ThisDrawing.ModelSpace.AddMText(adblCorner, dblWidth, strText)
MTextObj.Height = heightMy
MTextObj.Update
ZoomAll

If Err Then
Err.Clear
End If

x = x + 2
y = y + 2

Next

End If
If Obj.ObjectName = "AcDbPoint" Then
Set PointMy = Obj
On Error Resume Next
x = 0
y = 1
'MsgBox "X= " & PointMy.Coordinates(x) & " Y= " & PointMy.Coordinates(y)

adblCorner(0) = PointMy.Coordinates(x)
adblCorner(1) = PointMy.Coordinates(y)
adblCorner(2) = 0#
strText = "X= " & FormatNumber(PointMy.Coordinates(x), intNumDgtAftDcml) & vbCrLf & _
"Y= " & FormatNumber(PointMy.Coordinates(y), intNumDgtAftDcml)

' Creates the mtext Object
Set MTextObj = ThisDrawing.ModelSpace.AddMText(adblCorner, dblWidth, strText)
MTextObj.Height = heightMy
MTextObj.Update
ZoomAll


If Err Then
Err.Clear
End If
End If
Next Obj

End Sub




Тема Re: Програмиране в ACADнови [re: Dim]  
АвторStSt (Нерегистриран)
Публикувано25.10.06 18:05



За Dim
Това е, според мен, целта на един такъв форум - обмен на идеи.
Затова пуснах тази тема.
Периодично посещавам подобни форуми
(особено http://www.autocad.ru/cgi-bin/f1/board.cgi?p=23)
между другото препоръчвам на всички, интересуващи се от програмиране в ACAD да поглеждат и навън
Там хората поставят въпроси от текущата си практика и в повечето случаи получават отговор.
В нашия форум въпросите, в болшинството си са откъде да си сваля програмка (ама безплатна), как да си настроя програмата по-иначе и т.н.
Това е ниско ниво на потребление. Показва повърностни понятия и ниски изисквания.
Имаше доста изказвания във форума за това, че не може да се накарат хората да работят малко по-интелигентно - да ползват малко повече от възможностите, които им предлага софтуера, който ползват.
Самият факт, че ти имаш повишени изисквания към програмата, при това можеш и ги решаваш, ознчава че си на много високо ниво и ще очаквам подкрепата ти в инициативата да "заразяваме" повече хора да ползват възможностите на ползваните програми.



Тема Re: Програмиране в ACAD и пр.нови [re: StSt]  
АвторMинaвaщ (Нерегистриран)
Публикувано25.10.06 19:18



В отговор на:

StSt
... да "заразяваме" повече хора да ползват възможностите на ползваните програми.



Aз съм Несериозен и пропускам да довърша някои уговорки !
Но да си кажа мнението .
Понеже се намирам м/у знаещи и незнаещи имам Средно Статистическо Мнение по проблемите . Първият проблем според мен е настройване на Потребителският Външен Вид на Програмата . От него започва Заигравката/Зарибявката . Пак според мен , ако не можеш да ползваш/настроиш някое допълнително Приложение в Лесно Достъпна Форма за ползване то си остава в килера заедно с другите "хубави" неща .
Та относно примернo AutoCAD :
Имам Идея да направя разказ в картинки за част от настройването на Потребителският Външен Вид . Но се чудя за AutoCAD над 2006 или под 2006 да бъде ? И понеже не се мисля за Специалист , се чудя дали да го правя , т.е. ще имам нужда от редактор ?



Тема Re: StSt & Re:Mинaвaщнови [re: StSt]  
АвторDim (Нерегистриран)
Публикувано25.10.06 20:51



Не знам дали от алтруизъм

или от някакви други дълбоко залегнали в характера ми черти, но винаги съм се опитвал да споделям знанията, уменията и търсенията си и не съм се притеснявал да потърся помощта, когато ми е била необходима и съм щастлив, когато намеря себеподобни, готови да помагат безкористно. Благодаря



Тема Re: StSt & Re:Mинaвaщнови [re: Dim]  
Автор4vor (Нерегистриран)
Публикувано08.12.06 12:07



[image]C:\leta4.bmp[/image]



Тема Re: StSt & Re:Mинaвaщнови [re: 4vor]  
Авторvor (Нерегистриран)
Публикувано08.12.06 12:47



[IMG]http://img132.imageshack.us/img132/8317/leta4yc6.png[/IMG]



Тема Re: StSt & Re:Mинaвaщнови [re: vor]  
Автор FUSlON (непознат )
Публикувано27.11.08 15:37



Здравейте, аз съм нова тук и съм почитател на Аутолисп или по-точно на начина, по който можеш да си улесниш работата.. И съм нова и в Аутокад(както руснаците казват Автогад ;), както си личи от предния ми пост, ама бързо се уча.... :))) Програмирането не ми е била стихията, както електротехниката, но....





Тема За блокове с атрибутинови [re: StSt]  
Автор qL^2/8 (да питам аз...)
Публикувано10.12.08 16:49



Не знам дали има нещо общо с програмирането, ама блоковете с атрибути и динамичните блокове дават доста възможности за обикновения потребител, т.е. за мен.
Една задачка ме тормози. Направил съм си блок с 4 атрибута, които се изписват на един ред, като изречение. Дразни ме това, че когато стойностите на атрибутите са с по-къси думички - остават големи интервали между тях, а ако са с по-дълги - почват да застъпват следващия.

Дайте идея, сигурно е просто?



Тема Re: За блокове с атрибутинови [re: qL^2/8]  
АвторMинaвaщ (Нерегистриран)
Публикувано10.12.08 19:48



Верно , това си е за нова тема


Пускай нови теми , ако не откриеш такива. Но си мисля , че аз бях пуснал една за Атрибути и Field ....
На въпроса, аз не се сещам за нещо Точно по проблема. Предлагам да се заиграеш с Justify на Атрибутите . Може да изкочи нещо ...
Аз, когато ми се е случвало, ръчно ги размествам, но задължително с манипулатор от Динамичен Блок.




Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | (покажи всички)
Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.