明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 731|回复: 8

[提问] 寻找高手~动态弯道标注,修改标注单位R为米,L为米单位

[复制链接]
发表于 2023-1-23 19:54 | 显示全部楼层 |阅读模式
本帖最后由 song宋_74729 于 2023-1-24 10:38 编辑

动态弯道标注,麻烦修改标注单位R为米,L为米单位,

谢谢

(本程序采摘自www.lisp123.com)


(defun c:WGBZ()
        (Form1_load)
)

(defun Form1_load( / dcl_id Dialog_Return key keysDcl_File)
        (vl-load-com)
        (setq dcl_id(load_dialog (setq Dcl_File (Write_Dcl_Form1))));对话框加载
        (vl-file-deleteDcl_File);加载后删除DCL文件
        (setqDialog_Return 2)
        ;(while (>Dialog_Return 1) ;循环控制对话框是否结束
                (new_dialog"Form1" dcl_id);建立窗体
;-->-->-对话框初始化->-->--
                (setq keys'("Command1" "Command2" "accept""cancel"));列表全部控件名称
                (foreach keykeys;全部控件的初始化
                        (if (eval(read (strcat key "_bak"))) (set_tile key (eval (read (strcat key"_bak")))));控件内容
                        (action_tilekey "(Action_Form1_Keys $key $value)");点击动作
                )
;--<--<-对话框初始化完成-<--<--
                (setqDialog_Return (start_dialog));开启对话框(用户可见)

                (cond

                        ((=Dialog_Return 3)
                                (cj)
                        )
                        ((=Dialog_Return 4)
                                (gdcj)
                        )
                )

        ;)
        (unload_dialogdcl_id);退出时卸除对话框
        (princ);防止函数回显
)

(defun Action_Form1_Keys (key value) ;全部控件的点击动作触发
        (cond
                ((= key"accept") ;{确认按钮}

                        (Get_Form1_Data)
                        (done_dialog1);对话框退出返回主函数 传递给Dialog_Return值为1
                )
                ((= key"cancel") ;{取消按钮}

                        (done_dialog0);对话框退出返回主函数 传递给Dialog_Return值为0
                )
                ((= key"Command1") ; {"插件名字"}(按钮)
                        (done_dialog3)
                )
                ((= key"Command2") ; {"更多插件"}(按钮)
                        (done_dialog4)
                )
        )
)
(defun Get_Form1_Data( / key);临时生成Dcl文件 返回文件名
        (foreach keykeys
                (set (read(strcat key "_bak")) (get_tile key));每个控件都赋给一个变量 用于下次开启初始化
        )
)
(defun Write_Dcl_Form1( / Dcl_File file str)
        (setqDcl_File (vl-filename-mktemp nil nil ".Dcl"))
        (setq file(open Dcl_File "w"))
        (foreach str'(
                "Form1:dialog"
                "{"
                " label= \"Lisp123出品插件\";"
                "    :row"
                "    {"
                "        :button"
                "        {"
                "            key = \"Command1\";"
                "            label = \"动态弯道标注\" ;"
                "            width = 18.15 ;"
                "            height = 1.875 ;"
                "        }"
                "    }"
                "        :button"
                "        {"
                "            key = \"Command2\";"
                "            label = \"更多插件\" ;"
                "            width = 10.95 ;"
                "            height = 1.875 ;"
                "        }"
                "ok_cancel;"
                "}"
                )
                (write-linestr file)
        )
        (close file)
        Dcl_File
)

(defun gdcj ( / )
(COMMAND "browser""http://www.Lisp123.com")
)

(defun cj ( / )
   (prompt"\n 弯道标注程序加载成功,只支持圆弧线!")
  (setqoldosmode (getvar "osmode"))
  (setq  l  (getvar "ltscale")
  scale   1.0
  textsize (*l 3.0)
  )
(vl-load-com)
  (if (and (setqen1 (entsel "\n 请选取轨道中心线弧线:"))
     (setqarcobj (vlax-ename->vla-object (car en1)))
     ;;得到起点坐标
     (setqStartpt (vla-get-StartPoint arcobj))
     (setqStartpt (vlax-variant-value Startpt))
     (setqStartPoint (vlax-safearray->list Startpt))
     ;;得到终点坐标
     (setqEndpt (vla-get-EndPoint arcobj))
     (setqEndpt (vlax-variant-value Endpt))
     (setqEndPoint (vlax-safearray->list Endpt))
     ;;得到圆心坐标
     (setqCenterpt (vla-get-Center arcobj))
     (setqCenterpt (vlax-variant-value Centerpt))
     (setqCenterPoint (vlax-safearray->list Centerpt))
     ;;得到弧的夹角
     (setqtotalangle (vla-get-totalangle arcobj))
     ;;得到d-f-m
     (setqang_d (fix (/ (* totalangle 180) pi))
     ang_f(fix (* (- (/ (* totalangle 180) pi) ang_d) 60))
     ang_m(fix (* (- (/ (* totalangle 180) pi) ang_d (/ ang_f 60.0)) 3600))
     )
     ;;得到转角数
     (setqang (strcat "θ="
          (itoa ang_d)
          "°"
          (if (> ang_f 10)
            (itoa ang_f)
            (strcat "0" (itoa ang_f))
           )
          ""
          (if (> ang_m 10)
            (itoa ang_m)
            (strcat "0" (itoa ang_m))
           )
          ""
         )
     )
     ;;获取半径
     (setqradius (fix (* (vla-get-radius arcobj) 1000)))
     ;;取弧长
     (setqArcLength (fix (* (vla-get-ArcLength arcobj) 1000)))
    ;;-----------------------------------------
     ;;绘制引线                                     θ
     (setqpt1 (getpoint "\n选择标注点:"))
     ;; 这个范例在模型空间中建立具有一个关系型注释的一条引线,
     ;; 接着显示新的引线的注释对象。
     (setqAcadObject   (vlax-get-acad-object)
    AcadDocument (vla-get-ActiveDocument Acadobject)
    mSpace        (vla-get-ModelSpaceAcaddocument)
     )
     ;; 定义新的 MText 对象
     (setqtextString (strcat ang "\n" (strcat "R=" (itoa radius))"\n" (strcat "L=" (itoa ArcLength))))
     (setqinsertionPnt (vlax-make-safearray vlax-vbDouble '(0 . 2)))
    (vlax-safearray-fill insertionPnt pt1)
     (setqwidth (distance (car (textbox (list (cons 1 ang)))) (cadr (textbox (list (cons1 ang))))))
     ;; 在模型空间中建立MText 对象
     (setqMTextObj (vla-AddMText mSpace insertionPnt width textString))
     ;;填满wenzi
     (setqwenzi (vlax-make-safearray vlax-vbString '(1 . 9)))
     (vlax-safearray-fill
       wenzi
      '("TopLeft" "TopCenter" "TopRight"  "MiddleLeft""MiddleCenter" "MiddleRight" "BottomLeft""BottomCenter" "BottomRight")
     )
     ;; 引线数据
     (setqpnts (vlax-make-safearray vlax-vbDouble '(0 . 5)))
    (vlax-safearray-fill pnts (append pt1 (polar pt1 0 1)))
     ;;是否显示箭头
     (setqleaderType acLineWithArrow)
     ;;设置初始箭头为"实心闭合"
     (setqArrowheadType 0)
     ;;创建箭头类型列表
     (setqArrowheadTypeList (vlax-make-safearray vlax-vbstring '(1 . 20)))
    (vlax-safearray-fill
       ArrowheadTypeList
      '("实心闭合""空心闭合""闭合""""建筑标记""倾斜""打开""指示原点""指示原点2""直角"  "30度角" "小点" "空心点""空心小点""方框""实心方框""基准三角形""实心基准三角形""积分""")
     )
     ;; 在模型中建立Leader 对象,接着将MText对象设成
     ;;Leader注释,使新的MText对象和新的Leader对象建立关联
     (setqannotationObject MTextObj)
     (setqleaderObj (vla-AddLeader mSpace pnts annotationObject leaderType))
     (princ"\n")
      )
    (progn(setq LST (list '(5
          (grdraw CenterPoint StartPoint 1)
          (grdraw CenterPoint EndPoint 1)
          (setq pt val)
           ;;更新文字插入点
          (vla-put-InsertionPoint MTextObj (vlax-3d-point pt))
           ;;更新文字插入点
           ;;设置文字的对齐点
          (vla-put-AttachmentPoint MTextObj acAttachmentPointBottomLeft)
           ;;修改文字颜色
          (vla-put-Color MTextObj 3)
           (vla-put-Layer MTextObj"zj")
          (vla-put-Width MTextObj width)
          (if
           (<= (car pt) (car pt1))
           ;;如果鼠标移动点的x坐标值小于等于最近点的X坐标值
           (vla-put-AttachmentPoint MTextObj 9)
           ;;更改文字的贴附点为9(右下角)
           (vla-put-AttachmentPoint MTextObj 7)
           ;;更改文字的贴附点为7(左下角)
           )
          ;;end_if
          (setq pnts1 (vlax-make-safearray vlax-vbDouble '(0 . 5)))
          (vlax-safearray-fill pnts1 (append pt1 (polar pt 0 1)))
           (vla-put-Coordinates leaderObj pnts1)
           ;;更新引线插入点
           ;;设置文字标注在上方
          (vla-put-VerticalTextPosition leaderObj acAbove)
           ;;设置文字与标注线的垂直距离
          (vla-put-TextGap leaderObj (* l 1))
           ;;设置标注线的图层
           (vla-put-layer leaderObj"zj")
           ;;设置标注线的颜色
          (vla-put-DimensionLineColor leaderObj 1)
           ;;设置初始箭头大小
          (vla-put-ArrowheadSize leaderObj scale)
          (princ "\n按加减号改变箭头大小<+/->, </> 键改变文字高度,Tab键改变箭头样式:")
          )
         '(2
           ;;TAB
           (9
           (setq ArrowheadType (+ ArrowheadType 1))
           (if
            (> ArrowheadType 19)
            (setq ArrowheadType 0)
            )
           ;;修改箭头大小
           (vla-put-ArrowheadType leaderObj ArrowheadType)
            (princ
            (strcat
       "\n箭头变换啦***"
       " 当前箭头样式为->"
       (vlax-safearray-get-element ArrowheadTypeList (+ ArrowheadType 1))
            )
            )
           )
          (43
           (setq scale (+ scale 0.1))
           ;;修改箭头大小
            (vla-put-ArrowheadSize leaderObjscale)
           (princ (strcat "\n箭头增大啦***"" 当前比例="(rtos scale 2 1)))
           )
          (45
           (setq scale (- scale 0.1))
           ;;修改箭头大小
           (if
            (> scale 0.18)
            (progn
       (vla-put-ArrowheadSize leaderObj scale)
       (princ (strcat "\n箭头减小啦***"" 当前比例="(rtos scale 2 1)))
            )
            (princ "\n箭头已经是最小了!")
            )
           )
           ;;修改文字高度
          (44
           (setq width (* width (/ (+ textsize 0.1) textsize)))
           (setq textsize (+ textsize 0.1))
           (vla-put-Height MTextObj textsize)
           (princ (strcat "\n文字高度增大啦***"" 当前高度="(rtos textsize 2 1)))
           )
          (46
           (setq width (* width (/ (- textsize 0.1) textsize)))
           (setq textsize (- textsize 0.1))
           (vla-put-Height MTextObj textsize)
           (princ (strcat "\n文字高度减小啦***"" 当前高度="(rtos textsize 2 1)))
           )
          )
         ;;左击
         '
          (3(setq pt val)
            (initget 1 " y n Y N  ")
            (setq xunwen (getkword "\n是否绘制半径[Y/N或回车退出]:"))
             (if (or (= xunwen "y") (=xunwen "Y") (= xunwen " "))
        (progn (command "line" CenterPoint StartPoint "")(command "line" CenterPoint EndPoint ""))
            )
            (redraw)
            (setq TEST NIL)
            (setvar "osmode" oldosmode)
          )
            '(25 (redraw) (setq TEST NIL))
            '(11 (redraw) (setq TEST NIL))
          )
     )
    (ZML-GRREAD lst)
    )
  )
  (princ)
)

(defun ZML-GRREAD (LST / test tmp mode val tmp2)
  (setq testt)
  (while test
    (setqtmp  (grread 2)
    mode (cartmp)
    val  (cadr tmp)
    )
    (cond ((=mode 2)
     (if (and(setq tmp2 (assoc mode lst)) (setq tmp2 (cdr tmp2)) (setq tmp2 (assoc valtmp2)))
       (eval(cons 'progn (cdr tmp2)))
       ()
     )
    )
    ((setqtmp2 (assoc mode lst)) (eval (cons 'progn (cdr tmp2))))
    (t (princtmp))
    )
  )
)

(princ "\n本程序采摘自www.lisp123.com更多内容敬请期待!")
(princ "\n本程序命令:WGBZ")
(princ)

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2023-1-25 13:35 | 显示全部楼层
xyp1964 发表于 2023-1-25 13:26
;; 慎用:需要e派工具箱(XCAD)的支持

能不能不要e派工具箱,也能够用

点评

不用院长的内库很简单啊,DIY  发表于 2023-1-29 15:13
回复 支持 1 反对 0

使用道具 举报

发表于 2023-1-23 20:32 | 显示全部楼层
谢谢楼主分享
发表于 2023-1-24 18:59 | 显示全部楼层
代码错误太多,扔了吧!
 楼主| 发表于 2023-1-25 10:13 | 显示全部楼层
xyp1964 发表于 2023-1-24 18:59
代码错误太多,扔了吧!

院长有更好的吗?
发表于 2023-1-25 13:26 | 显示全部楼层


;; 慎用:需要e派工具箱(XCAD)的支持


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-1-26 11:31 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-1-29 10:55 | 显示全部楼层

院长一如既往的牛叉~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-19 19:53 , Processed in 0.372745 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表