filippov70 Posted October 18, 2011 Report Share Posted October 18, 2011 Доброго дня. Не поможет ли кто примером - у выбранных полилиний получить список координат их вершин. Очень хорошо если на JavaScript. Благодарствую. 1 Quote Link to comment Share on other sites More sharing options...
filippov70 Posted October 19, 2011 Author Report Share Posted October 19, 2011 (edited) <?xml version="1.0" encoding="utf-16"?> <package> <description>Скрипты</description> <command name="ExportCoord" weight="30" cmdtype="1" CapsDisable="0"> <description>Выгрузка координат</description> <script lang="JScript"><![CDATA[ var ss = ThisDrawing.ActiveSelectionSet; ThisDrawing.Utility.Prompt(ss.Count.toString()); // тут пишет 0, хотя много чего нарисовано и выбрано! ]]></script> </command> </package> Edited October 19, 2011 by filippov70 Quote Link to comment Share on other sites More sharing options...
ADAN Posted November 14, 2011 Report Share Posted November 14, 2011 Здравствуйте forEach(ThisDrawing.PickFirstSelectionSet, function(ent) { if (ent.EntityName != "AcDbPolyline") return; var vv = new VBArray(ThisDrawing.Utility.CreateSafeArrayFromVector(ent.Coordinates)); var coords = vv.toArray(); //echo(coords.length); echo(coords); }) function echo(msg) {ThisDrawing.Utility.Prompt(msg);} function forEach(coll, fn) {for (var enu = new Enumerator(coll); !enu.atEnd(); enu.moveNext()) fn(enu.item());} Quote Link to comment Share on other sites More sharing options...
filippov70 Posted November 14, 2011 Author Report Share Posted November 14, 2011 Спасибо, попробую. А так, я уже снёс наноКАД. Вот в автокадах и DraftSight (бесплатный) есть команда list или список. Я написал парсер для извлечения координат из окна результата этой команды. Жаль, что там только по отдельным контурам, если мультиполигоны.... Quote Link to comment Share on other sites More sharing options...
pers2 Posted April 6, 2012 Report Share Posted April 6, 2012 Здравствуйте forEach(ThisDrawing.PickFirstSelectionSet, function(ent) { if (ent.EntityName != "AcDbPolyline") return; var vv = new VBArray(ThisDrawing.Utility.CreateSafeArrayFromVector(ent.Coordinates)); var coords = vv.toArray(); //echo(coords.length); echo(coords); }) function echo(msg) {ThisDrawing.Utility.Prompt(msg);} function forEach(coll, fn) {for (var enu = new Enumerator(coll); !enu.atEnd(); enu.moveNext()) fn(enu.item());} Уважаемый, подскажите пожалуйста, куда прикрутить данное??? А то с лиспом под AutoCAD я разобрался быстро и пользовался много, а тут торможу... Quote Link to comment Share on other sites More sharing options...
alan_d Posted April 24, 2012 Report Share Posted April 24, 2012 Это скрипт на JScript. Сохраните этот текст в имяфайла.js и укажите этот файл в команде JS в nanoCAD. 1 Quote Link to comment Share on other sites More sharing options...
faram Posted April 25, 2012 Report Share Posted April 25, 2012 А можно ли сделать так что бы ,из текстового файла импортировать в nanocad. Заранее спасибо . Quote Link to comment Share on other sites More sharing options...
pers2 Posted April 26, 2012 Report Share Posted April 26, 2012 (edited) Это скрипт на JScript. Сохраните этот текст в имяфайла.js и укажите этот файл в команде JS в nanoCAD. Чёт ничего не получается... Если не трудно, по пунктам..., для тупых Edited April 26, 2012 by pers2 Quote Link to comment Share on other sites More sharing options...
slovak Posted April 26, 2012 Report Share Posted April 26, 2012 Это скрипт на JScript. Сохраните этот текст в имяфайла.js и укажите этот файл в команде JS в nanoCAD. Чёт ничего не получается... Если не трудно, по пунктам..., для тупых http://forum.nanocad.ru/index.php?showtopic=4026 Вот здесь описано как внести свою команду, пункт меню, или панель инструментов. А если просто запустить - то пишем в командной строке JS, жмем Enter, в появившемся окошке находим свой файл.js Или же меню "Сервис" --> "Скрипты" --> "JScripts". Quote Link to comment Share on other sites More sharing options...
ISL Posted April 19, 2013 Report Share Posted April 19, 2013 Чёт ничего не получается... Если не трудно, по пунктам..., для тупых Скрипт и правда не работает. Точнее, работает, но ничего не делает. Дело в том, что команда JS сбрасывает ThisDrawing.PickFirstSelectionSet, т.е. селекцию, которая перебирается скриптом. Поэтому координаты и не печатаются. Если сделать из скрипта команду, упаковав скрипт в NSF контейнер, и в настройках команды задать опцию caps="2" -- не сбрасывать селекцию, то скрипт будет работать. <?xml version="1.0" encoding="utf-16"?> <package> <command name="list_plines" weight="30" cmdtype="1" caps="2"> <description>list_plines</description> <script lang="JScript"><![CDATA[ forEach(ThisDrawing.PickFirstSelectionSet, function(ent) { if (ent.EntityName != "AcDbPolyline") return; var vv = new VBArray(ThisDrawing.Utility.CreateSafeArrayFromVector(ent.Coordinates)); var coords = vv.toArray(); //echo(coords.length); echo(coords); }) function echo(msg) {ThisDrawing.Utility.Prompt(msg);} function forEach(coll, fn) {for (var enu = new Enumerator(coll); !enu.atEnd(); enu.moveNext()) fn(enu.item());} ]]></script> </command> </package> Quote Link to comment Share on other sites More sharing options...
ISL Posted December 4, 2013 Report Share Posted December 4, 2013 А можно ли сделать так что бы из текстового файла импортировать в nanocad. Заранее спасибо. См. статьи Импорт координат из текстового файла в чертёж nanoCAD на классическом .NET API и Импорт координат из текстового файла в чертёж nanoCAD на MultiCAD.NET API. Quote Link to comment Share on other sites More sharing options...
Lion007 Posted December 5, 2013 Report Share Posted December 5, 2013 Вдогонку к предыдущему посту : читаем http://forum.nanocad.ru/index.php?showtopic=5010 там есть и чтение и создание полилиний на встроеных скриптах без всякого .NET Quote Link to comment Share on other sites More sharing options...
andy-lazo Posted December 12, 2013 Report Share Posted December 12, 2013 Что-то непонятно куда импортируются координаты данным скриптом? Или у меня не работает? Quote Link to comment Share on other sites More sharing options...
Lion007 Posted December 12, 2013 Report Share Posted December 12, 2013 каким именно? а то там разные варианты есть... есть просто распечатка координат вертексов полилиний (в окошко вывода). есть, наоборот, чтение координат из файла и создание по ним полилиний. Quote Link to comment Share on other sites More sharing options...
cherney Posted June 24, 2014 Report Share Posted June 24, 2014 Программный код позволяет создать таблицу с координатами полилинии, при этом на чертеже создаются обозначения полилинии буквами или цифрами. Единственное - данный код не запускается под Нанокад 5.1, пишет не та версия. ;; ==================================================================== ;; ;; ;; ;; TABCORD.LSP - Fills the table in co-ordinates of LwPolyline ;; ;; vertexes, and also the centres and radiuses ;; ;; of arc segments. Marks vertexes of LwPolyline ;; ;; accordingly data in the table by digits or ;; ;; letters. Look section 'ADJUSTMENT' for ;; ;; acquaintance with options. ;; ;; ;; ;; ==================================================================== ;; ;; ;; ;; Command(s) to call: TABCORD ;; ;; ;; ;; Select LwPolyline and after the table will be generated ;; ;; insert it into the necessary place. After that vertexes of ;; ;; polylines will be marked by figures or letters. ;; ;; ;; ;; ==================================================================== ;; ;; ;; ;; THIS PROGRAM AND PARTS OF IT MAY REPRODUCED BY ANY METHOD ON ANY ;; ;; MEDIUM FOR ANY REASON. YOU CAN USE OR MODIFY THIS PROGRAM OR ;; ;; PARTS OF IT ABSOLUTELY FREE. ;; ;; ;; ;; THIS PROGRAM PROVIDES 'AS IS' WITH ALL FAULTS AND SPECIFICALLY ;; ;; DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS ;; ;; FOR A PARTICULAR USE. ;; ;; ;; ;; ==================================================================== ;; ;; ;; ;; V1.3, 14th Aug 2008, Riga, Latvia ;; ;; © Aleksandr Smirnov (ASMI) ;; ;; For AutoCAD 2005 - 2008 (isn't tested in a next versions) ;; ;; ;; ;; http://www.asmitools.com ;; ;; ;; ;; ==================================================================== ;; (defun c:tabcord(/ aCen cAng cCen cPl cRad cReg fDr it lCnt lLst mSp pCen pT1 pT2 ptLst R tHt tLst vlaPl vlaTab vLst cTxt oldCol nPl clFlg actDoc tPt1 tPt2 cAng tiPt oSnp *error* mType mHt oZin cAcu dHead hStr hHt w1 w2 w3 isPer isAre pMul aMul lWrt aVal xVal yVal) ;;; **************************************************************** ;;; *************************** ADJUSTMENT ************************* ;;; **************************************************************** (setq mType t) ; Markups mode. T - digits, NIL - letters (setq tHt -1.0) ; Table text size. Positive - absolute, ; negative multiplayer to TEXTSIZE variable (setq mHt -2.0) ; Markups text size. Positive - absolute, ; negative - multiplayer to TEXTSIZE variable (setq cAcu 4) ; Precision of coordinates (from 0 to 8) (setq dHead nil) ; If T delete table header, if NIL not delete (setq hStr "Land # ") ; Standard header (if dHead not equal T) (setq hHt -1.25) ; Header text size. Positive - absolute, ; negative - multiplayer to TEXTSIZE variable (setq w1 -10.0) ; 'Point' column width. Positive - absolute, ; negative - multiplayer to TEXTSIZE variable (setq w2 -20.0) ; 'X' and 'Y' colums width. Positive - absolute, ; negative - multiplayer to TEXTSIZE variable (setq w3 -12.0) ; 'Radius' column width. Positive - absolute, ; negative - multiplayer to TEXTSIZE variable (setq isPer T) ; if T adds perimeter row (setq isAre T) ; if T adds area row (setq isGCen T) ; if T adds center of gravity row (setq pMul 0.001) ; perimeter multiplayer (setq aMul 0.0001) ; area multiplayer ;;; **************************************************************** ;;; ************************* END ADJUSTMENT *********************** ;;; **************************************************************** (if(minusp tHt) (setq tHt(getvar "TEXTSIZE")) ); end if (if(minusp mHt) (setq mHt(*(abs mHt)(getvar "TEXTSIZE"))) ); end if (if(minusp hHt) (setq hHt(*(abs hHt)(getvar "TEXTSIZE"))) ); end if (if(minusp w1) (setq w1(*(abs w1)(getvar "TEXTSIZE"))) ); end if (if(minusp w2) (setq w2(*(abs w2)(getvar "TEXTSIZE"))) ); end if (if(minusp w3) (setq w3(*(abs w3)(getvar "TEXTSIZE"))) ); end if (vl-load-com) (defun Get_Acad_Ver(Gen_Only) (if Gen_Only (substr(getvar "ACADVER") 1 2) (substr(getvar "ACADVER") 1 4) ); end if ); and of Get_Acad_Ver (defun Extract_DXF_Values(Ent Code) (mapcar 'cdr (vl-remove-if-not '(lambda(a)(=(car a)Code)) (entget Ent))) ); end of (defun *error*(msg) (setvar "CMDECHO" 1) (if oSnp(setvar "OSMODE" oSnp)) (if oZin(setvar "DIMZIN" oZin)) (if mSp(vla-EndUndoMark actDoc)) (princ) ); end of *error* (defun Alph_Num(Counter / lLst cRes) (setq lLst '("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z")) (if(<= 1.0(setq cRes(/ Counter 26.0))) (strcat(itoa(fix cRes)) (nth(- Counter(* 26(fix cRes)))lLst)) (nth Counter lLst) ); end if ); end of Alph_Num (if(<= 16.1(atof(Get_Acad_Ver nil))) (progn (if (and (setq cPl(entsel "\nSelect LwPoliline > ")) (= "LWPOLYLINE"(car(Extract_DXF_Values(car cPl)0))) ); end and (progn (princ "\nPlease Wait... \n") (setq vlaPl(vlax-ename->vla-object(car cPl)) ptLst(mapcar 'append (setq vLst(Extract_DXF_Values(car cPl)10)) (mapcar 'list(Extract_DXF_Values(car cPl)42))) r 2 lCnt 0 tLst '((1 0 "Point")(1 1 "X")(1 2 "Y")(1 3 "Radius")) actDoc(vla-get-ActiveDocument (vlax-get-acad-object)) mSp(vla-get-ModelSpace actDoc) ); end setq (setvar "CMDECHO" 0) (setq oSnp(getvar "OSMODE")) (setq oZin(getvar "DIMZIN")) (setvar "DIMZIN" 0) (vla-StartUndoMark actDoc) (foreach vert ptLst (setq vert(trans vert 0 1) tLst(append tLst (list(list r 0(if mType (itoa(1+ lCnt)) (Alph_Num lCnt))) (list r 1(rtos(car vert)2 cAcu)) (list r 2(rtos(cadr vert)2 cAcu)) (list r 3 "")))) (if(and (/= 0.0(last vert)) (setq pt1(vlax-curve-GetPointAtParam vlaPl lCnt)) (setq pt2(vlax-curve-GetPointAtParam vlaPl(1+ lCnt))) ); end and (setq r(1+ r) cRad(abs(/(distance pt1 pt2) 2(sin(/(* 4(atan(abs(last vert))))2)))) aCen(vlax-curve-GetPointAtParam vlaPl(+ 0.5 lCnt)) fDr(vlax-curve-getFirstDeriv vlaPl (vlax-curve-getParamAtPoint vlaPl aCen)) pCen(trans (polar aCen(-(if(minusp(last vert)) pi(* 2 pi)) (atan(/(car fDr)(cadr fDr))))cRad)0 1) tLst(append tLst(list (list r 0 "center") (list r 1(rtos(car pCen)2 cAcu)) (list r 2(rtos(cadr pCen)2 cAcu)) (list r 3(rtos cRad 2 cAcu)))) ); end setq ); end if (setq r(1+ r) lCnt(1+ lCnt)) ); end foreach (setq vlaTab(vla-AddTable mSp (vlax-3D-point '(0 0 0)) (+ 1(/(length tLst)4)) 4 (* 3 tHt)w2)) (vla-put-regeneratetablesuppressed vlaTab :vlax-true) (foreach i tLst (vl-catch-all-apply 'vla-SetText(cons vlaTab i)) (vla-SetCellTextHeight vlaTab(car i)(cadr i)tHt) (vla-SetCellAlignment vlaTab(car i)(cadr i)acMiddleCenter) ); end foreach (if(or isPer isAre) (progn (vla-InsertRows vlaTab r(* 0.05 tHt)1) (vla-SetCellTextHeight vlaTab r 0(* 0.05 tHt)) (setq r(1+ r)) ); end progn ); end if (if isPer (progn (if(= :vlax-true(vla-get-Closed vlaPl)) (setq lWrt "Perimeter") (setq lWrt "Length") ); end if (vla-InsertRows vlaTab r tHt 1) (vla-SetText vlaTab r 0 lWrt) (vla-SetText vlaTab r 1 (rtos(*(vla-get-Length vlaPl)pMul)2 cAcu)) (vla-SetCellTextHeight vlaTab r 0 tHt) (vla-SetCellTextHeight vlaTab r 1 tHt) (setq r(1+ r)) ); end progn ); end if (if isAre (progn (if(= :vlax-true(vla-get-Closed vlaPl)) (setq aVal (rtos(*(vla-get-Area vlaPl)aMul)2 cAcu)) (setq aVal "Not closed contour") ); end if (vla-InsertRows vlaTab r tHt 1) (vla-SetText vlaTab r 0 "Area") (vla-SetText vlaTab r 1 aVal) (vla-SetCellTextHeight vlaTab r 0 tHt) (vla-SetCellTextHeight vlaTab r 1 tHt) (setq r(1+ r)) ); end progn ); end if (if(= :vlax-true(vla-get-Closed vlaPl)) (progn (setq nPl(vla-Copy vlaPl)) (command "_.region" (entlast) "") (setq cCen(vlax-get(setq cReg (vlax-ename->vla-object(entlast)))'Centroid)) (vla-Delete cReg) (setq clFlg T) ); end progn ); end if (if isAre (progn (if cCen (setq xVal(rtos(car cCen)2 cAcu) yVal (rtos(cadr cCen)2 cAcu)) (setq xVal "-" yVal "-") ); end if (vla-InsertRows vlaTab r tHt 1) (vla-SetText vlaTab r 0 "Gravity Center") (vla-SetText vlaTab r 1 xVal) (vla-SetText vlaTab r 2 yVal) (vla-SetCellTextHeight vlaTab r 0 tHt) (vla-SetCellTextHeight vlaTab r 1 tHt) (vla-SetCellTextHeight vlaTab r 2 tHt) (setq r(1+ r)) ); end progn ); end if (vla-put-VertCellMargin vlaTab (* 0.75 tHt)) (vla-SetColumnWidth vlaTab 0 w1) (vla-SetColumnWidth vlaTab 3 w3) (if(vlax-property-available-p vlaTab 'RepeatTopLabels) (vla-put-RepeatTopLabels vlaTab :vlax-true) ); end if (if(vlax-property-available-p vlaTab 'BreakSpacing) (vla-put-BreakSpacing vlaTab (* 3 tHt)) ); end if (if dHead (vla-DeleteRows vlaTab 0 1) (progn (vla-SetText vlaTab 0 0 hStr) (vla-SetCellTextHeight vlaTab 0 0 hHt) ); end progn ); end if (vla-put-regeneratetablesuppressed vlaTab :vlax-true) (vla-put-Height vlaTab(* 1.75(/(length tLst)4))) (princ "\n<<< Place Table >>> ") (command "_.copybase" (trans '(0 0 0)0 1)(entlast) "") (command "_.erase" (entlast) "") (command "_.pasteclip" pause) (setq lCnt 0) (foreach v vLst (if clFlg (setq cAng(angle cCen(trans v 0 1)) iPt(polar v cAng (* 2 mHt))) (setq tPt1(vlax-curve-GetPointAtParam vlaPl (- lCnt 0.0000001)) tPt2(vlax-curve-GetPointAtParam vlaPl (+ lCnt 0.0000001)) iPt(polar v(+(* pi 0.5)(if(minusp (setq cAng(angle tPt1(if tPt2 tPt2 (polar tPt1(* 0.5 pi)0.0000001))))) cAng(- cAng)))(* 2 mHt)) ); end setq ); end if (setvar "OSMODE" 0) (setq cTxt(vla-AddText mSp (if mType(itoa(1+ lCnt))(Alph_Num lCnt)) (vlax-3d-point iPt) mHt) tiPt(vla-get-InsertionPoint cTxt) lCnt(1+ lCnt) ); end setq (vla-put-Alignment cTxt 10) (vla-put-TextAlignmentPoint cTxt tiPt) (setq oldCol(getvar "CECOLOR")) (setvar "CECOLOR" "1") (command "_.circle"(trans v 0 1) (/ mHt 4)) (setvar "CECOLOR" oldCol) ); end foreach (setvar "DIMZIN" oZin) (setvar "OSMODE" oSnp) (setvar "CMDECHO" 1) (vla-EndUndoMark actDoc) ); end progn (princ "\n<!> It isn't LwPolyline! Quit. <!> ") ); end if ); end progn (princ "\n<!> This program works in AutoCAD 2005+ only! <!> " ) );end if (gc) (princ) ); end of c:tabcord (princ "\n[info] http:\\\\www.AsmiTools.com [info]") (princ "\n[info] Type TABCORD to fill table of LwPolyline coordinates [info]") Quote Link to comment Share on other sites More sharing options...
Maxim2393 Posted August 18, 2016 Report Share Posted August 18, 2016 Добрый день подскажите уже пол дня мучаюсь. Не могу запустить скрипт для выбранных полилиний получить список координат их вершин. Вставляю это: <?xml version="1.0" encoding="utf-16"?> <package> <command name="list_plines" weight="30" cmdtype="1" caps="2"> <description>list_plines</description> <script lang="JScript"><![CDATA[ forEach(ThisDrawing.PickFirstSelectionSet, function(ent) { if (ent.EntityName != "AcDbPolyline") return; var vv = new VBArray(ThisDrawing.Utility.CreateSafeArrayFromVector(ent.Coordinates)); var coords = vv.toArray(); //echo(coords.length); echo(coords); }) function echo(msg) {ThisDrawing.Utility.Prompt(msg);} function forEach(coll, fn) {for (var enu = new Enumerator(coll); !enu.atEnd(); enu.moveNext()) fn(enu.item());} ]]></script> </command> </package> Выдает ошибку: Команда: js err: "Ошибка компиляции Microsoft JScript" raised an exception "Синтаксическая ошибка" at line 1 pos 0 <?xml version="1.0" encoding="utf-16"?> ^ Ни как не могу запустить этот скрип. А очень надо!!!1 Поделитесь пожалуста готовым и рабочим. Нанокад5,1 Фри. Quote Link to comment Share on other sites More sharing options...
ISL Posted August 18, 2016 Report Share Posted August 18, 2016 Скорее всего дело в кодировке файла, полученного после копипаста кода с форума. Кодировка файла должна соответствовать тому, что написано в его первой строке: Quote Link to comment Share on other sites More sharing options...
Stuk Posted July 6, 2017 Report Share Posted July 6, 2017 Доброго дня. У меня обратная задача: необходимо по текстовому массиву данных, состоящих из Х и У координат вершин, построить полилинию. Сделать это желательно за одну команду, поскольку точек несколько тысяч. Quote Link to comment Share on other sites More sharing options...
Robink Posted July 7, 2017 Report Share Posted July 7, 2017 Доброго дня. У меня обратная задача: необходимо по текстовому массиву данных, состоящих из Х и У координат вершин, построить полилинию. Сделать это желательно за одну команду, поскольку точек несколько тысяч. Тут надо смотреть на Ваш текстовый массив, в каком он формате. Quote Link to comment Share on other sites More sharing options...
Stuk Posted July 7, 2017 Report Share Posted July 7, 2017 Изначально был в эксел, потом перевел в ворд. Разделитель мехду Х и У - запятая, между соседними парами координат - знак абзаца. При копировании в командную строку нанокада копируется только первая пара координат, хотя в автокаде по такой схеме вроде как можно сразу все точки построить. Quote Link to comment Share on other sites More sharing options...
Stuk Posted July 7, 2017 Report Share Posted July 7, 2017 Изначально был в эксел, потом перевел в ворд. Разделитель мехду Х и У - запятая, между соседними парами координат - знак абзаца. При копировании в командную строку нанокада копируется только первая пара координат, хотя в автокаде по такой схеме вроде как можно сразу все точки построить. Quote Link to comment Share on other sites More sharing options...
Robink Posted July 7, 2017 Report Share Posted July 7, 2017 Изначально был в эксел, потом перевел в ворд. Разделитель мехду Х и У - запятая, между соседними парами координат - знак абзаца. При копировании в командную строку нанокада копируется только первая пара координат, хотя в автокаде по такой схеме вроде как можно сразу все точки построить. Десятичный разделитель какой у координат? (если не целые) Между полилиниями какой разделитель? Выложите координаты, лучше в эксель. Quote Link to comment Share on other sites More sharing options...
Stuk Posted July 7, 2017 Report Share Posted July 7, 2017 Десятичный разделитель - точка, по поводу разделителя полилиний не могли бы Вы уточнить, о чем идет речь, у меня задача по множеству координат нарисовать одну полилинию с большим количеством вершин. Файл с координатами готов выложить, если подскажете, как это сделать. Quote Link to comment Share on other sites More sharing options...
Kreator Posted September 4, 2017 Report Share Posted September 4, 2017 Задача ещё актуальна? Файл можно выложить в Расширенной форме (кнопка снизу справа). Quote Link to comment Share on other sites More sharing options...
Stuk Posted September 4, 2017 Report Share Posted September 4, 2017 Спасибо за ответ. Задачу решил штатными средствами автокада. 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.