xj6019 发表于 2020-10-26 19:51:07

求一个标注能断开的代码

本帖最后由 xj6019 于 2020-10-30 19:43 编辑

希望选择一个标注,两端分别向内100的位置断开,使一个标注变成三段,中间的标注用文字替代标注数值,如图
(defun C:TT()
(setq XNJL1左端向内断开的距离)
(setq XNJL2右端向内断开的距离) 分别设置吧,万一以后有两端不同的情况呢
( TDWZ要替代的文字) 这里单独做成一个子函数调用吧,要替换的文字常用的好几个,我可以分别设置几个代码来用,要不太繁琐了
...
功能代码
.....
开头这样,方便以后需要修改的话,可以自己根据实际情况修改。需要适合水平垂直斜的方向,都经常要用的到,麻烦了,再次恳请相助。。
图片下载外部地址:https://xj6019.lanzous.com/iwGHlhrsxje



start4444 发表于 2020-10-26 19:51:08

试一下,替换文字就一句话,不用子函数了

e2002 发表于 2020-10-27 12:21:59

不建议搞这么多“假”的标注在图中哦...{:1_1:}

xj6019 发表于 2020-10-27 13:30:46

e2002 发表于 2020-10-27 12:21
不建议搞这么多“假”的标注在图中哦...

一般是为了标注一些孔 螺丝之类的,比方说两端离着100,然后中间平均分布一排直径为5的孔,一般我不会挨个的再把每个孔的间距尺寸标出来,直接把标注改成 “孔D5@300” 。一般要求没有太高,就是固定用的方便打螺丝的孔,间距标@300,但实际加工的时候250~350之间的任何数值都可以,我感觉这样标,算是一些很常见的做法吧。

xj6019 发表于 2020-10-27 13:38:29

e2002 发表于 2020-10-27 12:21
不建议搞这么多“假”的标注在图中哦...

求个代码也是为了更省事一点,现在是用之前的代码挨个点四个点,然后再替换中间的,如果能把一个尺寸直接两端按固定距离分开,中间也能直接把数值替换成文字,我就能更方便点,结合我手里的其他几个标注代码,搭配使用,就能更得劲点,最完美的是自动全标,但是图纸图元信息应该不好区分,所以能按照习惯尽量在手工上能更快捷一点吧。

xj6019 发表于 2020-10-30 09:02:33

老师们,帮搞一下吧,自己也憋着研究了好几天了,算法上一直没有进展,想用论坛里面很常见的那个DDR断开标注的代码来改,尝试多次,一直没有成功,求助,求助!!

xj6019 发表于 2020-10-30 19:41:41

本帖最后由 xj6019 于 2020-11-2 08:32 编辑

start4444 发表于 2020-10-30 13:33
试一下,替换文字就一句话,不用子函数了
太棒了,我今天又倒腾了半天,代码堆了一串一串的,都没搞出来,这个又能省老鼻子事了,又是你帮的忙,谢谢的话都说了太多了,但是还是要再说一遍,太感谢了!!看看代码整合后的效果,还是很满意的。

xj6019 发表于 2020-10-30 19:50:01

start4444 发表于 2020-10-26 19:51
试一下,替换文字就一句话,不用子函数了

再请教个问题,是那个标注断开代码里的一句
(setq ent (centsel "\n>>>選擇要拆分的尺寸 或 <按 ESC 退出>:" "DIMENSION"))
这一句我想改改,想实现可以先选择再执行代码,我改成下面的
(or(setq ent(ssget "i"'((0 . "DIMENSION")))) (and(princ "\n選擇要拆分的尺寸")(setq ent(ssget ":S" '((0 . "DIMENSION"))))))
但是不行呢,我想知道centsel这个改成了ssget怎么就不行了呢。
如果要实现先选择尺寸线,再执行断开标注的操作,代码要怎么改呀。

xj6019 发表于 2020-10-30 21:11:16

包括这次的代码,我也希望能实现先选择后也能执行,可以吗,这样我可以有其他用法,能实现一些其他的想法,也学习一下entsel和centsel 用什么样的方式可以实现,先选择后执行。

start4444 发表于 2020-10-30 23:14:50

xj6019 发表于 2020-10-30 21:11
包括这次的代码,我也希望能实现先选择后也能执行,可以吗,这样我可以有其他用法,能实现一些其他的想法, ...

其实很简单,一般选对象都是想提取对象图元名,entsel是单选个体,ssget是选集,选集的话要多一步提取个体,无论1个或多个都要提取,你上面的错在把选集当成个体了,看看下面本贴代码的替换就能实现,注意选集的第一个对象序号为0

(car (entsel "\n请选择对象:")) 改为 (ssname (ssget ":S" '((0 . "DIMENSION"))) 0)
页: [1] 2
查看完整版本: 求一个标注能断开的代码