999999 发表于 2024-7-29 19:19:29

(求助)麻烦大神看一下,能不能帮小弟实现定距等分的问题

本帖最后由 999999 于 2024-7-30 14:16 编辑

又来论坛上打扰各位大神啦,这次需要的是一个小功能,定距等分,CAD自带的不好用

看看有没有大神能够帮小弟解决这个问题的
感谢大家啦,虽然我没有为论坛做贡献,我一直都要提问题,和要求,但是我想的是,小功能提出问题来,大神们能帮忙解决,对于论坛本身来说,也是完善各种小插件的需求,对于有同样需要的小伙伴来说,也是一种帮助,一问一答,这样的论坛就多姿多彩,不啰嗦啦,直接进入主题


等距等分:
1.输入命令

2.选择需要等分的线
3.输入需要等分的块名或空格选择块(带记忆功能记住块的名字):AA
4.输入块的间距(或鼠标量间距)带记忆功能:40
5.输入块中心点与点击线段端点的距离(或鼠标量间距)带记忆功能:10
   如果没有输入距离的话,就默认块中心点与点击线段端点距离为0

6.生成结果

感谢大神们的耐心观看,如果有时间的话,希望大神们可以帮帮小弟实现这个功能,谢谢啦


今天在论坛找到了一个和我需要的效果一样的,http://bbs.mjtd.com/thread-101300-1-1.html?_dsign=d2c50e25   这个插件目前就是缺少记忆功能,和可以输入块名的功能,看看大神们能不能帮忙完善一下。

写这个插件的大神是论坛里的    自贡黄明儒 大神


llsheng_73 发表于 2024-7-29 19:19:30

本帖最后由 llsheng_73 于 2024-12-21 18:14 编辑

(defun makedcl(str_lst / dclfile fileID dclHandle)
(setq dclfile(vl-filename-mktemp nil nil ".dcl")fileID(open dclfile "w"))
(write-line(apply'strcat str_lst)fileID)
    (close fileID)
    (setq dclHandle(load_dialog dclfile))
    (vl-file-delete dclfile)
    dclHandle)
(defun c:TT(/ dcl blocks e dist d a jl l km *model)
(vl-load-com)
(setq dcl(makedcl'("DFX:dialog{label=\"等分线\";key=\"AAA\";"
                     ":column{:popup_list{label=\"块名\";key=\"KM\";width=20;}:row{:button{key = \"SE\";label=\"...\";}:edit_box{label=\"缩放比例\";key=\"BL\";}}"
                            ":edit_box{label=\"插入间距\";key=\"JL\";}:edit_box{label=\"偏距(左+右-)\";key=\"D\";}"
                            ":row{:button{key = \"ESC\";label = \"放弃\";is_cancel = true;}:button{key = \"DO\";label=\"执行\";}}}}"))
      *model(vlax-get-property(vlax-get-property(vlax-get-acad-object)'activedocument)'modelspace)
         ctl 4)
((lambda(/ a)(While(SetQ a(TblNext "block"(not blocks)))(SetQ blocks(Cons(Cdr(Assoc 2 a))blocks)))))
(vl-every(function(lambda(a b)(set(read a)b)))(setq keys'("KM""BL""JL""D"))(vlax-ldata-get"上次记忆""参数"))
(while(> ctl 1)
    (new_dialog"DFX"dcl)
    (start_list"KM")(vl-every(function add_list)blocks)(end_list)
    (set_tile"LH"(if l(strcat"线长"(rtos l 2 2))"未选择"))
    (and km(set_tile"KM"(itoa(vl-position km blocks))))
    (vl-some(function(lambda(a b)(and b(set_tile a b)nil)))(cdr keys)(list bl jl d))
    (action_tile"SEL""(done_dialog 2)")(action_tile"SE""(done_dialog 2)")
    (action_tile"BL""(IF(or(NOT(DISTOF $VALUE))(<=(DISTOF $VALUE)0))(PROGN(ALERT\"只允许数值且大于0!\")(MODE_TILE\"BL\"2))(setq bl $VALUE))")
    (action_tile"JL""(IF(or(NOT(DISTOF $VALUE))(<=(DISTOF $VALUE)0))(PROGN(ALERT\"只允许数值且大于0!\")(MODE_TILE\"JL\"2))(setq jl $VALUE))")
    (action_tile"D""(IF(NOT(DISTOF $VALUE))(PROGN(ALERT\"只允许数值!\")(MODE_TILE\"D\"2))(setq d $VALUE))")
    (action_tile"DO""(SETQ VALUE(CONS(NTH(ATOI(GET_TILE\"KM\"))blocks)(MAPCAR(function GET_TILE)'(\"BL\"\"JL\"\"D\"))))(done_dialog 1)")
(cond((= (setq ctl(start_dialog)) 2)
      (prompt"\n点选要插入的参照")
      (and(setq a(ssget":E:S"'((0 . "insert"))))
            (setq a(ssname a 0))
            (setq km(cdr(assoc 2(entget a))))))
       ((= ctl 1)
      (vl-every(function(lambda(a b c)(set(read a)(b c))))keys(list princ distof distof distof)value)
      (vlax-ldata-put"上次记忆""参数"VALUE)
      (while(progn(prompt"\n点选要等分的线")
                (and(setq e(ssget":E:S"'((0 . "*polyline,arc,circle,ellipse,spline"))))
            (setq e(ssname e 0))
            (setq L(-(vlax-curve-getdistatparam e(vlax-curve-getendparam e))(vlax-curve-getdistatparam e(vlax-curve-getstartparam e))))))
          ((lambda(/ p ang)(setq a(- jl))
               (while(<(setq a(+ a jl))l)
                  (setq p(vlax-curve-getpointatdist e a)
                        ang(angle'(0 0)(vlax-curve-getFirstDeriv e(vlax-curve-getparamatpoint e p)))
                        p(polar p(+(* pi 0.5)ang)d))
                  (vlax-invoke-method *model'insertblock(vlax-3d-point p)km bl bl 1 ang)))))))
    ))

kozmosovia 发表于 2024-7-29 19:21:45

试一下新版的ARRAY,可以沿路径

999999 发表于 2024-7-29 20:13:32

kozmosovia 发表于 2024-7-29 19:21
试一下新版的ARRAY,可以沿路径

大神您好,这个命令我刚刚试了一下哦,不理想哦

muai2010 发表于 2024-7-29 20:42:36

看上去不简单啊;P

ssyfeng 发表于 2024-7-30 10:32:10


999999 发表于 2024-7-30 14:10:25

muai2010 发表于 2024-7-29 20:42
看上去不简单啊

那确实是,哈哈,懂的人觉得简单,不懂人的觉得难,我是属于第二者

999999 发表于 2024-7-30 14:12:26

本帖最后由 999999 于 2024-7-30 14:55 编辑

ssyfeng 发表于 2024-7-30 10:32

大神,您好,看您的操作是这样的效果呢。可以方便提供吗?

999999 发表于 2024-7-30 14:53:49

999999 发表于 2024-7-30 14:12
大神,您好,看您的操作是这样的效果呢

大神您好,这个可以方便提供吗?

bai2000 发表于 2024-8-1 18:46:49

大神您好,这个可以方便提供吗?
页: [1] 2 3
查看完整版本: (求助)麻烦大神看一下,能不能帮小弟实现定距等分的问题