swell{d} Posted November 28, 2012 Report Share Posted November 28, 2012 пример работающего кода vbs (рисуем разрез стены с армированием) Dim ms Set ms = ThisDrawing.ModelSpace Dim ut Set ut = ThisDrawing.Utility Dim oLine Dim oDim Dim point, point_sa Dim xx Dim yy point = ut.GetPoint("0,0,0", "Укажите точку 1") point_sa = ut.CreateSafeArrayFromVector(point) xx = int(point_sa(0)) yy = int(point_sa(1)) Dim point2, point_sa2 Dim xx2 Dim yy2 point2 = ut.GetPoint("0,0,0", "Укажите точку 2") point_sa2 = ut.CreateSafeArrayFromVector(point2) xx2 = int(point_sa2(0)) yy2 = int(point_sa2(1)) dim dlina dlina = xx2-xx dim tsten tsten = 200 dim dist dist = 110 dim step step = 400 dim scale scale = 2 dim kray kray = (tsten-dist)/2 dim q q = int((dlina/scale - kray*2 - dist*2)/step) dim dobor dobor = 0 if (dlina/scale - kray*2 - dist*2)-q*step < 100 then q = q-1 dobor = int(dlina/scale - kray*2 - dist*2 - q*step) end if line 0,0,tsten*scale,0 oLine.Layer = "КЖ_элементы Стм Фсм К Б" line tsten*scale,0,dlina-tsten*scale,0 oLine.Layer = "КЖ_элементы Стм Фсм К Б" line dlina-tsten*scale,0,dlina,0 oLine.Layer = "КЖ_элементы Стм Фсм К Б" line dlina,0,dlina,tsten*scale oLine.Layer = "КЖ_элементы Стм Фсм К Б" line dlina,tsten*scale,dlina-tsten*scale,tsten*scale oLine.Layer = "КЖ_элементы Стм Фсм К Б" line dlina-tsten*scale,tsten*scale,tsten*scale,tsten*scale oLine.Layer = "КЖ_элементы Стм Фсм К Б" line tsten*scale,tsten*scale,0,tsten*scale oLine.Layer = "КЖ_элементы Стм Фсм К Б" line 0,tsten*scale,0,0 oLine.Layer = "КЖ_элементы Стм Фсм К Б" line kray*scale-20,kray*scale,(kray+dist)*scale+20,kray*scale line (kray+dist)*scale,kray*scale-20,(kray+dist)*scale,(kray+dist)*scale+20 line (kray+dist)*scale+20,(kray+dist)*scale,kray*scale-20,(kray+dist)*scale line kray*scale,(kray+dist)*scale+20,kray*scale,kray*scale-20 circle kray*scale+20,kray*scale+20,20 circle (kray+dist)*scale-20,kray*scale+20,20 circle (kray+dist)*scale-20,(kray+dist)*scale-20,20 circle kray*scale+20,(kray+dist)*scale-20,20 DimAlignedText 0,-50,kray*scale,-50,0,-200,kray DimAlignedText kray*scale,-50,(kray+dist)*scale,-50,0,-200,dist line dlina-kray*scale+20,kray*scale,dlina-(kray+dist)*scale-20,kray*scale line dlina-(kray+dist)*scale,kray*scale-20,dlina-(kray+dist)*scale,(kray+dist)*scale+20 line dlina-(kray+dist)*scale-20,(kray+dist)*scale,dlina-kray*scale+20,(kray+dist)*scale line dlina-kray*scale,(kray+dist)*scale+20,dlina-kray*scale,kray*scale-20 circle dlina-kray*scale-20,kray*scale+20,20 circle dlina-(kray+dist)*scale+20,kray*scale+20,20 circle dlina-(kray+dist)*scale+20,(kray+dist)*scale-20,20 circle dlina-kray*scale-20,(kray+dist)*scale-20,20 DimAlignedText dlina-kray*scale,-50,dlina,-50,0,-200,kray DimAlignedText dlina-(kray+dist)*scale,-50,dlina-kray*scale,-50,0,-200,dist dim i for i=1 to q line (kray+dist+i*step)*scale,kray*scale-20,(kray+dist+i*step)*scale,(kray+dist)*scale+20 circle (kray+dist+i*step)*scale+20,kray*scale+20,20 circle (kray+dist+i*step)*scale+20,(tsten-kray)*scale-20,20 next if q = 0 then else if q = 1 then DimAlignedText (kray+dist)*scale,-50,(kray+dist+q*step)*scale,-50,0,-200,step else DimAlignedText (kray+dist)*scale,-50,(kray+dist+q*step)*scale,-50,0,-200,step&"х"&q&"="&q*step end if end if if dobor = 0 then DimAlignedText (kray+dist+q*step)*scale,-50,dlina-(kray+dist)*scale,-50,0,-200,int((dlina/scale - kray*2 - dist*2 - q*step)/5)*5 else line (kray+dist+q*step)*scale+int(dobor/2)*scale,40*scale,(kray+dist+q*step)*scale+int(dobor/2)*scale,(tsten-40)*scale circle (kray+dist+q*step)*scale+20+int(dobor/2)*scale,25*scale+50,20 circle (kray+dist+q*step)*scale+20+int(dobor/2)*scale,(tsten-25)*scale-50,20 DimAlignedText (kray+dist+q*step)*scale,-50,(kray+dist+q*step)*scale+int(dobor/2)*scale,-50,0,-200,int(dobor/10)*5 DimAlignedText (kray+dist+q*step)*scale+int(dobor/2)*scale,-50,(kray+dist+q*step)*scale+dobor*scale,-50,0,-200,int(dobor/10)*5 end if Sub Line(x1,y1,x2,y2) Set oLine = ms.AddLine(CStr(xx+x1)+","+CStr(yy+y1)+","+CStr(0), CStr(xx+x2)+","+CStr(yy+y2)+","+CStr(0)) oLine.Layer = "КЖ_арматура элементов" End Sub Sub DimAlignedText(x1,y1,x2,y2,dx,dy,dimtext) Set oDim = ms.AddDimAligned(CStr(xx+x1)+","+CStr(yy+y1)+","+CStr(0), CStr(xx+x2)+","+CStr(yy+y2)+","+CStr(0),CStr(xx+dx)+","+CStr(yy+dy)) oDim.Layer = "КЖ_размеры" oDim.TextOverride = dimtext oDim.ScaleFactor = "40" oDim.TextInside = true End Sub Sub circle(x1,y1,dx) Set oLine = ms.AddCircle(CStr(xx+x1)+","+CStr(yy+y1)+","+CStr(0), CStr(dx)) oLine.Layer = "КЖ_арматура элементов" End Sub Quote Link to comment Share on other sites More sharing options...
Lion007 Posted November 28, 2012 Report Share Posted November 28, 2012 ну ядрена копоть! Dim pline, cc, coords(5), pline_coords_str 'method 1 coords(0) = 0 coords(1) = 0 coords(2) = 10 coords(3) = 20 coords(4) = 30 coords(5) = 40 set pline = ThisDrawing.ModelSpace.AddPolyline(coords) 'method 2 pline_coords_str = "0;0;0;100;0;0;100;100;0;0;100;0;0;0;0" set pline = ThisDrawing.ModelSpace.AddPolyline(ThisDrawing.Utility.CreateTypedArrayFromJSArray (5, CStr(pline_coords_str))) АХТУНГ : для метода 2 есть 2 тонких момента 1) стринг с координатами надо явно кастировать к стрингу - (CStr(pline_coords_str) 2) результат CreateTypedArrayFromJSArray нельзя засовывать в переменную, надо использовать сразу все это из-за того, что иначе лишний референс получается. Quote Link to comment Share on other sites More sharing options...
swell{d} Posted November 28, 2012 Report Share Posted November 28, 2012 (edited) о, спасибо! а такой вопрос ещё вдогонку. я некоторые координаты вычисляю, и если есть деление, то ясен пень иногда получаются дробные значения, типа "0,5" и когда передаю их в AddLine, они воспринимаются не как одна координата, а как две (через запятую) =( приходится загонять вычисления в int() можно это как-то иначе решить? вот так, например, норм: Set oLine = ms.AddLine(CStr(int(xx+x1))+","+CStr(int(yy+y1))+","+CStr(0), CStr(int(xx+x2))+","+CStr(int(yy+y2))+","+CStr(0)) а, ну и самый взрыв мозга - как в полилинию добавить дугу сразу? =) Edited November 28, 2012 by swell{d} Quote Link to comment Share on other sites More sharing options...
Lion007 Posted November 28, 2012 Report Share Posted November 28, 2012 дробные значения надо загонять через точку! ("0.5") а дугу в полилинию сразу - никак. то есть вообще. там на самом деле для каждого вертекса куча параметров, на все сочетания никаких методов создания не напасешься. так что создать "как проще", а потом рихтовать по месту. Quote Link to comment Share on other sites More sharing options...
swell{d} Posted November 28, 2012 Report Share Posted November 28, 2012 жалко. а то у меня есть такие миленькие каркасы, нарисованные полилинией. думал сделать их вставку на кнопку. придётся копировать уже нарисованные.... Quote Link to comment Share on other sites More sharing options...
Lion007 Posted November 28, 2012 Report Share Posted November 28, 2012 Ну, вообще-то ни одна зараза не мешает написать свою обертку вокруг создания полилайна, и просунуть в нее все, что нужно, для создания дуговых сегментов. 2 Quote Link to comment Share on other sites More sharing options...
swell{d} Posted November 28, 2012 Report Share Posted November 28, 2012 Да подожди ты, мы полчаса назад только разобрались как полилинию рисовать... =) Quote Link to comment Share on other sites More sharing options...
BOSS_2014 Posted January 25, 2014 Report Share Posted January 25, 2014 (edited) Вопрос по LISP Чем можно заменить функцию nentsel (которая отсутствует в NANOCAD)? Прилагаемый файл не работает в NANOCAD mt2ml.lsp NENTSEL функция не определена ошибка: неверный тип аргумента: LENTITYP: nil Edited January 25, 2014 by BOSS_2014 Quote Link to comment Share on other sites More sharing options...
gomer Posted March 22, 2014 Report Share Posted March 22, 2014 Задам вопрос здесь, хотя скорей всего это и не связано с программированием. Суть в том, что простенькая функция: (defun pl_styles (/ lst lyr) (setq lst (list (cdr (assoc 2 (tblnext "STYLE" T))))) (while (setq lyr (tblnext "STYLE")) (setq lst (cons (cdr (assoc 2 lyr)) lst)) ) (reverse lst) ) возвращает один "лишний" стиль "". Через объектную модель этот стиль тоже найти можно. Значит он сидит где-то в базе чертежа? Но нанокад его не отображает, то есть только программным способом к нему можно получить доступ. Если мне не изменяет память, эта ошибка была в ранних версиях брикскада, а значит происходит от библиотек ода, имхо. Собственно вопрос: это нормально, если нет будет ли исправлено и когда, если будет Quote Link to comment Share on other sites More sharing options...
gomer Posted March 22, 2014 Report Share Posted March 22, 2014 Как насчет добавить переменную errno? Quote Link to comment Share on other sites More sharing options...
swell{d} Posted April 6, 2014 Report Share Posted April 6, 2014 2 Quote Link to comment Share on other sites More sharing options...
borisich37 Posted May 15, 2014 Report Share Posted May 15, 2014 Может быть кто-нибудь знает в чем секрет?) Пишу скрипт на JS. В Нанокаде 5.0 при ошибке в скрипте он выдавал описание, из-за чего ошибка, в какой строке скрипта. В Нанокаде 6.0 при ошибках он просто ничего не делает, никаких сообщений об ошибке не выводит. Quote Link to comment Share on other sites More sharing options...
ahapych Posted July 4, 2014 Report Share Posted July 4, 2014 (edited) Здравствуйте! Подскажите, а имеется ли справочник по javascript функциям? Было бы очень интересно полистать. (в справке к программе не узрел) А конкретно сейчас меня интересует функция заливки области. Edited July 4, 2014 by ahapych Quote Link to comment Share on other sites More sharing options...
dows Posted July 4, 2014 Report Share Posted July 4, 2014 это не относится к java...смотрите SDK по ModelSpace nanoCAD... Quote Link to comment Share on other sites More sharing options...
ahapych Posted July 8, 2014 Report Share Posted July 8, 2014 это не относится к java...смотрите SDK по ModelSpace nanoCAD... Извините, но нашел только функции для построения линий, лучей, окружностей, эллипсов, однострочного и многострочного текста. Вряд ли список возможностей ограничивается этим... Quote Link to comment Share on other sites More sharing options...
Lion2032 Posted November 5, 2014 Report Share Posted November 5, 2014 Помогите нужно установить слой 0 текущим. Все перепробовал не получается. Что я делаю не так? 'Подпрограмма-функция установления слоя "0" текущим. 'Толщина линии задана жестко - по слою Sub LAYER_0() Dim layer As AcadLayer 'переменная типа "слой" Set layer = ThisDrawing.Layers.Add("0") 'создаем новый слой и присваиваем ему имя layer.Color = 7 'устанавливаем цвет слоя layer.LineWeight = acLnWtByLayer 'толщина линии - "по слою" ThisDrawing.ActiveLayer = layer ' переключаем текущий слой на созданный End Sub Quote Link to comment Share on other sites More sharing options...
Lion007 Posted November 6, 2014 Report Share Posted November 6, 2014 скорее всего, засада в том, что слой 0 создавать не надо - он всегда есть. так что всего и делов-то : ThisDrawing.ActiveLayer = ThisDrawing.Layers.Item("0") или даже ThisDrawing.ActiveLayer = ThisDrawing.Layers("0") Quote Link to comment Share on other sites More sharing options...
Lion2032 Posted November 6, 2014 Report Share Posted November 6, 2014 (edited) 'Подпрограмма-функция установления текущим слоем "0". 'Функция устанавливает текущим слой "0" 'Толщина линии и цвет заданы жестко - по слою Sub LAYER_0() Dim layer0 As AcadLayer 'переменная типа "слой" Set layer0.Color = Colorlayer 'устанавливаем цвет слоя - "по слою" layer0.LineWeight = acLnWtByLayer 'толщина линии - "по слою" ThisDrawing.ActiveLayer = ThisDrawing.Layers.Item("0") ' устанавливаем текущий слой на "0" End Sub не работает почему-то. Хотя вот эта часть работает без нареканий: 'Подпрограмма-функция создания слоя и установления его текущим. 'Функция создает слой присваивает ему имя, цвет (задается пользователем) и устанавливает его текущим 'Толщина линии задана жестко - по слою Sub MY_LAYER(Namelayer As String, Colorlayer As Byte) Dim layer As AcadLayer 'переменная типа "слой" Set layer = ThisDrawing.Layers.Add(Namelayer) 'создаем новый слой и присваиваем ему имя layer.Color = Colorlayer 'устанавливаем цвет слоя - "по слою" layer.LineWeight = acLnWtByLayer 'толщина линии - "по слою" ThisDrawing.ActiveLayer = layer ' переключаем текущий слой на созданный End Sub Edited November 6, 2014 by Lion2032 Quote Link to comment Share on other sites More sharing options...
Lion007 Posted November 6, 2014 Report Share Posted November 6, 2014 'Подпрограмма-функция установления текущим слоем "0". 'Функция устанавливает текущим слой "0" 'Толщина линии и цвет заданы жестко - по слою Sub LAYER_0() Dim layer0 As AcadLayer 'переменная типа "слой" Set layer0.Color = Colorlayer 'устанавливаем цвет слоя - "по слою" layer0.LineWeight = acLnWtByLayer 'толщина линии - "по слою" ThisDrawing.ActiveLayer = ThisDrawing.Layers.Item("0") ' устанавливаем текущий слой на "0" End Sub тогда уж не так... Sub LAYER_0() Dim layer0 As AcadLayer 'переменная типа "слой" Set layer0 = ThisDrawing.Layers.Item("0") Set layer0.Color = Colorlayer 'устанавливаем цвет слоя - "по слою" layer0.LineWeight = acLnWtByLayer 'толщина линии - "по слою" ThisDrawing.ActiveLayer = layer0 ' устанавливаем текущий слой на "0" End Sub хотя, вообще-то, есть резон проверить сначала - а надо ли менять параметры слоя Quote Link to comment Share on other sites More sharing options...
Lion2032 Posted November 6, 2014 Report Share Posted November 6, 2014 (edited) Параметры менять надо. Но все равно не работает ((( Извините, если я не понимаю простых вещей Edited November 6, 2014 by Lion2032 Quote Link to comment Share on other sites More sharing options...
Lion007 Posted November 6, 2014 Report Share Posted November 6, 2014 Параметры менять надо. Но все равно не работает ((( Извините, если я не понимаю простых вещей Мдэ... на параметры я что-то внимания не обратил. значится, так... вот у нас есть слой. у него есть свойства - например color и lineweight. а теперь попробуем представить, каким образом у СЛОЯ может быть цвет ПО СЛОЮ? правильно, никаким! с лайнвейтом - ровно та же штука. то есть эти параметры слоя должны быть заданы ЯВНО. ByLayer - это могут быть параметры у конкретного объекта. так что тут надо как-то это не так делать... Quote Link to comment Share on other sites More sharing options...
Lion2032 Posted November 6, 2014 Report Share Posted November 6, 2014 Примерно ясно, но что конкретно...))) Dim Colorlayer As ?как? 'задаем переменную явно Set Colorlayer = ?чему? 'задаем параметр по слою Set layer0.Color = Colorlayer Quote Link to comment Share on other sites More sharing options...
Lion007 Posted November 6, 2014 Report Share Posted November 6, 2014 не. тут фокус в другом. у слоя не может быть цвет "по слою" - откуда он его должен взять? тут может быть только конкретный цвет - красный, зеленый... а "по слою" - это только у объекта. у линии например. Quote Link to comment Share on other sites More sharing options...
Lion2032 Posted November 6, 2014 Report Share Posted November 6, 2014 (edited) Понял, нужен белый (в смысле: черно-белый ) и толщина 0,0 Dim Colorlayer As byte 'задаем переменную явно Set Colorlayer = 7 'задаем параметр по слою Set layer0.Color = Colorlayer Так? Edited November 6, 2014 by Lion2032 Quote Link to comment Share on other sites More sharing options...
Lion007 Posted November 6, 2014 Report Share Posted November 6, 2014 достаточно просто layer0.color = 7 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.