AutoLisp自定义多段线绘制功能相关两个技术问题咨询
AutoLisp自定义多段线绘制问题解答
问题1:选点过程中实现多段线实时可见
你原有代码的逻辑是先缓存所有用户选中的点,选点结束后才一次性生成多段线,因此没有实时预览效果。要实现实时可见,本次修改直接复用AutoCAD原生PLINE命令的交互逻辑,启动命令后每获取一个点就实时传入,AutoCAD会自动渲染实时预览的多段线,改动成本最低也最稳定。
问题2:不修改图层调整多段线颜色
AutoCAD图元的颜色属性优先级高于图层颜色,只要把多段线的颜色从默认的*随层(ByLayer)*修改为指定颜色值,就可以在不改动图层设置、不切换图层的前提下修改多段线显示颜色。实现逻辑为:
- 多段线生成后用
entlast获取该图元的实体名 - 修改图元DXF表中组码62对应的颜色索引值
- 用
entmod更新图元属性即可生效
修改后完整可运行代码
(defun c:nyomvodal (/ osmode clayer celtype pline_ent pline_dxf) ;; 保存当前系统变量 (setq osmode (getvar "osmode")) (setq clayer (getvar "clayer")) (setq celtype (getvar "celtype")) ;; 创建并切换到目标图层 (command "_layer" "_make" "nyomvodal" "_color" 3 "nyomvodal" "") (setvar "osmode" 0) (setvar "celtype" "16-os cso") (vl-catch-all-apply '(lambda (/ pt first_pt) ;; 获取第一个点 (setq first_pt (getpoint "\nPick start point: ")) (if first_pt (progn ;; 启动PLINE命令传入第一个点,原生命令自带实时预览效果 (command "_pline" first_pt) ;; 循环获取后续点实时传入命令,实现绘制过程可见 (while (setq pt (getpoint "\nPick next point: ")) (command pt) ) ;; 结束PLINE命令 (command "") ;; -------------修改多段线颜色代码段开始------------- ;; 组码62对应颜色值:256=随层,0=随块,1-255为AutoCAD标准颜色索引 ;; 示例设置为红色(索引1),可自行替换括号中第二个数值修改颜色 (setq pline_ent (entlast)) (setq pline_dxf (entget pline_ent)) (setq pline_dxf (subst (cons 62 1) (assoc 62 pline_dxf) pline_dxf)) (entmod pline_dxf) ;; -------------修改多段线颜色代码段结束------------- ) ) ) ) ;; 恢复原有系统变量 (setvar "osmode" osmode) (setvar "clayer" clayer) (setvar "celtype" celtype) (princ) )
内容的提问来源于stack exchange,提问作者Ozsvart Donat
相关产品推荐
相关产品推荐

