明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2946|回复: 12

[提问] 请问这个功能LSP能实现嘛?

[复制链接]
发表于 2019-11-2 14:15:18 | 显示全部楼层 |阅读模式
10明经币
我想的思路,是不是可以先画一根直线,线为DOTE线型,颜色8号色,然后在直线的端点处,插入文字TEXT,内容为CL ,字高3mm,文字为中间对齐方式,对齐直线的端点,刚好是一条线,且离端点距离为2mm,角度0 ,字体ST,请老师们帮下忙,谢谢
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

(defun c:tt5 (/ ang p1 p2 p3 p4) (if (null (tblsearch "style" "st")) (command "style" "st" "" "" "" "" "" "" "" )) (if (null (tblsearch "ltype" "dote")) (command "Linetype" "L" "dote" "" "")) (setq p1 (getpoint"\n起点:") p2 (getpoint p1"\n终点:") ang (angle p1 p2) p3 (polar p2 ang 20) p4 (polar p3 ang 2)) (entmake (list '(0 . "LINE") (cons 6 "dote") (cons 10 p1) (cons 11 p3) (cons 6 ...
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-11-2 14:15:19 | 显示全部楼层
(defun c:tt5 (/ ang p1 p2 p3 p4)
        (if (null (tblsearch "style" "st"))
                (command "style" "st" "" "" "" "" "" "" "" ))
        (if (null (tblsearch "ltype" "dote"))
                (command "Linetype" "L" "dote"  "" ""))
        (setq p1 (getpoint"\n起点:") p2 (getpoint p1"\n终点:") ang (angle p1 p2) p3 (polar p2 ang 20) p4 (polar p3 ang 2))
        (entmake (list '(0 . "LINE") (cons 6 "dote") (cons 10 p1) (cons 11 p3) (cons 62 8)))
        (entmake (list '(0 . "TEXT") (cons 10 p4) (cons 11 p4) (cons 40 3) (cons 1 "CL") (cons 7 "st") (cons 72 1) (cons 73 2)))
)
回复

使用道具 举报

 楼主| 发表于 2019-11-2 17:13:31 | 显示全部楼层
start4444 发表于 2019-11-2 16:58
(defun c:tt5 (/ ang p1 p2 p3 p4)
        (if (null (tblsearch "style" "st"))
                (command "style" "st" "" " ...

搞定!完美!太厉害了!
回复

使用道具 举报

 楼主| 发表于 2019-11-2 18:04:07 | 显示全部楼层
sbwdx 发表于 2019-11-2 17:13
搞定!完美!太厉害了!

你好,能分别生成两个文字吗?一个C,一个L,然后位置如图

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2019-11-2 20:00:32 | 显示全部楼层
画完应恢复原有的线型、字型
回复

使用道具 举报

发表于 2019-11-2 22:52:13 | 显示全部楼层
本帖最后由 1291500406 于 2019-11-3 10:21 编辑

(defun C:bb (/ ID pt pt2)(defun bb_01 (en pt) (vla-move (vlax-ename->vla-object  en)(vla-get-insertionpoint
(vlax-ename->vla-object  en))(vlax-3d-point pt)))(SETQ ID T pt(getpoint "\n必强提示第一点"))
(entmake (list '(0 . "TEXT") (cons 1 "C") (cons 10 '(-2 2)) (cons 11 '(-2 2))(cons 72 1)(cons 73 2) (cons 40 3)))(setq en (entlast))
(entmake (list '(0 . "TEXT") (cons 1 "L") (cons 10 '(0 0))(cons 11 '(0 0)) (cons 72 1)(cons 73 2) (cons 40 3)))(setq en1 (entlast))
(while ID(SETQ pt2 (GRREAD T 4 0))(IF(= 5 (CAR pt2))(PROGN (grdraw pt (polar (cadr pt2) (angle (cadr pt2) pt) 2) -1)
(bb_01 en(polar  (cadr pt2)(*  pi 0.65) 2))(bb_01 en1(polar (cadr pt2) (* pi 1.5) 0))
(REDRAW)))(IF(OR (= 3 (CAR pt2)) (= 2 (CAR pt2))(= 11 (CAR pt2)))(PROGN
(entmake (list '(0 . "LINE") (cons 10 pt) (cons 11 (polar (cadr pt2) (angle (cadr pt2) pt) 2))))
(SETQ ID NIL)))))

回复

使用道具 举报

发表于 2019-11-3 08:59:53 | 显示全部楼层

另一个更简单方式:应用现有CL合体字体ascii/unicode
℄=  "\U+2104"

此方法合适于UCS,只需旋转字体vla-put-rotationentmode (cons 50 x)


  1. (defun c:CL (/ p1 p2 ob)
  2. ;lisperado
  3.   (or *acad* (setq *acad* (vlax-get-acad-object)))

  4.   (defun *space (doc)
  5.     (foreach x '(ActiveDocument ActiveLayout Block) (setq doc (vlax-get doc x)))
  6.     )

  7.   (if (and (setq p1 (getpoint "\n第一点.. "))
  8.            (setq p2 (getpoint p1 "\n第二点.. "))
  9.            (entmakex
  10.              (cons '(0 . "LINE")
  11.                    (mapcar ''((x a b) (cons a (set x (trans b 1 0)))) '(p1 p2) '(10 11) (list p1 p2))
  12.                    )
  13.              )
  14.            (setq ob (vla-AddText (*space *acad*) "\U+2104" (vlax-3d-point p2) (getvar 'Textsize)))
  15.            (vl-cmdf "_.JUSTIFYTEXT" (ssadd (entlast)) "" "_MC")
  16.            )
  17.     (vla-put-TextAlignmentPoint
  18.       ob
  19.       (vlax-3d-point (polar p1 (angle p1 p2) (+ (distance p1 p2) (getvar 'Textsize))))
  20.       )
  21.     (princ "用户标点无效?")
  22.     )
  23.   (princ)
  24.   )
回复

使用道具 举报

 楼主| 发表于 2019-11-3 15:02:01 | 显示全部楼层
1291500406 发表于 2019-11-2 22:52
(defun C:bb (/ ID pt pt2)(defun bb_01 (en pt) (vla-move (vlax-ename->vla-object  en)(vla-get-inserti ...

谢谢,有点复杂了,也没有达到那种效果,1楼的就是我要的那种效果,能在1L的代码的基础上改一改吗?就是再加个L字,字的位置就是4楼图片那种,这样就可以了
回复

使用道具 举报

 楼主| 发表于 2019-11-3 15:02:53 | 显示全部楼层
lisperado 发表于 2019-11-3 08:59
另一个更简单方式:应用现有CL合体字体ascii/unicode
℄=  "%u+2104"

你好老师,这个合体字,挺好,但是L的位置可以往下来点吗?
回复

使用道具 举报

发表于 2019-11-3 15:46:46 | 显示全部楼层
sbwdx 发表于 2019-11-2 18:04
你好,能分别生成两个文字吗?一个C,一个L,然后位置如图

既然知道分开两个字怎么不去了解一下代码,只要稍作修改就能达到自己的需求了

(defun c:tt5 (/ ang p1 p2 p3 p4)
        (if (null (tblsearch "style" "st"))
                (command "style" "st" "" "" "" "" "" "" "" ))
        (if (null (tblsearch "ltype" "dote"))
                (command "Linetype" "L" "dote"  "" ""))
        (setq p1 (getpoint"\n起点:") p2 (getpoint p1"\n终点:") ang (angle p1 p2) p3 (polar p2 ang 20) p4 (polar p3 ang 2))
        (entmake (list '(0 . "LINE") (cons 6 "dote") (cons 10 p1) (cons 11 p3) (cons 62 8)))
        (entmake (list '(0 . "TEXT") (cons 10 p4) (cons 11 p4) (cons 40 3) (cons 1 "C") (cons 7 "st") (cons 72 1) (cons 73 2)))
        (entmake (list '(0 . "TEXT") (cons 10 p4) (cons 11 p4) (cons 40 3) (cons 1 "L") (cons 7 "st") (cons 72 0) (cons 73 3)))
(princ)
)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-26 10:24 , Processed in 0.187611 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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