乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 85|回复: 19

[编程交流] Measure-like Command

[复制链接]

21

主题

146

帖子

127

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2022-7-6 14:55:31 | 显示全部楼层 |阅读模式
Good morning,
 
I'd like to know if anyone has a way of copying a point or block along a line/pline the way the measure command does; but only one instance of a point or block; and rotating the point/block to follow the curvature of the line/pline in the same way the measure command does.
 
Cheers
回复

使用道具 举报

16

主题

231

帖子

217

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2022-7-6 15:00:49 | 显示全部楼层
I design balustrades and most of the time I have to put posts at certain ctrs around a radius or arc. I have a spreadsheet that helps me with this.
 
Im pretty sure LeeMac will have a lisp for what you require.
but I hope this can help. (someway)
Drawing Aids.zip
回复

使用道具 举报

21

主题

146

帖子

127

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2022-7-6 15:05:07 | 显示全部楼层
Sounds like the array command would be ideal for you?
 
My application is about copying a block along a path e.g a road, railway etc. where the path has many intricate curves and 3D movements. All I want to do is copy a block X amount of distance along the line in plan view, ignoring Z values.
 
Cheers.
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:08:01 | 显示全部楼层
Time was limited so there is ridiculously minimal testing and error checking, but:
 
  1.         [CommandMethod("rdap")]       static public void RefDistAlongPath()       {           Database db = HostApplicationServices.WorkingDatabase;           Editor ed = Acad.DocumentManager.MdiActiveDocument.Editor;           using (Transaction trans = db.TransactionManager.StartTransaction())           {               // Put your command code here               PromptEntityOptions peo = new PromptEntityOptions("Select target curve: ");               peo.SetRejectMessage("\nPlease only select a curve entity!");               peo.AddAllowedClass(typeof(Autodesk.AutoCAD.DatabaseServices.Curve), false);               PromptEntityResult per = ed.GetEntity(peo);               if (per.Status != PromptStatus.OK) return;               ObjectId oid = per.ObjectId;               Curve crv = (Curve)trans.GetObject(oid, OpenMode.ForRead, false);               Plane pl = new Plane(ed.CurrentUserCoordinateSystem.CoordinateSystem3d.Origin, ed.CurrentUserCoordinateSystem.CoordinateSystem3d.Zaxis);               Curve projCrv = crv.GetOrthoProjectedCurve(pl);               PromptStringOptions pso = new PromptStringOptions("Enter name of block to create reference: ");               PromptResult pr = ed.GetString(pso);               String blkName = pr.StringResult;               BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);                    if (!bt.Has(blkName))                {                    ed.WriteMessage ("Current Database does not contain a block of that name!");                   return;               }               BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[blkName], OpenMode.ForRead);               PromptDistanceOptions pdo = new PromptDistanceOptions("Indicate distance along path: ");               pdo.AllowArbitraryInput = false;               PromptDoubleResult pdr = ed.GetDistance(pdo);               if (pdr.Status != PromptStatus.OK) return;               Point3d p3d = projCrv.GetPointAtDist(pdr.Value);               Vector3d v3d = projCrv.GetFirstDerivative(p3d);               Double ang = Math.Atan(v3d.Y / v3d.X);               BlockTableRecord currSpace = trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;               BlockReference insert = new BlockReference(p3d, btr.ObjectId);               insert.Rotation = ang;               currSpace.AppendEntity(insert);               insert.SetDatabaseDefaults();               trans.AddNewlyCreatedDBObject(insert, true);               projCrv.Dispose();               trans.Commit();           }        }
回复

使用道具 举报

21

主题

146

帖子

127

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2022-7-6 15:10:03 | 显示全部楼层
 
 
I'm working on something similar at home where I also use C#. Can't give you any feedback until I do return home - no Visual Studio to compile it here at work.
 
Thanks for your time
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 15:13:49 | 显示全部楼层
quick and dirty
  1. ;;;inserts a block at specified station along a polyline, measured from start LPS 2009(defun c:test () (vl-load-com)(defun rtd (a) (/ (* a 180.0) pi)) (setq oldosnap (getvar "osmode")) (setvar "osmode" 0) (command "ucs" "w") (setq    ob     (entsel "Select curve: ")   dist   (getreal "\n Specify Distance from beginning of curve : ")   obj    (vlax-ename->vla-object (car ob))   pt1    (vlax-curve-getPointAtDist obj dist)   param1 (vlax-curve-getParamAtPoint obj pt1)   deriv1 (vlax-curve-getFirstDeriv obj param1)   ang    (rtd (angle '(0 0) deriv1)) ) ;_ end of setq (command "-insert" "[color=Red]BLOCKNAME[/color]" pt1 "" ang) (command "ucs" "p") (setvar "osmode" oldosnap) (princ)) ;_ end of defun
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:16:32 | 显示全部楼层
Or even a more ancient style:
 
  1. [b][color=BLACK]([/color][/b]defun c:mscopy [b][color=FUCHSIA]([/color][/b]/ n d ln lc ss i en[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not n[b][color=NAVY])[/color][/b]        [b][color=NAVY]([/color][/b]setq n [b][color=MAROON]([/color][/b]getstring [color=#2f4f4f]"\nBLOCK To INSERT:   "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]        [b][color=NAVY]([/color][/b]cond [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]not [b][color=BLUE]([/color][/b]snvalid n[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]               [b][color=GREEN]([/color][/b]princ [color=#2f4f4f]"\nInvalid Block Name - "[/color] n[b][color=GREEN])[/color][/b]               [b][color=GREEN]([/color][/b]setq n nil[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]              [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]tblsearch [color=#2f4f4f]"BLOCK"[/color] n[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]              [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]findfile [b][color=BLUE]([/color][/b]strcat n [color=#2f4f4f]".DWG"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]               [b][color=GREEN]([/color][/b]command [color=#2f4f4f]"_.INSERT"[/color] n[b][color=GREEN])[/color][/b]               [b][color=GREEN]([/color][/b]command[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]              [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]setq n nil[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]initget 7[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq d [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nMeasure Segment Length:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq ln [color=#2f4f4f]"TEMP1"[/color] lc 1[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]tblsearch [color=#2f4f4f]"LAYER"[/color] ln[b][color=NAVY])[/color][/b]        [b][color=NAVY]([/color][/b]setq lc [b][color=MAROON]([/color][/b]1+ lc[b][color=MAROON])[/color][/b] ln [b][color=MAROON]([/color][/b]strcat [color=#2f4f4f]"TEMP"[/color] [b][color=GREEN]([/color][/b]itoa lc[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.LAYER"[/color] [color=#2f4f4f]"_M"[/color] ln [color=#2f4f4f]""[/color][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]= [b][color=MAROON]([/color][/b]getvar [color=#2f4f4f]"CMDACTIVE"[/color][b][color=MAROON])[/color][/b] 0[b][color=NAVY])[/color][/b]        [b][color=NAVY]([/color][/b]command [color=#2f4f4f]"_.MEASURE"[/color] pause[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_B"[/color] n [color=#2f4f4f]"_Y"[/color] d[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq ss [b][color=NAVY]([/color][/b]ssget [color=#2f4f4f]"X"[/color] [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 8 ln[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.CHANGE"[/color] ss [color=#2f4f4f]""[/color] [color=#2f4f4f]"_P"[/color] [color=#2f4f4f]"_E"[/color] 0.0 [color=#2f4f4f]""[/color]          [color=#2f4f4f]"_.ERASE"[/color] ss [color=#2f4f4f]""[/color][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq i [b][color=NAVY]([/color][/b]sslength ss[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not [b][color=MAROON]([/color][/b]minusp [b][color=GREEN]([/color][/b]setq i [b][color=BLUE]([/color][/b]1- i[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]        [b][color=NAVY]([/color][/b]setq en [b][color=MAROON]([/color][/b]ssname ss i[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]        [b][color=NAVY]([/color][/b]entdel en[b][color=NAVY])[/color][/b]        [b][color=NAVY]([/color][/b]getstring [color=#2f4f4f]"\nPress Enter To Continue:   "[/color][b][color=NAVY])[/color][/b]        [b][color=NAVY]([/color][/b]entdel en[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
-David
回复

使用道具 举报

21

主题

146

帖子

127

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2022-7-6 15:20:36 | 显示全部楼层
Only being able to place a block from the start of the line means it's not really usable for my needs. Having to hard wire the block is also a fundamental draawback.
 
Any way we can address these two points? Maybe select an existing block in the drawing to move or choose a block from a file; and then choose a point on the polyline to move it from.
 
Sorry to be cheeky.
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 15:24:00 | 显示全部楼层
http://www.afralisp.net/
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:24:05 | 显示全部楼层
LOL  -David
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 21:21 , Processed in 0.956672 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表