乐筑天下

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

[编程交流] 花括号的lisp例程

[复制链接]

8

主题

80

帖子

72

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 23:46:35 | 显示全部楼层 |阅读模式
我希望有人能帮我写一个lisp来画一个花括号},它将从起点延伸到终点,作为一种包含与一个标签相关的所有文本的方式。这有意义吗??这类似于express tools特征线的工作方式,但不是将圆弧放置在起点和终点的中点。。我前一段时间看到了一些代码,但再也找不到了?首先,我感谢你的帮助。。
回复

使用道具 举报

8

主题

80

帖子

72

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 23:55:50 | 显示全部楼层
旁注:我是作为一个动态块来做的,效果很好,但老板想用一种特定的方式来做
回复

使用道具 举报

1

主题

25

帖子

25

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:57:44 | 显示全部楼层
可以用vb或vb代替lisp。网
回复

使用道具 举报

8

主题

80

帖子

72

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 00:07:59 | 显示全部楼层
我不明白为什么不?我会再检查一遍,不过看看你有什么就好了。无论如何,我正在努力让vb变得更好。。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2022-7-6 00:11:54 | 显示全部楼层
你好
 
这是一个快捷方式。
 
  1. (defun c:curly (/ p1 p2 a0 a1 a2 d)
  2. (and
  3.    (setq p1 (getpoint "\nFirst point: "))
  4.    (setq p2 (getpoint p1 "\nSecond point: "))
  5.    (setq a0 (angle p1 p2)
  6.          a1 (- a0 (/ pi 12.))
  7.          a2 (+ a0 pi (/ pi 12.))
  8.          d  (/ (/ (/ (distance p1 p2) 2.) (cos (/ pi 12.))) 2.)
  9.    )
  10.    (entmake
  11.      (list
  12.        '(0 . "LWPOLYLINE")
  13.        '(100 . "AcDbEntity")
  14.        '(100 . "AcDbPolyline")
  15.        '(90 . 5)
  16.        '(70 . 0)
  17.        (cons 10 p1)
  18.        '(42 . 0.6)
  19.        (cons 10 (polar p1 a1 d))
  20.        '(42 . -0.6)
  21.        (cons 10 (polar p1 a1 (* 2. d)))
  22.        '(42 . -0.6)
  23.        (cons 10 (polar p2 a2 d))
  24.        '(42 . 0.6)
  25.        (cons 10 p2)
  26.      )
  27.    )
  28. )
  29. (princ)
  30. )
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 00:14:15 | 显示全部楼层
 
别笑,这是我的老歌
 
  1. (defun my_error_f  (msg)
  2. (setq *error* olderr_f)
  3. (if svfrad
  4.    (setvar "filletrad" svfrad))
  5. (if svosmode
  6.    (setvar "osmode" svosmode))
  7. (setvar "cmdecho" 1)  
  8. (print (strcat "error:" msg))
  9. (prin1)
  10. )
  11. (defun C:CBR (/ *error* ang cp1 cp2 cpt ep2 ept
  12.         lp my_error_f olderr_f r resp rf
  13.         sp1 spt svfrad svosmode upt)
  14.                
  15. (setq svosmode (getvar "osmode"))
  16. (setvar "osmode" 0)               
  17. (setq svfrad (getvar "filletrad"))
  18. (setq olderr_f *error*
  19. *error* my_error_f)       
  20. (setvar "cmdecho" 0)
  21. (command "_ortho" "_on")
  22. (setq r 4.0 rf
  23.       (* 1.125 r)
  24.      )
  25. (initget 1 "Left Right")
  26. (setq resp (getkword "\nChoose a braket position [Left/Right]: "))
  27. (setq spt (getpoint "\nSpecify upper point : ")
  28.      ept (getpoint spt "\nSpecify lower point : ")
  29.      lp (distance spt ept)
  30.      )
  31. (if
  32. (eq resp "Left")
  33. (progn
  34. (setq sp1 (polar spt pi rf))
  35. (setq ep2 (polar ept pi  rf))
  36. (setq cpt (polar sp1 (* pi 1.5) ( / lp 2.0))
  37.      upt (polar cpt pi rf))
  38. (setq cp1 (polar cpt (/ pi 2) ( / rf 2.0)))
  39. (setq cp2 (polar cpt (* pi 1.5) ( / rf 2.0)))
  40. )
  41. (progn
  42. (setq sp1 (polar spt 0 rf))
  43. (setq ep2 (polar ept 0  rf))
  44. (setq cpt (polar sp1 (* pi 1.5) ( / lp 2.0))
  45.      upt (polar cpt 0 rf))
  46. (setq cp1 (polar cpt (/ pi 2) ( / rf 2.0)))
  47. (setq cp2 (polar cpt (* pi 1.5) ( / rf 2.0)))
  48. )
  49. )
  50. (command "_.osnap" "_none" "")
  51. (command "_.pline")(mapcar 'command (list spt sp1 cp1 upt cp2 ep2 ept)) (command "")
  52. (setvar "filletrad" r)
  53. (command "_.fillet" "_P" "_L")
  54. (princ)
  55. )

 
~'J'~
回复

使用道具 举报

8

主题

80

帖子

72

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 00:23:09 | 显示全部楼层
fixo和gile。。。非常感谢你!!
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2022-7-6 00:28:33 | 显示全部楼层
一个更好的,在C中#
已将DLL附加到netload。
 
  1. using System;
  2. using System.Text;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.EditorInput;
  6. using Autodesk.AutoCAD.Geometry;
  7. using Autodesk.AutoCAD.Runtime;
  8. namespace CurlyJigSample
  9. {
  10.    public class Command
  11.    {
  12.        class CurlyJig : EntityJig
  13.        {
  14.            Polyline m_pline;
  15.            Point3d m_dragPt;
  16.            Point2d p0;
  17.            Vector2d xDir = new Vector2d(1.0, 0.0);
  18.            public CurlyJig(Polyline pline, Point3d dragPt, Point2d pt)
  19.                : base(pline)
  20.            {
  21.                m_pline = pline;
  22.                m_dragPt = dragPt;
  23.                p0 = pt;
  24.            }
  25.            protected override bool Update()
  26.            {
  27.                Point2d p4 = new Point2d(m_dragPt.X, m_dragPt.Y);
  28.                double d = (p0.GetDistanceTo(p4) / 2.0) / (Math.Cos(Math.PI / 12.0));
  29.                Vector2d vec = p0.GetVectorTo(p4);
  30.                double a0 = p4.Y < p0.Y ?
  31.                    (Math.PI * 2.0) - xDir.GetAngleTo(vec) :
  32.                    xDir.GetAngleTo(vec);
  33.                m_pline.SetPointAt(1, Polar(p0, a0 - (Math.PI / 12.0), d / 2.0));
  34.                m_pline.SetPointAt(2, Polar(p0, a0 - (Math.PI / 12.0), d));
  35.                m_pline.SetPointAt(3, Polar(p4, a0 + Math.PI + (Math.PI / 12.0), d / 2.0));
  36.                m_pline.SetPointAt(4, p4);
  37.                return true;
  38.            }
  39.            protected override SamplerStatus Sampler(JigPrompts prompts)
  40.            {
  41.                JigPromptPointOptions jppo = new JigPromptPointOptions("\nSpecify the second point: ");
  42.                jppo.UserInputControls = (UserInputControls.Accept3dCoordinates | UserInputControls.GovernedByOrthoMode);
  43.                PromptPointResult ppr = prompts.AcquirePoint(jppo);
  44.                if (ppr.Status == PromptStatus.OK)
  45.                {
  46.                    if (ppr.Value.IsEqualTo(m_dragPt))
  47.                        return SamplerStatus.NoChange;
  48.                    else
  49.                    {
  50.                        m_dragPt = ppr.Value;
  51.                        return SamplerStatus.OK;
  52.                    }
  53.                }
  54.                return SamplerStatus.Cancel;
  55.            }
  56.        }
  57.        private static Point2d Polar(Point2d org, double angle, double distance)
  58.        {
  59.            return new Point2d(org.X + (distance * Math.Cos(angle)), org.Y + (distance * Math.Sin(angle)));
  60.        }
  61.        [CommandMethod("CURLY")]
  62.        public void CURLY()
  63.        {
  64.            Document doc = Application.DocumentManager.MdiActiveDocument;
  65.            Database db = doc.Database;
  66.            Editor ed = doc.Editor;
  67.            PromptPointResult ppr = ed.GetPoint("\nSpecify the first point: ");
  68.            if (ppr.Status == PromptStatus.OK)
  69.            {
  70.                using (Transaction tr = db.TransactionManager.StartTransaction())
  71.                {
  72.                    Point3d picked = ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem);
  73.                    Point2d pt = new Point2d(picked.X, picked.Y);
  74.                    Polyline pline = new Polyline(5);
  75.                    pline.AddVertexAt(0, pt, 0.6, 0.0, 0.0);
  76.                    pline.AddVertexAt(1, pt, -0.6, 0.0, 0.0);
  77.                    pline.AddVertexAt(2, pt, -0.6, 0.0, 0.0);
  78.                    pline.AddVertexAt(3, pt, 0.6, 0.0, 0.0);
  79.                    pline.AddVertexAt(4, pt, 0.0, 0.0, 0.0);
  80.                    CurlyJig jig = new CurlyJig(pline, picked, pt);
  81.                    PromptResult pr = ed.Drag(jig);
  82.                    if (pr.Status == PromptStatus.OK)
  83.                    {
  84.                        BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  85.                        btr.AppendEntity(pline);
  86.                        tr.AddNewlyCreatedDBObject(pline, true);
  87.                    }
  88.                    tr.Commit();
  89.                }
  90.            }
  91.        }
  92.    }
  93. }

卷曲夹具。拉链
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 00:31:37 | 显示全部楼层
在我这边效果很好
谢谢
 
~'J'~
回复

使用道具 举报

2

主题

22

帖子

19

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 00:36:01 | 显示全部楼层
救命啊!
 
我以前有一个漂亮的brace命令,它会提示用户三件事
 
1、起点
2、终点
3、圆角半径
 
然后,它将绘制一个在两端和中间圆角的直线支架
两端将向右卷曲90度,中间端将向左卷曲,形成经典的大括号{
 
中间的线将保持笔直。
 
由于某种原因,它在2011年停止了工作
 
 
 
(DEFUN C:BRAC()
(INITGET 1)(SETQ A(GETPOINT“\n起始点:”)
(INITGET 1)(SETQ B(GETPOINT A“\n终点:”)
(SETQ C(/(距离A B)2))
(SETQ D(GETDIST(STRCAT“\n填充半径:”))
(IF(NULL D)(SETQ D(+0.01(GETVAR“FILLETRAD”)))(SETQ D(+0.01 D)))
(SETVAR“FILLETRAD”(-D 0.01))
(SETQ E(角度B A))
(SETQ F(+1.570796 E))
(命令“PLINE”B(极轴B F D)
(极坐标(GETVAR“LASTPOINT”)E C)
(极坐标(GETVAR“LASTPOINT”)F D)\r)
(设定值F(-F PI))
(命令“LINE”“@”(POLAR(GETVAR“LASTPOINT”)F D)
(极坐标(GETVAR“LASTPOINT”)E C)
(极坐标(GETVAR“LASTPOINT”)F D)\r)
(命令“FILLET”“P”“@”)
(命令“FILLET”“P”B)
)
 
 
提前感谢
 
markhamilton5@att.net
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 22:23 , Processed in 0.379838 second(s), 72 queries .

© 2020-2025 乐筑天下

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