meecpc 发表于 2022-7-5 19:44:04

管道标签lisp

我正在寻找一个lisp例程,它可以将文本水平或垂直放置在一行中,并打断文本周围的行。我在2009年Acad中的那个在2015年Acad中不起作用。
 
 
谢谢

stevsmith 发表于 2022-7-5 19:59:27

如果你有原件。lisp例程最好在这里添加它,这样人们可以评估和修改原始代码。

meecpc 发表于 2022-7-5 20:04:32

史提夫,
这是Lisp程序。
管道标签。lsp

tombu 发表于 2022-7-5 20:14:00

在那个例行程序中有很多命令调用需要更改。command-s可以工作,但使用vla startundomark和vla EndUndoMark代替命令调用undo将是更好的代码。
未经测试的修改:
(defun CREATESTYLE (/ CMDTST)
   (command-s "_.-style"
            "pipelabeling"
            FNT
            (* (getvar "dimscale") (distof HGHT))
            WDTH
            (while (= (getvar "cmdnames") "-STYLE") "")
   ) ;_ End command
) ;_ End defun

meecpc 发表于 2022-7-5 20:25:48

写代码对我来说已经不重要了,但这里是它过去的工作方式。
 
 
ppl将开始例行程序
它会提示输入文本高度,我会给它一个值,然后点击回车键
它会提示输入文本字符串信息,我会键入“t”,返回
输入我的文本字符串,(3“san),例如,return
在一条线上选择一个点(水平、垂直或有角度),它会将字符串放置在该线上并修剪。
 
 
这是你能写的东西吗?
非常感谢。

BIGAL 发表于 2022-7-5 20:35:27

与任务相比,lisp是巨大的,显然它的编写目的是做更多的事情。文本的简单strlen*模糊因子和修剪就可以做到这一点。

BIGAL 发表于 2022-7-5 20:42:03

这里是一个开始,需要一点细化,以做文字风格等和文字的大小。
 

; Text at mid point of a line not will not work correctly
; with plines of multi segments
; By BIGAL June 2015
(defun C:TextAtMidPoint (/ entItem lstPoint sngDistance ans)
(setq oldsnap (getvar 'osmode))
(setq oldang (getvar 'aunits))
(setq angd (getvar 'angdir))
(setq ans (getstring "Please enter text "))
(setq sngDistance (* (strlen ans) 0.5))
(setvar 'osmode 2)
(setq pt (getpoint "pick line"))
(setq ss (ssget pt))
(setq obj (entget (ssname ss 0)))
(setq startpt (cdr (assoc 10 obj)))
(setq ang (angle pt startpt))
(vl-cmdf "circle" pt (/ sngDistance 2.0))
(setq entItem (entlast))
(setq lstPoint (getvar "lastpoint"))
(vl-cmdf "trim" entItem "" "Nea" lstPoint "")
(vl-cmdf "erase" entItem "")
(setvar 'aunits 3)
(setvar 'angdir 0)
(vl-cmdf "text" pt ang ans)
(setvar 'osmode oldsnap)
(setvar 'aunits oldang)
(setvar 'angdir angd)
)
(vl-load-com)

danielk 发表于 2022-7-5 20:51:58

 
我不知道你在找什么类型的文本:多段线长度、图层名称等,,,
页: [1]
查看完整版本: 管道标签lisp